一、问题描述
OCR(Optical Character Recognition,光学字符识别)技术是一种将图像中的文字转换为可编辑文本格式的技术。它通过扫描或拍照等方式获取图像,然后利用图像处理和模式识别技术,识别出图像中的文字信息,并将其转换为电子文本。OCR技术广泛应用于多个领域,如文档处理、自动化数据录入、身份证识别、银行和金融业务、物流和快递管理、智能交通系统、医疗保健和教育行业等。
二、PaddleOCR开发库
PaddleOCR是一个由百度PaddlePaddle团队开发的开源OCR(Optical Character Recognition,光学字符识别)工具库。
特点
- 超轻量级中文OCR:PaddleOCR提供了多种轻量级的中文OCR模型,这些模型具有较高的识别精度和较快的推理速度。
- 多语言与通用性:除了中文,PaddleOCR还支持英文和其他多种语言的识别。此外,它还提供了通用的检测、识别、分类、方向预测等任务模型。
- 部署灵活性:PaddleOCR支持多种硬件平台的部署,包括CPU、GPU以及移动端设备,如Android和iOS。
- 数据增强与预处理:提供了丰富的数据增强和预处理功能,有助于提升模型的泛化能力。
- 可视化工具:配备了可视化工具,便于用户查看识别结果和调试模型。
应用场景
PaddleOCR在多个领域都有广泛的应用,包括但不限于:
- 身份证识别:可以快速准确地识别身份证上的姓名、身份证号等关键信息。
- 车牌识别:在交通管理、停车场等场景中,用于自动识别车牌号码。
- 票据识别:应用于财务、税务等领域,实现票据信息的自动化录入和处理。
- 手写文字识别:可用于教育、医疗等领域,辅助手写文字的录入和识别。
版权许可协议
开源协议:Apache2
Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserved
Apache License
Version 2.0, January 2004
三、安装
PaddleOCR的安装和使用相对简单。用户可以通过pip命令轻松安装,并参考官方文档进行配置和训练。此外,Padoop还提供了预训练模型,用户可以直接下载使用,而无需从头开始训练。
安装PaddlePaddle2.6.1
基于python10创建ocr虚拟环境,安装paddlepaddle。
PaddlePaddle是一个由百度开发的深度学习框架,它是国内最早开源的深度学习平台之一。
conda create -n ocr python=3.10
conda activate ocr
pip install paddlepaddle
输出:
Successfully installed Pillow-10.4.0 anyio-4.4.0 astor-0.8.1 certifi-2024.8.30 decorator-5.1.1 exceptiongroup-1.2.2 h11-0.14.0 httpcore-1.0.5 httpx-0.27.2 idna-3.8 numpy-2.1.1 opt-einsum-3.3.0 paddlepaddle-2.6.1 protobuf-3.20.2 sniffio-1.3.1 typing-extensions-4.12.2
安装shapely。Shapely 是一个用于处理和分析平面几何对象的 Python 包。
pip install shapely
输出:
Collecting shapely
Downloading shapely-2.0.6-cp310-cp310-win_amd64.whl.metadata (7.2 kB)
Requirement already satisfied: numpy<3,>=1.14 in d:\work-data\conda3\envs\ocr\lib\site-packages (from shapely) (2.1.1)
Downloading shapely-2.0.6-cp310-cp310-win_amd64.whl (1.4 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.4/1.4 MB 4.4 MB/s eta 0:00:00
Installing collected packages: shapely
Successfully installed shapely-2.0.6
安装paddleocr2.8.1
PaddleOCR 是一个由百度 PaddlePaddle 团队开发的开源 OCR(光学字符识别)工具库。它基于 PaddlePaddle 深度学习框架,提供了丰富的预训练模型和易于使用的 API,可以快速实现各种场景下的文字检测和识别任务。
pip install paddleocr
输出:
Successfully installed beautifulsoup4-4.12.3 charset-normalizer-3.3.2 colorama-0.4.6 contourpy-1.3.0 cycler-0.12.1 cython-3.0.11 fire-0.6.0 fonttools-4.53.1 imageio-2.35.1 imgaug-0.4.0 kiwisolver-1.4.7 lazy-loader-0.4 lmdb-1.5.1 lxml-5.3.0 matplotlib-3.9.2 networkx-3.3 numpy-1.26.4 opencv-contrib-python-4.10.0.84 opencv-python-4.10.0.84 packaging-24.1 paddleocr-2.8.1 pyclipper-1.3.0.post5 pyparsing-3.1.4 python-dateutil-2.9.0.post0 python-docx-1.1.2 pyyaml-6.0.2 rapidfuzz-3.9.7 requests-2.32.3 scikit-image-0.24.0 scipy-1.14.1 six-1.16.0 soupsieve-2.6 termcolor-2.4.0 tifffile-2024.8.30 tqdm-4.66.5 urllib3-2.2.2
已安装开发包列表
(ocr) D:\Dev\dev-Python\CV\PaddleOCR>conda list
# packages in environment at D:\Work-Data\conda3\envs\ocr:
#
# Name Version Build Channel
anyio 4.4.0 pypi_0 pypi
astor 0.8.1 pypi_0 pypi
beautifulsoup4 4.12.3 pypi_0 pypi
bzip2 1.0.8 h2bbff1b_6 defaults
ca-certificates 2024.7.2 haa95532_0 defaults
certifi 2024.8.30 pypi_0 pypi
charset-normalizer 3.3.2 pypi_0 pypi
colorama 0.4.6 pypi_0 pypi
contourpy 1.3.0 pypi_0 pypi
cycler 0.12.1 pypi_0 pypi
cython 3.0.11 pypi_0 pypi
decorator 5.1.1 pypi_0 pypi
exceptiongroup 1.2.2 pypi_0 pypi
fire 0.6.0 pypi_0 pypi
fonttools 4.53.1 pypi_0 pypi
h11 0.14.0 pypi_0 pypi
httpcore 1.0.5 pypi_0 pypi
httpx 0.27.2 pypi_0 pypi
idna 3.8 pypi_0 pypi
imageio 2.35.1 pypi_0 pypi
imgaug 0.4.0 pypi_0 pypi
kiwisolver 1.4.7 pypi_0 pypi
lazy-loader 0.4 pypi_0 pypi
libffi 3.4.4 hd77b12b_1 defaults
lmdb 1.5.1 pypi_0 pypi
lxml 5.3.0 pypi_0 pypi
matplotlib 3.9.2 pypi_0 pypi
networkx 3.3 pypi_0 pypi
numpy 1.26.4 pypi_0 pypi
opencv-contrib-python 4.10.0.84 pypi_0 pypi
opencv-python 4.10.0.84 pypi_0 pypi
openssl 3.0.15 h827c3e9_0 defaults
opt-einsum 3.3.0 pypi_0 pypi
packaging 24.1 pypi_0 pypi
paddleocr 2.8.1 pypi_0 pypi
paddlepaddle 2.6.1 pypi_0 pypi
pillow 10.4.0 pypi_0 pypi
pip 24.2 py310haa95532_0 defaults
protobuf 3.20.2 pypi_0 pypi
pyclipper 1.3.0.post5 pypi_0 pypi
pyparsing 3.1.4 pypi_0 pypi
python 3.10.14 he1021f5_1 defaults
python-dateutil 2.9.0.post0 pypi_0 pypi
python-docx 1.1.2 pypi_0 pypi
pyyaml 6.0.2 pypi_0 pypi
rapidfuzz 3.9.7 pypi_0 pypi
requests 2.32.3 pypi_0 pypi
scikit-image 0.24.0 pypi_0 pypi
scipy 1.14.1 pypi_0 pypi
setuptools 72.1.0 py310haa95532_0 defaults
shapely 2.0.6 pypi_0 pypi
six 1.16.0 pypi_0 pypi
sniffio 1.3.1 pypi_0 pypi
soupsieve 2.6 pypi_0 pypi
sqlite 3.45.3 h2bbff1b_0 defaults
termcolor 2.4.0 pypi_0 pypi
tifffile 2024.8.30 pypi_0 pypi
tk 8.6.14 h0416ee5_0 defaults
tqdm 4.66.5 pypi_0 pypi
typing-extensions 4.12.2 pypi_0 pypi
tzdata 2024a h04d1e81_0 defaults
urllib3 2.2.2 pypi_0 pypi
vc 14.40 h2eaa2aa_0 defaults
vs2015_runtime 14.40.33807 h98bb1dd_0 defaults
wheel 0.43.0 py310haa95532_0 defaults
xz 5.4.6 h8cc25b3_1 defaults
zlib 1.2.13 h8cc25b3_1 defaults
四、使用方法
测试图片
PaddleOCR提供了一系列测试图片,并解压到工程当前子目录ppocr_img下,然后在终端中切换到相应目录
cd ppocr_img
如果不使用提供的测试图片,可以将下方--image_dir
参数替换为相应的测试图片路径。
检测+方向分类器+识别全流程
参数:--use_angle_cls true
设置使用方向分类器识别180度旋转文字,--use_gpu false
设置不使用GPU。
paddleocr --image_dir ./imgs/11.jpg --use_angle_cls true --use_gpu false
例如输入图片./ppocr_img/imgs/11.jpg:
OCR识别结果是一个列表,每个已识别的输出项包含了文本框,文字和识别置信度:
[2024/10/05 20:37:35] ppocr INFO: **********./imgs/11.jpg**********
[2024/10/05 20:37:36] ppocr DEBUG: dt_boxes num : 16, elapsed : 0.597381591796875
[2024/10/05 20:37:36] ppocr DEBUG: cls num : 16, elapsed : 0.13051676750183105
[2024/10/05 20:37:37] ppocr DEBUG: rec_res num : 16, elapsed : 0.8596158027648926
[2024/10/05 20:37:37] ppocr INFO: [[[28.0, 37.0], [302.0, 39.0], [302.0, 72.0], [27.0, 70.0]], ('纯臻营养护发素', 0.9978380799293518)]
[2024/10/05 20:37:37] ppocr INFO: [[[26.0, 83.0], [173.0, 83.0], [173.0, 104.0], [26.0, 104.0]], ('产品信息/参数', 0.9898301959037781)]
[2024/10/05 20:37:37] ppocr INFO: [[[27.0, 112.0], [331.0, 112.0], [331.0, 135.0], [27.0, 135.0]], ('(45元/每公斤,100 公斤起订)', 0.9659187197685242)]
[2024/10/05 20:37:37] ppocr INFO: [[[25.0, 143.0], [281.0, 143.0], [281.0, 165.0], [25.0, 165.0]], ('每瓶22元,1000瓶起 订)', 0.9928639531135559)]
[2024/10/05 20:37:37] ppocr INFO: [[[26.0, 179.0], [300.0, 179.0], [300.0, 195.0], [26.0, 195.0]], ('【品牌】:代加工方 式/OEMODM', 0.9843930602073669)]
[2024/10/05 20:37:37] ppocr INFO: [[[26.0, 210.0], [234.0, 210.0], [234.0, 227.0], [26.0, 227.0]], ('【品名】:纯臻营养 护发素', 0.996315062046051)]
[2024/10/05 20:37:37] ppocr INFO: [[[25.0, 239.0], [241.0, 239.0], [241.0, 259.0], [25.0, 259.0]], ('【产品编号】:YM-X-3011', 0.9848006963729858)]
[2024/10/05 20:37:37] ppocr INFO: [[[413.0, 232.0], [430.0, 232.0], [430.0, 306.0], [413.0, 306.0]], ('ODMOEM', 0.9908034205436707)]
[2024/10/05 20:37:37] ppocr INFO: [[[24.0, 271.0], [180.0, 271.0], [180.0, 290.0], [24.0, 290.0]], ('【净含量】:220ml', 0.9892314672470093)]
[2024/10/05 20:37:37] ppocr INFO: [[[26.0, 303.0], [251.0, 303.0], [251.0, 319.0], [26.0, 319.0]], ('【适用人群】:适合 所有肤质', 0.9909219145774841)]
[2024/10/05 20:37:37] ppocr INFO: [[[26.0, 335.0], [344.0, 335.0], [344.0, 352.0], [26.0, 352.0]], ('【主要成分】:鲸蜡 硬脂醇、燕麦β-葡聚', 0.9828623533248901)]
[2024/10/05 20:37:37] ppocr INFO: [[[26.0, 364.0], [281.0, 364.0], [281.0, 384.0], [26.0, 384.0]], ('糖、椰油酰胺丙基甜 菜碱、泛醌', 0.9505158066749573)]
[2024/10/05 20:37:37] ppocr INFO: [[[368.0, 368.0], [477.0, 368.0], [477.0, 389.0], [368.0, 389.0]], ('(成品包材)', 0.9920712113380432)]
[2024/10/05 20:37:37] ppocr INFO: [[[26.0, 397.0], [360.0, 397.0], [360.0, 414.0], [26.0, 414.0]], ('【主要功能】:可紧 致头发磷层,从而达到', 0.9904314279556274)]
[2024/10/05 20:37:37] ppocr INFO: [[[28.0, 429.0], [370.0, 429.0], [370.0, 445.0], [28.0, 445.0]], ('即时持久改善头发光 泽的效果,给干燥的头', 0.9874169230461121)]
[2024/10/05 20:37:37] ppocr INFO: [[[27.0, 458.0], [137.0, 458.0], [137.0, 479.0], [27.0, 479.0]], ('发足够的滋养', 0.9987380504608154)]
pdf文件识别
此外,paddleocr也支持输入pdf文件,并且可以通过指定参数page_num
来控制推理前面几页,默认为0,表示推理所有页。
paddleocr --image_dir ./xxx.pdf --use_angle_cls true --use_gpu false --page_num 2
检测但不识别
在 paddleocr 命令行工具中,当 –rec 参数设置为 true(默认值)时,paddleocr 会对输入的图片进行文字识别,并输出识别到的文字内容。
当 –rec 参数设置为 false 时,paddle.org 仅会对输入的图片进行文字检测(Detection),即找出图片中的文字区域,但不会对文字区域内的文字进行识别。这对于只需要知道图片中哪些地方包含文字,而不需要知道具体文字内容的场景非常有用。
例如只检测不识别:设置--rec
为false
paddleocr --image_dir ./imgs/11.jpg --rec false
结果是一个list,每个item只包含文本框
[[27.0, 459.0], [136.0, 459.0], [136.0, 479.0], [27.0, 479.0]]
[[28.0, 429.0], [372.0, 429.0], [372.0, 445.0], [28.0, 445.0]]
......
识别但不检测
在 paddleocr 命令行工具中,–det 参数用于指定是否启用文字检测(Detection)功能。
当 –det 参数设置为 true(默认值)时,paddleocr 会对输入的图片进行文字检测,即找出图片中的文字区域。
当 –det 参数设置为 false 时,paddleocr 将跳过文字检测步骤,直接进行文字识别(如果启用了文字识别功能)。这对于已经知道图片中文字位置的情况非常有用,可以节省计算资源和时间。
例如只识别不检测:设置--det
为false
paddleocr --image_dir ./imgs_words/ch/word_1.jpg --det false
结果是一个list,每个item只包含识别结果和识别置信度
['韩国小馆', 0.994467]
版本说明
paddleocr默认使用PP-OCRv4模型(--ocr_version PP-OCRv4
),如需使用其他版本可通过设置参数--ocr_version
,具体版本说明如下:
版本名称 | 版本说明 |
---|---|
PP-OCRv4 | 支持中、英文检测和识别,方向分类器,支持多语种识别 |
PP-OCRv3 | 支持中、英文检测和识别,方向分类器,支持多语种识别 |
PP-OCRv2 | 支持中英文的检测和识别,方向分类器,多语言暂未更新 |
PP-OCR | 支持中、英文检测和识别,方向分类器,支持多语种识别 |