百度飞桨(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在程序运行时居然找不到,于是在代码中增加:

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/909793.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/909793.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python操控鼠标

在已知屏幕坐标的情况下,可以通过 Python 的 pyautogui 或 pynput 等库实现网页上的鼠标点击操作。以下是具体步骤和代码示例: 1. 使用 PyAutoGUI(推荐) pyautogui 是一个简单易用的库,可以直接通过屏幕坐标控制鼠标点…

UV 与 Bun 深度解析

UV 与 Bun 深度解析:现代开发工具的安装与使用指南 什么是 UV? UV(Ultra-Velocity)是由 Astral 公司(Ruff 的创建者)开发的超高速 Python 包管理工具: 用 Rust 编写,速度极快&…

【算力网络】多样化算力感知

一、算力网络 ​ 算力网络(Computing Power Network)是我国率先提出的原创性技术理念,其核心是通过高速网络整合分散的算力资源(如云端、边缘、终端等),实现算力的动态感知、智能调度和一体化服务&#x…

Greenplum/PostgreSQL pg_hba.conf 认证方法详解

Greenplum/PostgreSQL pg_hba.conf 认证方法详解 pg_hba.conf 文件中的 METHOD 字段指定了客户端认证方式,以下是各种认证方法的详细说明和配置示例。 常用认证方法 1. trust - 无条件允许连接 说明:不需要密码,完全信任连接 适用场景&am…

分布式数据库中间件-Sharding-JDBC

前言 学习视频:深入Sharding-JDBC分库分表从入门到精通【黑马程序员】本内容仅用于个人学习笔记,如有侵扰,联系删除 1、概述 1.1、分库分表是什么 小明是一家初创电商平台的开发人员,他负责卖家模块的功能开发,其中…

pycharm2020.2版本给项目选择了虚拟环境解释器,项目文件都运行正常,为什么terminal文件路径的前面没有虚拟解释器的名称

解决问题: 1.打开 Anaconda Prompt输入 conda init cmd.exe 或者 pycharm终端直接 conda init cmd.exe 重启动 CMD和pycharm,使配置生效。

2025商旅平台排行:国内主流商旅平台解析

在数字化转型加速2025年,企业商旅管理正从“成本中心”向“智能管控枢纽”升级。如何通过技术赋能实现商旅成本精准优化与管理效率跃升?本文聚焦国内五大主流商旅平台,以“综合型头部平台创新型平台”双维度解析,结合数据实证与场…

CNS无线电信号覆盖分析系统v0.1

#系统终端有的版本号了# 开发一套类EMACS的专业软件任重道远,经过慢吞吞的开发,我们已经将目标定位大幅下调了,不再对标EMACS系统了,改为瞄行业老二WRAP软件了。当然WRAP软件在电磁信号仿真分析领域也是神一样的存在,其…

单视频二维码生成与列表二维码生成(完整版)

视频二维码有有两种情况:一种是单个视频的生成一个二维码;另一种是一组视频(多个视频)生成一个列表二维码。用户按自己的实际需求生成,即可,很方便。 STEP1 注册帐号 使用视频二维码,您需要注…

关于linux:1. Linux 基础运维

一、Linux 安装与发行版选择 关于操作系统种类: 1)基于 Linux 内核的操作系统 Ubuntu、Debian、Kali、CentOS、RHEL、Arch、Android、Alpine、OpenWRT 等 特点:开源、稳定、安全、广泛使用于服务器与开发领域 2)基于 Windows…

(LeetCode 每日一题) 2016. 增量元素之间的最大差值 (数组)

题目&#xff1a;2016. 增量元素之间的最大差值 思路&#xff1a;维护已遍历过的最小值&#xff0c;时间复杂度0(n)。 C版本&#xff1a; class Solution { public:int maximumDifference(vector<int>& nums) {int mnnums[0];int ans0;for(int i1;i<nums.size()…

MySQL基础与常用数据类型浅析

一.MySQL数据类型分类 二.数值类型 2.1int类型 我们使用TINYINT作为例子进行实验验证: 越界插入会直接报错,跟我们当时学习语言的时候不太一样,语言会进行隐式类型转换或截断.一般不会直接报错.其他的int类型也是同理. 说明: 在MySQL中&#xff0c;整型可以指定是有符号的…

Ubuntu 20.04离线安装Nvidia-docker

服务器因系统故障重装&#xff0c;安装docker容器时发现几年前的在线安装步骤不好使了&#xff0c;只好尝试离线安装。为了下次不卡壳&#xff0c;记录一下安装步骤。 先确定自己的操作系统&#xff0c;并确保已经安装了nvidia driver。我的操作系统是Ubuntu 20.04。 1. 下载…

6,TCP客户端

1,创建一个新的项目 2,界面设计

【dify更新问题】如何更新dify且低成本解决git pull 443问题

我的dify部署在mini server上&#xff0c;挂不了TZ&#xff0c;所以采用了如下办法 更新origin (.git/config) 地址为&#xff1a;https://gitee.com/dify_ai/dify.git 顺序执行 &#xff08;https://docs.dify.ai/en/getting-started/install-self-hosted/docker-compose#upg…

即时通讯消息推送技术深度解析:从底层原理到行业实践-优雅草卓伊凡|片翼|搁浅

即时通讯消息推送技术深度解析&#xff1a;从底层原理到行业实践-优雅草卓伊凡|片翼|搁浅 引言&#xff1a;重新启程的即时通讯项目 优雅草科技的卓伊凡最近重启了即时通讯项目的二次开发工作&#xff0c;在这个万物互联的时代&#xff0c;消息推送通知作为IM系统的核心功能之…

Joomla jdoc 语法使用介绍

jdoc 语句包含在每个 Joomla 模板中&#xff0c;用于指示 Joomla 或其扩展的其他部分输出内容在整个网页中的位置。本文将简单的介绍一下Joomla模板开发中常用到的<jdoc>标签语法&#xff0c;并且介绍不同类型的<jdoc>标签元素的功能。 JDoc语句 一个典型的 jdoc…

Linux history 命令

Linux history 命令详解 history 是 Linux 系统中一个非常实用的命令&#xff0c;用于查看、管理和操作当前 Shell 会话中执行过的命令历史记录。它可以帮助用户快速重复执行命令、搜索历史记录、清除敏感命令等&#xff0c;极大地提高了命令行操作的效率。 一、基本用法 显示…

侧信道分析中的简单模板攻击(TA)Python实现(带测试)

一、模板攻击原理 模板攻击&#xff08;Template Attacks, TA&#xff09;是一种高效的侧信道分析方法&#xff0c;利用密码设备运行时的物理泄漏信息&#xff08;如功耗&#xff09;恢复密钥。其核心思想是通过建模密钥相关中间值的泄漏特征&#xff0c;构建攻击模板。模板攻…

AI集群全光交换网络技术原理与发展趋势研究

​ 引言 随着人工智能技术的飞速发展&#xff0c;AI训练集群对网络互连的带宽、延迟和能效提出了前所未有的挑战。全光交换网络作为一种新兴技术&#xff0c;正在成为解决这些挑战的关键方案。 全光交换网络的基本概念 全光交换网络(Optical Circuit Switch, OCS)是一种利用…