当前位置: 首页 > article >正文

《PaddleOCR》—— OCR

文章目录

    • 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_opened
        if 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.kler.cn/a/581833.html

相关文章:

  • Agentic RAG 详解 - 从头开始​​构建你自己的智能体系统
  • 【web】网页崩溃
  • Cannot resolve symbol ‘view‘ Androidstudio报错解决办法
  • json中文编码问题
  • python之左移右移位运算
  • 政安晨【零基础玩转各类开源AI项目】Wan 2.1 本地部署,基于ComfyUI运行,最强文生视频 图生视频,一键生成高质量影片
  • Python+DeepSeek:开启AI编程新次元——从自动化到智能创造的实战指南
  • 【LLM学习】1-NLP回顾+Pytorch复习
  • jmeter-md5加密
  • C++和标准库速成(一)——HelloWorld和名称空间
  • Dify Web 前端独立部署指南(与后端分离,独立部署)
  • CAMEL 环境配置及基于硅基流动API的Agent构建
  • 【最新】DeepSeek 实用集成工具有那些?
  • tomcat配置应用----server.xml文件具体配置
  • 软件安全分析与应用之Web安全(二)
  • 【ai塔罗牌-生命之树】【azure openai】【python】交互塔罗牌demo
  • linunx ubuntu24.04.02装libfuse2导致无法开机进不了桌面解决办法
  • 文件包含漏洞第一关
  • DeepSeek Kimi详细生成PPT的步骤
  • MySQL高频八股—— MySQL的存储引擎及索引结构