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

百度网站收录查询地址访问网站提示输入用户名密码

百度网站收录查询地址,访问网站提示输入用户名密码,平台推广网站排名,上海优化网站wx供重浩#xff1a;创享日记 对话框发送#xff1a;225头盔 获取完整源码源文件已标注的数据集#xff08;1463张#xff09;源码各文件说明配置跑通说明文档 若需要一对一远程操作在你电脑跑通#xff0c;有偿59yuan 效果展示 基于YOLOv8深度学习PyQT5的电动车头盔佩戴检…wx供重浩创享日记 对话框发送225头盔 获取完整源码源文件已标注的数据集1463张源码各文件说明配置跑通说明文档 若需要一对一远程操作在你电脑跑通有偿59yuan 效果展示 基于YOLOv8深度学习PyQT5的电动车头盔佩戴检测系统 各文件说明 随着电动车的普及交通安全问题日益凸显。头盔作为保护骑行者头部安全的重要装备其佩戴情况的监测对于减少交通事故伤害具有重要意义。本文提出了一种基于YOLOv8You Only Look Once version 8的电动车头盔佩戴检测系统旨在实时监测并提醒骑行者佩戴头盔。该系统利用深度学习技术通过训练YOLOv8模型来识别电动车骑行者是否佩戴头盔并在检测到未佩戴头盔的情况下发出警报。系统设计考虑了实时性、准确性和用户友好性为提升电动车骑行安全提供了一种有效的技术解决方案。 电动车作为一种便捷的交通工具在城市交通中扮演着越来越重要的角色。然而由于缺乏必要的安全措施电动车事故频发尤其是头部伤害往往导致严重后果。头盔的正确佩戴可以有效降低头部受伤的风险。因此开发一种能够实时监测头盔佩戴情况的系统对于提高骑行者的安全意识和减少交通事故具有重要作用。 YOLOv8是YOLO系列目标检测模型的最新版本它在前代模型的基础上进行了优化提高了检测速度和准确性。YOLOv8采用了多尺度特征图的融合、更精细的锚点框设计以及更有效的损失函数使得模型在处理复杂场景时表现出色。 系统设计 数据集准备 为了训练YOLOv8模型首先需要收集和标注一个包含大量电动车骑行者图像的数据集。数据集应包含各种天气条件、不同光照环境以及多种头盔类型。图像标注需要指出头盔的位置和类别以便模型学习区分佩戴头盔与否。 模型训练 使用准备好的数据集对YOLOv8模型进行训练。训练过程中需要调整学习率、批大小、训练周期等超参数以获得最佳的检测效果。同时可以采用数据增强技术如随机裁剪、旋转、颜色变换等以提高模型的泛化能力。 系统实现 系统的核心是YOLOv8模型它负责从输入的实时视频流中检测头盔。系统还包括一个用户界面用于显示检测结果和发出警报。当模型检测到未佩戴头盔的骑行者时系统会通过声音或视觉信号提醒用户。 实时检测 为了实现实时检测系统需要能够在低延迟的情况下处理视频流。这要求模型不仅要准确还要高效。在实际部署中可能需要在边缘设备上进行模型推理以减少对中心服务器的依赖。 结果与讨论 在测试集上YOLOv8模型展现出了较高的头盔检测准确率。在不同的场景和光照条件下模型均能稳定地识别出佩戴和未佩戴头盔的骑行者。然而模型在处理遮挡严重或头盔与骑行者头部颜色相近的情况下仍有改进空间。 结论 本文提出的基于YOLOv8的电动车头盔佩戴检测系统能够有效地提高电动车骑行者的安全意识。通过实时监测和提醒该系统有助于减少因未佩戴头盔导致的交通事故伤害。未来的工作将集中在进一步提高模型的鲁棒性以及探索更高效的模型部署方案。 软件系统部分源码 # -*- coding: utf-8 -*- import time from PyQt5.QtWidgets import QApplication , QMainWindow, QFileDialog, \QMessageBox,QWidget,QHeaderView,QTableWidgetItem, QAbstractItemView import sys import os from PIL import ImageFont from ultralytics import YOLO sys.path.append(UIProgram) from UIProgram.UiMain import Ui_MainWindow import sys from PyQt5.QtCore import QTimer, Qt, QThread, pyqtSignal,QCoreApplication import detect_tools as tools import cv2 import Config from UIProgram.QssLoader import QSSLoader from UIProgram.precess_bar import ProgressBar import numpy as np # import torchclass MainWindow(QMainWindow):def __init__(self, parentNone):super(QMainWindow, self).__init__(parent)self.ui Ui_MainWindow()self.ui.setupUi(self)self.initMain()self.signalconnect()# 加载css渲染效果style_file UIProgram/style.cssqssStyleSheet QSSLoader.read_qss_file(style_file)self.setStyleSheet(qssStyleSheet)def signalconnect(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)def initMain(self):self.show_width 770self.show_height 480self.org_path Noneself.is_camera_open Falseself.cap None# self.device 0 if torch.cuda.is_available() else cpu# 加载检测模型self.model YOLO(Config.model_path, taskdetect)self.model(np.zeros((48, 48, 3))) #预先加载推理模型self.fontC ImageFont.truetype(Font/platech.ttf, 25, 0)# 用于绘制不同颜色矩形框self.colors tools.Colors()# 更新视频图像self.timer_camera QTimer()# 更新检测信息表格# self.timer_info QTimer()# 保存视频self.timer_save_video QTimer()# 表格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)})def open_img(self):if self.cap:# 打开图片前关闭摄像头self.video_stop()self.is_camera_open Falseself.ui.CaplineEdit.setText(摄像头未开启)self.cap None# 弹出的窗口名称打开图片# 默认打开的目录./# 只能打开.jpg与.gif结尾的图片文件# file_path, _ QFileDialog.getOpenFileName(self.ui.centralwidget, 打开图片, ./, Image files (*.jpg *.gif))file_path, _ QFileDialog.getOpenFileName(None, 打开图片, ./, Image files (*.jpg *.jepg *.png))if not file_path:returnself.ui.comboBox.setDisabled(False)self.org_path file_pathself.org_img tools.img_cvread(self.org_path)# 目标检测t1 time.time()self.results self.model(self.org_path)[0]t2 time.time()take_time_str {:.3f} s.format(t2 - t1)self.ui.time_lb.setText(take_time_str)location_list self.results.boxes.xyxy.tolist()self.location_list [list(map(int, e)) for e in location_list]cls_list self.results.boxes.cls.tolist()self.cls_list [int(i) for i in cls_list]self.conf_list self.results.boxes.conf.tolist()self.conf_list [%.2f %% % (each*100) for each in self.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_img self.results.plot()self.draw_img now_img# 获取缩放后的图片尺寸self.img_width, self.img_height self.get_resize_size(now_img)resize_cvimg cv2.resize(now_img,(self.img_width, self.img_height))pix_img tools.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_nums len(self.cls_list)self.ui.label_nums.setText(str(target_nums))# 设置目标选择下拉框choose_list [全部]target_names [Config.names[id] _ str(index) for index,id in enumerate(self.cls_list)]# object_list sorted(set(self.cls_list))# for each in object_list:# choose_list.append(Config.CH_names[each])choose_list choose_list target_namesself.ui.comboBox.clear()self.ui.comboBox.addItems(choose_list)if target_nums 1: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)def detact_batch_imgs(self):if self.cap:# 打开图片前关闭摄像头self.video_stop()self.is_camera_open Falseself.ui.CaplineEdit.setText(摄像头未开启)self.cap Nonedirectory QFileDialog.getExistingDirectory(self,选取文件夹,./) # 起始路径if not directory:returnself.org_path directoryimg_suffix [jpg,png,jpeg,bmp]for file_name in os.listdir(directory):full_path os.path.join(directory,file_name)if os.path.isfile(full_path) and file_name.split(.)[-1].lower() in img_suffix:# self.ui.comboBox.setDisabled(False)img_path full_pathself.org_img tools.img_cvread(img_path)# 目标检测t1 time.time()self.results self.model(img_path)[0]t2 time.time()take_time_str {:.3f} s.format(t2 - t1)self.ui.time_lb.setText(take_time_str)location_list self.results.boxes.xyxy.tolist()self.location_list [list(map(int, e)) for e in location_list]cls_list self.results.boxes.cls.tolist()self.cls_list [int(i) for i in cls_list]self.conf_list self.results.boxes.conf.tolist()self.conf_list [%.2f %% % (each * 100) for each in self.conf_list]now_img self.results.plot()self.draw_img now_img# 获取缩放后的图片尺寸self.img_width, self.img_height self.get_resize_size(now_img)resize_cvimg cv2.resize(now_img, (self.img_width, self.img_height))pix_img tools.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_nums len(self.cls_list)self.ui.label_nums.setText(str(target_nums))# 设置目标选择下拉框choose_list [全部]target_names [Config.names[id] _ str(index) for index, id in enumerate(self.cls_list)]choose_list choose_list target_namesself.ui.comboBox.clear()self.ui.comboBox.addItems(choose_list)if target_nums 1: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() #刷新页面def draw_rect_and_tabel(self, results, img):now_img img.copy()location_list results.boxes.xyxy.tolist()self.location_list [list(map(int, e)) for e in location_list]cls_list results.boxes.cls.tolist()self.cls_list [int(i) for i in cls_list]self.conf_list results.boxes.conf.tolist()self.conf_list [%.2f %% % (each * 100) for each in self.conf_list]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)# 获取缩放后的图片尺寸self.img_width, self.img_height self.get_resize_size(now_img)resize_cvimg cv2.resize(now_img, (self.img_width, self.img_height))pix_img tools.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_nums len(self.cls_list)self.ui.label_nums.setText(str(target_nums))if target_nums 1: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)return now_imgdef combox_change(self):com_text self.ui.comboBox.currentText()if com_text 全部:cur_box self.location_listcur_img self.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:index int(com_text.split(_)[-1])cur_box [self.location_list[index]]cur_img self.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_cvimg cv2.resize(cur_img, (self.img_width, self.img_height))pix_img tools.cvimg_to_qpiximg(resize_cvimg)self.ui.label_show.clear()self.ui.label_show.setPixmap(pix_img)self.ui.label_show.setAlignment(Qt.AlignCenter)def get_video_path(self):file_path, _ QFileDialog.getOpenFileName(None, 打开视频, ./, Image files (*.avi *.mp4 *.jepg *.png))if not file_path:return Noneself.org_path file_pathself.ui.VideolineEdit.setText(file_path)return file_pathdef video_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)def tabel_info_show(self, locations, clses, confs, pathNone):path pathfor location, cls, conf in zip(locations, clses, confs):row_count self.ui.tableWidget.rowCount() # 返回当前行数(尾部)self.ui.tableWidget.insertRow(row_count) # 尾部插入一行item_id QTableWidgetItem(str(row_count1)) # 序号item_id.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter) # 设置文本居中item_path QTableWidgetItem(str(path)) # 路径# item_path.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)item_cls QTableWidgetItem(str(Config.CH_names[cls]))item_cls.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter) # 设置文本居中item_conf QTableWidgetItem(str(conf))item_conf.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter) # 设置文本居中item_location QTableWidgetItem(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()def video_stop(self):self.cap.release()self.timer_camera.stop()# self.timer_info.stop()def open_frame(self):ret, now_img self.cap.read()if ret:# 目标检测t1 time.time()results self.model(now_img)[0]t2 time.time()take_time_str {:.3f} s.format(t2 - t1)self.ui.time_lb.setText(take_time_str)location_list results.boxes.xyxy.tolist()self.location_list [list(map(int, e)) for e in location_list]cls_list results.boxes.cls.tolist()self.cls_list [int(i) for i in cls_list]self.conf_list results.boxes.conf.tolist()self.conf_list [%.2f %% % (each * 100) for each in self.conf_list]now_img results.plot()# 获取缩放后的图片尺寸self.img_width, self.img_height self.get_resize_size(now_img)resize_cvimg cv2.resize(now_img, (self.img_width, self.img_height))pix_img tools.cvimg_to_qpiximg(resize_cvimg)self.ui.label_show.setPixmap(pix_img)self.ui.label_show.setAlignment(Qt.AlignCenter)# 目标数目target_nums len(self.cls_list)self.ui.label_nums.setText(str(target_nums))# 设置目标选择下拉框choose_list [全部]target_names [Config.names[id] _ str(index) for index, id in enumerate(self.cls_list)]# object_list sorted(set(self.cls_list))# for each in object_list:# choose_list.append(Config.CH_names[each])choose_list choose_list target_namesself.ui.comboBox.clear()self.ui.comboBox.addItems(choose_list)if target_nums 1: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()def vedio_show(self):if self.is_camera_open:self.is_camera_open Falseself.ui.CaplineEdit.setText(摄像头未开启)video_path self.get_video_path()if not video_path:return Noneself.cap cv2.VideoCapture(video_path)self.video_start()self.ui.comboBox.setDisabled(True)def camera_show(self):self.is_camera_open not self.is_camera_openif self.is_camera_open:self.ui.CaplineEdit.setText(摄像头开启)self.cap cv2.VideoCapture(0)self.video_start()self.ui.comboBox.setDisabled(True)else:self.ui.CaplineEdit.setText(摄像头未开启)self.ui.label_show.setText()if self.cap:self.cap.release()cv2.destroyAllWindows()self.ui.label_show.clear()def get_resize_size(self, img):_img img.copy()img_height, img_width , depth _img.shaperatio img_width / img_heightif ratio self.show_width / self.show_height:self.img_width self.show_widthself.img_height int(self.img_width / ratio)else:self.img_height self.show_heightself.img_width int(self.img_height * ratio)return self.img_width, self.img_heightdef save_detect_video(self):if self.cap is None and not self.org_path:QMessageBox.about(self, 提示, 当前没有可保存信息请先打开图片或视频)returnif self.is_camera_open:QMessageBox.about(self, 提示, 摄像头视频无法保存!)returnif self.cap:res QMessageBox.information(self, 提示, 保存视频检测结果可能需要较长时间请确认是否继续保存,QMessageBox.Yes | QMessageBox.No , QMessageBox.Yes)if res QMessageBox.Yes:self.video_stop()com_text self.ui.comboBox.currentText()self.btn2Thread_object btn2Thread(self.org_path, self.model, com_text)self.btn2Thread_object.start()self.btn2Thread_object.update_ui_signal.connect(self.update_process_bar)else:returnelse:if os.path.isfile(self.org_path):fileName os.path.basename(self.org_path)name , end_name fileName.rsplit(.,1)save_name name _detect_result. end_namesave_img_path os.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]for file_name in os.listdir(self.org_path):full_path os.path.join(self.org_path, file_name)if os.path.isfile(full_path) and file_name.split(.)[-1].lower() in img_suffix:name, end_name file_name.rsplit(.,1)save_name name _detect_result. end_namesave_img_path os.path.join(Config.save_path, save_name)results self.model(full_path)[0]now_img results.plot()# 保存图片cv2.imwrite(save_img_path, now_img)QMessageBox.about(self, 提示, 图片保存成功!\n文件路径:{}.format(Config.save_path))def update_process_bar(self,cur_num, total):if cur_num 1:self.progress_bar ProgressBar(self)self.progress_bar.show()if cur_num total:self.progress_bar.close()QMessageBox.about(self, 提示, 视频保存成功!\n文件在{}目录下.format(Config.save_path))returnif self.progress_bar.isVisible() is False:# 点击取消保存时终止进程self.btn2Thread_object.stop()returnvalue int(cur_num / total *100)self.progress_bar.setValue(cur_num, total, value)QApplication.processEvents()class btn2Thread(QThread):进行检测后的视频保存# 声明一个信号update_ui_signal pyqtSignal(int,int)def __init__(self, path, model, com_text):super(btn2Thread, self).__init__()self.org_path pathself.model modelself.com_text com_text# 用于绘制不同颜色矩形框self.colors tools.Colors()self.is_running True # 标志位表示线程是否正在运行def run(self):# VideoCapture方法是cv2库提供的读取视频方法cap cv2.VideoCapture(self.org_path)# 设置需要保存视频的格式“xvid”# 该参数是MPEG-4编码类型文件名后缀为.avifourcc cv2.VideoWriter_fourcc(*XVID)# 设置视频帧频fps cap.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输出fileName os.path.basename(self.org_path)name, end_name fileName.split(.)save_name name _detect_result.avisave_video_path os.path.join(Config.save_path, save_name)out cv2.VideoWriter(save_video_path, fourcc, fps, size)prop cv2.CAP_PROP_FRAME_COUNTtotal int(cap.get(prop))print([INFO] 视频总帧数{}.format(total))cur_num 0# 确定视频打开并循环读取while (cap.isOpened() and self.is_running):cur_num 1print(当前第{}帧总帧数{}.format(cur_num, total))# 逐帧读取ret返回布尔值# 参数ret为True 或者False,代表有没有读取到图片# frame表示截取到一帧的图片ret, frame cap.read()if ret True:# 检测results self.model(frame)[0]frame results.plot()out.write(frame)self.update_ui_signal.emit(cur_num, total)else:break# 释放资源cap.release()out.release()def stop(self):self.is_running Falseif __name__ __main__:app QApplication(sys.argv)win MainWindow()win.show()sys.exit(app.exec_())
http://www.dnsts.com.cn/news/242050.html

