前言
好久没有更新东西了,这里都快长草了,这次把最近学习ocr识别的学习记录写一下吧,方便以后查看。
OCR了解
OCR介绍
OCR技术是光学字符识别的缩写(Optical Character Recognition),是通过扫描等光学输入方式将各种票据、报刊、书籍、文稿及其它印刷品的文字转化为图像信息,再利用文字识别技术将图像信息转化为可以使用的计算机输入技术。
OCR软件对比
各项对比值可见维基百科较权威统计
OCR开源引擎分类
- Tesseract-开源OCR引擎,也有命令行工具。HP开发Google接手。3.0之后支持训练支持中文。Golang绑定,最新的3.x版本是3.05.02,最新的4.0版本是基于LSTM的。源码见Tesseract 的github地址。
- Cuneiform for Linux —— 本来是个Windows软件,这是Linux的移植,2011年4月已经停止维护。
- GNU Ocrad —— 命令行工具。有JS移植,可用于前端。
- GOCR —— 命令行工具。有JS移植,可用于前端。
- OCRopy —— 基于训练的OCR引擎,训练后可以达到比Tesseract更高的准确度,项目比Tesseract更年轻。包含一个叫做OCRopus的布局分析器。in Python。
- Microsoft OCR Library —— Windows8.1之后的版本内置OCR引擎,可用于桌面和WindowsPhone。
OCR国内外收费/增量收费API
入门Tesseract-OCR
学习Tess4J
Tess4J简介
Tess4J是对Tesseract-OCR API的Java JNA封装,使java能够通过调用Tess4J的API来使用Tesseract-OCR,支持式:TIFF,JPEG,GIF,PNG,BMP,JPEG,PDF的格式,源码见Tess4J的GitHub地址。
值得一提的是,2018.10.29号Tess4J更新了4.3.0版本,支持Tesseract4.0.0(LSTM版),开发可参考docs-tess4j4.3接口文档 。
Tess4J API 提供的功能
- 直接识别支持的文件
- 识别图片流
- 识别图片的某块区域
- 将识别结果保存为 TEXT/ HOCR/ PDF/ UNLV/ BOX
- 通过设置取词的等级,提取识别出来的文字
- 获得每一个识别区域的具体坐标范围
- 调整倾斜的图片
- 裁剪图片
- 调整图片分辨率
- 从粘贴板获得图像
- 克隆一个图像(目的:创建一份一模一样的图片,与原图在操作修改上,不相互影响)
- 图片转换为二进制、黑白图像、灰度图像
- 反转图片颜色
Tess4J与Tesseract各版本对应关系
- 0.4 (Tesseract 2.04)
- 1.0 (Tesseract 3.02)
- 1.1 (Tesseract 3.02)
- 1.2 (Tesseract 3.02)
- 1.4 (Tesseract 3.02)
- 1.5 (Tesseract 3.02)
- 2.0 (Tesseract 3.03RC)
- 3.0 (Tesseract 3.04)
- 3.3 (Tesseract 3.05)
- 3.4 (Tesseract 3.05.01)
- 4.0 (Tesseract 4.0.0-beta.1)
- 4.1 (Tesseract 4.0.0-beta.3)
- 4.3 (Tesseract 4.0.0)
训练Tesseract-OCR字库
说明
Tesseract官方提供了针对不同版本的Tesseract字库,我个人喜欢wiki地址里下载,因为分类更全更详细(注意选择对应的版本)。官方提供的字库能够解决一些清晰、常规的识别,然而,如果我们想要实现非常规、高精度的识别,就需要自己训练字库了。
注意,库文件一定要选择对应的版本,否则后面无法识别
注意,Tesseract-OCR 4.0版后出现了LSTM方式的训练,但目前JTessBoxEditor还不支持,可以了解的是LSTM方式的训练有如下不同:
- box只在文本行这一级需要,因此当从已经存在的图片数据进行训练时,它更加容易
- .tr文件已经被.lstmf文件代替
- 字体可以,也应该被自由地混合,而不需要分开
- 原来的多步(mf训练,cn训练,形状簇),现在改成一个单一的lstm训练
训练工具
- Tesseract-OCR 3.02版
- JTessBoxEditor 2.2.0版(需要安装jre)
训练过程记录
1 .将需要训练的图片都转换成tiff格式
2 .JTessBoxEditor界面中选择tools->merge,合并的名称格式为:[自定义语言].[自定义字体].exp[编号].tif,例如xjy.font.exp0.tif
3 .命令行生成box文件
1
tesseract xjy.font.exp0.tif xjy.font.exp0 -l chi_sim batch.nochop makebox
4 .JTessBoxEditor界面中点击Box Editor->open,然后选上一步的tif文件,它会自动打开绑定的box文件,然后手动修正识别错误的文字或位置,然后保存
5 .新建字体特征文件font_properties
1
font 0 0 0 0 0
6 .用JTessBoxEditor处理之后就可以用如下脚本生成自己的字库文件了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25@echo off
cd ./
echo. & echo.步骤1:生成.tr文件
echo ************************************************************
tesseract.exe xjy.font.exp0.tif xjy.font.exp0 nobatch box.train
echo. & echo.步骤2:生成unicharset文件
echo ************************************************************
unicharset_extractor.exe xjy.font.exp0.box
echo. & echo.步骤3:生成inttemp和pffmtable文件
echo ************************************************************
mftraining -F font_properties -U unicharset -O xjy.unicharset xjy.font.exp0.tr
echo. & echo.步骤4:生成normproto文件
echo ************************************************************
cntraining.exe xjy.font.exp0.tr
echo. & echo.步骤5:重命名相关文件
echo ************************************************************
rename normproto xjy.normproto
rename inttemp xjy.inttemp
rename pffmtable xjy.pffmtable
rename shapetable xjy.shapetable
echo. & echo.步骤6:输出.traineddata结果文件
echo ************************************************************
combine_tessdata.exe xjy.
echo. & echo.训练完成!!!
echo. & pause
测试识别效果
原生Tesseract-OCR命令的效果
1
2
3
4
5@echo off
echo %time%
tesseract D:\ocr\33.jpg D:\ocr\1 -l eng
echo %time%
pauseTess4J写DEMO的效果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18public static void main(String[] args) {
ITesseract instance = new Tesseract();
long start = System.currentTimeMillis();
File imageFile = new File("src/test/resources/test-data", "33.jpg");
//设置图片源和语言
instance.setDatapath("src/test/resources/tessdata");
instance.setLanguage("eng");
String result="";
try {
result = instance.doOCR(imageFile);
} catch (TesseractException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("输出结果如下:");
System.out.println(result);
System.out.println("花费时间:"+ (System.currentTimeMillis()-start) +"毫秒");
}
主要参考链接
- https://github.com/nguyenq/tess4j
- https://github.com/tesseract-ocr/tesseract
- https://sourceforge.net/projects/vietocr/files/jTessBoxEditor/
- https://blog.csdn.net/luojun2007/article/details/51614133
- https://en.wikipedia.org/wiki/Comparison_of_optical_character_recognition_software
本文链接: https://www.xiajunyi.com/pages/p56.html
版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。转载请注明出处!