引言
在PyQT5中引用OpenMV2023版本支持SDK,实现二次开发使用。OpenMV算法层已经开放SDK调用支持,从图像处理、分析、测量到深度学习推理全部支持SDK调用方式实现第三方应用与程序集成。
图像分析SDK支持

YOLOv8推理SDK支持
OpenMV中YOLOv8推理支持包导入,从dlcore包中导入:
from dlcore.dl_infer_settings import DLInferSettings from dlcore.yolov8_vino_ort_infer import YOLOv8DetectorOpenCV库导入支持
import cv2 as cv然后完成下面的代码
settings = DLInferSettings()
settings.weight_file_path = self.weight_file_path.text()
settings.label_map_file_path = "D:/projects/classes.txt"
settings.target_deploy = 1
detector = YOLOv8Detector(settings)
image = cv.imread(image_file)
detector.infer_image(image)
cv.waitKey("result", image)
即可实现YOLOv8图像推理与结果显示。 关于OpenMVSDK支持与上述更详细的资料参考见《Open Machine Vision Toolkit Software2023.1开发者手册》PDF文档。
综合代码演示

灰度

YOLOv8推理

相关实现代码如下:
1from dlcore.yolov8_vino_ort_infer import YOLOv8Detector
2from dlcore.dl_infer_settings import DLInferSettings
3import cv2 as cv
4from PyQt5 import QtWidgets, QtCore, QtGui
5from vmcore.color_space_task import ColorSpaceTask
6import sys
7
8
9class RadioCheckBoxDemoPanel(QtWidgets.QWidget):
10 def __init__(self, parent=None):
11 super().__init__(parent)
12 # 文本标签
13 self.rbtn0 = QtWidgets.QRadioButton("原图")
14 self.rbtn1 = QtWidgets.QRadioButton("灰度")
15 self.rbtn3 = QtWidgets.QRadioButton("YOLOv8推理")
16 self.rbtn0.setChecked(True)
17
18 hbox_layout1 = QtWidgets.QHBoxLayout()
19 hbox_layout1.addWidget(self.rbtn0)
20 hbox_layout1.addWidget(self.rbtn1)
21 hbox_layout1.addWidget(self.rbtn3)
22
23 panel1 = QtWidgets.QGroupBox("SDK演示")
24 panel1.setLayout(hbox_layout1)
25
26 # 输入文本框
27 self.image_file_edit = QtWidgets.QLineEdit()
28 self.image_file_edit.setMinimumWidth(100)
29 self.image_file_edit.setEnabled(False)
30 fileBtn = QtWidgets.QPushButton("图像")
31 self.weight_file_path = QtWidgets.QLineEdit()
32 self.weight_file_path.setMinimumWidth(100)
33 self.weight_file_path.setEnabled(False)
34 modelBtn = QtWidgets.QPushButton("模型")
35
36 hbox_layout2 = QtWidgets.QHBoxLayout()
37 hbox_layout2.addWidget(fileBtn)
38 hbox_layout2.addWidget(self.image_file_edit)
39 hbox_layout2.addWidget(modelBtn)
40 hbox_layout2.addWidget(self.weight_file_path)
41
42 panel2 = QtWidgets.QGroupBox("参数文件")
43 panel2.setLayout(hbox_layout2)
44
45 # 输入文本框
46 self.label = QtWidgets.QLabel()
47 pixmap = QtGui.QPixmap("images/wp.jpg")
48 pix = pixmap.scaled(QtCore.QSize(620, 500), QtCore.Qt.KeepAspectRatio)
49 self.label.setPixmap(pix)
50 self.label.setAlignment(QtCore.Qt.AlignCenter)
51 self.label.setStyleSheet("background-color:black; color: green")
52
53 # 添加到布局管理器中
54 vbox_layout = QtWidgets.QVBoxLayout()
55 vbox_layout.addWidget(panel2)
56 vbox_layout.addWidget(panel1)
57 vbox_layout.addWidget(self.label)
58 vbox_layout.addStretch(1)
59
60 # 面板容器
61 self.setLayout(vbox_layout)
62
63 # setup listener
64 self.rbtn0.toggled.connect(self.on_update_original)
65 self.rbtn1.toggled.connect(self.on_update_gray)
66 self.rbtn3.toggled.connect(self.on_yolov8_infer)
67 modelBtn.clicked.connect(self.on_weight_select)
68 fileBtn.clicked.connect(self.on_update_image)
69
70 def on_update_original(self):
71 image_file = self.image_file_edit.text()
72 if len(image_file) == 0 or image_file is None:
73 QtWidgets.QMessageBox.warning(self, "警告", "图像文件未选择...")
74 return
75 pixmap = QtGui.QPixmap(image_file)
76 pix = pixmap.scaled(QtCore.QSize(620, 500), QtCore.Qt.KeepAspectRatio)
77 self.label.setPixmap(pix)
78
79 def on_update_gray(self):
80 image_file = self.image_file_edit.text()
81 if len(image_file) == 0 or image_file is None:
82 QtWidgets.QMessageBox.warning(self, "警告", "图像文件未选择...")
83 return
84 image = cv.imread(image_file)
85 cst = ColorSpaceTask()
86 cst.low_scalar = (0, 0, 0)
87 cst.high_scalar = (0, 0, 0)
88 # 0 - BGR, 1 - HSV, 2 - gray
89 cst.color_type = 2
90 output = cst.t_exec(image)
91 gray = output['result']
92 dst = cv.cvtColor(gray, cv.COLOR_GRAY2RGB)
93
94 height, width, channel = dst.shape
95 bytesPerLine = 3 * width
96 img = QtGui.QImage(dst.data, width, height, bytesPerLine, QtGui.QImage.Format_RGB888)
97 pixmap = QtGui.QPixmap(img)
98 pix = pixmap.scaled(QtCore.QSize(620, 500), QtCore.Qt.KeepAspectRatio)
99 self.label.setPixmap(pix)
100
101 def on_yolov8_infer(self):
102 image_file = self.image_file_edit.text()
103 if len(image_file) == 0 or image_file is None:
104 QtWidgets.QMessageBox.warning(self, "警告", "图像文件未选择...")
105 return
106
107 settings = DLInferSettings()
108 settings.weight_file_path = self.weight_file_path.text()
109 settings.label_map_file_path = "D:/projects/classes.txt"
110 settings.target_deploy = 1
111 detector = YOLOv8Detector(settings)
112 image = cv.imread(image_file)
113 detector.infer_image(image)
114
115 dst = cv.cvtColor(image, cv.COLOR_BGR2RGB)
116 height, width, channel = dst.shape
117 bytesPerLine = 3 * width
118 img = QtGui.QImage(dst.data, width, height, bytesPerLine, QtGui.QImage.Format_RGB888)
119 pixmap = QtGui.QPixmap(img)
120 pix = pixmap.scaled(QtCore.QSize(620, 500), QtCore.Qt.KeepAspectRatio)
121 self.label.setPixmap(pix)
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !