百度飞桨(PaddlePaddle)案例分享:基于 PaddleOCR 的图像文字提取系统

发布于:2025-06-19 ⋅ 阅读:(13) ⋅ 点赞:(0)

一、案例背景

在实际教学、办公及政务系统中,纸质材料(如手写作文、表格、试卷等)仍广泛存在。为提升信息处理效率,采用 OCR(Optical Character Recognition)技术将图像中的文字提取为可编辑文本已成为刚需。

本项目基于开源深度学习库 PaddleOCR,构建了一个轻量级的图像文字识别工具,能够自动识别图像中的中文文本,并提供置信度评估和可视化支持。该工具特别适用于作业扫描图像中的内容提取场景,便于后续分析、存档或自动批改。


二、技术架构与实现方案

1. 技术选型

组件 工具/库 说明
OCR引擎 PaddleOCR 百度开源的中文文本识别框架,支持多语言、多角度、多段文字识别
图像处理 PIL(Pillow) 图像加载与绘制框,用于标记识别区域
环境支持 Conda + Paddle 环境 配置 DLL 依赖,保证在 Windows 系统上正常运行

2. 核心流程图

       ┌────────────┐
       │ 输入图像路径 │
       └─────┬──────┘
             │
     ┌───────▼────────┐
     │ 加载 PaddleOCR 模型 │
     └───────┬────────┘
             │
     ┌───────▼─────────────┐
     │ ocr.predict(图像路径) │
     └───────┬─────────────┘
             │
     ┌───────▼────────────┐
     │ 提取文本、置信度、位置 │
     └───────┬────────────┘
             │
   ┌─────────▼──────────────┐
   │ 可视化标记文字与边框框选 │
   └─────────┬──────────────┘
             │
        ┌────▼────┐
        │ 显示结果 │
        └─────────┘

 三、开发环境搭建

本例我们使用anaconda创建开发环境。具体步骤如下:

(1)新建环境

conda create -n paddle_env python=3.10 -y

conda activate paddle_env

(2)安装cudatoolkit

conda install cudatoolkit=11.8 -c conda-forge

(3)安装cudnn

conda install cudnn=8.9.* -c conda-forge

(4)安装paddlepaddle

conda install paddlepaddle-gpu==3.0.0 paddlepaddle-cuda=11.8 -c paddle -c nvidia

(5)Paddleocr 安装

pip install paddleocr -i Simple index

(6)指定 DLL 路径

在开发实践中发现,用anaconda单独安装的cudatoolkit在程序运行时居然找不到,于是在代码中增加:

dll_path = r"C:\Users\39040\.conda\envs\paddle_env\Library\bin"
os.environ["PATH"] = dll_path + ";" + os.environ["PATH"]

目的是将指定的 DLL 路径添加到系统的环境变量 PATH,以确保在运行 Python 时,能够成功加载某些依赖的动态链接库(.dll 文件)。

三、代码关键解析

1. OCR 模型初始化

ocr = PaddleOCR(use_textline_orientation=True, lang='ch')
  • lang='ch':指定中文识别模型。

  • use_textline_orientation=True:自动校正图像中文字的方向,增强识别准确率,适用于手写或旋转图像。


2. OCR 识别执行

result = ocr.predict(image_path)

返回结果 result[0] 为一个字典对象,包含:

  • rec_texts:识别的文字内容列表

  • rec_scores:每条文字识别的置信度评分

  • rec_polys:对应的文本框坐标,用于可视化绘图


3. 识别结果输出

for idx, (text, score) in enumerate(zip(texts, scores)):
    print(f"[{idx + 1}] 文字:{text}  置信度:{score:.2f}")

结构清晰地打印识别文本,方便人工复核与评估。


4. 可视化文字框与内容

draw_ocr_custom(image, boxes, texts, scores, font_path='simfang.ttf')

通过 PIL.ImageDraw 实现红色多边形边框和文字叠加,提供强直观反馈,便于查看识别准确性与位置匹配。

5.完整代码

本例的完整代码如下:

from paddleocr import PaddleOCR
from PIL import Image, ImageDraw, ImageFont
import os

dll_path = r"C:\Users\39040\.conda\envs\paddle_env\Library\bin"  #换成自己电脑中的环境的实际路径。
os.environ["PATH"] = dll_path + ";" + os.environ["PATH"]

def draw_ocr_custom(image, boxes, texts, scores, font_path=None):
    draw = ImageDraw.Draw(image)
    font = ImageFont.truetype(font_path, 20) if font_path else None
    for box, text, score in zip(boxes, texts, scores):
        box = [tuple(point) for point in box]
        draw.polygon(box, outline='red')
        draw.text(box[0], f'{text} {score:.2f}', fill='red', font=font)
    return image

# 初始化 OCR
ocr = PaddleOCR(use_textline_orientation=True, lang='ch')  # 新版本使用该参数

# 图像路径
image_path = 'D:\\test\\1.jpg'  #换成自己电脑的图像实际路径。

if not os.path.exists(image_path):
    raise FileNotFoundError(f"图片文件不存在: {image_path}")

# 执行 OCR 识别
result = ocr.predict(image_path)

# 获取识别数据(注意 result 是列表)
result_data = result[0]
texts = result_data['rec_texts']
scores = result_data['rec_scores']
boxes = result_data['rec_polys']

# 输出识别结果
print("📝 作业识别结果:\n")
for idx, (text, score) in enumerate(zip(texts, scores)):
    print(f"[{idx + 1}] 文字:{text}  置信度:{score:.2f}")

# 可视化
image = Image.open(image_path).convert('RGB')
drawn_img = draw_ocr_custom(image, boxes, texts, scores, font_path='simfang.ttf')
drawn_img.show()

四、应用场景与扩展建议

1.应用场景

  • 作业、试卷批改系统的文字识别与对比分析;

  • 图书馆数字化管理中的图片转文字;

  • 政务文件 OCR 归档;

  • 票据识别与数据采集;

2.可扩展功能

功能 描述
批量识别 支持整个目录下图片的自动批处理
格式化导出 支持将识别结果输出为 Excel、JSON、Word 等格式
文本纠错 加入语言模型辅助优化识别错误(如错别字校正)
手写优化 替换模型为专门优化手写体的 PP-OCRv3 模型

五、运行效果

1.手写作文识别

(1)小孩的手写作文拍照如下:

(2)识别的可视化效果如下:

(3)提取的文字效果如下:

2.数学作业识别

(1)小孩的手写数学作业拍照如下:

(2)识别的可视化效果如下:

(3)提取的内容效果如下:


六、总结与评价

该案例展示了基于 PaddleOCR 框架实现中文图像文字识别的完整流程,具备如下特点:

  • 高准确率:在常规印刷和清晰手写场景中表现优秀;

  • 可复用性强:代码结构清晰,便于集成到教学或业务系统;

  • 可视化支持:提供实时图像标注,助力人工复核和验证。


网站公告

今日签到

点亮在社区的每一天
去签到