97色伦色在线综合视频,无玛专区,18videosex性欧美黑色,日韩黄色电影免费在线观看,国产精品伦理一区二区三区,在线视频欧美日韩,亚洲欧美在线中文字幕不卡

北京企業(yè)網(wǎng)站備案需要多久邯鄲網(wǎng)站推廣怎么做

鶴壁市浩天電氣有限公司 2026/01/24 12:26:13
北京企業(yè)網(wǎng)站備案需要多久,邯鄲網(wǎng)站推廣怎么做,網(wǎng)站建設(shè)進(jìn)度總結(jié),seo實(shí)戰(zhàn)視頻一、項(xiàng)目介紹 項(xiàng)目背景: 隨著智能手機(jī)的普及#xff0c;手機(jī)檢測(cè)在多個(gè)場(chǎng)景中變得尤為重要#xff0c;例如考場(chǎng)監(jiān)控、會(huì)議室管理、公共場(chǎng)所的安全監(jiān)控等。傳統(tǒng)的手機(jī)檢測(cè)方法通常依賴于人工檢查或簡(jiǎn)單的傳感器檢測(cè)#xff0c;效率較低且容易出錯(cuò)?;谏疃葘W(xué)習(xí)的目標(biāo)檢測(cè)技…一、項(xiàng)目介紹項(xiàng)目背景:隨著智能手機(jī)的普及手機(jī)檢測(cè)在多個(gè)場(chǎng)景中變得尤為重要例如考場(chǎng)監(jiān)控、會(huì)議室管理、公共場(chǎng)所的安全監(jiān)控等。傳統(tǒng)的手機(jī)檢測(cè)方法通常依賴于人工檢查或簡(jiǎn)單的傳感器檢測(cè)效率較低且容易出錯(cuò)。基于深度學(xué)習(xí)的目標(biāo)檢測(cè)技術(shù)能夠自動(dòng)、高效地識(shí)別手機(jī)并在實(shí)時(shí)場(chǎng)景中提供準(zhǔn)確的檢測(cè)結(jié)果。項(xiàng)目目標(biāo):本項(xiàng)目旨在利用 YOLOv10 目標(biāo)檢測(cè)算法構(gòu)建一個(gè)高效、準(zhǔn)確的手機(jī)檢測(cè)系統(tǒng)。系統(tǒng)能夠?qū)崟r(shí)檢測(cè)圖像或視頻中的手機(jī)并輸出檢測(cè)結(jié)果。通過(guò)訓(xùn)練和優(yōu)化模型系統(tǒng)能夠在復(fù)雜背景下準(zhǔn)確識(shí)別手機(jī)滿足實(shí)際應(yīng)用需求。技術(shù)棧:深度學(xué)習(xí)框架: PyTorch目標(biāo)檢測(cè)算法: YOLOv10數(shù)據(jù)處理: OpenCV, NumPy模型訓(xùn)練與評(píng)估: PyTorch Lightning, TensorBoard部署: ONNX, TensorRT (可選)項(xiàng)目流程:數(shù)據(jù)準(zhǔn)備: 收集并標(biāo)注手機(jī)圖像數(shù)據(jù)劃分為訓(xùn)練集和驗(yàn)證集。模型訓(xùn)練: 使用 YOLOv10 模型在訓(xùn)練集上進(jìn)行訓(xùn)練調(diào)整超參數(shù)以優(yōu)化模型性能。模型評(píng)估: 在驗(yàn)證集上評(píng)估模型性能計(jì)算精度、召回率、mAP等指標(biāo)。模型優(yōu)化: 通過(guò)數(shù)據(jù)增強(qiáng)、模型剪枝、量化等技術(shù)進(jìn)一步優(yōu)化模型。部署與應(yīng)用: 將訓(xùn)練好的模型部署到實(shí)際應(yīng)用場(chǎng)景中如嵌入式設(shè)備、移動(dòng)端或服務(wù)器端。目錄一、項(xiàng)目介紹二、項(xiàng)目功能展示系統(tǒng)功能演示與介紹視頻圖片檢測(cè)視頻檢測(cè)攝像頭實(shí)時(shí)檢測(cè)三、數(shù)據(jù)集介紹技術(shù)優(yōu)勢(shì)數(shù)據(jù)集配置文件data.yaml數(shù)據(jù)集制作流程四、項(xiàng)目環(huán)境配置創(chuàng)建虛擬環(huán)境pycharm中配置anaconda安裝所需要庫(kù)五、模型訓(xùn)練訓(xùn)練代碼訓(xùn)練結(jié)果六、核心代碼七、項(xiàng)目源碼下載鏈接二、項(xiàng)目功能展示系統(tǒng)功能?圖片檢測(cè)可對(duì)單張圖片進(jìn)行檢測(cè)返回檢測(cè)框及類別信息。?批量圖片檢測(cè)支持文件夾輸入一次性檢測(cè)多張圖片生成批量檢測(cè)結(jié)果。?視頻檢測(cè)支持視頻文件輸入檢測(cè)視頻中每一幀的情況。?攝像頭實(shí)時(shí)檢測(cè)連接USB 攝像頭實(shí)現(xiàn)實(shí)時(shí)監(jiān)測(cè)演示與介紹視頻基于深度學(xué)習(xí)的手機(jī)檢測(cè)系統(tǒng)YOLOv10YOLO數(shù)據(jù)集UI界面Python項(xiàng)目源碼模型_嗶哩嗶哩_bilibili基于深度學(xué)習(xí)的手機(jī)檢測(cè)系統(tǒng)YOLOv10YOLO數(shù)據(jù)集UI界面Python項(xiàng)目源碼模型圖片檢測(cè)該功能允許用戶通過(guò)單張圖片進(jìn)行目標(biāo)檢測(cè)。輸入一張圖片后YOLO模型會(huì)實(shí)時(shí)分析圖像識(shí)別出其中的目標(biāo)并在圖像中框出檢測(cè)到的目標(biāo)輸出帶有目標(biāo)框的圖像。批量圖片檢測(cè)用戶可以一次性上傳多個(gè)圖片進(jìn)行批量處理。該功能支持對(duì)多個(gè)圖像文件進(jìn)行并行處理并返回每張圖像的目標(biāo)檢測(cè)結(jié)果適用于需要大規(guī)模處理圖像數(shù)據(jù)的應(yīng)用場(chǎng)景。視頻檢測(cè)視頻檢測(cè)功能允許用戶將視頻文件作為輸入。YOLO模型將逐幀分析視頻并在每一幀中標(biāo)記出檢測(cè)到的目標(biāo)。最終結(jié)果可以是帶有目標(biāo)框的視頻文件或?qū)崟r(shí)展示適用于視頻監(jiān)控和分析等場(chǎng)景。攝像頭實(shí)時(shí)檢測(cè)該功能支持通過(guò)連接攝像頭進(jìn)行實(shí)時(shí)目標(biāo)檢測(cè)。YOLO模型能夠在攝像頭拍攝的實(shí)時(shí)視頻流中進(jìn)行目標(biāo)檢測(cè)實(shí)時(shí)識(shí)別并顯示檢測(cè)結(jié)果。此功能非常適用于安防監(jiān)控、無(wú)人駕駛、智能交通等應(yīng)用提供即時(shí)反饋。核心特點(diǎn)高精度基于YOLO模型提供精確的目標(biāo)檢測(cè)能力適用于不同類型的圖像和視頻。實(shí)時(shí)性特別優(yōu)化的算法使得實(shí)時(shí)目標(biāo)檢測(cè)成為可能無(wú)論是在視頻還是攝像頭實(shí)時(shí)檢測(cè)中響應(yīng)速度都非??臁E刻幚碇С指咝У呐繄D像和視頻處理適合大規(guī)模數(shù)據(jù)分析。三、數(shù)據(jù)集介紹數(shù)據(jù)集名稱: 手機(jī)檢測(cè)數(shù)據(jù)集數(shù)據(jù)集內(nèi)容:類別數(shù)量 (nc): 1 類類別名稱: [Phone]數(shù)據(jù)總量: 3500 張圖像訓(xùn)練集: 2700 張圖像驗(yàn)證集: 800 張圖像數(shù)據(jù)集來(lái)源:數(shù)據(jù)集通過(guò)多種途徑收集包括公開(kāi)數(shù)據(jù)集、網(wǎng)絡(luò)爬取以及實(shí)際場(chǎng)景拍攝。為確保數(shù)據(jù)的多樣性和泛化能力數(shù)據(jù)集中包含了不同品牌、型號(hào)、顏色、尺寸的手機(jī)圖像同時(shí)涵蓋了多種背景、光照條件和拍攝角度。數(shù)據(jù)標(biāo)注:每張圖像中的手機(jī)均使用邊界框 (Bounding Box) 進(jìn)行標(biāo)注標(biāo)注格式為 YOLO 格式 (class_id, x_center, y_center, width, height)。標(biāo)注工具: LabelImg 或 CVAT。標(biāo)注文件: 每個(gè)圖像對(duì)應(yīng)一個(gè).txt文件存儲(chǔ)標(biāo)注信息。數(shù)據(jù)集特點(diǎn):多樣性: 數(shù)據(jù)集中包含不同場(chǎng)景下的手機(jī)圖像如手持手機(jī)、桌面放置、復(fù)雜背景等。挑戰(zhàn)性: 部分圖像包含遮擋、模糊、反光等復(fù)雜情況以提高模型的魯棒性。平衡性: 訓(xùn)練集和驗(yàn)證集的比例合理確保模型在訓(xùn)練和驗(yàn)證過(guò)程中能夠充分學(xué)習(xí)并泛化。數(shù)據(jù)集配置文件data.yamltrain: .datasetsimages rain val: .datasetsimagesval test: .datasetsimages est nc: 1 names: [Phone]數(shù)據(jù)集制作流程標(biāo)注數(shù)據(jù)使用標(biāo)注工具如LabelImg、CVAT等對(duì)圖像中的目標(biāo)進(jìn)行標(biāo)注。每個(gè)目標(biāo)需要標(biāo)出邊界框并且標(biāo)注類別。轉(zhuǎn)換格式將標(biāo)注的數(shù)據(jù)轉(zhuǎn)換為YOLO格式。YOLO標(biāo)注格式為每行object-class x_center y_center width height這些坐標(biāo)是相對(duì)于圖像尺寸的比例。分割數(shù)據(jù)集將數(shù)據(jù)集分為訓(xùn)練集、驗(yàn)證集和測(cè)試集通常的比例是80%訓(xùn)練集、10%驗(yàn)證集和10%測(cè)試集。準(zhǔn)備標(biāo)簽文件為每張圖片生成一個(gè)對(duì)應(yīng)的標(biāo)簽文件確保標(biāo)簽文件與圖片的命名一致。調(diào)整圖像尺寸根據(jù)YOLO網(wǎng)絡(luò)要求統(tǒng)一調(diào)整所有圖像的尺寸如416x416或608x608。四、項(xiàng)目環(huán)境配置創(chuàng)建虛擬環(huán)境首先新建一個(gè)Anaconda環(huán)境每個(gè)項(xiàng)目用不同的環(huán)境這樣項(xiàng)目中所用的依賴包互不干擾。終端輸入conda create -n yolov10 python3.9激活虛擬環(huán)境conda activate yolov10安裝cpu版本pytorchpip install torch torchvision torchaudiopycharm中配置anaconda安裝所需要庫(kù)pip install -r requirements.txt五、模型訓(xùn)練訓(xùn)練代碼from ultralytics import YOLOv10 model_path yolov10s.pt data_path datasets/data.yaml if __name__ __main__: model YOLOv10(model_path) results model.train(datadata_path, epochs500, batch64, device0, workers0, projectruns/detect, nameexp, )根據(jù)實(shí)際情況更換模型 yolov10n.yaml (nano)輕量化模型適合嵌入式設(shè)備速度快但精度略低。 yolov10s.yaml (small)小模型適合實(shí)時(shí)任務(wù)。 yolov10m.yaml (medium)中等大小模型兼顧速度和精度。 yolov10b.yaml (base)基本版模型適合大部分應(yīng)用場(chǎng)景。 yolov10l.yaml (large)大型模型適合對(duì)精度要求高的任務(wù)。--batch 64每批次64張圖像。--epochs 500訓(xùn)練500輪。--datasets/data.yaml數(shù)據(jù)集配置文件。--weights yolov10s.pt初始化模型權(quán)重yolov10s.pt是預(yù)訓(xùn)練的輕量級(jí)YOLO模型。訓(xùn)練結(jié)果六、核心代碼# -*- 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 YOLOv10 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 torch class 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.css qssStyleSheet 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 700 self.show_height 500 self.org_path None self.is_camera_open False self.cap None # self.device 0 if torch.cuda.is_available() else cpu # 加載檢測(cè)模型 self.model YOLOv10(runs/detect/exp/weights/best.pt, taskdetect) self.model(np.zeros((48, 48, 3))) #預(yù)先加載推理模型 self.fontC ImageFont.truetype(Font/platech.ttf, 25, 0) self.colors tools.Colors() self.timer_camera QTimer() # 更新檢測(cè)信息表格 # 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) # 設(shè)置列寬 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.setSelectionBehavior(QAbstractItemView.SelectRows) # 設(shè)置表格整行選中 self.ui.tableWidget.verticalHeader().setVisible(False) # 隱藏列標(biāo)題 self.ui.tableWidget.setAlternatingRowColors(True) # 表格背景交替 def open_img(self): if self.cap: # 打開(kāi)圖片前關(guān)閉攝像頭 self.video_stop() self.is_camera_open False self.ui.CaplineEdit.setText(攝像頭未開(kāi)啟) self.cap None file_path, _ QFileDialog.getOpenFileName(None, 打開(kāi)圖片, ./, Image files (*.jpg *.jepg *.png)) if not file_path: return self.ui.comboBox.setDisabled(False) self.org_path file_path self.org_img tools.img_cvread(self.org_path) # 目標(biāo)檢測(cè) 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] total_nums len(location_list) cls_percents [] for i in range(1): if total_nums 0: res 0 else: res self.cls_list.count(i) / total_nums cls_percents.append(res) self.set_percent(cls_percents) 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) # 設(shè)置路徑顯示 self.ui.PiclineEdit.setText(self.org_path) # 目標(biāo)數(shù)目 target_nums len(self.cls_list) self.ui.label_nums.setText(str(target_nums)) # 設(shè)置目標(biāo)選擇下拉框 choose_list [全部] target_names [Config.names[id] _ str(index) for index,id in enumerate(self.cls_list)] choose_list choose_list target_names self.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: # 打開(kāi)圖片前關(guān)閉攝像頭 self.video_stop() self.is_camera_open False self.ui.CaplineEdit.setText(攝像頭未開(kāi)啟) self.cap None directory QFileDialog.getExistingDirectory(self, 選取文件夾, ./) # 起始路徑 if not directory: return self.org_path directory img_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_path self.org_img tools.img_cvread(img_path) # 目標(biāo)檢測(cè) 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] total_nums len(location_list) cls_percents [] for i in range(1): if total_nums 0: res 0 else: res self.cls_list.count(i) / total_nums cls_percents.append(res) self.set_percent(cls_percents) 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) # 設(shè)置路徑顯示 self.ui.PiclineEdit.setText(img_path) # 目標(biāo)數(shù)目 target_nums len(self.cls_list) self.ui.label_nums.setText(str(target_nums)) # 設(shè)置目標(biāo)選擇下拉框 choose_list [全部] target_names [Config.names[id] _ str(index) for index, id in enumerate(self.cls_list)] choose_list choose_list target_names self.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.tabel_info_show(self.location_list, self.cls_list, self.conf_list, pathimg_path) self.ui.tableWidget.scrollToBottom() QApplication.processEvents() #刷新頁(yè)面 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) # 設(shè)置路徑顯示 self.ui.PiclineEdit.setText(self.org_path) # 目標(biāo)數(shù)目 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_img def combox_change(self): com_text self.ui.comboBox.currentText() if com_text 全部: cur_box self.location_list cur_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])) # 設(shè)置坐標(biāo)位置值 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, 打開(kāi)視頻, ./, Image files (*.avi *.mp4 *.jepg *.png)) if not file_path: return None self.org_path file_path self.ui.VideolineEdit.setText(file_path) return file_path def video_start(self): # 刪除表格所有行 self.ui.tableWidget.setRowCount(0) self.ui.tableWidget.clearContents() # 清空下拉框 self.ui.comboBox.clear() # 定時(shí)器開(kāi)啟每隔一段時(shí)間讀取一幀 self.timer_camera.start(1) self.timer_camera.timeout.connect(self.open_frame) def tabel_info_show(self, locations, clses, confs, pathNone): path path for location, cls, conf in zip(locations, clses, confs): row_count self.ui.tableWidget.rowCount() # 返回當(dāng)前行數(shù)(尾部) self.ui.tableWidget.insertRow(row_count) # 尾部插入一行 item_id QTableWidgetItem(str(row_count1)) # 序號(hào) item_id.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter) # 設(shè)置文本居中 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) # 設(shè)置文本居中 item_conf QTableWidgetItem(str(conf)) item_conf.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter) # 設(shè)置文本居中 item_location QTableWidgetItem(str(location)) # 目標(biāo)框位置 # item_location.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter) # 設(shè)置文本居中 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: # 目標(biāo)檢測(cè) 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] total_nums len(location_list) cls_percents [] for i in range(1): if total_nums! 0 : res self.cls_list.count(i) / total_nums else : res0 cls_percents.append(res) self.set_percent(cls_percents) 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) # 目標(biāo)數(shù)目 target_nums len(self.cls_list) self.ui.label_nums.setText(str(target_nums)) # 設(shè)置目標(biāo)選擇下拉框 choose_list [全部] target_names [Config.names[id] _ str(index) for index, id in enumerate(self.cls_list)] choose_list choose_list target_names self.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.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 False self.ui.CaplineEdit.setText(攝像頭未開(kāi)啟) video_path self.get_video_path() if not video_path: return None self.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_open if self.is_camera_open: self.ui.CaplineEdit.setText(攝像頭開(kāi)啟) self.cap cv2.VideoCapture(0) self.video_start() self.ui.comboBox.setDisabled(True) else: self.ui.CaplineEdit.setText(攝像頭未開(kāi)啟) 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.shape ratio img_width / img_height if ratio self.show_width / self.show_height: self.img_width self.show_width self.img_height int(self.img_width / ratio) else: self.img_height self.show_height self.img_width int(self.img_height * ratio) return self.img_width, self.img_height def save_detect_video(self): if self.cap is None and not self.org_path: QMessageBox.about(self, 提示, 當(dāng)前沒(méi)有可保存信息請(qǐng)先打開(kāi)圖片或視頻) return if self.is_camera_open: QMessageBox.about(self, 提示, 攝像頭視頻無(wú)法保存!) return if self.cap: res QMessageBox.information(self, 提示, 保存視頻檢測(cè)結(jié)果可能需要較長(zhǎng)時(shí)間請(qǐng)確認(rèn)是否繼續(xù)保存,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: return else: 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_name save_img_path os.path.join(Config.save_path, save_name) # 保存圖片 cv2.imwrite(save_img_path, self.draw_img) QMessageBox.about(self, 提示, 圖片保存成功! 文件路徑:{}.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_name save_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, 提示, 圖片保存成功! 文件路徑:{}.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, 提示, 視頻保存成功! 文件在{}目錄下.format(Config.save_path)) return if self.progress_bar.isVisible() is False: # 點(diǎn)擊取消保存時(shí)終止進(jìn)程 self.btn2Thread_object.stop() return value int(cur_num / total *100) self.progress_bar.setValue(cur_num, total, value) QApplication.processEvents() def set_percent(self, probs): pass class btn2Thread(QThread): update_ui_signal pyqtSignal(int,int) def __init__(self, path, model, com_text): super(btn2Thread, self).__init__() self.org_path path self.model model self.com_text com_text # 用于繪制不同顏色矩形框 self.colors tools.Colors() self.is_running True # 標(biāo)志位表示線程是否正在運(yùn)行 def run(self): # VideoCapture方法是cv2庫(kù)提供的讀取視頻方法 cap cv2.VideoCapture(self.org_path) # 設(shè)置需要保存視頻的格式“xvid” # 該參數(shù)是MPEG-4編碼類型文件名后綴為.avi fourcc cv2.VideoWriter_fourcc(*XVID) # 設(shè)置視頻幀頻 fps cap.get(cv2.CAP_PROP_FPS) # 設(shè)置視頻大小 size (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))) # VideoWriter方法是cv2庫(kù)提供的保存視頻方法 # 按照設(shè)置的格式來(lái)out輸出 fileName os.path.basename(self.org_path) name, end_name fileName.split(.) save_name name _detect_result.avi save_video_path os.path.join(Config.save_path, save_name) out cv2.VideoWriter(save_video_path, fourcc, fps, size) prop cv2.CAP_PROP_FRAME_COUNT total int(cap.get(prop)) print([INFO] 視頻總幀數(shù){}.format(total)) cur_num 0 # 確定視頻打開(kāi)并循環(huán)讀取 while (cap.isOpened() and self.is_running): cur_num 1 print(當(dāng)前第{}幀總幀數(shù){}.format(cur_num, total)) ret, frame cap.read() if ret True: # 檢測(cè) 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 False if __name__ __main__: app QApplication(sys.argv) win MainWindow() win.show() sys.exit(app.exec_())七、項(xiàng)目源碼下載鏈接演示與介紹視頻基于深度學(xué)習(xí)的手機(jī)檢測(cè)系統(tǒng)YOLOv10YOLO數(shù)據(jù)集UI界面Python項(xiàng)目源碼模型_嗶哩嗶哩_bilibili基于深度學(xué)習(xí)的手機(jī)檢測(cè)系統(tǒng)YOLOv10YOLO數(shù)據(jù)集UI界面Python項(xiàng)目源碼模型
版權(quán)聲明: 本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)聯(lián)系我們進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

