IOS身份证识别(OCR源码)详解及实例代码

  

<强> IOS身份证识别(OCR源码)详解

  

最近项目用到身份证识别,在github上搜了一堆演示,在谷歌上找了一堆代码,有能识别出证件照的,但是都是打包成。的静态库,没有源码,我努力吃了几天书,有了一点研究成果,现在贴出来与大家分享,要是有更好的方法,希望大神指正,共同探讨解决方案。(以下代码本人亲测可用,正在进一步探索智能识别,如有兴趣,请加入)

  

这里用到了两个开源库:OpenCV, TesseractOCRiOS,两个语言包chi_sim, eng。身份证识别的流程主要有:灰度化,阀值二值化,腐蚀,轮廓检测,取出身份证号码区域,TesseractOCR识别文字。

  

身份证识别核心源码:

        用户界面图像*图像=[界面图像imageNamed: @“abc.png”);//将用户界面图像转换成Matcv:垫resultImage;      UIImageToMat(图片、resultImage);//转为灰度图      cvtColor (resultImage resultImage 6);//利用阈值二值化      简历::阈值(resultImage resultImage, 100年,255年,CV_THRESH_BINARY);//腐蚀,填充(腐蚀是让黑色点变大)      简历:垫erodeElement=getStructuringElement(简历::MORPH_RECT,简历::尺寸(140140));      简历::侵蚀(resultImage、resultImage erodeElement);//轮廊检测std:: vector>轮廓;//定义一个容器来存储所有检测到的轮廊      简历::findContours (resultImage、轮廓、CV_RETR_TREE CV_CHAIN_APPROX_SIMPLE, cvPoint (0, 0));//取出身份证号码区域      std:: vectorrects;简历::矩形numberRect=简历::矩形(0,0,0,0);std:: vector>:: const_iterator itContours=contours.begin ();      (;itContours !=contours.end ();+ + itContours) {      简历::矩形矩形=简历::boundingRect (* itContours);      rects.push_back(矩形);      NSLog(@”位置分别为:x=% d, y=% d,宽度=% d % d”高度,rect.x, rect.y, rect.width, rect.height);//算法原理:如果新的区域范围宽度大于已赋值区域宽度,并且宽度为高度的五倍则赋予新值      如果(rect.width比;numberRect。宽度,,rect.width祝辞rect.height * 5,,rect.height祝辞200年,,rect.height & lt;300){      numberRect=矩形;      }      }//定位成功成功,去原图截取身份证号码区域,并转换成灰度图,进行二值化处理      简历:垫matImage;      UIImageToMat(图片、matImage);      resultImage=matImage (numberRect);      cvtColor (resultImage resultImage,简历::COLOR_BGR2GRAY);      简历::阈值(resultImage resultImage, 80年,255年,CV_THRESH_BINARY);//将垫转换成界面图像      用户界面图像* numberImage=MatToUIImage (resultImage);      之前      

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

IOS身份证识别(OCR源码)详解及实例代码