《PaddleOCR》—— OCR

devtools/2025/3/13 21:14:33/

文章目录

    • PaddleOCR简介
    • 核心功能与特点
    • 快速安装与使用
    • 典型应用场景
    • 实例

PaddleOCR简介

PaddleOCR 是百度基于飞桨(PaddlePaddle)框架开源的全场景文字识别工具,支持多语言、多场景、高精度的 OCR 能力,覆盖文本检测、识别、方向分类等全流程,广泛应用于文档扫描、车牌识别、票据处理、工业质检等场景。

核心功能与特点

  • 全流程覆盖
    • 检测:支持任意形状文本(弯曲、多方向),基于 DB、EAST 等算法。
    • 识别:支持中文(简 / 繁)、英文、日文、韩文、越南文等 80+ 语言,含高精度轻量模型(如 CRNN、SVTR)。
    • 方向分类:自动纠正文本方向(0°/90°/180°/270°)。
    • 端到端:单模型完成检测 + 识别,支持竖排文本、长文本。
  • 多场景适配
    • 通用文档、手写体、屏幕截图、低光照 / 模糊图片、小语种(如阿拉伯文、西里尔字母)。
    • 工业级优化:支持极小文本(3px)、复杂背景(如表格、海报)。
  • 高性能与轻量化
    • 提供超轻量模型(检测 3.5M + 识别 6.6M),CPU 端实时推理(Python 版本单张图 <0.5s)。
    • 支持 GPU 加速,CUDA 环境下速度提升 5-10 倍。
  • 开源与生态
    • 代码开源(GitHub 星标超 28k),提供预训练模型、数据增强工具(如 PP-OCRv4 数据合成)。
    • 支持自定义训练:提供标注工具(PaddleLabel)、迁移学习方案。

快速安装与使用

  • 安装
# 安装 PaddleOCR(CPU 版本)
pip3 install "paddleocr>=2.6.0"# 安装 GPU 版本(需 CUDA 11.2+)
pip3 install "paddleocr>=2.6.0" -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html
  • 命令行一键识别
paddleocr --image_dir "test.jpg" --use_angle_cls true --lang ch
# 参数说明:
# --use_angle_cls:开启方向分类(默认关闭)
# --lang:语言类型(ch=中文, en=英文, japan=日文等,默认 ch)
  • Python API 调用
from paddleocr import PaddleOCR, draw_ocr# 初始化(自动下载模型,首次运行需联网)
ocr = PaddleOCR(use_angle_cls=True, lang='ch')  # 可指定 use_gpu=False 强制 CPU# 预测
result = ocr.ocr("test.jpg", cls=True)# 输出结果(格式:[[bbox], 文本, 置信度])
for line in result[0]:print(line[1][0])  # 提取文本# 可视化结果
from PIL import Image
image = Image.open("test.jpg").convert('RGB')
boxes = [line[0] for line in result[0]]
txts = [line[1][0] for line in result[0]]
scores = [line[1][1] for line in result[0]]
im_show = draw_ocr(image, boxes, txts, scores)
im_show = Image.fromarray(im_show)
im_show.save('result.jpg')

典型应用场景

1、 文档处理:合同 / 发票扫描、表格文字提取(支持竖排、多列)。
2、场景文字:路标、广告牌、商品标签识别(如 PaddleOCR 曾用于淘宝拍照搜题)。
3、工业质检:PCB 字符检测、仪表盘数字识别。
4、移动端:手机相册 OCR(微信 / 支付宝扫码、翻译软件)。
5、古籍数字化:竖排古文、泛黄纸张文字恢复(结合图像增强算法)

实例

对摄像头中获取的文字进行OCR处理:
如图设计页面
在这里插入图片描述
一个按键、一个文本框、一个标签框
按键用来写控制函数,控制文本框和标签框。

代码:

这段代码的主要功能是创建一个基于 PyQt5 的图形用户界面,通过按钮控制摄像头的打开和关闭。当摄像头打开时,定时获取摄像头的帧图像,将其显示在界面上,并使用 PaddleOCR 对图像进行文字识别,将识别结果显示在文本编辑框中。