php網(wǎng)站開(kāi)發(fā)視頻高端網(wǎng)站建設(shè)的公司

php網(wǎng)站開(kāi)發(fā)視頻,高端網(wǎng)站建設(shè)的公司,移動(dòng)互聯(lián)網(wǎng)技術(shù)就業(yè)前景,一般可以在哪些網(wǎng)站做推廣LangFlow文檔問(wèn)答系統(tǒng)搭建實(shí)戰(zhàn) 在企業(yè)知識(shí)管理日益復(fù)雜的今天#xff0c;如何讓員工快速獲取分散在PDF

2026/01/23 06:43:01

網(wǎng)站推廣服務(wù)公司深圳龍華天氣預(yù)報(bào)

網(wǎng)站推廣服務(wù)公司,深圳龍華天氣預(yù)報(bào),遼寧省建設(shè)工程信息網(wǎng)招標(biāo),網(wǎng)站開(kāi)發(fā)交互原型標(biāo)注圖目錄具體實(shí)現(xiàn)截圖項(xiàng)目開(kāi)發(fā)技術(shù)介紹PHP核心代碼部分展示系統(tǒng)結(jié)論源碼獲取/同行可拿貨,招校園代理具體實(shí)現(xiàn)截圖 本系統(tǒng)

2026/01/21 20:00:01