YOLO11解決方案之速度估算探索

概述

Ultralytics提供了一系列的解決方案,利用YOLO11解決現實世界的問題,包括物體計數、模糊處理、熱力圖、安防系統、速度估計、物體追蹤等多個方面的應用。

YOLO速度估算結合物體檢測和跟蹤技術,使用YOLO11 模型檢測每幀中的物體,跨幀跟蹤這些物體,計算它們在一段時間內的移動情況,然后利用物體在幀間移動的距離和幀頻來估算其速度。可為交通分析、自動駕駛、安全分析等各種場景提供高效的速度估計。本文使用Python實現了簡單的演示界面,可以在圖像中畫線或者框,運行推理,輸出疊加了類別和速度的視頻。

Ultralytics提供了CLI和Python例子,展示如何使用速度估算解決方案。

CLI:

# Run a speed example
yolo solutions speed show=True# Pass a source video
yolo solutions speed source="path/to/video.mp4"# Adjust meter per pixel value based on camera configuration
yolo solutions speed meter_per_pixel=0.05

Python:

import cv2from ultralytics import solutionscap = cv2.VideoCapture("path/to/video.mp4")
assert cap.isOpened(), "Error reading video file"# Video writer
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))
video_writer = cv2.VideoWriter("speed_management.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))# Initialize speed estimation object
speedestimator = solutions.SpeedEstimator(show=True,  # display the outputmodel="yolo11n.pt",  # path to the YOLO11 model file.fps=fps,  # adjust speed based on frame per second# max_speed=120,  # cap speed to a max value (km/h) to avoid outliers# max_hist=5,  # minimum frames object tracked before computing speed# meter_per_pixel=0.05,  # highly depends on the camera configuration# classes=[0, 2],  # estimate speed of specific classes.# line_width=2,  # adjust the line width for bounding boxes
)# Process video
while cap.isOpened():success, im0 = cap.read()if not success:print("Video frame is empty or processing is complete.")breakresults = speedestimator(im0)# print(results)  # access the outputvideo_writer.write(results.plot_im)  # write the processed frame.cap.release()
video_writer.release()
cv2.destroyAllWindows()  # destroy all opened windows

SpeedEstimator參數

基本參數

名稱類型默認值說明
modelstrNoneYOLO Model 文件路徑.
fpsfloat30.0視頻幀率.
max_histint5跟蹤物體進行速度/方向計算的最多歷史點數.
meter_per_pixelfloat0.05縮放因子,用于將像素距離轉換為實際單位。
max_speedint120視覺疊加中的最高限速(用于警報)。

SpeedEstimator支持使用track參數:

參數類型默認值說明
trackerstr'botsort.yaml'指定要使用的跟蹤算法, bytetrack.yamlbotsort.yaml.
conffloat0.3設置檢測的置信度閾值;數值越低,跟蹤的物體越多,但可能會出現誤報。
ioufloat0.5設置交叉重疊 (IoU) 閾值,用于過濾重疊檢測。
classeslistNone按類別索引篩選結果。例如 classes=[0, 2, 3] 只跟蹤指定的類別(class在COCO數據集定義)。
verboseboolTrue控制跟蹤結果的顯示,提供被跟蹤物體的可視化輸出。
devicestrNone指定用于推理的設備(例如: cpu, cuda:00). 允許用戶選擇CPU 、特定GPU 或其他計算設備運行模型。

可視化參數:

參數類型默認值說明
showboolFalse如果 True在一個窗口中顯示注釋的圖像或視頻。有助于在開發或測試過程中提供即時視覺反饋。
line_widthNone or intNone指定邊界框的線寬。如果 None則根據圖像大小自動調整線寬,使圖像更加清晰。
show_confboolTrue在標簽旁顯示每次檢測的置信度得分。讓人了解模型對每次檢測的確定性。
show_labelsboolTrue在可視輸出中顯示每次檢測的標簽。讓用戶立即了解檢測到的物體。

GUI演示

這里使用Tkinter編寫一個簡單界面,演示速度估算應用。

從文件菜單打開一個mp4文件,顯示第一幀圖像。

在圖像上畫檢測線或者檢測框。

在這里插入圖片描述

矩形繪制完成后,可以使用鼠標右鍵拖動改變角度。

然后“開始演示”,物體名稱及其速度疊加在跟蹤物體上方。

在這里插入圖片描述

如果verboseTrue,控制臺輸出當前幀的信息。

0: 384x640 15 cars, 24.0ms
Speed: 1.7ms preprocess, 24.0ms inference, 2.2ms postprocess per image at shape (1, 3, 384, 640)
🚀 Results ****: SolutionResults(out_count=9, classwise_count={'car': {'IN': 0, 'OUT': 8}, 'bus': {'IN': 0, 'OUT': 1}, 'truck': {'IN': 0, 'OUT': 0}}, total_tracks=15)

GUI演示程序代碼

本演示程序定義了兩個類:VideoProcessorApp類和VideoProcessor類。

class VideoProcessorApp:def __init__(self, root):self.root = rootself.root.title("視頻處理應用演示")self.root.geometry("900x700")# 設置中文字體self.font = ('SimHei', 10)# 視頻和圖像處理相關變量self.cap = Noneself.video_path = ""self.original_frame = Noneself.current_frame = Noneself.processed_frames = []self.is_playing = Falseself.is_processing = Falseself.is_paused = Falseself.draw_mode = None  # 'line' 或 'rectangle'self.start_point = Noneself.end_point = Noneself.drawing = Falseself.output_file = ""self.rect_angle = 0  # 矩形旋轉角度self.rect_center = None  # 矩形中心點self.rect_points = None  # 矩形四個頂點self.pause_event = threading.Event()self.video_processor = Noneself._dt_buffer = []self._last_time = time.perf_counter()self.count = 0self.count_read  = 0self.frame_reading_done = False  # 標志位self.object_count = {}# 多線程相關self.frame_queue = Queue(maxsize=60)self.result_queue = Queue(maxsize=60)self.writer_queue = Queue(maxsize=60)self.stop_threads = False# 創建界面組件self.create_menu()self.create_widgets()# 綁定鼠標事件self.canvas.bind("<Button-1>", self.on_mouse_click)self.canvas.bind("<B1-Motion>", self.on_mouse_drag)self.canvas.bind("<ButtonRelease-1>", self.on_mouse_release)self.canvas.bind("<Button-3>", self.on_right_click)self.canvas.bind("<B3-Motion>", self.on_right_drag)self.canvas.bind("<ButtonRelease-3>", self.on_right_release)

VideoProcessor類專門處理視頻幀,其中調用了solutions.SpeedEstimator類:

self.speedestimator = solutions.SpeedEstimator(show=False,model="yolo11n.pt",region=pts,fps=fps,  # adjust speed based on fpsclasses=[2,5,7],verbose = False,)

由于讀寫視頻文件和進行神經網絡推理均需要較大的計算量,本演示代碼使用多線程分別處理讀、寫、顯示和推理,以最大化利用計算機資源,提高處理速度。

def start_processing(self):if self.cap is None or not self.cap.isOpened():messagebox.showerror("錯誤", "請先打開視頻文件")returnif self.video_processor is None:messagebox.showerror("錯誤", "請先繪制線條或矩形")returnif self.is_processing:messagebox.showinfo("提示", "正在處理視頻,請等待")returnself.processed_frames.clear()self.is_processing = Trueself.is_playing = Trueself.is_paused = Falseself.stop_threads = Falseself.process_button.config(state=tk.DISABLED)self.pause_button.config(state=tk.NORMAL)self.stop_button.config(state=tk.NORMAL)self.pause_event.set()# 啟動多線程self.reader_thread = threading.Thread(target=self.frame_reader)self.processor_thread = threading.Thread(target=self.frame_processor)self.display_thread = threading.Thread(target=self.result_display)self.writer_thread = threading.Thread(target=self.video_writer_worker)# 設置線程優先級try:self.reader_thread.priority = 'ABOVE_NORMAL'self.processor_thread.priority = 'HIGH'self.writer_thread.priority = 'ABOVE_NORMAL'except:pass# 啟動線程self.reader_thread.start()self.processor_thread.start()self.display_thread.start()self.writer_thread.start()

其中的推理線程代碼如下:

 def frame_processor(self):"""專用模型推理線程"""while not self.stop_threads:if self.is_paused:time.sleep(0.01)continuetry:start_time = time.time()frame = self.frame_queue.get(timeout=0.1)processed, self.object_count = self.video_processor.process_frame(frame)self.count += 1if not self.stop_threads:self.result_queue.put(processed, timeout=0.1)except Empty:continueexcept Exception as e:print(f"Frame processor error: {str(e)}")break

依據計算機視覺技術估算的速度并非精確的速度,不同的圖像和其他因素,會造成不同的估算速度差異,在實際應用中,需要使用測速雷達等設備進行標定,調整計算參數,才能有實用價值。

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

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

相關文章

初識C++:模版

本篇博客主要講解C模版的相關內容。 目錄 1.泛型編程 2.函數模板 2.1 函數模版概念 2.2 函數模版格式 2.3 函數模版的原理 2.4 函數模版的實例化 1.隱式實例化&#xff1a;讓編譯器根據實參推演模板參數的實際類型 2. 顯式實例化&#xff1a;在函數名后的<>中指定模…

人工智能100問?第27問:神經網絡與貝葉斯網絡的關系?

神經網絡與貝葉斯網絡是兩種互補的智能模型:神經網絡通過多層非線性變換從數據中學習復雜模式,擅長大規模特征提取和預測,而貝葉斯網絡基于概率推理建模變量間的條件依賴關系,擅長處理不確定性和因果推斷。兩者的融合(如貝葉斯神經網絡)結合了深度學習的表征能力與概率建…

【node.js】入門基礎

個人主頁&#xff1a;Guiat 歸屬專欄&#xff1a;node.js 文章目錄 1. Node.js簡介1.1 Node.js的核心特點1.2 Node.js適用場景 2. 第一個Node.js程序2.1 創建并運行Hello World2.2 創建簡單的HTTP服務器 3. Node.js核心概念3.1 模塊系統3.1.1 創建和導出模塊3.1.2 導入和使用模…

百度飛槳PaddleOCR 3.0開源發布 OCR精度躍升13%

百度飛槳 PaddleOCR 3.0 開源發布 2025 年 5 月 20 日&#xff0c;百度飛槳團隊正式發布了 PaddleOCR 3.0 版本&#xff0c;并將其開源。這一新版本在文字識別精度、多語種支持、手寫體識別以及高精度文檔解析等方面取得了顯著進展&#xff0c;進一步提升了 PaddleOCR 在 OCR …

Android 14 Binderized HAL開發實戰指南(AIDL版)

Android 14 Binderized HAL開發實戰指南&#xff08;AIDL版&#xff09; 環境要求 Android 14源碼編譯環境AOSP android-14.0.0_r7分支Soong build系統Java 17 & NDK r25c 項目結構 hardware/interfaces/myservice/ ├── 1.0 │ ├── IMyHalService.aidl # AID…

第九天的嘗試

目錄 一、每日一言 二、練習題 三、效果展示 四、下次題目 五、總結 一、每日一言 創造美好的代價是努力&#xff0c;失望以及毅力&#xff0c;首先是痛苦&#xff0c;然后才是歡樂。 時間是快的&#xff0c;看怎么利用&#xff0c;安排好一切事情&#xff0c;才能從容面對…

交安安全員:交通工程安全領域的關鍵角色

在交通工程這個龐大而復雜的領域中&#xff0c;交安安全員扮演著舉足輕重的角色&#xff0c;他們是安全的捍衛者&#xff0c;是交通工程順利推進的重要保障。? 交安安全員&#xff0c;專門從事公路水運工程施工企業安全生產管理工作。他們的專業身份由交通運輸部門頒發的交安…

實驗-設計一個應用系統(計算機組成原理)

目錄 一. 實驗內容 二. 實驗步驟 &#xff08;1&#xff09;七段數碼管顯示模塊 &#xff08;2&#xff09;指令模塊 &#xff08;3&#xff09;控制模塊 &#xff08;4&#xff09;ALU模塊 &#xff08;5&#xff09;CPU模塊 三. 實現效果 四. 實驗環境 五. 實驗小結…

【博客系統】博客系統第四彈:令牌技術

令牌機制 為什么不能使用 Session 實現登錄功能&#xff1f; 傳統思路&#xff1a; 登錄頁面把用戶名密碼提交給服務器。服務器端驗證用戶名密碼是否正確&#xff0c;并返回校驗結果給前端。如果密碼正確&#xff0c;則在服務器端創建 Session。通過 Cookie 把 sessionId 返回…

【瑞數3代】藥監評審中心逆向分析 | 后綴MmEwMD參數

1.目標 目標網址&#xff1a;https://www.cde.org.cn/main/news/listpage/545cf855a50574699b46b26bcb165f32 import requestscookies {FSSBBIl1UgzbN7N80S: 8sYeMWaC_IHoNl8Ckfx2y9MLiueMCkPr2V3MIoZkrMPUfzMMaXKzAoxpNPvyw4lt,Path: /,FSSBBIl1UgzbN7N80T: 3js3ygV.St6BvO20…

【漫話機器學習系列】274.基尼指數(Gini Index)

決策樹中的基尼指數&#xff08;Gini Index&#xff09;詳解 —— 從公式理解到實際應用 在構建決策樹模型時&#xff0c;一個核心問題是&#xff1a;如何選擇最優的特征來進行節點劃分&#xff1f; 這就涉及到了“劃分準則”的問題。常見的準則有信息增益、信息增益率以及本文…

R語言學習--Day07--T分布與T檢驗

昨天我們介紹了R中用于對數據進行分類的聚類分析的方法&#xff0c;接下來我們來看T分布。 T分布 T分布適用于幫我們估計整組數據&#xff08;較小的數據量&#xff0c;一般小于30&#xff09;的真實值在哪一個區間&#xff0c;具體是計算置信區間&#xff08;一般為95%&#…

數據結構與算法-線性表-雙向鏈表(Double Linked List)

1 線性表 1.4 雙向鏈表&#xff08;Double Linked List&#xff09; 雙向鏈表的結點中有兩個指針域&#xff0c;一個指向直接后繼&#xff0c;另一個指向直接前驅&#xff0c;主要是為了解決前向查找的問題。 雙向鏈表結構&#xff1a; 書籍和視頻教程都只講解了插入和刪除的…

甘特圖實例 dhtmlxGantt.js

本文介紹了如何使用dhtmlxGantt庫創建一個基礎的甘特圖示例&#xff0c;并對其進行漢化和自定義配置。首先&#xff0c;通過引入dhtmlxgantt.css和dhtmlxgantt.js文件初始化甘特圖。接著&#xff0c;通過設置gantt.i18n.setLocale("cn")實現核心文本的漢化&#xff0…

C++23 新增扁平化關聯容器詳解

文章目錄 一、引言已有關聯容器回顧新容器的引入原因 二、std::flat_set定義與特性代碼示例適用場景 三、std::flat_multiset定義與特性代碼示例適用場景 四、std::flat_map定義與特性代碼示例適用場景 五、std::flat_multimap定義與特性代碼示例適用場景 六、與其他容器的比較…

使用zap,對web應用/API接口 做安全檢測

https://www.zaproxy.org/getting-started/ 檢測方法 docker pull ghcr.io/zaproxy/zaproxy:stable# 執行baseline測試 docker run -t ghcr.io/zaproxy/zaproxy:stable zap-baseline.py \ -t https://baseline.yeshen.org# 執行api測試 docker run -t ghcr.io/zaproxy/zaproxy…

Qt—模態與非模態對話框

Qt—模態與非模態對話框 核心概念 ?模態對話框??&#xff1a;強制用戶優先處理當前窗口&#xff0c;阻塞指定范圍的用戶交互。?非模態對話框??&#xff1a;允許用戶自由切換窗口&#xff0c;無交互限制。 一、模態對話框類型與行為 1. 應用級模態&#xff08;Applica…

Axure高保真CRM客戶關系管理系統原型

一套出色的CRM&#xff08;客戶關系管理&#xff09;系統&#xff0c;無疑是企業管理者掌控客戶動態、提升銷售業績的得力助手。今天&#xff0c;就為大家介紹一款精心打造的Axure高保真CRM客戶關系管理系統原型模板&#xff0c;助你輕松開啟高效客戶管理之旅。 這款CRM原型模…

【羊圈——狀壓 + DP / 記憶化搜索DP】

題目 一般DP代碼&#xff08;注意&#xff0c;這里只能向外推(起始狀態是f(1,0)&#xff0c;不能向內推&#xff08;不然會導致之前的羊圈被割裂&#xff09;&#xff09; #include <bits/stdc.h> using namespace std;const int MAX_N 210; const int MAX_M 16;int n…

講解Mysql InnoDB的MVCC

1. 定義 MVCC是多版本并發控制&#xff08;Multi - Version Concurrency Control&#xff09;的縮寫。它是InnoDB存儲引擎實現高并發控制的一種機制。在數據庫系統中&#xff0c;多個事務可能會同時對數據進行讀寫操作&#xff0c;而MVCC通過為數據行保存多個版本來解決并發事務…