当前位置:   article > 正文

基于PaddleOCR+NLP实现证件文书识别(以身份证为例)_paddle识别身份证

paddle识别身份证

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

三方OCR服务价格普遍不便宜,随着公司业务量的增长,这部分成本逐渐变得难以忽视,因此内部评估后决定自行实现。


一、Paddle是什么?

示例:Paddle是国内的一套开源的深度学习框架,发展至目前,已经提供了许多无需复杂参数即可使用的工具库,如 
PaddleOCR,PaddleNLP 等等。

二、使用步骤

1.PaddleOCR环境准备

注意:以下内容将以win系统为例,因为我是在win10系统上做开发的,mac没用过,不懂。

不管你是否已经安装python环境,我仍建议使用Anaconda环境,因为在人工智能领域conda相当好用。

镜像地址:Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

安装完成后,打开Anaconda控制台:

通常在左下角的:开始 -> Anaconda3 -> Anaconda Prompt启动控制台

输入如下命令,创建一个新的虚拟环境:

conda create --name paddle_env python=3.8 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/

以上命令是默认使用了python3.8的,如果你需要其他版本,可以自行修改。

虚拟环境创建完成后,可以通过如下命令激活环境,并确定无误:

  1. # 激活paddle_env环境
  2. conda activate paddle_env
  3. # 查看当前python的位置
  4. where python

然后还需要安装Paddle的核心框架:

如果你的电脑有NVIDIA显卡,可以先查一查你的CUDA版本是多少:

CUDA版本查看指南:轻松掌握你的GPU性能_cuda编译器版本和运行时版本-CSDN博客

然后去Paddle官网选择对应的选项,获取对应的安装命令:

开始使用_飞桨-源于产业实践的开源深度学习平台

以纯CPU为例,执行如下安装命令:

python -m pip install paddlepaddle==2.6.1 -i https://pypi.tuna.tsinghua.edu.cn/simple

等核心框架安装好了,再安装whl包:

pip install "paddleocr>=2.0.1"

至此,PaddleOCR部署完成。


2.PaddleNLP环境准备

PaddleNLP的部署相对比较简单,只需要通过以下pip直接安装即可:

pip install --upgrade paddlenlp

3.使用示例

先在你的代码中引入paddleocr和paddlenlp两个库:

  1. from paddleocr import PaddleOCR
  2. from paddlenlp import Taskflow

然后获取一个PaddleOCR和一个Taskflow对象:

  1. # 获取ocr对象
  2. ocr = PaddleOCR(use_angle_cls=True, lang="ch", use_gpu=False, use_mp=True)
  3. # 获取taskflow对象
  4. ie = Taskflow('information_extraction', schema=schema)

如果你希望使用自己训练的模型,可以传入参数:

  1. # 指定检测模型,识别模型和方向分类模型的路径
  2. det_model_dir = '.\\det_model'
  3. rec_model_dir = '.\\rec_model'
  4. cls_model_dir = '.\\cls_model'
  5. # 传入参数
  6. PaddleOCR(det_model_dir=det_model_dir, rec_model_dir=rec_model_dir, cls_model_dir=cls_model_dir)

如果没有需要指定的模型,直接不传这几个参就行,官方在源码文件information_extraction.py里的resource_files_urls对象中其实已经指定了默认的模型。

示例代码:

  1. # Paddleocr目前支持的多语言语种可以通过修改lang参数进行切换
  2. # 例如`ch`, `en`, `fr`, `german`, `korean`, `japan`
  3. ocr = PaddleOCR(use_angle_cls=True, lang="ch")
  4. allStr = ""
  5. img_path = './imgs/11.jpg'
  6. result = ocr.ocr(img_path, cls=True)
  7. for idx in range(len(result)):
  8. res = result[idx]
  9. for line in res:
  10. print(line)
  11. str = line[1][0]
  12. if str != '':
  13. allStr = allStr + Str

假设传入的是身份证,经过解析后的allStr就会变成类似如下的字符串(标点符号,空格等特殊符号需要你自行处理):

姓名侯小珂性别女民族汉出生1999年x月x日住址xx市xx区xx路123号公民身份号码110129xxxxxxxxxxxx中华人民共和国居民身份证签发机关xx市公安局有效期限2018071120280711

接下来你要做的就是把这个字符串交给NLP模型进行信息抽取。当然,你说用正则匹配也行,确实没毛病,例如身份证号码,直接用正则匹配就可以了。但是,假如你需要获取住址这种没有明显特征的,你如何正则匹配呢?

NLP模型就能解决这个问题。

使用如下代码,告诉模型我需要在这段文本中抽取什么信息即可:

  1. data = {}
  2. schema = ["姓名", "民族", "性别", "出生", "住址", "签发机关", "有效期限", "公民身份号码"]
  3. ie = Taskflow('information_extraction', schema=schema)
  4. res = ie(allStr)
  5. for key in schema:
  6. data[key] = res[0][key][0]['text']
  7. print(data)

结果如下:

  1. "data": {
  2. "姓名": "侯小珂",
  3. "民族": "汉",
  4. "性别": "女",
  5. "出生": "1999年x月x日",
  6. "住址": "xx市xx区xx路1号2栋3号",
  7. "签发机关": "xx市公安局",
  8. "有效期限": "2018071120280711",
  9. "公民身份号码": "110129xxxxxxxxxxxx"
  10. }

感谢各位阅读!


觉得这篇文章有用的朋友可以给我点个赞,收藏一下,尤其是修炼搬山诀的道友,你搬就搬吧好歹给哥们点点赞。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/701025
推荐阅读
相关标签
  

闽ICP备14008679号