山客的个人博客 IT工程师

基于opencv和tesseract实现身份证扫描件的身份证号码提取试验

2019-03-02

阅读:


身份证识别技术目前已经非常成熟,大厂家都发布了相应的api支撑应用开发,同类的技术主要有发票识别、车牌号识别、驾证识别等,主要特点是基于图像技术提取其中的OCR字符,再完成OCR文字识别。

试验工程链接

card-ocr工程链接

主要过程如下:

  • 获取身份证号区域:image-》灰度=》反色=》膨胀=》findContours
  • 数字识别:采用tesseract识别,通过trainfont.py获得traineddata

开发环境安装

本机为mac,参考文档,先安装tesseract环境,python里面通过pytesseract调用tesseract能力。

  • 安装anaconda python3.6版本
  • 进入anaconda后台,安装opencv,conda install -c https://conda.binstar.org/menpo opencv
  • 安装依赖 brew install leptonica
  • 安装tesseract brew install tesseract
  • 安装tesseract的python接口,pip3 install pytesseract

在python代码引用pytesseract,但实际上可能引用不到,需要修改pytesseract.py中的变量,方便调用tesseract类库。直接修改pytesseract.py文件。

    tesseract_cmd = '/usr/local/Cellar/tesseract/4.0.0_1/bin/tesseract'

在实际使用中需要用到字体模型,需要指定模型位置。修改ocr.py文件

   tessdata_dir_config = '-c tessedit_char_whitelist=0123456789X --tessdata-dir    "/usr/local/Cellar/tesseract/4.0.0_1/share/tessdata"'
    result = pytesseract.image_to_string(image, lang='ocrb', config=tessdata_dir_config)

OCR代码测试

简单写一段代码测试,即可体验OCR识别的能力。

   from PIL import Image
   from pytesseract import *
   image = Image.open('test0.png')
   #识别过程
   text = image_to_string(image)
   print(text)

身份证号码识别测试

运行ocr.py,即可测试身份证识别,需要将tessdata下面的模型拷到指定的位置,并在代码里指定需要使用的模型位置。

效果

简单写一个页面,即可看到ocr识别的效果。

总结

目前OCR识别技术已经很成熟,研发人员可以针对特定场景进行定制模型的训练与优化,实现能力私有化部署,比如实现特定票据、合同的识别等。技术的关键在于对于图像的处理和OCR字体识别模型的训练,目前tesseract针对中文字体(字体种类也非常 多)还不是很成熟,但可以通过定制化的方式进行优化。后面可以加大这方面能力的研发。在小程序里也可以定制一个身份证拍照的框,在拍照完成后在线显示身份证信息,达到体验的目的,为了安全考虑可以自动加上水印,或者为了安全起见,针对上传的照片或特定的照片识别即可。目前各类互联网的实名认证也是类似的场景。运营商内部进行实名制验证的核心能力就是身份证号码的识别和人证合一的人脸比对能力。这个能力成熟后即可大大减轻用户实名制审核的人工劳动量。


下一篇 数据平台浅谈

Comments

Content