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

一、案例背景

在实际教学、办公及政务系统中,纸质材料(如手写作文、表格、试卷等)仍广泛存在。为提升信息处理效率,采用 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在程序运行时居然找不到,于是在代码中增加:

python 复制代码
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 模型初始化

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

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


2. OCR 识别执行

python 复制代码
result = ocr.predict(image_path)

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

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

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

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


3. 识别结果输出

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

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


4. 可视化文字框与内容

python 复制代码
draw_ocr_custom(image, boxes, texts, scores, font_path='simfang.ttf')

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

5.完整代码

本例的完整代码如下:

python 复制代码
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 框架实现中文图像文字识别的完整流程,具备如下特点:

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

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

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

相关推荐
weixin_6682 分钟前
OCR 模型深度对比分析报告 - AI分析
人工智能·ocr
wasp5203 分钟前
从 Vibe Coding 到真·生产力:OpenHarness 的“Harness 方程式”及其实战分析
人工智能·架构·开源·agent
weixin_408099677 分钟前
【完整教程】天诺脚本如何调用 OCR 文字识别 API?自动识别屏幕文字实战(附代码)
前端·人工智能·后端·ocr·api·天诺脚本·自动识别文字脚本
lvyuanj22 分钟前
深度解析Agent技术演进路径与未来趋势
人工智能
卷卷说风控35 分钟前
Claude Code 技术架构深扒:Prompt / Context / Harness 三维设计实践
人工智能·架构·prompt
Frank学习路上40 分钟前
【AI技能】跟着费曼学自动驾驶
人工智能·机器学习·自动驾驶
Want5951 小时前
Rokid AI Glasses应用开发实战:把记账助手“戴”在脸上
人工智能
bryant_meng1 小时前
【Reading Notes】(4)Favorite Articles from 2021
人工智能·深度学习·业界资讯
雷工笔记1 小时前
MES / WMS / AGV 交互时序图及生产管理模块界面设计清单
人工智能·笔记
海兰1 小时前
使用 Spring AI 打造企业级 RAG 知识库第二部分:AI 实战
java·人工智能·spring