网站建设一流公司,wordpress 笑话模板,又拍云 wordpress使用,大蒜价格国际贸易网博主介绍#xff1a;✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久#xff0c;选择我们就是选择放心、选择安心毕业✌ #x1f345;想要获取完整文章或者源码#xff0c;或者代做#xff0c;拉到文章底部即可与…博主介绍✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久选择我们就是选择放心、选择安心毕业✌ 想要获取完整文章或者源码或者代做拉到文章底部即可与我联系了。点击查看作者主页了解更多项目感兴趣的可以先收藏起来点赞、关注不迷路大家在毕设选题项目以及论文编写等相关问题都可以给我留言咨询希望帮助同学们顺利毕业 。1、毕业设计2025年计算机专业毕业设计选题汇总建议收藏✅2、最全计算机专业毕业设计选题大全建议收藏✅1、项目介绍技术栈Python语言、YOLOv8模型、pyqt5界面、10种不同类型舰船、openCV、torch软件主要功能可进行10种不同类型舰船分类检测分别为[‘航空母舰’, ‘散货船’, ‘汽车运输船’, ‘集装箱船’, ‘游轮’, ‘驱逐舰’, ‘休闲船’, ‘帆船’, ‘潜艇’, ‘拖船’]支持图片、视频及摄像头进行检测同时支持图片的批量检测界面可实时显示目标位置、目标总数、置信度、用时等信息;支持图片或者视频的检测结果保存2、项目界面1界面设计2游轮3汽车运输船4游轮5航空母舰6集装箱船7帆船8游轮3、项目说明技术栈Python语言、YOLOv8模型、pyqt5界面、10种不同类型舰船、openCV、torch软件主要功能可进行10种不同类型舰船分类检测分别为[‘航空母舰’, ‘散货船’, ‘汽车运输船’, ‘集装箱船’, ‘游轮’, ‘驱逐舰’, ‘休闲船’, ‘帆船’, ‘潜艇’, ‘拖船’]支持图片、视频及摄像头进行检测同时支持图片的批量检测界面可实时显示目标位置、目标总数、置信度、用时等信息;支持图片或者视频的检测结果保存4、核心代码# -*- coding: utf-8 -*-importtimefromPyQt5.QtWidgetsimportQApplication,QMainWindow,QFileDialog,\ QMessageBox,QWidget,QHeaderView,QTableWidgetItem,QAbstractItemViewimportsysimportosfromPILimportImageFontfromultralyticsimportYOLO sys.path.append(UIProgram)fromUIProgram.UiMainimportUi_MainWindowimportsysfromPyQt5.QtCoreimportQTimer,Qt,QThread,pyqtSignal,QCoreApplicationimportdetect_toolsastoolsimportcv2importConfigfromUIProgram.QssLoaderimportQSSLoaderfromUIProgram.precess_barimportProgressBarimportnumpyasnpimporttorchclassMainWindow(QMainWindow):def__init__(self,parentNone):super(QMainWindow,self).__init__(parent)self.uiUi_MainWindow()self.ui.setupUi(self)self.initMain()self.signalconnect()# 加载css渲染效果style_fileUIProgram/style.cssqssStyleSheetQSSLoader.read_qss_file(style_file)self.setStyleSheet(qssStyleSheet)self.conf0.25self.iou0.7defsignalconnect(self):self.ui.PicBtn.clicked.connect(self.open_img)self.ui.comboBox.activated.connect(self.combox_change)self.ui.VideoBtn.clicked.connect(self.vedio_show)self.ui.CapBtn.clicked.connect(self.camera_show)self.ui.SaveBtn.clicked.connect(self.save_detect_video)self.ui.ExitBtn.clicked.connect(QCoreApplication.quit)self.ui.FilesBtn.clicked.connect(self.detact_batch_imgs)definitMain(self):self.show_width770self.show_height480self.org_pathNoneself.is_camera_openFalseself.capNoneself.device0iftorch.cuda.is_available()elsecpu# 加载检测模型self.modelYOLO(Config.model_path,taskdetect)self.model(np.zeros((48,48,3)),deviceself.device)#预先加载推理模型self.fontCImageFont.truetype(Font/platech.ttf,25,0)# 用于绘制不同颜色矩形框self.colorstools.Colors()# 更新视频图像self.timer_cameraQTimer()# 更新检测信息表格# self.timer_info QTimer()# 保存视频self.timer_save_videoQTimer()# 表格self.ui.tableWidget.verticalHeader().setSectionResizeMode(QHeaderView.Fixed)self.ui.tableWidget.verticalHeader().setDefaultSectionSize(40)self.ui.tableWidget.setColumnWidth(0,80)# 设置列宽self.ui.tableWidget.setColumnWidth(1,200)self.ui.tableWidget.setColumnWidth(2,150)self.ui.tableWidget.setColumnWidth(3,90)self.ui.tableWidget.setColumnWidth(4,230)# self.ui.tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) # 表格铺满# self.ui.tableWidget.horizontalHeader().setSectionResizeMode(0, QHeaderView.Interactive)# self.ui.tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers) # 设置表格不可编辑self.ui.tableWidget.setSelectionBehavior(QAbstractItemView.SelectRows)# 设置表格整行选中self.ui.tableWidget.verticalHeader().setVisible(False)# 隐藏列标题self.ui.tableWidget.setAlternatingRowColors(True)# 表格背景交替# 设置主页背景图片border-image: url(:/icons/ui_imgs/icons/camera.png)# self.setStyleSheet(#MainWindow{background-image:url(:/bgs/ui_imgs/bg3.jpg)})defopen_img(self):ifself.cap:# 打开图片前关闭摄像头self.video_stop()self.is_camera_openFalseself.ui.CaplineEdit.setText(摄像头未开启)self.capNone# 弹出的窗口名称打开图片# 默认打开的目录./# 只能打开.jpg与.gif结尾的图片文件# file_path, _ QFileDialog.getOpenFileName(self.ui.centralwidget, 打开图片, ./, Image files (*.jpg *.gif))file_path,_QFileDialog.getOpenFileName(None,打开图片,./,Image files (*.jpg *.jepg *.png))ifnotfile_path:returnself.ui.comboBox.setDisabled(False)self.org_pathfile_path self.org_imgtools.img_cvread(self.org_path)# 目标检测t1time.time()self.resultsself.model(self.org_path,confself.conf,iouself.iou)[0]t2time.time()take_time_str{:.3f} s.format(t2-t1)self.ui.time_lb.setText(take_time_str)location_listself.results.boxes.xyxy.tolist()self.location_list[list(map(int,e))foreinlocation_list]cls_listself.results.boxes.cls.tolist()self.cls_list[int(i)foriincls_list]self.conf_listself.results.boxes.conf.tolist()self.conf_list[%.2f %%%(each*100)foreachinself.conf_list]# now_img self.cv_img.copy()# for loacation, type_id, conf in zip(self.location_list, self.cls_list, self.conf_list):# type_id int(type_id)# color self.colors(int(type_id), True)# # cv2.rectangle(now_img, (int(x1), int(y1)), (int(x2), int(y2)), colors(int(type_id), True), 3)# now_img tools.drawRectBox(now_img, loacation, Config.CH_names[type_id], self.fontC, color)now_imgself.results.plot()self.draw_imgnow_img# 获取缩放后的图片尺寸self.img_width,self.img_heightself.get_resize_size(now_img)resize_cvimgcv2.resize(now_img,(self.img_width,self.img_height))pix_imgtools.cvimg_to_qpiximg(resize_cvimg)self.ui.label_show.setPixmap(pix_img)self.ui.label_show.setAlignment(Qt.AlignCenter)# 设置路径显示self.ui.PiclineEdit.setText(self.org_path)# 目标数目target_numslen(self.cls_list)self.ui.label_nums.setText(str(target_nums))# 设置目标选择下拉框choose_list[全部]target_names[Config.names[id]_str(index)forindex,idinenumerate(self.cls_list)]# object_list sorted(set(self.cls_list))# for each in object_list:# choose_list.append(Config.CH_names[each])choose_listchoose_listtarget_names self.ui.comboBox.clear()self.ui.comboBox.addItems(choose_list)iftarget_nums1:self.ui.type_lb.setText(Config.CH_names[self.cls_list[0]])self.ui.label_conf.setText(str(self.conf_list[0]))# 默认显示第一个目标框坐标# 设置坐标位置值self.ui.label_xmin.setText(str(self.location_list[0][0]))self.ui.label_ymin.setText(str(self.location_list[0][1]))self.ui.label_xmax.setText(str(self.location_list[0][2]))self.ui.label_ymax.setText(str(self.location_list[0][3]))else:self.ui.type_lb.setText()self.ui.label_conf.setText()self.ui.label_xmin.setText()self.ui.label_ymin.setText()self.ui.label_xmax.setText()self.ui.label_ymax.setText()# # 删除表格所有行self.ui.tableWidget.setRowCount(0)self.ui.tableWidget.clearContents()self.tabel_info_show(self.location_list,self.cls_list,self.conf_list,pathself.org_path)defdetact_batch_imgs(self):ifself.cap:# 打开图片前关闭摄像头self.video_stop()self.is_camera_openFalseself.ui.CaplineEdit.setText(摄像头未开启)self.capNonedirectoryQFileDialog.getExistingDirectory(self,选取文件夹,./)# 起始路径ifnotdirectory:returnself.org_pathdirectory img_suffix[jpg,png,jpeg,bmp]forfile_nameinos.listdir(directory):full_pathos.path.join(directory,file_name)ifos.path.isfile(full_path)andfile_name.split(.)[-1].lower()inimg_suffix:# self.ui.comboBox.setDisabled(False)img_pathfull_path self.org_imgtools.img_cvread(img_path)# 目标检测t1time.time()self.resultsself.model(img_path,confself.conf,iouself.iou)[0]t2time.time()take_time_str{:.3f} s.format(t2-t1)self.ui.time_lb.setText(take_time_str)location_listself.results.boxes.xyxy.tolist()self.location_list[list(map(int,e))foreinlocation_list]cls_listself.results.boxes.cls.tolist()self.cls_list[int(i)foriincls_list]self.conf_listself.results.boxes.conf.tolist()self.conf_list[%.2f %%%(each*100)foreachinself.conf_list]now_imgself.results.plot()self.draw_imgnow_img# 获取缩放后的图片尺寸self.img_width,self.img_heightself.get_resize_size(now_img)resize_cvimgcv2.resize(now_img,(self.img_width,self.img_height))pix_imgtools.cvimg_to_qpiximg(resize_cvimg)self.ui.label_show.setPixmap(pix_img)self.ui.label_show.setAlignment(Qt.AlignCenter)# 设置路径显示self.ui.PiclineEdit.setText(img_path)# 目标数目target_numslen(self.cls_list)self.ui.label_nums.setText(str(target_nums))# 设置目标选择下拉框choose_list[全部]target_names[Config.names[id]_str(index)forindex,idinenumerate(self.cls_list)]choose_listchoose_listtarget_names self.ui.comboBox.clear()self.ui.comboBox.addItems(choose_list)iftarget_nums1:self.ui.type_lb.setText(Config.CH_names[self.cls_list[0]])self.ui.label_conf.setText(str(self.conf_list[0]))# 默认显示第一个目标框坐标# 设置坐标位置值self.ui.label_xmin.setText(str(self.location_list[0][0]))self.ui.label_ymin.setText(str(self.location_list[0][1]))self.ui.label_xmax.setText(str(self.location_list[0][2]))self.ui.label_ymax.setText(str(self.location_list[0][3]))else:self.ui.type_lb.setText()self.ui.label_conf.setText()self.ui.label_xmin.setText()self.ui.label_ymin.setText()self.ui.label_xmax.setText()self.ui.label_ymax.setText()# # 删除表格所有行# self.ui.tableWidget.setRowCount(0)# self.ui.tableWidget.clearContents()self.tabel_info_show(self.location_list,self.cls_list,self.conf_list,pathimg_path)self.ui.tableWidget.scrollToBottom()QApplication.processEvents()#刷新页面defdraw_rect_and_tabel(self,results,img):now_imgimg.copy()location_listresults.boxes.xyxy.tolist()self.location_list[list(map(int,e))foreinlocation_list]cls_listresults.boxes.cls.tolist()self.cls_list[int(i)foriincls_list]self.conf_listresults.boxes.conf.tolist()self.conf_list[%.2f %%%(each*100)foreachinself.conf_list]forloacation,type_id,confinzip(self.location_list,self.cls_list,self.conf_list):type_idint(type_id)colorself.colors(int(type_id),True)# cv2.rectangle(now_img, (int(x1), int(y1)), (int(x2), int(y2)), colors(int(type_id), True), 3)now_imgtools.drawRectBox(now_img,loacation,Config.CH_names[type_id],self.fontC,color)# 获取缩放后的图片尺寸self.img_width,self.img_heightself.get_resize_size(now_img)resize_cvimgcv2.resize(now_img,(self.img_width,self.img_height))pix_imgtools.cvimg_to_qpiximg(resize_cvimg)self.ui.label_show.setPixmap(pix_img)self.ui.label_show.setAlignment(Qt.AlignCenter)# 设置路径显示self.ui.PiclineEdit.setText(self.org_path)# 目标数目target_numslen(self.cls_list)self.ui.label_nums.setText(str(target_nums))iftarget_nums1:self.ui.type_lb.setText(Config.CH_names[self.cls_list[0]])self.ui.label_conf.setText(str(self.conf_list[0]))self.ui.label_xmin.setText(str(self.location_list[0][0]))self.ui.label_ymin.setText(str(self.location_list[0][1]))self.ui.label_xmax.setText(str(self.location_list[0][2]))self.ui.label_ymax.setText(str(self.location_list[0][3]))else:self.ui.type_lb.setText()self.ui.label_conf.setText()self.ui.label_xmin.setText()self.ui.label_ymin.setText()self.ui.label_xmax.setText()self.ui.label_ymax.setText()# 删除表格所有行self.ui.tableWidget.setRowCount(0)self.ui.tableWidget.clearContents()self.tabel_info_show(self.location_list,self.cls_list,self.conf_list,pathself.org_path)returnnow_imgdefcombox_change(self):com_textself.ui.comboBox.currentText()ifcom_text全部:cur_boxself.location_list cur_imgself.results.plot()self.ui.type_lb.setText(Config.CH_names[self.cls_list[0]])self.ui.label_conf.setText(str(self.conf_list[0]))else:indexint(com_text.split(_)[-1])cur_box[self.location_list[index]]cur_imgself.results[index].plot()self.ui.type_lb.setText(Config.CH_names[self.cls_list[index]])self.ui.label_conf.setText(str(self.conf_list[index]))# 设置坐标位置值self.ui.label_xmin.setText(str(cur_box[0][0]))self.ui.label_ymin.setText(str(cur_box[0][1]))self.ui.label_xmax.setText(str(cur_box[0][2]))self.ui.label_ymax.setText(str(cur_box[0][3]))resize_cvimgcv2.resize(cur_img,(self.img_width,self.img_height))pix_imgtools.cvimg_to_qpiximg(resize_cvimg)self.ui.label_show.clear()self.ui.label_show.setPixmap(pix_img)self.ui.label_show.setAlignment(Qt.AlignCenter)defget_video_path(self):file_path,_QFileDialog.getOpenFileName(None,打开视频,./,Image files (*.avi *.mp4 *.wmv *.mkv))ifnotfile_path:returnNoneself.org_pathfile_path self.ui.VideolineEdit.setText(file_path)returnfile_pathdefvideo_start(self):# 删除表格所有行self.ui.tableWidget.setRowCount(0)self.ui.tableWidget.clearContents()# 清空下拉框self.ui.comboBox.clear()# 定时器开启每隔一段时间读取一帧self.timer_camera.start(1)self.timer_camera.timeout.connect(self.open_frame)deftabel_info_show(self,locations,clses,confs,pathNone):pathpathforlocation,cls,confinzip(locations,clses,confs):row_countself.ui.tableWidget.rowCount()# 返回当前行数(尾部)self.ui.tableWidget.insertRow(row_count)# 尾部插入一行item_idQTableWidgetItem(str(row_count1))# 序号item_id.setTextAlignment(Qt.AlignHCenter|Qt.AlignVCenter)# 设置文本居中item_pathQTableWidgetItem(str(path))# 路径# item_path.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)item_clsQTableWidgetItem(str(Config.CH_names[cls]))item_cls.setTextAlignment(Qt.AlignHCenter|Qt.AlignVCenter)# 设置文本居中item_confQTableWidgetItem(str(conf))item_conf.setTextAlignment(Qt.AlignHCenter|Qt.AlignVCenter)# 设置文本居中item_locationQTableWidgetItem(str(location))# 目标框位置# item_location.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter) # 设置文本居中self.ui.tableWidget.setItem(row_count,0,item_id)self.ui.tableWidget.setItem(row_count,1,item_path)self.ui.tableWidget.setItem(row_count,2,item_cls)self.ui.tableWidget.setItem(row_count,3,item_conf)self.ui.tableWidget.setItem(row_count,4,item_location)self.ui.tableWidget.scrollToBottom()defvideo_stop(self):self.cap.release()self.timer_camera.stop()# self.timer_info.stop()defopen_frame(self):ret,now_imgself.cap.read()ifret:# 目标检测t1time.time()resultsself.model(now_img,confself.conf,iouself.iou)[0]t2time.time()take_time_str{:.3f} s.format(t2-t1)self.ui.time_lb.setText(take_time_str)location_listresults.boxes.xyxy.tolist()self.location_list[list(map(int,e))foreinlocation_list]cls_listresults.boxes.cls.tolist()self.cls_list[int(i)foriincls_list]self.conf_listresults.boxes.conf.tolist()self.conf_list[%.2f %%%(each*100)foreachinself.conf_list]now_imgresults.plot()# 获取缩放后的图片尺寸self.img_width,self.img_heightself.get_resize_size(now_img)resize_cvimgcv2.resize(now_img,(self.img_width,self.img_height))pix_imgtools.cvimg_to_qpiximg(resize_cvimg)self.ui.label_show.setPixmap(pix_img)self.ui.label_show.setAlignment(Qt.AlignCenter)# 目标数目target_numslen(self.cls_list)self.ui.label_nums.setText(str(target_nums))# 设置目标选择下拉框choose_list[全部]target_names[Config.names[id]_str(index)forindex,idinenumerate(self.cls_list)]# object_list sorted(set(self.cls_list))# for each in object_list:# choose_list.append(Config.CH_names[each])choose_listchoose_listtarget_names self.ui.comboBox.clear()self.ui.comboBox.addItems(choose_list)iftarget_nums1:self.ui.type_lb.setText(Config.CH_names[self.cls_list[0]])self.ui.label_conf.setText(str(self.conf_list[0]))# 默认显示第一个目标框坐标# 设置坐标位置值self.ui.label_xmin.setText(str(self.location_list[0][0]))self.ui.label_ymin.setText(str(self.location_list[0][1]))self.ui.label_xmax.setText(str(self.location_list[0][2]))self.ui.label_ymax.setText(str(self.location_list[0][3]))else:self.ui.type_lb.setText()self.ui.label_conf.setText()self.ui.label_xmin.setText()self.ui.label_ymin.setText()self.ui.label_xmax.setText()self.ui.label_ymax.setText()# 删除表格所有行# self.ui.tableWidget.setRowCount(0)# self.ui.tableWidget.clearContents()self.tabel_info_show(self.location_list,self.cls_list,self.conf_list,pathself.org_path)else:self.cap.release()self.timer_camera.stop()defvedio_show(self):ifself.is_camera_open:self.is_camera_openFalseself.ui.CaplineEdit.setText(摄像头未开启)video_pathself.get_video_path()ifnotvideo_path:returnNoneself.capcv2.VideoCapture(video_path)self.video_start()self.ui.comboBox.setDisabled(True)defcamera_show(self):self.is_camera_opennotself.is_camera_openifself.is_camera_open:self.ui.CaplineEdit.setText(摄像头开启)self.capcv2.VideoCapture(0)self.video_start()self.ui.comboBox.setDisabled(True)else:self.ui.CaplineEdit.setText(摄像头未开启)self.ui.label_show.setText()ifself.cap:self.cap.release()cv2.destroyAllWindows()self.ui.label_show.clear()defget_resize_size(self,img):_imgimg.copy()img_height,img_width,depth_img.shape ratioimg_width/img_heightifratioself.show_width/self.show_height:self.img_widthself.show_width self.img_heightint(self.img_width/ratio)else:self.img_heightself.show_height self.img_widthint(self.img_height*ratio)returnself.img_width,self.img_heightdefsave_detect_video(self):ifself.capisNoneandnotself.org_path:QMessageBox.about(self,提示,当前没有可保存信息请先打开图片或视频)returnifself.is_camera_open:QMessageBox.about(self,提示,摄像头视频无法保存!)returnifself.cap:resQMessageBox.information(self,提示,保存视频检测结果可能需要较长时间请确认是否继续保存,QMessageBox.Yes|QMessageBox.No,QMessageBox.Yes)ifresQMessageBox.Yes:self.video_stop()com_textself.ui.comboBox.currentText()self.btn2Thread_objectbtn2Thread(self.org_path,self.model,com_text,self.conf,self.iou)self.btn2Thread_object.start()self.btn2Thread_object.update_ui_signal.connect(self.update_process_bar)else:returnelse:ifos.path.isfile(self.org_path):fileNameos.path.basename(self.org_path)name,end_namefileName.rsplit(.,1)save_namename_detect_result.end_name save_img_pathos.path.join(Config.save_path,save_name)# 保存图片cv2.imwrite(save_img_path,self.draw_img)QMessageBox.about(self,提示,图片保存成功!\n文件路径:{}.format(save_img_path))else:img_suffix[jpg,png,jpeg,bmp]forfile_nameinos.listdir(self.org_path):full_pathos.path.join(self.org_path,file_name)ifos.path.isfile(full_path)andfile_name.split(.)[-1].lower()inimg_suffix:name,end_namefile_name.rsplit(.,1)save_namename_detect_result.end_name save_img_pathos.path.join(Config.save_path,save_name)resultsself.model(full_path,confself.conf,iouself.iou)[0]now_imgresults.plot()# 保存图片cv2.imwrite(save_img_path,now_img)QMessageBox.about(self,提示,图片保存成功!\n文件路径:{}.format(Config.save_path))defupdate_process_bar(self,cur_num,total):ifcur_num1:self.progress_barProgressBar(self)self.progress_bar.show()ifcur_numtotal:self.progress_bar.close()QMessageBox.about(self,提示,视频保存成功!\n文件在{}目录下.format(Config.save_path))returnifself.progress_bar.isVisible()isFalse:# 点击取消保存时终止进程self.btn2Thread_object.stop()returnvalueint(cur_num/total*100)self.progress_bar.setValue(cur_num,total,value)QApplication.processEvents()classbtn2Thread(QThread): 进行检测后的视频保存 # 声明一个信号update_ui_signalpyqtSignal(int,int)def__init__(self,path,model,com_text,conf,iou):super(btn2Thread,self).__init__()self.org_pathpath self.modelmodel self.com_textcom_text self.confconf self.iouiou# 用于绘制不同颜色矩形框self.colorstools.Colors()self.is_runningTrue# 标志位表示线程是否正在运行defrun(self):# VideoCapture方法是cv2库提供的读取视频方法capcv2.VideoCapture(self.org_path)# 设置需要保存视频的格式“xvid”# 该参数是MPEG-4编码类型文件名后缀为.avifourcccv2.VideoWriter_fourcc(*XVID)# 设置视频帧频fpscap.get(cv2.CAP_PROP_FPS)# 设置视频大小size(int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)),int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))# VideoWriter方法是cv2库提供的保存视频方法# 按照设置的格式来out输出fileNameos.path.basename(self.org_path)name,end_namefileName.split(.)save_namename_detect_result.avisave_video_pathos.path.join(Config.save_path,save_name)outcv2.VideoWriter(save_video_path,fourcc,fps,size)propcv2.CAP_PROP_FRAME_COUNT totalint(cap.get(prop))print([INFO] 视频总帧数{}.format(total))cur_num0# 确定视频打开并循环读取while(cap.isOpened()andself.is_running):cur_num1print(当前第{}帧总帧数{}.format(cur_num,total))# 逐帧读取ret返回布尔值# 参数ret为True 或者False,代表有没有读取到图片# frame表示截取到一帧的图片ret,framecap.read()ifretTrue:# 检测resultsself.model(frame,confself.conf,iouself.iou)[0]frameresults.plot()out.write(frame)self.update_ui_signal.emit(cur_num,total)else:break# 释放资源cap.release()out.release()defstop(self):self.is_runningFalseif__name____main__:appQApplication(sys.argv)winMainWindow()win.show()sys.exit(app.exec_())5、项目获取绿色聊天软件yuanmazhiwu 或 biyesheji0005由于篇幅限制获取完整文章或源码、代做项目的查看我的【用户名】、【专栏名称】、【顶部选题链接】就可以找到我啦感兴趣的可以先收藏起来点赞、关注不迷路下方查看获取联系方式