百度飞桨paddle,是百度旗下的开源深度学习平台。
官网:https://www.paddlepaddle.org.cn/
OCR是什么
OCR(光学字符识别,Optical Character Recognition)是一种将图像中的文字转换为可编辑文本的技术。它广泛应用于文档数字化、信息提取和数据处理等领域。OCR 可以识别印刷文本、手写文本,甚至某些类型的字体和符号。
简单的说,就是从图片里面、PDF或者表格的截图里面,抽取出来文字信息,以及它的坐标位置等信息。
前端时间有个项目用到OCR图片识别提取验证码、另外要提取图片中的姓名信息,使用PaddleOcr来实现,使用起来还是非常不错的。
我主要使用它有几种用途:
1、一些网站的验证码可以识别。之前用的版本,只能说中规中矩,成功率在80-95左右。
如果是轻量级的数字验证码,可以先尝试一下ddddocr,官网在:https://github.com/sml2h3/ddddocr
也是开源且免费的。普通 的数字验证码准确率还是比较高,能上90%以上。
收费的话,可以考虑百度、阿里云的专门的OCR验证码识别库,这些是有些成本的。Aws亚马逊和Google的也非常好用,只用过Aws的,准确率还是非常高。
2、识别图片内容,提取重要信息。
这个功能一些多模态的大模型 是可以直接实现的,但是呢,Token也不便宜,成本挺高。
如果用PaddleOCR识别成文字,再扔进本地的开源模型,就可以覆盖掉这块的成本。
3、手机自动化,可以辅助进行坐标定位
可以通过截屏,然后直接扔进Paddle识别出文字所在的位置,返回坐标直接点击,懒人专用。
PaddleOCR 3.0,今天发布的版本,有哪些特色
PaddleOCR 3.0新增三大特色能力:
1、全场景文字识别模型PP-OCRv5:单模型支持五种文字类型和复杂手写体识别;整体识别精度相比上一代提升13个百分点。
🌐 单模型支持五种文字类型(简体中文、繁体中文、中文拼音、英文和日文)。
✍️ 支持复杂手写体识别:复杂连笔、非规范字迹识别性能显著提升。
🎯 整体识别精度提升 – 多种应用场景达到 SOTA 精度, 相比上一版本PP-OCRv4,识别精度提升13个百分点!
2、通用文档解析方案PP-StructureV3:支持多场景、多版式 PDF 高精度解析,在公开评测集中领先众多开源和闭源方案。
🧮 支持多场景 PDF 高精度解析,在 OmniDocBench 基准测试中领先众多开源和闭源方案。
🧠 多项专精能力: 印章识别、图表转表格、嵌套公式/图片的表格识别、竖排文本解析及复杂表格结构分析等。
3、智能文档理解方案PP-ChatOCRv4:原生支持文心大模型4.5 Turbo,精度相比上一代提升15个百分点。
🔥 文档图像(PDF/PNG/JPG)关键信息提取精度相比上一代提升15个百分点!
💻 原生支持文心大模型4.5 Turbo,还兼容 PaddleNLP、Ollama、vLLM 等工具部署的大模型。
🤝 集成 PP-DocBee2,支持印刷文字、手写体文字、印章信息、表格、图表等常见的复杂文档信息抽取和理解的能力。
是骡子是马,得溜一下才知道。
Python环境安装
1、先需要安装官方的PaddlePaddle包。看官网安装说明
https://www.paddlepaddle.org.cn/install/quick
Paddle包早已经是3.0的版本,而OCR之前是2.1的版本,我们今天要升级到3.0再使用。
安装Paddle命令:
pip install -U paddlepaddle==3.0.0 -i https://www.paddlepaddle.org.cn/packages/stable/cpu/
再安装真正的OCR包,使用官方镜像,以便升级到最新的PaddleOCR3.0版本。
pip install paddleocr -U -i https://pypi.org/simple
这里-i指定使用Pypi官方源,如果使用的阿里云的源或者清华的源,可能包还没有同步,可以直接使用官方这个源安装下载。
2、旧版本的使用方法
paddleocr = PaddleOCR(use_angle_cls=True, lang='ch') # 你可以换成 'ch' 或 'en'
image_file='captcha/captcha1_20250425_235439_726.png'
result = paddleocr.ocr(image_file, cls=True)
for line in result[0]:
box, (text, confidence) = line
print(f"文本: {text}, 置信度: {confidence}, 坐标: {box}")
输出结果:
文本: 8tnk8z, 置信度: 0.9906759262084961, 坐标: [[40.0, 19.0], [276.0, 17.0], [277.0, 80.0], [41.0, 82.0]]
因为图片比较简单,所以非常容易识别出来
3、新版本使用推理方法调用文本识别模型。
img_file = 'captcha/captcha1_20250425_235439_726.png'
# 文本识别模型
model = TextRecognition(model_name="PP-OCRv5_server_rec") # 文本识别模型
output = model.predict(input=img_file, batch_size=1)
for res in output:
if not isinstance(res, TextRecResult):
continue
print(res.json)
print(f'识别文本: {res.get("rec_text")}, 置信度: {res.get("rec_score")}')
识别结果还是比较准确。
4、再尝试之前的旧代码,发现已经不可用了。
这里发现,官方API已经变更了,之前的ocr已经废弃不可用,这个文本推理,也不会再输出坐标信息。
尝试新的方法来使用
# 文本识别模型
ocr = PaddleOCR(
# lang="en", # 指定中文ch还是英文en模型
# ocr_version="PP-OCRv5", # 指定模型版本
# device='cpu', # mps使用苹果芯片,cpu使用intel芯片,gpu使用nvidia芯片
use_doc_orientation_classify=False, # 不使用 方向分类
use_doc_unwarping=False, # 不使用 文本图像矫正模型,文本图像预处理
use_textline_orientation=False, # 不使用 文本行方向分类模型
# text_detection_model_name='PP-OCRv5_server_det',
# text_recognition_model_name='PP-OCRv5_server_rec',
)
# ocr = PaddleOCR() # 文本图像预处理+文本检测+方向分类+文本识别
# ocr = PaddleOCR(use_doc_orientation_classify=False, use_doc_unwarping=False) # 文本检测+方向分类+文本识别
# ocr = PaddleOCR(use_doc_orientation_classify=False, use_doc_unwarping=False, use_textline_orientation=False) # 文本检测+文本识别
# output = ocr.predict("截图/iShot_2025-05-21_09.46.10.png")
output = ocr.predict(img_file)
for res in output:
if not isinstance(res, OCRResult):
continue
for idx, item in enumerate(res.get('rec_texts')):
rec_boxes = res.get('rec_boxes')[idx]
x_min, y_min, x_max, y_max = rec_boxes[0], rec_boxes[1], rec_boxes[2], rec_boxes[3]
center_x, center_y = (x_min + x_max) / 2, (y_min + y_max) / 2
data = {
'text': res.get('rec_texts')[idx], # 识别出的文本内容
'score': res.get('rec_scores')[idx], # 置信可靠度
'boxes': res.get('rec_boxes')[idx], # 文本框坐标
'polys': res.get('rec_polys')[idx], # 文本 矩形边界框数组
'center': (center_x, center_y), # 中心点坐标
}
print(f"识别文本:{data['text']},置信度:{data['score']},中心点坐标:{data['center']}")
发现验证码识别在这里不能用了,但是普通的文本识别是可以正常使用的。可能是哪里配置不对。于是打开官网的测试网址,看看是不是代码的问题。
官方在线测试:https://aistudio.baidu.com/community/app/91660/webUI
测试发现官方的页面也无法识别验证码,但是截图和PDf类是可以正常识别的。
换一张图片看看效果
整体上中文的识别率还是非常高的。
官方还有非常多的示例,可以提取表格和版面解析,适用于不同的场景。可以按需取用。Demo也比较简单,几分钟就可以上手跑起来。
总结
百度的这个开源项目还是非常好用。在OCR里面算是头部工具了。
目前看和上一个版本之间的调用,差异比较大。
如果要识别验证码,使用TextRecognition的方法单独做文本识别。
如果要识别图片上的文字,可以使用PaddleOCR的predicate来实现。
官方的在线测试网站,可以试试,OCR的效果还是很好的:
移动端的OCR V5模型 只有16M大小,手机上也能随意使用。