赞
踩
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
三方OCR服务价格普遍不便宜,随着公司业务量的增长,这部分成本逐渐变得难以忽视,因此内部评估后决定自行实现。
一、Paddle是什么?
示例:Paddle是国内的一套开源的深度学习框架,发展至目前,已经提供了许多无需复杂参数即可使用的工具库,如
PaddleOCR,PaddleNLP 等等。
二、使用步骤
注意:以下内容将以win系统为例,因为我是在win10系统上做开发的,mac没用过,不懂。
不管你是否已经安装python环境,我仍建议使用Anaconda环境,因为在人工智能领域conda相当好用。
镜像地址:Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
通常在左下角的:开始 -> Anaconda3 -> Anaconda Prompt启动控制台
输入如下命令,创建一个新的虚拟环境:
conda create --name paddle_env python=3.8 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
以上命令是默认使用了python3.8的,如果你需要其他版本,可以自行修改。
虚拟环境创建完成后,可以通过如下命令激活环境,并确定无误:
- # 激活paddle_env环境
- conda activate paddle_env
- # 查看当前python的位置
- 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部署完成。
PaddleNLP的部署相对比较简单,只需要通过以下pip直接安装即可:
pip install --upgrade paddlenlp
先在你的代码中引入paddleocr和paddlenlp两个库:
- from paddleocr import PaddleOCR
- from paddlenlp import Taskflow
然后获取一个PaddleOCR和一个Taskflow对象:
- # 获取ocr对象
- ocr = PaddleOCR(use_angle_cls=True, lang="ch", use_gpu=False, use_mp=True)
- # 获取taskflow对象
- ie = Taskflow('information_extraction', schema=schema)
如果你希望使用自己训练的模型,可以传入参数:
- # 指定检测模型,识别模型和方向分类模型的路径
- det_model_dir = '.\\det_model'
- rec_model_dir = '.\\rec_model'
- cls_model_dir = '.\\cls_model'
- # 传入参数
- 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对象中其实已经指定了默认的模型。
示例代码:
- # Paddleocr目前支持的多语言语种可以通过修改lang参数进行切换
- # 例如`ch`, `en`, `fr`, `german`, `korean`, `japan`
- ocr = PaddleOCR(use_angle_cls=True, lang="ch")
- allStr = ""
- img_path = './imgs/11.jpg'
- result = ocr.ocr(img_path, cls=True)
- for idx in range(len(result)):
- res = result[idx]
- for line in res:
- print(line)
- str = line[1][0]
- if str != '':
- allStr = allStr + Str
假设传入的是身份证,经过解析后的allStr就会变成类似如下的字符串(标点符号,空格等特殊符号需要你自行处理):
姓名侯小珂性别女民族汉出生1999年x月x日住址xx市xx区xx路1号2栋3号公民身份号码110129xxxxxxxxxxxx中华人民共和国居民身份证签发机关xx市公安局有效期限2018071120280711
接下来你要做的就是把这个字符串交给NLP模型进行信息抽取。当然,你说用正则匹配也行,确实没毛病,例如身份证号码,直接用正则匹配就可以了。但是,假如你需要获取住址这种没有明显特征的,你如何正则匹配呢?
NLP模型就能解决这个问题。
使用如下代码,告诉模型我需要在这段文本中抽取什么信息即可:
- data = {}
- schema = ["姓名", "民族", "性别", "出生", "住址", "签发机关", "有效期限", "公民身份号码"]
- ie = Taskflow('information_extraction', schema=schema)
- res = ie(allStr)
- for key in schema:
- data[key] = res[0][key][0]['text']
- print(data)
结果如下:
- "data": {
- "姓名": "侯小珂",
- "民族": "汉",
- "性别": "女",
- "出生": "1999年x月x日",
- "住址": "xx市xx区xx路1号2栋3号",
- "签发机关": "xx市公安局",
- "有效期限": "2018071120280711",
- "公民身份号码": "110129xxxxxxxxxxxx"
- }
感谢各位阅读!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。