身份证信息识别 基于tesseract4.0 + opencv + Python
本人最近开始做有关ocr的项目,具体要做的是身份证信息识别,所以我决定使用tesseract+opencv+Python来实现这个工作.
tessreact4.0介绍及安装
tesseract是由惠普开发,现在由Google进行维护的一个开源ocr软件,曾经想要深入了解其原理及构架,但整个体系过于庞大,了解其原理并自己修改的工作难以实现,所以这里就选择安装可执行程序,配合pytesseract调用可执行程序直接进行识别,安装包可直接在GitHub的wiki上找到下载地址,csdn上也有很多的安装包可以选择,这里推荐最新版的安装包识别率相对高一点,显示方式也比较合理.
地址
https://download.youkuaiyun.com/download/baidu_33473810/10882501
安装过程不加赘述,其他很多博客已经写得非常详细,注意几个重要的点即可,第一,注意安装中选择下载中文语言包,如chi_sim,chi_tar(中文简体,中文繁体),第二,注意安装完成后的环境变量的配置,特别是TESSDATA_PREFIX的配置,配置完成后
一定要重启电脑!!!一定要重启电脑!!!一定要重启电脑!!!
这一点很重要,不然程序一定报错,这一点搞了我快两个小时,就是因为没有重启.
也可选择通过源码编译的方式进行安装,该方法相对复杂一点,估计要再开一篇博客来讲,里面的坑可太多了.
opencv安装
opencv的安装就相对容易,可以直接用pip进行安装,但是这个地方需要注意一点,最新版的opencv存在版权问题,很多函数虽然存在但是他会报错,会出现如下错误:
cv2.error: OpenCV(3.4.3) C:\projects\opencv
python\opencv_contrib\modules\xfeatures2d\src\sift.cpp:1207: error: (-213:The
function/feature is not implemented) This algorithm is patented and is excluded in this
configuration; Set OPENCV_ENABLE_NONFREE CMake option and rebuild the
library in function ‘cv::xfeatures2d::SIFT::create’
这里的错误的原因是这个算法被注册了专利,所以这里不能使用,解决办法就是安装低版本的opencv (这是逼着我不用最新版的, Python也是,3.7还不能用TensorFlow要逼死我这个喜欢用最新版的人)
命令如下:
pip install opencv-python==3.4.2.16
pip install opencv-contrib-python==3.4.2.16
身份证信息识别的实现
整个实现的过程为:
1.批量读取身份证图片
2.利用SIFT算法进行特征点匹配,找到身份证的位置,并用映射变换将身份证转换到合适的位置
3.利用模板匹配算法,确定姓名,性别,民族,住址,身份证号码的位置
4.对图片进行二值化,降噪等操作
5.用tesseract分别识别出姓名,性别,民族,住址,身份证号码的文字信息
批量读取身份证图片
这里需要用到skimage的库,实现代码如下
str1='这里是你图片所在的文件夹'
coll = io.ImageCollection(str1)
此时图片已经全部存入了coll之中
coll[0]即为第一张图片
SIFT算法进行特征点匹配
SIFT特征点检测算法是一