马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
实时英文 OCR 笔墨识别:从摄像头到 PyQt5 界面的实现
弁言
在数字化时代,笔墨识别技术(OCR)在浩繁领域中发挥侧重要作用。无论是文档扫描、车牌识别还是实时视频流中的笔墨提取,OCR 技术都能提供高效且准确的解决方案。本文将介绍怎样使用 Python 和 PaddleOCR 实现从摄像头捕获视频流并实时识别其中的英文笔墨,同时将效果表现在 PyQt5 界面中。
技术栈
- PaddleOCR:百度开源的 OCR 工具,支持多种语言的笔墨识别。
- OpenCV:用于图像处理处罚和视频流操作。
- PyQt5:用于创建图形用户界面(GUI)。
- Python:作为主要编程语言。
环境预备
在开始之前,确保你的环境中安装了以下须要的库:
- pip install paddlepaddle paddleocr opencv-python PyQt5
复制代码 实现步骤
1. 创建 PyQt5 界面
首先,我们需要创建一个简单的 PyQt5 界面,用于表现摄像头视频流和识别效果。界面包罗一个视频表现区域、一个文本表现区域和一个控制按钮。
文件 1:untitled6.py
- # -*- coding: utf-8 -*-
- # Form implementation generated from reading ui file 'untitled6.ui'
- #
- # Created by: PyQt5 UI code generator 5.15.9
- #
- # WARNING: Any manual changes made to this file will be lost when pyuic5 is
- # run again. Do not edit this file unless you know what you are doing.
- from PyQt5 import QtCore, QtGui, QtWidgets
- class Ui_MainWindow(object):
- def setupUi(self, MainWindow):
- MainWindow.setObjectName("MainWindow")
- MainWindow.resize(1273, 877)
- self.centralwidget = QtWidgets.QWidget(MainWindow)
- self.centralwidget.setObjectName("centralwidget")
-
- # 创建一个 QLabel 用于显示摄像头视频流
- self.label = QtWidgets.QLabel(self.centralwidget)
- self.label.setGeometry(QtCore.QRect(240, 60, 501, 261))
- self.label.setText("")
- self.label.setObjectName("label")
-
- # 创建一个 QPushButton 用于控制摄像头的开关
- self.pushButton = QtWidgets.QPushButton(self.centralwidget)
- self.pushButton.setGeometry(QtCore.QRect(450, 490, 93, 51))
- self.pushButton.setObjectName("pushButton")
-
- # 创建一个 QTextEdit 用于显示 OCR 识别结果
- self.textEdit = QtWidgets.QTextEdit(self.centralwidget)
- self.textEdit.setGeometry(QtCore.QRect(973, 6, 301, 581))
- self.textEdit.setObjectName("textEdit")
-
- MainWindow.setCentralWidget(self.centralwidget)
- self.menubar = QtWidgets.QMenuBar(MainWindow)
- self.menubar.setGeometry(QtCore.QRect(0, 0, 1273, 26))
- self.menubar.setObjectName("menubar")
- MainWindow.setMenuBar(self.menubar)
- self.statusbar = QtWidgets.QStatusBar(MainWindow)
- self.statusbar.setObjectName("statusbar")
- MainWindow.setStatusBar(self.statusbar)
- self.retranslateUi(MainWindow)
- QtCore.QMetaObject.connectSlotsByName(MainWindow)
- def retranslateUi(self, MainWindow):
- _translate = QtCore.QCoreApplication.translate
- MainWindow.setWindowTitle(_translate("MainWindow", "OCR Camera"))
- self.pushButton.setText(_translate("MainWindow", "打开"))
复制代码 2. 实现主步调逻辑
接下来,我们实现主步调逻辑,包括初始化 PaddleOCR、捕获摄像头视频流、进行 OCR 识别并将效果表现在 PyQt5 界面中。
文件 2:ocrCap.py
- from paddleocr import PaddleOCR
- import cv2
- from PyQt5 import QtCore, QtGui, QtWidgets
- from PyQt5.QtWidgets import QMainWindow, QMessageBox
- from untitled6 import Ui_MainWindow # 导入UI类
- import sys
- class PyQtMainEntry(QMainWindow, Ui_MainWindow):
- def __init__(self):
- super().__init__()
- self.setupUi(self)
- # 初始化 PaddleOCR,设置为英文识别
- self.ocr = PaddleOCR(use_angle_cls=True, use_gpu=True, show_log=False,
- det_model_dir='en_PP-OCRv3_det_infer',
- rec_model_dir='en_PP-OCRv3_rec_infer',
- cls_model_dir='ch_ppocr_mobile_v2.0_cls_slim_infer',
- lang="en")
-
- # 初始化摄像头
- self.camera1 = cv2.VideoCapture(0)
- self.is_camera_opened = False
- self._timer = QtCore.QTimer(self)
- self._timer.timeout.connect(self._queryFrame)
- self._timer.setInterval(30)
- self.pushButton.clicked.connect(self.slot1)
- 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()
- def _queryFrame(self):
- # 从摄像头读取一帧
- ret1, self.frame1 = self.camera1.read()
- if ret1:
- # 调整帧大小
- self.frame11 = cv2.resize(self.frame1, (640, 480))
- qimage = cv2.cvtColor(self.frame11, cv2.COLOR_BGR2RGB)
- qimage = QtGui.QImage(qimage.data, qimage.shape[1], qimage.shape[0],
- QtGui.QImage.Format_RGB888)
- pixmap = QtGui.QPixmap.fromImage(qimage)
- self.label.setPixmap(pixmap)
- # 进行 OCR 识别
- result = self.ocr.ocr(self.frame1, cls=True)
- if result is not None:
- a_list = [line[1][0] for line in result[0]]
- zz = '\n'.join(a_list)
- self.textEdit.setText(zz)
- else:
- self.textEdit.setText("未检测到文本")
- if __name__ == "__main__":
- app = QtWidgets.QApplication(sys.argv)
- window = PyQtMainEntry()
- window.show()
- sys.exit(app.exec_())
复制代码 3. 代码解释
- PaddleOCR 初始化:
- use_angle_cls=True:启用角度分类器,用于处理处罚旋转文本。
- use_gpu=True:使用 GPU 加速,提高识别速率。
- show_log=False:关闭日志输出,避免不须要的信息干扰。
- det_model_dir、rec_model_dir、cls_model_dir:指定模型文件路径。
- lang="en":设置识别语言为英文。
- 视频流捕获:
- 使用 cv2.VideoCapture(0) 捕获默认摄像头的视频流。
- 每次循环读取一帧,并进行 OCR 识别。
- OCR 识别:
- ocr.ocr(frame, cls=True):对当前帧进行 OCR 识别,返回识别效果。
- 遍历识别效果,提取文本框的四个角点,并绘制文本框。
- 提取识别的文本内容,并在文本框左上角位置表现。
- 表现效果:
- 使用 cv2.imshow 表现处理处罚后的视频帧。
- 按下 ‘q’ 键退出步调,并释放摄像头资源。
4. 运行步调
最后,运行步调并查看效果:
总结
通过上述步骤,我们乐成地实现了一个从摄像头捕获视频流并实时识别其中英文笔墨的步调,并将效果表现在 PyQt5 界面中。这个项目不仅可以用于学习和研究,还可以应用于现实场景,如实时文档扫描、车牌识别等。希望这篇文章能帮助你更好地明白和应用 OCR 技术。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |