這個是網上目前可能唯一一個使用不足一百行代碼實現了複雜車輛速度估計+距離測量+軌跡跟蹤+區域進出統計系統。之所以這麼簡單是因為ultralytics模塊現在已經成熟而且強大,不需要從頭開始寫車輛速度估計、距離測量、軌跡跟蹤、區域進出統計系統代碼,因為裏面邏輯比想象要複雜不少,不是有經驗程序員無法短時間從邏輯代碼解放出來。因此代碼對小白十分友好,而且我們只需要關注功能結果本身不必注重細節,即使考慮細節我們也只需要查閲ultralytics資料即可。
效果展示
代碼調用
from yolov11_speed_distance_tracking_counting import YOLOv11Tracker
if __name__ == '__main__':
# 創建並運行YOLOv11跟蹤器,使用視頻文件
tracker = YOLOv11Tracker(
model_path='yolo11n.pt',
video_path=r'car2.mp4', # 視頻文件路徑
reginotallow=[(0, 360), (1280, 360),(1280, 500), (0, 500)], # 感興趣區域
classes=[2,5,7] # 檢測人和汽車
)
tracker.run()
需要安裝的模塊
opencv-pythnotallow==4.11.0.86
torch==2.3.1+cu118
torchvisinotallow==0.18.1+cu118
ultralytics==8.3.248
功能介紹
本項目基於UltralyticsYOLOv11 實現了以下功能:
- 速度估計 :實時計算檢測到的物體移動速度
- 距離測量 :估算物體之間的相對距離
- 軌跡跟蹤 :記錄並繪製物體的運動軌跡
- 對象計數 :統計特定區域內的物體數量
安裝依賴
pip install ultralytics==8.3.248
pip install opencv-python
pip install numpy
使用方法
1. 使用視頻實時檢測
python yolov11_speed_distance_tracking_counting.py
2. 使用視頻文件檢測
首先將視頻文件命名為 test_video.mp4 並放在項目目錄下,然後運行:
python main.py
3. 自定義參數
在 yolov11_speed_distance_tracking_counting.py 文件中,你可以修改以下參數:
model_path:YOLOv11模型路徑,默認使用yolo11n.pt(nano版本,速度最快)video_path:視頻源,0表示攝像頭,也可以是視頻文件路徑region:感興趣區域,用於速度估計和計數classes:要檢測的類別,默認檢測所有類別
模型選擇
YOLOv11提供了多種模型大小,你可以根據需要選擇:
yolo11n.pt:Nano版本,速度最快,適合實時應用yolo11s.pt:Small版本,平衡速度和精度yolo11m.pt:Medium版本,精度更高yolo11l.pt:Large版本,精度更高yolo11x.pt:Xtra Large版本,精度最高
輸出結果
程序會顯示一個窗口,實時展示檢測結果,包括:
- 檢測框:顯示物體位置和類別
- 速度標籤:顯示物體移動速度
- 距離線:顯示物體之間的距離(小於50米時)
- 軌跡線:顯示物體的運動軌跡
- 計數信息:顯示進入和離開區域的物體數量
同時,程序會將結果保存為 output.avi 文件(注意代碼暫時屏蔽,如需保存只需要取消註釋)。
按 ‘q’ 退出程序
注意事項
- 首次運行時會自動下載YOLOv11模型,請確保網絡連接正常
- 速度估計和距離測量的準確性取決於攝像頭校準和參數設置
- 對於不同的場景,可能需要調整感興趣區域和檢測類別
- 建議使用高性能GPU以獲得最佳實時性能
技術原理
速度估計
使用 Ultralytics 的 SpeedEstimator 類,基於物體在連續幀中的位置變化計算速度。
距離測量
- 基於物體寬度和已知焦距計算與攝像頭的距離
- 基於像素距離估算物體之間的相對距離
軌跡跟蹤
使用 YOLOv11 的 track 方法,結合 persist=True 參數實現多對象跟蹤,並記錄歷史位置數據繪製軌跡。
對象計數
使用 Ultralytics 的 ObjectCounter 類,基於物體是否穿過預定義區域進行計數。
應用場景
- 交通監控:車輛速度檢測、流量統計
- 人羣管理:人數統計、社交距離監測
- 工業自動化:生產線上的物體計數和跟蹤
- 安防監控:異常行為檢測