百度飞桨PaddleOCR文本提取简单使用及draw_ocr函数报错问题解决
百度飞桨PaddleOCR文本识别简单使用
一、前言
PaddleOCR自发布以来凭借学术前沿算法和产业落地实践,受到了产学研各方的喜爱,并被广泛应用于众多知名开源项目,例如:Umi-OCR、OmniParser、MinerU、RAGFlow等,已成为广大开发者心中的开源OCR领域的首选工具。2025年5月20日,飞桨团队发布PaddleOCR 3.0,全面适配飞桨框架3.0正式版,进一步提升文字识别精度,支持多文字类型识别和手写体识别,满足大模型应用对复杂文档高精度解析的旺盛需求,结合文心大模型4.5 Turbo显著提升关键信息抽取精度,并新增对昆仑芯、昇腾等国产硬件的支持。(摘自PaddleOCR 文档)
二、安装(Python 13)
这里选用cpu版本,安装paddlepaddle
python -m pip install paddlepaddle==3.0.0 -i https://www.paddlepaddle.org.cn/packages/stable/cpu/
安装paddleOCR
pip install paddleocr
三、paddleOCR
基本文本提取分为两个模块一个是检测文本(检测文本位置),另一个是识别文本(识别文本内容)
- 文本检测
from paddleocr import TextDetection
model = TextDetection()
output = model.predict("C:\\Users\\Lenovo\\Pictures\\Screenshots\\屏幕截图 2025-07-10 101653.png")
for res in output:
res.print()
res.save_to_img(save_path="./output/")
res.save_to_json(save_path="./output/res.json")
- 文本识别
from paddleocr import TextRecognition
model = TextRecognition()
output = model.predict(input="C:\\Users\\Lenovo\\Pictures\\Screenshots\\屏幕截图 2025-07-10 101653.png")
for res in output:
res.print()
res.save_to_img(save_path="./output/")
res.save_to_json(save_path="./output/res.json")
- 结合起来
from paddleocr import PaddleOCR
ocr = PaddleOCR(
use_doc_orientation_classify=False, # 通过 use_doc_orientation_classify 参数指定不使用文档方向分类模型
use_doc_unwarping=False, # 通过 use_doc_unwarping 参数指定不使用文本图像矫正模型
use_textline_orientation=False, # 通过 use_textline_orientation 参数指定不使用文本行方向分类模型
)
# ocr = PaddleOCR(lang="en") # 通过 lang 参数来使用英文模型
# ocr = PaddleOCR(ocr_version="PP-OCRv4") # 通过 ocr_version 参数来使用 PP-OCR 其他版本
# ocr = PaddleOCR(device="gpu") # 通过 device 参数使得在模型推理时使用 GPU
# ocr = PaddleOCR(
# text_detection_model_name="PP-OCRv5_server_det",
# text_recognition_model_name="PP-OCRv5_server_rec",
# use_doc_orientation_classify=False,
# use_doc_unwarping=False,
# use_textline_orientation=False,
# ) # 更换 PP-OCRv5_server 模型
result = ocr.predict("C:\\Users\\Lenovo\\Pictures\\Screenshots\\2.png")
for res in result:
res.print()
res.save_to_img("C:\\Users\\Lenovo\\Pictures\\Screenshots")
#res.save_to_json("output")
以上代码来自(使用教程 - PaddleOCR 文档)
四、代码拓展(代码运行时间较长请耐心等待)
现在将代码拓展为可以从文件资源管理器选取文件,并指定存储位置
from paddleocr import PaddleOCR
import tkinter as tk
from tkinter import filedialog
import os
def select_image():
root = tk.Tk()
root.withdraw()
file_path = filedialog.askopenfilename(
title="选择要识别的图片",
filetypes=[("图片文件", "*.png *.jpg *.jpeg *.bmp")]
)
return file_path
def select_output_dir():
root = tk.Tk()
root.withdraw()
dir_path = filedialog.askdirectory(title="选择结果保存目录")
return dir_path if dir_path else "./output" # 默认输出目录
if __name__ == "__main__":
image_path = select_image()
if not image_path:
print("未选择图片,程序退出")
exit()
output_dir = select_output_dir()
# 初始化OCR并处理图片
ocr = PaddleOCR(
use_doc_orientation_classify=False,
use_doc_unwarping=False,
use_textline_orientation=False,
)
result = ocr.predict(image_path)
for res in result:
res.print()
filename = os.path.splitext(os.path.basename(image_path))
img_output_path = os.path.join(output_dir, f"{filename}_ocr_res.png")
res.save_to_img(img_output_path)
print(f"图片结果已保存至: {img_output_path}")
导入必要的库:PaddleOCR 用于 OCR 识别,tkinter 用于文件对话框,os 用于路径操作
-
定义两个 GUI 函数:
- select_image():打开图片选择对话框
- select_output_dir():打开目录选择对话框
主程序逻辑: a. 让用户选择图片文件 b. 让用户选择输出目录 c. 初始化 PaddleOCR 引擎(禁用文档方向识别等非必要功能) d. 执行 OCR 识别 e. 处理结果:打印结果并保存为图片
五、代码运行效果

六、注意点
- 文件路径地址不能直接复制如"C:\Users\Lenovo\Downloads\general_ocr_002.png",要修改为"C:\Users\Lenovo\Downloads\general_ocr_002.png"
- 当路径包含中文时,OpenCV无法正确识别路径,会出现乱码并报错,可以通过Windows设置--->时间和语言--->语言和区域--->管理语言设置--->更改系统区域设置--->勾选beta版就ok了
draw_ocr函数报错问题解决(虽然我没有用到)
在浏览官网文件之前,我先去看了几篇大佬的文章比如
python+paddleocr 进行图像识别、找到文字在屏幕中的位置_python paddleocr-CSDN博客
PaddleOCR—图片文字识别提取—快速使用教程_paddleocr使用教程-CSDN博客
maybe我太蠢了,程序花了好久都没能调通,中途也求助了ai(大概花了我7个米的tokens)都没能搞好,其中一个问题就是
cannot import name 'PaddleOCR' from 'paddleocr'
这个问题我也在社区搜索过了cannot import name ‘PaddleOCR‘ from ‘paddleocr‘_cannot import name 'paddleocr' from partially init-CSDN博客,但是我犯错的原因可能与他们不同,无论怎么修改,错误一直存在,困扰了我良久,最后在github社区找到一个评论(现在突然找不到了),就是说draw_ocr
在utility.py中,而这个文件按上述方法好像没有下载(也有可能是版本问题),就一直报错,之后我就到https://github.com/PaddlePaddle/PaddleOCR/blame/7b759798887596629e83c01436d5256543805060/tools/infer/utility.py#L208下载,再放到paddocr文件夹中,然后在开头重新导入
from paddleocr.utility import draw_ocr
最终解决了问题。。。
以上就是所有内容,欢迎各位戴佬批评指正