# 导入joblib库,用于保存和加载Python对象,在机器学习模型保存和加载时常用
import joblib
# 导入OpenCV库,用于计算机视觉任务,如图像和视频处理
import cv2
# 从paddleocr模块导入PaddleOCR类,用于进行光学字符识别(OCR)
from paddleocr import PaddleOCR
# 导入NumPy库,用于科学计算和数组操作
import numpy as np
# 从PyQt5库导入QtCore、QtGui和QtWidgets模块,用于创建图形用户界面(GUI)
from PyQt5 import QtCore, QtGui, QtWidgets
# 从PyQt5.QtCore模块导入所有内容,方便使用其中的类和函数,如信号与槽机制、定时器等
from PyQt5.QtCore import *
# 从PyQt5.QtGui模块导入所有内容,用于处理图形、图像和字体等
from PyQt5.QtGui import *
# 从PyQt5.QtWidgets模块导入QFileDialog、QMainWindow和QMessageBox类
# QFileDialog用于文件选择对话框,QMainWindow是主窗口的基类,QMessageBox用于显示消息框
from PyQt5.QtWidgets import QFileDialog, QMainWindow, QMessageBox
'''QFileDialog可以帮助用户选择文件路径
QMainWindow则是创建具有菜单、工具栏和状态栏的主窗口的起点。
QMessageBox可以用于向用户显示提示或警告信息'''# 从ocr模块导入Ui_MainWindow类,该类可能是使用Qt Designer设计的主窗口界面类
from ocr import Ui_MainWindow
# 导入sys模块,用于访问与Python解释器紧密相关的变量和函数,如命令行参数
import sys# 定义一个继承自QMainWindow和Ui_MainWindow的类,用于创建主窗口
class PyQtMainEntry(QMainWindow, Ui_MainWindow):def __init__(self):# 调用父类的构造函数,进行初始化super().__init__()# 调用setupUi方法,根据Ui_MainWindow类中的设计设置界面self.setupUi(self)# 创建一个PaddleOCR对象,设置使用角度分类、使用GPU加速、不显示日志信息,语言为英文self.ocr = PaddleOCR(use_angle_cls=True, use_gpu=True, show_log=False, lang='en')# 打开编号为0的摄像头,用于视频捕获self.camera1 = cv2.VideoCapture(0)# 初始化摄像头打开状态为False,表示摄像头未打开self.is_camera_opened = False# 创建一个Qt定时器对象,用于定时触发事件self._timer = QtCore.QTimer(self)# 当定时器超时时,连接到_queryFrame方法,即定时调用_queryFrame方法self._timer.timeout.connect(self._queryFrame)# 设置定时器的间隔时间为30毫秒,即每30毫秒触发一次超时事件self._timer.setInterval(30)# 定义一个槽函数,用于处理打开或关闭摄像头的操作def slot1(self):# 切换摄像头打开状态self.is_camera_opened = not self.is_camera_openedif self.is_camera_opened:# 如果摄像头打开,修改按钮文本为“关闭”self.pushButton.setText('关闭')# 启动定时器,开始定时获取摄像头帧self._timer.start()else:# 如果摄像头关闭,修改按钮文本为“打开”self.pushButton.setText('打开')# 停止定时器,停止获取摄像头帧self._timer.stop()# 定义一个方法,用于定时查询摄像头帧并进行OCR识别def _queryFrame(self):# 从摄像头读取一帧图像,ret1表示是否成功读取,self.frame1为读取的图像ret1, self.frame1 = self.camera1.read()# 将读取的图像调整为640x480的大小self.frame1 = cv2.resize(self.frame1, (640, 480))if ret1:# 如果成功读取到图像,将图像从BGR颜色空间转换为RGB颜色空间qimage = cv2.cvtColor(self.frame1, cv2.COLOR_BGR2RGB)# 将转换后的图像数据封装为QtGui.QImage对象qimage = QtGui.QImage(qimage.data, qimage.shape[1], qimage.shape[0],QtGui.QImage.Format_RGB888)# 将QImage对象转换为QPixmap对象pixmap = QtGui.QPixmap.fromImage(qimage)# 将QPixmap对象设置到名为label的标签上进行显示self.label.setPixmap(pixmap)# 使用PaddleOCR对象对当前帧图像进行OCR识别,返回识别结果result = self.ocr.ocr(self.frame1, cls=True)# 初始化一个空列表,用于存储识别出的文本a_list = []# 遍历识别结果中的每一项for i in result[0]:# 将每一项中的文本添加到列表中a_list.append(i[1][0])# 将列表中的文本用换行符连接成一个字符串zz = '\n'.join(a_list)# 将连接后的字符串显示在名为textEdit的文本编辑框中self.textEdit.setText(zz)# 程序的入口点
if __name__ == "__main__":# 创建一个Qt应用程序实例,传入命令行参数app = QtWidgets.QApplication(sys.argv)# 创建主窗口实例window = PyQtMainEntry()# 显示主窗口window.show()# 进入应用程序的事件循环,等待用户操作,直到窗口关闭,然后退出程序sys.exit(app.exec_())

