把上面的代码封装到pyqt中
时间: 2024-02-19 09:02:04 浏览: 115
好的,下面是将上述代码封装到 PyQt 中的示例程序:
```python
import os
os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE"
from PyQt5 import QtWidgets, QtGui
from paddleocr import PaddleOCR, draw_ocr
class MyApp(QtWidgets.QWidget):
def __init__(self):
super().__init__()
# 创建 GUI 组件
self.img_label = QtWidgets.QLabel(self)
self.result_label = QtWidgets.QLabel(self)
self.btn_open = QtWidgets.QPushButton('打开图片', self)
self.btn_ocr = QtWidgets.QPushButton('开始识别', self)
self.btn_save = QtWidgets.QPushButton('保存结果', self)
# 设置组件属性
self.img_label.setFixedSize(640, 480)
self.img_label.setFrameStyle(QtWidgets.QFrame.Box | QtWidgets.QFrame.Plain)
self.result_label.setFixedSize(640, 480)
self.result_label.setFrameStyle(QtWidgets.QFrame.Box | QtWidgets.QFrame.Plain)
self.btn_ocr.setEnabled(False)
self.btn_save.setEnabled(False)
# 创建布局
vbox = QtWidgets.QVBoxLayout()
vbox.addWidget(self.img_label)
vbox.addWidget(self.btn_open)
vbox.addWidget(self.btn_ocr)
vbox.addWidget(self.btn_save)
vbox.addWidget(self.result_label)
self.setLayout(vbox)
# 绑定事件
self.btn_open.clicked.connect(self.load_image)
self.btn_ocr.clicked.connect(self.do_ocr)
self.btn_save.clicked.connect(self.save_result)
# 创建 OCR 对象
self.ocr = PaddleOCR(use_angle_cls=True, lang="ch")
def load_image(self):
# 打开图片并显示
filename, _ = QtWidgets.QFileDialog.getOpenFileName(self, '打开图片', '', 'Image Files (*.png *.jpg *.bmp)')
if filename:
pixmap = QtGui.QPixmap(filename)
self.img_label.setPixmap(pixmap)
self.btn_ocr.setEnabled(True)
# 保存图片路径
self.img_path = filename
def do_ocr(self):
# 对图片进行 OCR 识别
result = self.ocr.ocr(self.img_path, det=True, cls=True)
# 显示识别结果
image = QtGui.QImage(self.img_path)
boxes = [line[0] for line in result]
txts = [line[1][0] for line in result]
scores = [line[1][1] for line in result]
im_show = draw_ocr(image, boxes, txts, scores, font_path='simfang.ttf')
pixmap = QtGui.QPixmap.fromImage(im_show)
self.result_label.setPixmap(pixmap)
# 保存识别结果
self.result = result
self.btn_save.setEnabled(True)
def save_result(self):
# 保存识别结果为图片
filename, _ = QtWidgets.QFileDialog.getSaveFileName(self, '保存结果', '', 'Image Files (*.png *.jpg *.bmp)')
if filename:
image = QtGui.QImage(self.img_path)
boxes = [line[0] for line in self.result]
txts = [line[1][0] for line in self.result]
scores = [line[1][1] for line in self.result]
im_show = draw_ocr(image, boxes, txts, scores, font_path='simfang.ttf')
im_show.save(filename)
if __name__ == '__main__':
app = QtWidgets.QApplication([])
window = MyApp()
window.show()
app.exec_()
```
这段代码创建了一个 PyQt 窗口应用程序,其中包含一个用于显示图片的 QLabel、一个用于显示识别结果的 QLabel,以及三个 QPushButton(打开图片、开始识别、保存结果)。用户可以点击“打开图片”按钮选择要识别的图片,然后点击“开始识别”按钮进行 OCR 操作,最后点击“保存结果”按钮把识别结果保存为图片。
阅读全文