Java 实现图片OCR文字识别功能

前言:

由于网上很多算法, 以及语言库无法做到精准识别, 所以综合条件下 使用了一款 space OCR API 的产品进行使用, 每个月有25000条的 使用额度, 日常使用或开发绰绰有余

网址链接


一. 注册 API 秘钥

1. 进入网址点击下面的注册链接输入自己的邮箱以及开发用途就会收到一个秘钥

2. 注册好的API如下


二. API解析

1. 上传方式选择

通过阅读API 文档我们可以得知, 发送图片解析的方式有三种:

  1. ) URL 上传, 前提是需要将图片放到公网可以访问到的位置
  2. ) File 上传, 通过Post 请求将图片放到from-data中发送
  3. ) base64编码上传 [推荐~]
2. 识别引擎选择

OCR 引擎 1 的特点:

  • - 支持更多语言(包括中文、日文和韩文等亚洲语言)
  • - 快点
  • - 支持更大的图像
  • - 多页 TIFF 扫描支持
  • - 参数:OCREngine=1

OCR 引擎 2 的特点:

  • -仅限西方拉丁字符语言(英语、德语、法语…)
  • - 语言自动检测。选择哪种 OCR 语言并不重要,只要它使用拉丁字符即可
  • - 通常在单个数字 OCR、单个字符 OCR 和字母数字 OCR 方面表现更好(例如SUDOKO、 点阵 OCR、 MRZ OCR、 单个数字 OCR、OCR后 缺少第一个字母,…)
  • - 通常更擅长特殊字符 OCR,如@±…
  • - 通常使用旋转文本效果更好(论坛:检测垃圾图片)
  • - 图像大小限制为 5000 像素宽度和 5000 像素高度
  • - 参数:OCREngine=2
3. 传参选择

在请求过程中只有两个参数是必填的, 分别是 apikey和 三种上传方式的一种

  1. ) language 在识别中文时可以选择 chs(简体), cht(繁体) 两种, 不识别中文可以选择引擎二 并且不用填写该参数
  2. ) filetype 填写该参数可以有效的增加识别精度
  3. ) scale 如果设置为 true,api 会进行一些内部升级。这可以显着改善 OCR 结果,尤其是对于低分辨率 PDF 扫描。 API 默认使用 scale=false
4. 请求参数解析
apikey API 密钥
urlfilebase64Image url:远程图像文件的 URL(确保它具有正确的内容类型) file:具有文件名的多部分编码图像文件 base64Image:图像或 PDF 作为Base64 编码字符串 您可以使用三种方法上传输入图像或 PDF。对于大于 10 MB 的文件,我们建议使用 URL 方法以提高上传速度。
language [可选] 阿拉伯语=ara 保加利亚语=bul 中文(简体)=chs 中文(繁体)=cht 克罗地亚语=hrv 捷克语=cze 丹麦语=dan 荷兰语=dut 英语=eng 芬兰语=fin 法语=fre 德语=ger 希腊语=gre 匈牙利语=hun 韩语=kor 意大利语=ita 日语=jpn 波兰语=pol 葡萄牙语=por 俄语=rus 斯洛文尼亚语=slv 西班牙语=spa 瑞典语=swe 土耳其语 = tur 用于 OCR 的语言。如果未指定语言,eng则默认使用英语。 重要提示:语言代码总是3-letters(不是 2)。所以它是“eng”而不是“en”。 Engine2具有自动西文检测功能,因此该值将被忽略。
isOverlayRequired [可选] 布尔值 默认值 =False 如果为 true,则返回每个单词的边界框坐标。如果为 false,则 OCR 处理的文本仅作为文本块返回(这会使 JSON 响应变小)。例如,覆盖数据可用于在图像上显示文本。
filetype [可选] 字符串值:PDF、GIF、PNG、JPG、TIF、BMP 覆盖基于content-type的自动文件类型检测。支持的图像文件格式有 png、jpg (jpeg)、gif、tif (tiff) 和 bmp。对于文档 ocr,api 支持 Adobe PDF 格式。支持多页 TIFF 文件。
detectOrientation [可选] 真/假 如果设置为 true,api 会正确自动旋转图像并TextOrientation在 JSON 响应中设置参数。如果图像旋转,则TextOrientation=0,否则为旋转度数,例如“270”。
isCreateSearchablePdf [可选] 布尔值 默认值 =False 如果为 true,API 会生成可搜索的 PDF。此参数自动设置 isOverlayRequired = true。
isSearchablePdfHideTextLayer [可选] 布尔值 默认值 = False。如果为 true,则隐藏文本层(不可见)
scale [可选] 真/假 如果设置为 true,api 会进行一些内部升级。这可以显着改善 OCR 结果,尤其是对于低分辨率 PDF 扫描。请注意, API 默认使用 scale=false
isTable [可选] 真/假 如果设置为 true,则 OCR 逻辑确保始终逐行返回解析的文本结果。建议将此开关用于 表格 OCR、收据 OCR、发票处理和所有其他类型的具有表格结构的输入文档。
OCREngine [可选] 1 或 2 引擎 1 是默认值