相关文章:

  • 做网站的参考书创意手工
  • 网站建设运营维护方案个人网页制作模板图片代码
  • 咖啡网站建设的需求分析网站建设的两个方面
  • 个人网站建设的步骤wordpress $post->id
  • 合肥网站建设晨飞哪里设计公司vi
  • 卑鄙的网站开发公司域名cn和com有什么区别
  • 做的网站名4435建站
  • 国家对于学校网站建设制作公司官网的步骤
  • 网站前台显示数据库指定分类怎么做phpwordpress死链提交
  • 网站建设收费价格德州网页制作
  • 网站怎么加统计代码微信网站开发多少钱
  • 建立一个网店网站大气金融投资企业网站模板
  • 深圳网站建设制作营销优惠券的网站怎么做的
  • 网站维护模板网站建设与运营的预算方案模板
  • 软件公司网站建设软件设计图片
  • 建设智能家居网站SWOT分析敦化网站开发
  • wordpress站怎么优化亚马逊deal网站怎么做
  • 个人网站域名建设一个手机网站需要多少钱
  • 中英文双语企业网站北京网页设计公司兴田德润实惠
  • 买空间哪个网站好免费网页制作工具下载
  • 广源建设集团网站合肥做网站的公司有哪些
  • 江门网站推广技巧广州网站优化网站建设
  • 数据交易网站开发wordpress+社交链接
  • 上海快速建站网站分页设计作用
  • 在线做简历的网站广东企业网站建设公司
  • 宣城网站建设电话代理网页免费
  • 无锡做网站公司哪家好电话怎么把网页做成app
  • jsp做网站视频教程wordpress目录魔板
  • 顺德网站建设服务平台企业网站推广哪家公司好
  • 上海网站建设网站制潘虎设计公司