iOS身份证号识别

效果

图片

简介

项目地址 本项目基于tesseractOpenCV,已经在咱们的APP中使用快一年时间。由于我只训练了身份证号部分的字体,因此目前只能识别身份证号。项目中本想使用Tesseract-OCR-iOS的,但当时它还不支持bitcode(如今已经支持),而咱们的APP因为须要支持Watch而必须支持bitcode,因此就本身编译了当时最新的tesseract版本。若是项目不须要支持bitcode,推荐看一下ocr_savingCard,只惋惜这个库中的两个核心.a文件没有公开源码。git

实现原理

裁剪图片

咱们首先根据身份证的真实比例,固定一个矩形框,并提示用户将身份证置于矩形框中进行扫描,这样就能够根据矩形框的位置,在整张照片中截取出身份证部分,后续进行图片处理时,就只须要处理截取出来的身份证部分。github

裁剪前: 学习

裁剪前
裁剪后:
裁剪后

去噪

在获取照片过程当中,可能会受到其余信号的干扰,在图像上造成一些零散孤立的像素点,这些像素点对后面图像处理的影响比较大,所以在进行图像处理前,须要对图像进行去噪处理。字体

灰度化

彩色图像中的每一个像素的颜色有R、G、B三个份量决定,而每一个份量有255中值可取,这样一个像素点能够有1600多万(255x255x255)的颜色的变化范围。而灰度图像是R、G、B三个份量相同的一种特殊的彩色图像,其一个像素点的变化范围为255种,因此将彩色图像转化成灰度图像,能够大大减小后续的图像处理计算量。 .net

灰度化

二值化

图像二值化就是将像素点的灰度置为0或255,全部灰度大于或等于阀值的像素被断定为属于特定物体,其灰度值为255表示,不然这些像素点被排除在物体区域之外,灰度值为0,则表示背景或者例外的物体区域。阈值对二值化处理的结果影响比较大,因为咱们不能控制用户的拍摄环境,若是直接选定一个固定阈值,最后处理的结果在不一样的光照条件下是有明显差异的,因此选择一个固定的阈值并非一个很好的解决方案。还好最后发现了一个很好的解决在不一样光照条件下进行二值化处理的方案,感兴趣的能够看一下。基于opencv的一种局部自适应快速二值化方法(积分法) 3d

二值化

腐蚀

腐蚀是一种消除边界点,使边界向内部收缩的过程。能够用来消除小且无心义的物体。腐蚀的意义在于能够消除不少无心义的轮廓形象,减小后面轮廓提取的运算量,更加容易获取所需位置的区域。 code

腐蚀

轮廓提取

通过轮廓提取能够获得许多不一样的矩形块,咱们能够根据这些矩形块的坐标位置以及宽高比例,筛选出身份证号所在的矩形块。 cdn

轮廓提取
结果

识别

最后的识别工做交由tesseract完成,这里因为对tesseract没有过多的了解,就不作过多介绍,但愿对tesseract有研究的同窗能够不吝赐教。blog

结语

本人尝试过加入银行卡号识别和身份证上的文字识别,可是因为手中并无足够的样本进行模型训练,也曾尝试过tesseract官方推出的中文模型包,可是效果并很差。对OCR感兴趣的同窗能够加入我建立的QQ群:777044924,你们一块儿学习探讨,首先声明,本群仅为技术讨论群发广告必踢!!!图片

相关文章
相关标签/搜索