使用yolov8對視頻進行目標檢測

使用 Ultralytics 的 YOLO 模型對視頻進行逐幀目標檢測非常簡單,以下是完整的實現方法:
我們的輸入視頻是這樣的

視頻目標檢測輸入視頻

這里是天津市和平區天津大學附近,感興趣的小伙伴來天津玩哈!!


1. 安裝依賴

確保已安裝最新版 ultralyticsopencv-python

pip install ultralytics opencv-python

2. 基礎代碼實現

以下代碼將讀取輸入視頻,逐幀檢測并保存結果視頻:

from ultralytics import YOLO
import cv2# 加載YOLO模型(可選模型:yolov8n.pt, yolov8s.pt, yolov8m.pt等)
model = YOLO('yolov8m.pt')  # 會自動下載預訓練模型# 輸入輸出視頻路徑
input_video = 'input1.mp4'
output_video = 'output1.mp4'# 打開視頻文件
cap = cv2.VideoCapture(input_video)# 獲取視頻屬性(用于設置輸出視頻)
fps = int(cap.get(cv2.CAP_PROP_FPS))
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))# 創建VideoWriter對象
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter(output_video, fourcc, fps, (width, height))# 逐幀處理
while cap.isOpened():ret, frame = cap.read()if not ret:break# 使用YOLO檢測當前幀results = model(frame)# 在幀上繪制檢測結果annotated_frame = results[0].plot()  # 自動繪制邊界框和標簽# 寫入輸出視頻out.write(annotated_frame)# 釋放資源
cap.release()
out.release()
print(f"處理完成!結果已保存到 {output_video}")

3. 關鍵功能擴展

(1) 只檢測特定類別
results = model(frame, classes=[0, 14])  # 只檢測人(class 0)和鳥(class 14)
(2) 調整置信度閾值
results = model(frame, conf=0.5)  # 只顯示置信度≥50%的檢測
(3) 保存檢測數據(JSON/CSV)
for result in results:boxes = result.boxes  # 邊界框信息for box in boxes:class_id = box.cls  # 類別IDconf = box.conf    # 置信度xyxy = box.xyxy    # 框坐標[x1,y1,x2,y2]print(f"Class: {class_id}, Confidence: {conf}, Box: {xyxy}")
(4) 處理攝像頭實時流
cap = cv2.VideoCapture(0)  # 0表示默認攝像頭

4. 性能優化技巧

(1) 使用GPU加速
model = YOLO('yolov8n.pt').to('cuda')  # 如果有NVIDIA GPU
(2) 跳幀處理(提升速度)
frame_count = 0
while cap.isOpened():ret, frame = cap.read()frame_count += 1if frame_count % 3 != 0:  # 每3幀處理1次continue# 檢測代碼...
(3) 降低分辨率
small_frame = cv2.resize(frame, (640, 360))  # 縮小幀尺寸
results = model(small_frame)

5. 完整案例:車輛檢測并計數

from collections import defaultdictvehicle_classes = [2, 3, 5, 7]  # 汽車、摩托車、公交車、卡車
counter = defaultdict(int)while cap.isOpened():ret, frame = cap.read()results = model(frame, classes=vehicle_classes)for result in results:for box in result.boxes:class_id = int(box.cls)class_name = model.names[class_id]counter[class_name] += 1# 在幀上顯示計數for i, (name, count) in enumerate(counter.items()):cv2.putText(frame, f"{name}: {count}", (10, 30*(i+1)), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,255,0), 2)out.write(frame)

6. 常見問題解決

