2025-07-10

百度飞桨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. 处理结果:打印结果并保存为图片

五、代码运行效果

image.png

六、注意点

  • 文件路径地址不能直接复制如"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

最终解决了问题。。。

以上就是所有内容,欢迎各位戴佬批评指正

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容