三. 编写代码解析图片

public static void main(String[] args) {HashMap<String,Object> map = new HashMap<>();String imgStr = "data:image/jpg;base64,"+getImgStr("G:/2021-09-24/c8dc889efdb06f4f3860e2cd8ff1750.jpg");map.put("apikey","your keys");//map.put("url","https://gitee.com/Jarvis_D/typora-images/raw/master/img/0f08de942bb82ff8675f790b9b0a74a.png");map.put("base64Image",imgStr);//map.put("language","chs");map.put("filetype","JPG");map.put("OCREngine",2);//map.put("scale",true);String yy = HttpUtil.post("https://api.ocr.space/parse/image",map);//String yy = HttpUtils.doPostToJson("https://api.ocr.space/parse/image", JSON.toJSONString(map));JsonRootBean jsonRootBean = JSON.parseObject(yy, JsonRootBean.class);System.err.println(jsonRootBean.getParsedResults().get(0).getParsedText());}/*** 将图片转换成Base64编码* @param imgFile 待处理图片* @return*/public static String getImgStr(String imgFile) {InputStream in = null;byte[] data = null;try {// 将图片文件转化为字节数组字符串,并对其进行Base64编码处理in = new FileInputStream(imgFile);data = new byte[in.available()];in.read(data);in.close();} catch (IOException e) {e.printStackTrace();}return Base64.encodeBase64String(data);}

四. 返回结果的解析

1. 返回格式
{"ParsedResults" : [{"TextOverlay" : {"Lines" : [{"Words": [{"WordText": "Word 1","Left": 106,"Top": 91,"Height": 9,"Width": 11},{"WordText": "Word 2","Left": 121,"Top": 90,"Height": 13,"Width": 51}],"MaxHeight": 13,"MinTop": 90}],"HasOverlay" : true,"Message" : null},"FileParseExitCode" : "1","ParsedText" : "This is a sample parsed result","ErrorMessage" : null,"ErrorDetails" : null},{"TextOverlay" : null,"FileParseExitCode" : -10,"ParsedText" : null,"ErrorMessage" : "...error message (if any)","ErrorDetails" : "...detailed error message (if any)"}],"OCRExitCode" : "2","IsErroredOnProcessing" : false,"ErrorMessage" : null,"ErrorDetails" : null,"SearchablePDFURL": "https://.....","ProcessingTimeInMilliseconds" : "3000"}
2. 返回参数解析
ParsedResults OCR结果 图像或 PDF 每一页的 OCR 结果。对于 PDF:每个页面都有自己的 OCR 结果和错误消息(如果有)
OCRExitCode 整数 退出代码显示 OCR 是否成功完成、部分或失败并出现错误 1:解析成功(图像/所有页面解析成功) 2:部分解析(所有页面中只有几页成功解析) 3:图像/所有 PDF 页面解析失败(这主要发生因为 OCR 引擎无法解析图像) 4:尝试解析时发生错误(在解析过程中发生致命错误时会发生这种情况)
IsErroredOnProcessing 真假 如果在解析 Image/PDF 页面时发生错误
ErrorMessage 文本 解析图片时出现错误的报错信息
ErrorDetails 文本 详细的错误信息
SearchablePDFURL 关联 查看可搜索的 PDF
图像/页面解析结果
FileParseExitCode 每个解析结果的退出代码 解析引擎返回的退出代码 0:File not found 1:Success -10:OCR Engine Parse Error -20:Timeout -30:Validation Error -99:Unknown Error
ParsedText 解析文本 图像的解析文本
TextOverlay 图像/pdf 中文本的覆盖数据 仅当 ‘isOverlayRequired’ 设置为 ‘True’
Lines 覆盖文本中的行数组 这包含所有行的数组。每行将包含一个单词数组
Words 一行中的一组单词 这包含具有单词特定细节的单词,例如其文本和位置
WordText 文字的文字 这包含该特定单词的文本
Left 单词与左侧的距离(以像素 (px) 为单位) 包含单词与图像左边缘的距离(以 px 为单位)
Top 单词与顶部的距离(以 px 为单位) 包含单词与图像上边缘的距离(以 px 为单位)
Height 字的高度 包含单词的高度(以像素为单位)
Width 字宽 包含单词的宽度(以像素为单位)
MaxHeight 线的最大高度 包含线的高度(以像素为单位)
MinTop 线距图像上边缘的最小距离 包含图像原始大小中线距顶部边缘的距离(以 px 为单位)
HasOverlay 叠加层是否存在 真/假取决于解析结果的覆盖是否存在
ErrorMessage 文本 解析引擎返回的错误信息
ErrorDetails 文本 解析引擎返回的用于调试的详细错误信息

Java 实现 图片OCR文字识别相关推荐

  1. Java调用百度OCR文字识别API实现图片文字识别软件

    java_baidu_ocr Java调用百度OCR文字识别API实现图片文字识别软件 这是一款小巧方便,强大的文字识别软件,由Java编写,配上了窗口界面 调用了百度ocr文字识别API 识别精度高 ...

  2. 诚之和:简单应用JavaCV实现图片OCR文字识别

    现在识别的产品非常的多,例如人脸识别.文字识别以及语音识别等等.下面,分享一篇用短短几行的Java代码就可以实现图片OCR文字识别的文章,有兴趣的小伙伴们可以参考学习本文章. spring boot项 ...

  3. php图像识别api,使用腾讯AI开放平台api进行图片OCR文字识别

    重要:本文最后更新于2019-05-20 08:46:46,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗. 其实图片的文字识别其实还算简单,一般是根据特定字体制作出字码文件,然后分割 ...

  4. JAVA实现百度OCR文字识别功能

    转自:http://blog.csdn.net/javagirlone/article/details/47807963 闲来无事,发现百度有一个OCR文字识别接口,感觉挺有意思的,拿来研究一下. 百 ...

  5. Java调用百度OCR文字识别的接口

    调用百度OCR文字识别的接口,来自于百度官网,亲测可以使用 跳转链接 FileUtil的下载链接 Base64Util下载链接 HttpUtil下载链接 GsonUtils下载链接 Accurate. ...

  6. python 通过调取百度接口进行图片OCR文字识别 高识别率

    一.客户需要一个判断工作证姓名和输入的姓名是否一致的需求,用Tesseract 试了下 发现识别率太低 ,只能另寻方法 ,想起百度的api接口, 1,需要先在百度https://login.bce.b ...

  7. 卧槽,javaCV不到十行代码实现图片OCR文字识别

    spring boot项目pom文件中添加以下依赖 <!-- https://mvnrepository.com/artifact/org.bytedeco/javacv-platform -- ...

  8. 发现苹果的MacOS支持图片OCR文字识别

    在Finder中选中图片文件,点击空格键会打开图片的预览窗口,在预览窗口中按键盘的Command + A,会看到图片中的文字会加重显示出来,再点击Command +C就能把图片中的文字拷贝到系统的剪贴 ...

  9. 喜马拉雅主播工具软件:图片OCR文字识别自动转成mp3高品质语音文件

    春节期间做了一个小软件,主要是看PDF的书或者看网页累了,想让机器给自己念着听,然后发现其实这种方式也可以给一些主播用于做一些工具使用 文件夹里的截图文件,可以同时生成2种品质的MP3文件,足够使用了 ...

  10. java ocr api_Java调用百度OCR文字识别API实现图片文字识别软件

    Java调用百度OCR文字识别API实现图片文字识别软件 原创isinple 发布于2019-01-06 13:35:59 阅读数 1296 收藏 展开 java_baidu_ocr Java调用百度 ...

最新文章

  1. 超有用的,从此vi变得友好了
  2. java post流_Java后端HttpClient Post提交文件流 及服务端接收文件流
  3. 感受JTable 与 JTableModel
  4. sqlplus连接不上oracle,环境变量设置错误导致sqlplus 连接不上oracle
  5. python gRPC测试helloworld
  6. 敏捷个人新体系学习 - 1.实践的艺术
  7. win10屏幕保护色设置
  8. 2020、2021年FRM一级二级notes
  9. JUCE学习笔记07-自定义正弦振荡器类
  10. matlab-基础 取整函数 向0取整 取最近整数 向上取整 向下取整
  11. SMing:2022年中青杯A题思路
  12. 多任务学习-Multitask Learning概述
  13. Dreamweaver cc 2019
  14. arctanx麦克劳林公式推导过程_【数学】「专题」初识泰勒级数(Taylor Series)与泰勒公式(Taylor#x27;s Formula)...
  15. 【ARM】嵌入式 ARM Linux 下移植 USB 蓝牙、交叉编译 bluez 各种版本
  16. 单细胞测序数据挖掘与课题设计
  17. android简单计算器源码
  18. 实现全国行政区域结构化管理
  19. 第九周项目6-3:三色球问题
  20. Java编程----函数

热门文章

  1. 什么是具身认知?反身理论?
  2. iphone禁止自动连接wifi操作方法「苹果教程」
  3. java 错误 找不到符号_java错误:找不到符号
  4. C语言链表的简单的尾插法
  5. 词根词缀【-vict=vinc】
  6. r语言平均值显著性检验_R语言与显著性检验学习笔记
  7. 艾泰(UTT)WiFi短信验证:无线上网热点短信认证设置流程
  8. 线性插值法(一次插值多项式)的Python程序
  9. 小米路由器青春版开启SSH刷入Padavan固件
  10. Linux 离线安装本地rpm的命令