![057796d032d1414df3a710a562edf89d.png](https://i-blog.csdnimg.cn/blog_migrate/a6802491a2b3cac9eff57c3ee220a060.jpeg)
markdown排版好像不支持。。。
## 1、简介
Tesseract,一款由HP实验室开发由Google维护的开源OCR(OpticalCharacterRecognition,光学字符识别)引擎,特点是开源,免费,支持多语言,多平台。
最初Tesseract是用C语言写的,在1998年改用C++。
github 地址:tesseract-ocr/tesseract
## 2、mac 安装
* tesseract 安装:
brew install tesseract (默认包含英文语言包)
tesseract 安装路径:/usr/local/Cellar/tesseract/4.0.0_1/bin/tesseract
linux 安装:tesseract 4.0 编译安装(CentOS) 4.1.0版本
linux 下目录:安装路径 /usr/local/tesseract 语言包 /usr/share/tesseract
/usr/local/tesseract/bin/tesseract
修改 tesseract 路径:pytesseract.py文件下的 tesseract_cmd,改为/usr/local/tesseract/bin/tesseract
* tesseract 语言包安装:brew install tesseract-lang (也可只安装中午语言包 chi_sim)
语言包 git 地址:tesseract-ocr/tessdata
tesseract 语言包存放路径: /usr/local/share/tessdata/
* 安装测试:
tesseract -v
## 3、基本用法
命令说明
tesseract imagename outputbase [-l lang] [--psm pagesegmode] [configfile...]
tesseract 图片名 输出文件名 -l 字库文件 -psm pagesegmode 配置文件
例如:
tesseract test.jpg result -l eng --psm 7 nobatch
-l eng 表示用英文文字库(默认使用英文。如需要下载中文字库文件,解压后,存放到tessdata目录下去,字库文件扩展名为 .raineddata 简体中文字库文件名为: chi_sim.traineddata,命令为:chi_sim)
-psm 7 表示告诉tesseract test.jpg图片是一行文本 这个参数可以减少识别错误率. 默认为 3
configfile 参数值为tessdataconfigs 和 tessdatatessconfigs 目录下的文件名.
[] 中配置是可选配置。
*psm 参数说明*
![a122ed4423813ce7206d2c48fc6a0f03.png](https://i-blog.csdnimg.cn/blog_migrate/201dfe60dd64b3e8a0b728e2c4dca03c.jpeg)
**egg**:
![c780990a6610c31455e3444a1bfd14f8.png](https://i-blog.csdnimg.cn/blog_migrate/a008a0ad11f9ef9cd07b265275fa39a8.jpeg)
## 4、python 接口封装
python 接口依赖包安装
pip install pytesseract
![fb514d717c836d6516ffd10a375d54a1.png](https://i-blog.csdnimg.cn/blog_migrate/e5682461b2b9f7ef5fb18efe3d923e6f.png)
处理结果:
![4017e9532b4c572392d4ab871f2a362f.png](https://i-blog.csdnimg.cn/blog_migrate/6608a8f942f6924af45883780425709c.jpeg)
## 5、图片预处理
### 5.1 设置模板匹配目标图像
#### 实例化SIFT
采用SIFT算法计算模板与目标图像的特征点并匹配,如果匹配度过小则拒绝识别图片。(如身份证内容识别上传的目标图像为非身份证照片)计算出图像的关键点和sift特征向量
![2e314a0bacfbf12ed1632658256608be.png](https://i-blog.csdnimg.cn/blog_migrate/6c84ba58aff7fdac82d1eca8f2706c94.png)
#### KNN
使用K最邻近算法计算目标图像与模板图像的匹配点
![9a7b8fed73a87628c5f326e231982fcb.png](https://i-blog.csdnimg.cn/blog_migrate/2d4ad288f72641ea0bc7459d380ce813.png)
#### 去噪:
过滤掉匹配距离较为相近的点
![df29187738db168e85bc8e608b090de8.png](https://i-blog.csdnimg.cn/blog_migrate/dbeb8136f59e47cda4b804fac40cd958.png)
#### 偏移矫正:
利用单应性匹配解决目标图像相对模板图像间拉伸、扭曲、偏移,旋转、倾斜的问题。
![ed6c36c2dd6caf284ec0d9936b639bfc.png](https://i-blog.csdnimg.cn/blog_migrate/67063772c547efad2b688f42c29c55ac.png)
#### 缩放:
对目标图像进行仿射转换
![fd8b5e4490294c7bb36b41a4e6ab1e26.png](https://i-blog.csdnimg.cn/blog_migrate/314e42b2f003f40a0ab5c52698766cc3.png)
处理后的目标图像与原图对比:
![cc173af0e64ffe30203ae36f12ac2963.png](https://i-blog.csdnimg.cn/blog_migrate/d29e944e0720f5f9c072695c866d52fd.jpeg)
### 5.2 文字识别
利用模板匹配算法,确定票据号码、票据状态的位置
即利用matchTemplate函数进行模板匹配,找到票据号码、票据状态等文字的位置后,由于电子票据是刚体,所以上面文字的位置是固定的,所以根据位置信息即可找到需要识别的文字的位置,并将其截取出来
#### 待搜索模板
![bc71428946c9a57c8f19ae59b4bcecc8.png](https://i-blog.csdnimg.cn/blog_migrate/42c173f5e128c5666f0d7483691ae20d.jpeg)
#### 灰度:
将目标图像及模板灰度处理
![6f5b5145acb584bfd009dcac5da52568.png](https://i-blog.csdnimg.cn/blog_migrate/1b85c87cdc6bdaab15513812010337a4.jpeg)
#### 模板匹配:
模板匹配就是在整个图像区域发现与给定子图像匹配的小块区域,并得到目标图像最佳位置的坐标,从而计算出待识别区域坐标
![1bb73e0e89c1cf32148c88a67c9c8a06.png](https://i-blog.csdnimg.cn/blog_migrate/135ea5acb26d7c34cac106f6983433df.png)
#### 目标区域:
以下为待识别区域”票据号码“
![964e3c649a1f542493171f0baf453d31.png](https://i-blog.csdnimg.cn/blog_migrate/4c536f12ad08f44109ba09bed6050dbf.jpeg)
#### 识别:
二值化:将整个待识别图像呈现出明显的黑白效果的过程。
![da857ec9f71269a488045b9616099bb8.png](https://i-blog.csdnimg.cn/blog_migrate/14efb1d1e381558685868504cb586701.png)
结果如下:
![f53f3c7be764518f411ef7039d934c36.png](https://i-blog.csdnimg.cn/blog_migrate/c786804591f083a4d8ac4c869dc03c35.png)
#### 文字转换:
利用tesseract 将图片识别为文字
![623e262e629c5c070411f73fa2a7eea6.png](https://i-blog.csdnimg.cn/blog_migrate/73e04b4da41c9be9ad710480bca17b50.png)
识别结果如下:
![a1744b975f6a83498dc249410f60945e.png](https://i-blog.csdnimg.cn/blog_migrate/fd6073932430e007a0c5392122fddb27.png)
## 6、样本训练
## 7、问题:
1、tesseract 训练类容暂时未加入
2、识别率需优化提升
## 8、相关代码:
## 9、相关连接:
SIFT 算法介绍:SIFT特征提取分析_人工智能_Rachel Zhang的专栏-CSDN博客
模板匹配介绍:OpenCV---模板匹配matchTemplate - 山上有风景 - 博客园
自适应阈值介绍:https://www.jianshu.com/p/146d419639b7
识别示例:
![420152bbcce5669434b8bf09a635530d.png](https://i-blog.csdnimg.cn/blog_migrate/ffeaa824ebc67a00ea0aa1055af5b0ae.jpeg)