Q1: 視頻輸出無法播放
  • 確保安裝了正確的視頻編碼器(如fourcc = cv2.VideoWriter_fourcc(*'avc1')
  • 嘗試輸出為.avi格式
Q2: 檢測速度慢
  • 換用更小的模型(如yolov8n.ptyolov8n-seg.pt
  • 啟用半精度推理:
    model = YOLO('yolov8n.pt', half=True)  # FP16加速
    
Q3: 如何檢測自定義對象?
  1. 準備標注好的數據集(YOLO格式)
  2. 訓練自定義模型:
    model.train(data='custom.yaml', epochs=100)
    

檢測結果如下

視頻目標檢測結果


YOLOv8 提供的不同模型(如 yolov8n.ptyolov8s.ptyolov8m.pt)主要在 模型大小計算量檢測精度 之間進行權衡。以下是它們的詳細區別和適用場景:


核心區別對比

模型代號全稱參數量 (Parameters)計算量 (FLOPs)推理速度 (FPS) ?精度 (mAP50-95) 🎯適用場景
nNano~3.2M~8.7G最高較低移動端/嵌入式設備、實時性要求高的場景
sSmall~11.4M~28.6G中等平衡速度和精度(最常用)
mMedium~26.3M~78.9G中等較高對精度有要求的中等算力設備
lLarge~43.7M~165.2G較低服務器/高性能GPU環境
xXLarge~68.2M~257.8G最低最高學術研究或極端精度需求

性能直觀對比

(1) 精度(mAP50-95)
yolov8n < yolov8s < yolov8m < yolov8l < yolov8x
  • 示例:在COCO數據集上,yolov8xyolov8n 的 mAP 高約 15-20%,但速度慢 5-10 倍。
(2) 推理速度(FPS)
yolov8n > yolov8s > yolov8m > yolov8l > yolov8x
  • 實測數據(RTX 3090, 640x640輸入):
    • yolov8n: 300+ FPS
    • yolov8s: 150-200 FPS
    • yolov8x: 50-80 FPS

如何選擇模型?

選擇依據
  1. 硬件能力

    • 手機/樹莓派 → 選 ns
    • 中等GPU(如GTX 1660) → 選 sm
    • 高端GPU(如RTX 4090) → 選 lx
  2. 應用場景

    • 實時視頻檢測(如攝像頭監控) → n/s
    • 高精度需求(如醫學圖像分析) → m/l
    • 學術論文對比實驗 → x
  3. 延遲 vs 精度

    • 如果允許 100ms 延遲:m 是理想選擇
    • 要求 <30ms 延遲:必須用 ns

模型文件大小對比

模型文件大小(.pt格式)備注
yolov8n~6MB適合資源嚴格受限的環境
yolov8s~22MB通用場景的性價比之選
yolov8m~50MB需要更高精度的移動端部署
yolov8l~87MB服務器端應用
yolov8x~134MB極少用于生產環境

實際效果示例

場景:行人檢測(COCO數據集)
模型檢測到的人數誤檢數漏檢數
yolov8n85510
yolov8s9233
yolov8m9421

進階建議

  • 量化壓縮:對 n/s 模型使用 TensorRT 或 ONNX 量化,可進一步提升速度。
  • 自定義訓練:小模型(如 n)在數據量少時容易欠擬合,建議至少 10,000+ 標注數據再用 m/l
  • 任務類型:同一模型有不同任務版本(如 yolov8n-seg.pt 用于分割,比檢測版略慢)。

總結

  • yolov8n.pt:極致輕量,適合邊緣設備。
  • yolov8s.pt:最佳平衡,推薦大多數項目首選。
  • yolov8m.pt:需要精度但算力有限的場景。
  • yolov8l/x.pt:除非有極端精度需求,否則謹慎選擇。

根據你的硬件和需求,從 sm 開始實驗通常是最穩妥的選擇! 🚀

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/98059.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/98059.shtml
英文地址,請注明出處:http://en.pswp.cn/web/98059.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Edge瀏覽器的自動化點擊系統

Tag_click_openclose_V6 開發與使用注意事項 網頁自動化點擊系統 一個基于Python和CustomTkinter開發的桌面應用程序&#xff0c;通過Selenium實現對Edge瀏覽器的自動化控制。點擊Tag_click_openclose_V6進入Github自取&#xff0c;記得點贊收藏嗷。 功能介紹 連接到已打開…

Python股票數據分析與預測系統 LSTM神經網絡算法 股票價格預測 Tensorflow深度學習 機器學習 Flask框架 東方財富(建議收藏)?

博主介紹&#xff1a;?全網粉絲50W&#xff0c;前互聯網大廠軟件研發、集結碩博英豪成立軟件開發工作室&#xff0c;專注于計算機相關專業項目實戰6年之久&#xff0c;累計開發項目作品上萬套。憑借豐富的經驗與專業實力&#xff0c;已幫助成千上萬的學生順利畢業&#xff0c;…

英萊科技焊縫跟蹤系統亮相德國埃森焊接展,激光視覺點亮世界舞臺

9月15-19日&#xff0c;每4年一屆的德國埃森焊接與切割展覽會&#xff08;SCHWEISSEN & SCHNEIDEN&#xff09;即將盛大開幕。作為焊接行業最具規模及權威性的盛會之一&#xff0c;英萊科技將攜全新PF系列激光視覺焊縫跟蹤系統驚艷亮相&#xff0c;為全球智能化焊接貢獻中國…

嵌入式基本概念:什么是指令集,微架構,IDE,DFP等等是什么意思,有什么關系???

注&#xff1a;下面是指令集和微框架的分類圖&#xff0c;后面我會以ARM的M4舉例子。 一.什么是指令集 大概的可以看這個視頻 https://www.bilibili.com/video/BV1uXzbYBEy2/?spm_id_from333.1007.top_right_bar_window_custom_collection.content.click&vd_source406ed…

Spring Cloud之服務入口Gateway之自定義過濾器

目錄 過濾器執行順序 自定義過濾器 自定義GatewayFilter 定義GatewayFilter 配置過濾器 啟動服務并訪問 自定義GlobalFilter 定義GlobalFilter 啟動服務并訪問 服務部署 過濾器執行順序 如果?個項?中, 既有GatewayFilter, ?有 GlobalFilter時, 執?的先后順序是什…

MySQL——視圖、儲儲過程、觸發器

目錄 一、視圖 二、存儲過程 三、觸發器 一、視圖 視圖是一種虛擬存在的表。視圖中的數據并不在數據庫中真實存在&#xff0c;行和列數據來自定義視圖的查詢中使用的表&#xff0c;并且是在使用視圖時動態生成的。通俗的講&#xff0c;視圖只保存了查詢的SQL邏輯&#xff0c…

iOS App 卡頓與性能瓶頸排查實戰 如何定位CPU內存GPU幀率問題、優化耗電與網絡延遲(uni-app開發性能優化全流程指南)

在 iOS 應用開發中&#xff0c;卡頓 是用戶最直觀的負面體驗。 一個 App 如果在頁面切換、滾動、后臺運行時頻繁掉幀或發熱&#xff0c;用戶很快就會放棄使用。 對于 uni-app 跨平臺開發者 來說&#xff0c;卡頓問題更為復雜&#xff1a; JS 與原生層橋接增加了 CPU 負載&#…

騰訊開源多模態 RAG:復雜文檔秒變自建知識庫,支持 API 調用

上篇&#xff0c;分享了 小智AI MCP系列的第一篇&#xff1a; 小智 AI 鬧鐘提醒 定時任務&#xff0c;設備端MCP實現 有朋友問&#xff0c;能否接入知識庫 RAG&#xff1f; 讓小智可以根據企業知識庫&#xff0c;回答客戶的疑問~ 當然可以&#xff0c;接入方式同樣是 MC…

Node.js中的 http 模塊詳解

http 模塊是 Node.js 中的核心模塊之一&#xff0c;專門用于構建基于 HTTP 的網絡應用程序。它允許創建 HTTP 服務器和客戶端&#xff0c;處理網絡請求和響應。1. 核心 API 詳解1.1. http.createServer([options][, requestListener])用于創建 HTTP 服務器的核心方法&#xff0…

LAMP 環境部署

LAMP 環境部署 一、概述 1. 目的 基于 CentOS 7 系統部署 LAMP&#xff08;Linux Apache MySQL PHP&#xff09;環境的完整步驟&#xff0c;通過腳本化操作實現環境快速搭建&#xff0c;適用于運維人員進行測試環境或基礎生產環境的 LAMP 部署 2. 適用環境操作系統&#xff…

用html5仿造nes游戲敲玻璃寫一個敲玻璃游戲

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>敲玻璃游戲</title><style>body {ma…

996引擎-ItemTips特效框層級自定義

996引擎-ItemTips特效框層級自定義 需求場景 ItemTips 中相關方法 創建特效的位置 創建特效框 核心修改 調整視圖,自己加個背景,不用原來的 設置 tipsLayout_bg 的層級 結果預覽 參考資料 需求場景 策劃說我們的tips特效框,遮擋文字。如果按官方說的設為底層又跑到背景框后…

Java 注解與 APT(Annotation Processing Tool)

Java 注解與 APT&#xff08;Annotation Processing Tool&#xff09; 注解&#xff08;Annotation&#xff09;基礎 注解是 Java 語言的一種元數據形式&#xff0c;它可以在代碼中添加標記信息&#xff0c;用于描述代碼的額外信息&#xff0c;但不會直接影響代碼的執行邏輯。注…

Unity 檢測網絡-判斷當前(Android/Windows平臺)設備是否連接了指定WiFi

判斷設備是否連接了特定的網絡1.Unity 腳本2.Unity AndroidManifest.xml文件①改個設置②補充權限語句1.Unity 腳本 using UnityEngine; using System.Collections; using System.Diagnostics; using Debug UnityEngine.Debug; using UnityEngine.UI;#if UNITY_ANDROID &…

通過網絡強化增強混合IT環境的安全

網絡是企業運營的支柱&#xff0c;也是網絡犯罪分子和惡意威脅者的主要目標&#xff0c;他們會破壞IT運營的連續性。隨著混合云基礎設施、遠程辦公和物聯網&#xff08;IoT&#xff09;生態系統的出現&#xff0c;網絡邊界正在不斷擴大&#xff0c;新的漏洞不斷產生&#xff0c…

ACP(四):RAG工作流程及如何創建一個RAG應用

RAG的工作原理 你在考試的時候有可能會因為忘記某個概念或公式而失去分數&#xff0c;但考試如果是開卷形式&#xff0c;那么你只需要找到與考題最相關的知識點&#xff0c;并加上你的理解就可以進行回答了。 對于大模型來說也是如此&#xff0c;在訓練過程中由于沒有見過某個知…

宇視設備視頻平臺EasyCVR視頻設備軌跡回放平臺監控攝像頭故障根因剖析

監控攝像頭的類型繁多&#xff0c;市場上提供了廣泛的選擇。然而&#xff0c;在使用監控攝像頭的過程中&#xff0c;用戶可能會遇到云臺在很短的時間內出現運轉不靈或完全無法轉動的問題。這里&#xff0c;我們將對這一常見問題進行深入分析。一、具體的原因&#xff1a; 1、距…

【Uni-App+SSM 寵物項目實戰】Day15:購物車添加

大家好!今天是學習路線的第15天,我們正式進入訂單與購物車核心模塊。昨天完成了商家服務列表的分頁加載,今天聚焦“購物車添加”功能——這是連接“商品瀏覽”與“訂單提交”的關鍵環節,用戶可將寵物用品(如糧食、玩具)加入購物車,后續統一結算。 為什么學這個? 購物車…

Java 黑馬程序員學習筆記(進階篇6)

常用的 API1. 正則表達式(1) 題目&#xff1a;貪婪爬取和非貪婪爬取① 貪婪爬取&#xff1a;爬取數據的時候盡可能的多獲取數據 ② 非貪婪爬取&#xff1a;爬取數據的時候盡可能的少獲取數據 ③ Java中默認的是貪婪爬取 ④ 后面加上 ? 可以轉變為非貪婪爬取(2) 捕獲分組捕獲分…

計算機網絡---數據鏈路層上

文章目錄1. 數據鏈路層的功能2. 組幀2.1 字符填充法2.2 字節填充法2.3 零比特填充法2.4 違規編碼2.5 總結3. 差錯控制3.1 檢錯編碼3.1.1 奇偶校驗3.1.2 循環冗余校驗碼&#xff08;CRC&#xff09;3.1.3 總結3.2 糾錯編碼&#xff08;海明校驗碼&#xff09;3.3 總結4. 流量控制…