当前项目里面有很多参数都需要手动去调。这个版本是很初级的版本,所以中间有很多bug,有兴趣的自己改下。 另外当前项目用了 @eragonruan 的tensorflow-ctpn ,由于代码需要将其项目中代码抽离了出来,所以没有相关git信息。大家有兴趣可以去star一下。
两个方案一起,提升精准度。
利用dlib进行人脸的landmark的提取,找到左右眼的坐标,求出倾斜角度。对图像进行旋转。 再提取人脸的区域,然后根据比例,对身份证区域的估计,取出最大的估计的矩形框。
优势 对于清晰画质的人脸准确度高,稳健性强。
劣势 速度较慢,模型较大。不适合移动端部署。
利用opencv对区域的图像进行pyrmeanshift平滑,然后对图像进行canny运算,然后进行findContour然后对线段数等于4的线段进行计算,配置面积阈值,当大于一定面积的矩形才能被进行计算。对矩形区域进行透视变化,得到矫正后的图像。
优势 不需要额外的模型,速度快,适合处理预览帧。
劣势 稳健性不强,特别是复杂背景的情况下。另外必须强调图像是正向,正负偏差为60度。
pretrained model 通过生成数据然后放入CTPN训练,得到关于中文的字符框取的模型。
优势 速度快,精准度高。
劣势 模型大,程序逻辑复杂
优势 集成于opencv中,有训练好的模型,方便部署。
劣势 准确率低,需要添加复杂的优化逻辑
MSER
将拆分出来的字进行识别用多种方式,有简单的KNN,SVM分类器,也有复杂一点的用CNN进行识别。 从实现速度上来说,CNN的识别是最快拟合的。
优势 单步骤实现速度快,开发难度低。
劣势 按字识别由于是两个步骤,所以如果最开始文字分割没有做好,那么后面的单字识别的效果就会很差。
CNN+BiLSTM+CTC的模式。 将图像Resize至特定大小,然后将图像经过卷积层后得到高度为4,宽度为N的FM,然后将FM进行flatten然后得到一个序列,将序列代入BLSTM,用ctc来求取loss,得到不定个数的字的预测。
由于只是为了打通流程,未对模型进行特别优化,所以识别错误率很高。 CRNN的训练需要大量的数据集,未做训练。