Author: Yu Cheng
专业:电子与计算机专业
GitHub: https://github.com/yucheng-china
分享一个我自己设计的身份证识别模块,主要分为两个部分:身份证有效区域提取和OCR识别身份证上面的信息。
其中有效区域提取指的是从一张随意拍摄的照片中识别身份证区域,然后把那个区域提取出来。最理想状态就是得到一张除了身份证区域没有任何冗余信息的图片。
OCR部分是从已经提取到的有效区域中识别出文字信息,并输出这些信息,课供后续模块从用户数据库中取真实信息进行比对,完成一次真正意义上的识别。
身份证有效区域提取模块
文件结构
文件说明
——builders: backbone模块,模型构建模块
——frontends: 加载前端预训练权重
——mask: 从原图中提取到的身份证有效区域掩码,红色块
——models:模型预训练权重
——new_img: 提取结果,有效区域
——raw: 原图,未经任何处理直接拍摄的图片
——utils: 模型相关的调用,包括评分指标的设置accuracy, 图片加载, 参数量计算, 数据增强的设置, iou指标的设置等等
——configuration.py: 模型的参数配置
——old_mask_to_img.py: 主代码,输入是原图(文件夹或file),输出是提取到的有效区域,保存路径是new_img
OCR提取身份证文字信息
文件结构
文件说明
——detected_models: 训练好的模型
——networks: 模型和backbone
——testImg: 测试图片,提取后的身份证有效区域图
——config.py: 模型参数配置
——text_recognizer.py: 主代码:输入身份证有效区域图,输出提取到的文字信息
有效区域提取效果展示
Demo: 单张图片处理过程
原图:
MASK:
提取到的有效区域
关于后续OCR模块由于我是调用的别人的代码所以不再这里做展示,代码后续会放到我的github上。
核心模块是身份证有效区域提取,这个目前没有太统一的方法,有人用目标检测去做,有人用SSD模板检测做,我是采用的语义分割来做,因为分割是基于像素级别的分类,精确度更高。但是语义分割会有一些困难,主要是对于有畸变的图像分割精度不高,我在主代码里面加了一些特殊处理,这些处理使得我们最终能得到99%以上的精度。
代码文件之后会放到github上,但是目前由于网络不稳定,而2个多G的文件又太大,根本传不上去,有兴趣的朋友可以关注的我github链接,上面还有一个关于语义分割自动驾驶相关项目。