opencv-python 身份证识别示例

发布时间 2023-09-12 22:26:38作者: panie2015

环境

提示:硬件环境Win10
python:3.8
opencv-python: 3.4.8.29
pytesseract: 0.3.9
cnocr: 2.1.2.1

技术点

这里利用opencv 做身份证照片处理,为识别增加准确度。利用pytesseract 做文字提取,由于是识别身份证,需要提前下载好中文字体包。

python  -m pip install --upgrade pip
pip install numpy
pip install cnocr
pip install opencv-python 

pip install pytesseract

使用 CnOCR

参考:官方文档
首次使用CnOCR时,系统回自动下载zip 格式的模型压缩文件,并存于~/.cnocr 目录(Windows下默认路径为 C:\Users<username>\AppData\Roaming\cnocr)。
下载后的zip文件代码会自动对其解压,然后解压后的模型相关目录放于 ~/.cnocr/2.2 目录中

如果系统无法自动成功下载zip文件,则需要手动从 cnstd-cnocr-models 下载此zip文件并把它放于 ~/.cnocr/2.2目录。如果下载太慢,也可以从 百度云盘 下载, 提取码为 nocr。
放置好 zip 文件后,后面的事代码就会自动执行了。

类CnOcr 是识别主类,包含了三个函数针对不同场景进行文字识别

其中的几个参数含义如下:

  • rec_model_name: 识别模型名称。默认为 densenet_lite_136-fc。更多可选模型见 可直接使用的模型 。

  • det_model_name: 检测模型名称。默认为 ch_PP-OCRv3_det。更多可选模型见 可直接使用的模型 。

  • cand_alphabet: 待识别字符所在的候选集合。默认为 None,表示不限定识别字符范围。取值可以是字符串,如 "0123456789",或者字符列表,如 ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]。

    • cand_alphabet也可以初始化后通过类函数 CnOcr.set_cand_alphabet(cand_alphabet) 进行设置。这样同一个实例也可以指定不同的cand_alphabet进行识别。
      context:预测使用的机器资源,可取值为字符串cpu、gpu、cuda:0等。默认为 cpu。此参数仅在 model_backend=='pytorch' 时有效。
  • rec_model_fp: 如果不使用系统自带的识别模型,可以通过此参数直接指定所使用的模型文件(.ckpt 或 .onnx 文件)。

  • rec_model_backend:'pytorch', or 'onnx'。表明识别时是使用 PyTorch 版本模型,还是使用 ONNX 版本模型。 同样的模型,ONNX 版本的预测速度一般是 PyTorch 版本的 2倍左右。 默认为 'onnx'。

  • rec_vocab_fp:识别字符集合的文件路径,即 label_cn.txt 文件路径。若训练的自有模型更改了字符集,看通过此参数传入新的字符集文件路径。

  • rec_more_configs:dict,识别模型初始化时传入的其他参数。具体可参考 Recognizer 和 PPRecognizer 中的 init 接口。

  • rec_root: 识别模型文件所在的根目录。

    • Linux/Mac下默认值为 ~/.cnocr,表示模型文件所处文件夹类似 ~/.cnocr/2.2/densenet_lite_136-fc。
    • Windows下默认值为 C:\Users<username>\AppData\Roaming\cnocr。
  • det_model_fp: 如果不使用系统自带的检测模型,可以通过此参数直接指定所使用的模型文件(.ckpt 或 .onnx 文件)。

  • det_model_backend:'pytorch', or 'onnx'。表明检测时是使用 PyTorch 版本模型,还是使用 ONNX 版本模型。 同样的模型,ONNX 版本的预测速度一般是 PyTorch 版本的 2倍左右。 默认为 'onnx'。

  • det_more_configs: dict,识别模型初始化时传入的其他参数。具体可参考 CnSTD 文档,或者相关的源代码 CnSTD/CnStd 。

  • det_root: 检测模型文件所在的根目录。

    • Linux/Mac下默认值为 ~/.cnstd,表示模型文件所处文件夹类似 ~/.cnstd/1.2/db_resnet18。
    • Windows下默认值为 C:/Users//AppData/Roaming/cnstd。
      每个参数都有默认取值,所以可以不传入任何参数值进行初始化:ocr = CnOcr()。

身份证区域查找

通过对加载图像的灰度处理–>滤波处理–>二值处理–>边缘检测–>膨胀处理–>轮廓查找–>透视变换(校正)–>图像旋转–>固定图像大小一系列处理之后,我们便可以清晰的裁剪出身份证的具体区域。

另附几个常用镜像资源:
清华:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
华中理工大学:http://pypi.hustunique.com/
山东理工大学:http://pypi.sdutlinux.org/