使用百度OCR API+JavaFX实现OCR小工具
百度OCR API的使用
这里使用的是百度的OCR API(地址:https://ai.baidu.com/tech/ocr_others/webimage)据我的使用情况来看,准确率还行,但是好像不会更多识别一些符号,如代码里面的一行只有一个大括号之类的就不会被识别,但是大部分差不多都能识别,识别的效果如下:
识别的效果如下(部分):
创建百度OCR的APIKey与SecretKey
首先进入百度OCR的网页:链接: https://cloud.baidu.com/product/ocr/general.点击立即使用
如果之前没有使用过,可以选择“创建应用”
然后到了这个页面,随便填一填就可以了。
由于我们需要的是APIkey和SecretKey,所以在创建完成后查看应用详情:
记住我们的APIKey和SecretKey,后面要用到。
获取OCR的Token
查看百度官方的文档: https://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjhhu.
主要就是访问这个地址(可以直接浏览器访问,记得替换):https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=替换成刚刚的APIKey&client_secret=替换成刚刚的SecretKey&
浏览器打开后发现是一个json字符串,我们主要需要的是"access_token"这一项(可以使用Ctrl+F进行搜索),如下图所示:
把这个token记下来,后面使用OCR就是使用这个Token来进行鉴权。(Token可能会失效,按照官方来说一般一个月需要更换一次)
OCR使用测试
我们拿到了刚刚的Token后就可以使用百度的OCR功能了。
查看百度官方的API文档: https://cloud.baidu.com/doc/OCR/s/zk3h7xz52.
下方有代码示例,我们这次使用的是Java,所以看Java的版本就可以了,按照其要求下载几个文件,以及一个谷歌的Gson.jar包,可以使用Maven,也可以到我的GitHub链接进行下载,GitHub链接在底部。
我们使用其示例代码测试一下,我们拿这张图片来进行测试:
可以看到主要返回的是也是一个json字符串(主要是看最后一行输出,其他的部分都是百度的日志),如下:
{
"log_id": 9020029829510268420,
"words_result_num": 8,
"words_result": [
{
"words": "网络图片文字识别"
},
{
"words": "更新时间:2020-01-16"
},
{
"words": "接口描述"
},
{
"words": "针对网络图片进行专项优化,支持识别艺术字体或背景复杂的文字内容。"
},
{
"words": "请求说明"
},
{
"words": "请求示例"
},
{
"words": "HTTP方法:POST"
},
{
"words": "URL: https: //aip.baidubce. com/rest/2.0/ocr/v1/webimage"
}
]
}
所以我们需要做的便是对这个json进行解析,json解析比较方便的是使用Google的Gson.fromJson()方法,具体可以看这篇文章: https://www.jianshu.com/p/75a50aa0cad1.(如果不会Json解析的也可以进行字符串处理,会更加麻烦一些)。
这里我使用Gson来解析百度返回的json字符串,返回的是一个ArrayList< String >,就是所需要的的所有的识别的文字的结果。
import com.google.gson.Gson;
import java.util.ArrayList;
public class OCRResultUtil {
private static final Gson gson = new Gson();
/**
* 解析百度OCR识别返回的json字符串为所有的结果
* @param jsonResult 百度OCR识别返回的json字符串
* @return 解析完成的所有的识别的结果
*/
public static ArrayList<String> getOCRResult