基于opencv库和tess-two,Zxing在android平台上实现身份证号的识别!
前言 : 最近因为公司项目的需要, 要做身份证号,银行卡号的识别, 集成zxing库,从网上搜了下资料有了大概的思路, 但是opencv for android还是走了很多坑,接下来本文章就如何实现身份证号的识别做下分析
实现原理分析 :通过zxing库捕捉相机获得图像,或者从相册里获取图片,再对图像进行处理. 对图像处理 : 对源图像进行像素放大缩小处理>预处理(图像灰度化,低通滤波处理,边缘检测,二值化,中值平滑处理,闭运算)>刷选身份证号的矩形,得到有效行>对有效行进行灰度化,二值化>然后就进行识别.
实现过程:
1. 环境的配置
a. opencv3.2的依赖: 去官网下载opencv for android的sdk,解压得到
在android studio中选择improt module加载进来 将依赖的opencv的build.gradle里的版本要求和主工程的build.gradle保持一致
最后将sdk目录中的native的libs里的文件复制到主工程的main里的jniLibs目录下,jniLibs目录需自己创建.这样opencv库就装载成功了!
b. tesseract库的使用,本文章不对tesseract如何编译做详细介绍,可以使用tess-two,有编译好的,解压的后,把Jar文件添加到项目,把libs目录的文件复制到jniLibs目录下这样tess-two就集成完了.
c. 语言包的放置,可以从tesseract-ocr的官网下载中文的或者英文的,但是针对只是身份证号的识别,打算自己训练,官方下载的语言包文件都过大,本篇文章不对如何训练做详细介绍.
d. zxing库的引用(本文不做介绍)
2 代码实现
如上图主界面为三个入口,根据的scan_type的类型来调用zxing库的扫描类型