提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
三方OCR服务价格普遍不便宜,随着公司业务量的增长,这部分成本逐渐变得难以忽视,因此内部评估后决定自行实现。
一、Paddle是什么?
示例:Paddle是国内的一套开源的深度学习框架,发展至目前,已经提供了许多无需复杂参数即可使用的工具库,如
PaddleOCR,PaddleNLP 等等。
二、使用步骤
1.PaddleOCR环境准备
注意:以下内容将以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部署完成。
2.PaddleNLP环境准备
PaddleNLP的部署相对比较简单,只需要通过以下pip直接安装即可:
pip install --upgrade paddlenlp
3.使用示例
先在你的代码中引入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"
}
感谢各位阅读!