在这里插入图片描述
可以看出准确率还是很高的。


http://www.ppmy.cn/devtools/166855.html

相关文章

python之爬虫入门实例

链家二手房数据抓取与Excel存储 目录 开发环境准备爬虫流程分析核心代码实现关键命令详解进阶优化方案注意事项与扩展 一、开发环境准备 1.1 必要组件安装 # 安装核心库 pip install requests beautifulsoup4 openpyxl pandas# 各库作用说明&#xff1a; - requests&#x…

【计算机网络】UDP

1.基本概念 UDP全名叫做用户数据报协议&#xff0c;它是存在于传输层的一个协议 2.核心特点 无连接 它不用像TCP那样每次发送数据之前都需要建立连接&#xff0c; 不可靠传输 这也叫尽最大努力交付&#xff0c;也就是UDP无法保证数据的完整和有序传输&#xff0c;只能尽自…

重生之我在学Vue--第6天 Vue 3 状态管理(Pinia)

重生之我在学Vue–第6天 Vue 3 状态管理&#xff08;Pinia&#xff09; 文章目录 重生之我在学Vue--第6天 Vue 3 状态管理&#xff08;Pinia&#xff09;前言一、Pinia 核心概念速览1.1 为什么需要状态管理&#xff1f;1.2 Pinia 核心三要素 二、Pinia 快速上手2.1 安装与初始化…

[动手学习深度学习]13.丢弃法 Dropout

权重衰退是常见处理过拟合的方法 丢弃法比权重衰退效果要好 动机 一个好的模型 需要第输入数据的扰动具有鲁棒性 使用有噪音的数据等价于Tikhonov正则丢弃法&#xff1a;在层之间加入噪音 &#xff08;所以丢弃法其实是一个正则&#xff09; 无偏差的加入噪音 对x加入噪音…

重新认识OpenCV:C++视角下的历史演进、功能特性以及OpenCV 4.11新特性

&#xff08;基于2025年最新技术动态&#xff0c;面向工业级C开发者&#xff09; 一、OpenCV的历史迭代与技术定位 自1999年英特尔实验室诞生以来&#xff08;记住这个人-加里 布拉德斯基&#xff0c;是他怀揣着美好愿景启动了这个项目&#xff09;&#xff0c;OpenCV已成长…

leetcode日记(92)从前序与中序遍历序列构造二叉树

想了很久很久&#xff0c;其实思路很简单&#xff0c;应该是在数据结构上讲过的方法。 意思是前序遍历中&#xff0c;正中间一定是第一位&#xff0c;而中序遍历&#xff0c;正中间在中间位置&#xff0c;将左右节点分开。 有了这个思路就好做了。 每次取前序遍历的下一位&a…

Pygame实现射击鸭子游戏3-1

基于pygame的打鸭子游戏如图1所示。 图1 打鸭子游戏 从图1中可以看出&#xff0c;玩家通过鼠标控制瞄准镜的移动&#xff0c;点击鼠标左键射击鸭子。而鸭子则从屏幕左边向右边游动&#xff0c;当游到屏幕右侧边界后&#xff0c;重新回到屏幕左侧继续游动。 游戏需要创建两个类…

【每日学点HarmonyOS Next知识】类型判断、刘海高度、隐私弹窗、滑动下一页效果、清楚缓存

1、HarmonyOS instanceof判断错误&#xff1f; ArkTS部分支持instanceof&#xff0c;可参考文档&#xff1a;https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/typescript-to-arkts-migration-guide-V5 instanceof运算符在传递的过程中可能会发生以下情况&…