YOLO11解決方案之距離計算探索

概述

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

測量兩個物體之間的間距被稱為特定空間內的距離計算,YOLO11使用兩個邊界框的中心點計算距離。

使用距離計算,可以提供計算機視覺任務中比較精確的空間定位,分析視頻環境中的對象關系,通過監控移動物體之間的距離,使系統能夠檢測到潛在的碰撞,為自動駕駛或者交通監控等應用提供更好的空間場景理解能力。

演示代碼

Ultralytics提供了演示代碼,展示如何使用距離計算解決方案。

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("distance_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))# Initialize distance calculation object
distancecalculator = solutions.DistanceCalculation(model="yolo11n.pt",  # path to the YOLO11 model file.show=True,  # display the output
)# Process video
while cap.isOpened():success, im0 = cap.read()if not success:print("Video frame is empty or processing is complete.")breakresults = distancecalculator(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

DistanceCalculation參數

基本參數

參數類型默認值說明
modelstrNoneUltralytics YOLO 模型文件的路徑。

DistanceCalculation支持使用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在可視輸出中顯示每次檢測的標簽。讓用戶立即了解檢測到的物體。

工作原理

DistanceCalculation 類的工作原理是跟蹤視頻幀中的物體,并計算所選邊界框中心點之間的歐氏距離。演示程序運行時,鼠標點擊斷定兩個邊界框,系統將提取選定邊界框的中心點,以像素為單位計算這些中心點之間的歐氏距離,對象之間用連線連接,并在圖像上顯示距離。

執行時使用 mouse_event_for_distance 方法來處理鼠標交互,允許用戶根據需要選擇對象和清除選擇。 process 方法處理逐幀處理、跟蹤物體和計算距離。

查看DistanceCalculation 類中的mouse_event_for_distance的代碼:

def mouse_event_for_distance(self, event, x, y, flags, param):"""處理鼠標事件,在實時視頻流中選擇區域計算距離使用左鍵選擇兩個方框點擊右鍵取消選擇"""if event == cv2.EVENT_LBUTTONDOWN:self.left_mouse_count += 1if self.left_mouse_count <= 2:for box, track_id in zip(self.boxes, self.track_ids):if box[0] < x < box[2] and box[1] < y < box[3] and track_id not in self.selected_boxes:self.selected_boxes[track_id] = boxelif event == cv2.EVENT_RBUTTONDOWN:self.selected_boxes = {}self.left_mouse_count = 0

查看DistanceCalculation 類中的process的代碼:

def process(self, im0):"""處理一個視頻幀,計算兩個選擇的邊界框之間的距離輸出處理過的視頻圖片(疊加了距離數據)、跟蹤物體的數量、像素距離"""self.extract_tracks(im0)  # Extract tracksannotator = SolutionAnnotator(im0, line_width=self.line_width)  # Initialize annotatorpixels_distance = 0# Iterate over bounding boxes, track ids and classes indexfor box, track_id, cls, conf in zip(self.boxes, self.track_ids, self.clss, self.confs):annotator.box_label(box, color=colors(int(cls), True), label=self.adjust_box_label(cls, conf, track_id))# 如果選定的框是被跟蹤的,則更新if len(self.selected_boxes) == 2:for trk_id in self.selected_boxes.keys():if trk_id == track_id:self.selected_boxes[track_id] = boxif len(self.selected_boxes) == 2:#計算選擇框的中心點坐標self.centroids.extend([[int((box[0] + box[2]) // 2), int((box[1] + box[3]) // 2)] for box in self.selected_boxes.values()])#計算兩點間的歐氏距離pixels_distance = math.sqrt((self.centroids[0][0] - self.centroids[1][0]) ** 2 + (self.centroids[0][1] - self.centroids[1][1]) ** 2)annotator.plot_distance_and_line(pixels_distance, self.centroids)self.centroids = []  # Reset centroids for next frameplot_im = annotator.result()self.display_output(plot_im)  # Display output with base class functioncv2.setMouseCallback("Ultralytics Solutions", self.mouse_event_for_distance)# 返回處理過的圖像和計算的指標return SolutionResults(plot_im=plot_im, pixels_distance=pixels_distance, total_tracks=len(self.track_ids))

效果展示

這里使用演示代碼,在測試視頻中,計算兩輛車的距離。

在這里插入圖片描述

隨著車輛運動,其距離在不斷變化。

在這里插入圖片描述

需要注意的是,本方案的距離計算并不精確,它只是使用了平面數據,缺少物體間的深度信息(不能計算三維位置關系)。

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

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

相關文章

mongodb處理時區轉換問題

1. 程序查詢直接使用&#xff08;java&#xff09;Date即可, 因為直接支持 2. 若方便查看日期需要進行格式和時區轉換 db.task.aggregate([{ $match: {userId: 113633}},{ $project: {userId: 1,endTime: 1,formattedDate: {$dateToString: {format: "%Y-%m-%d %H:%M:%S&…

基于中心點預測的視覺評估與可視化流程

基于中心點預測的視覺評估與可視化流程 基于中心點預測的視覺評估與可視化流程一、腳本功能概覽二、可視化與評分機制詳解1. 真實框解析2. 調用模型處理幀3. 預測中心點與真實值的對比4. 打分策略5. 圖像可視化三、目錄結構要求四、運行方式五、應用場景與拓展思路六、總結七,…

Comparator 比較器

在Java中&#xff0c;Comparator.comparingInt(String::length) 是一個用于創建比較器&#xff08;Comparator&#xff09;的靜態方法調用&#xff0c;它的核心作用是定義一個比較規則&#xff0c;使對象按照特定屬性&#xff08;這里是字符串長度&#xff09;進行比較。下面從…

無人設備遙控器之無線通訊技術篇

無人設備遙控器的無線通訊技術是確保遙控操作準確、穩定、高效進行的關鍵。以下是對無人設備遙控器無線通訊技術的詳細解析&#xff1a; 一、主要無線通訊技術類型 Wi-Fi通訊技術 原理&#xff1a;基于IEEE 802.11標準&#xff0c;通過無線接入點&#xff08;AP&#xff09;…

Android Coli 3 ImageView load two suit Bitmap thumb and formal,Kotlin(七)

Android Coli 3 ImageView load two suit Bitmap thumb and formal&#xff0c;Kotlin&#xff08;七&#xff09; 在 Android Coli 3 ImageView load two suit Bitmap thumb and formal&#xff0c;Kotlin&#xff08;六&#xff09;-CSDN博客 的基礎上改進&#xff0c;主要是…

ET EntityRef EntityWeakRef 類分析

EntityRef EntityWeakRef 相同點 也是這兩個的作用&#xff1a;這兩個都是用來表示一個實體引用。一般來說使用一個對象&#xff0c;直接持有對象就可以&#xff0c;但是如果對象來自于對象池&#xff0c;這個時候直接持有對象不合適&#xff0c;對象可能已經被對象池回收&…

基于Leaflet和天地圖的免費運動場所WebGIS可視化-以長沙市為例

目錄 前言 一、免費運動場所數據整理 1、本地寶數據簡介 2、Java后臺數據解析 二、Leaflet前端地圖展示 1、基礎數據準備 2、具體位置及屬性標記 三、成果展示 1、空間位置分布 2、東風路立交橋運動公園 3、芙蓉區花侯路瀏陽河大橋下方 4、梅嶺國際小區 5、湖南大學…

Flutter——數據庫Drift開發詳細教程(六)

目錄 1.視圖2.視圖中列的可空性3.DAO4.流查詢5.高級用途6.注意事項 1.視圖 也可以將SQL 視圖定義 為 Dart 類。為此&#xff0c;請編寫一個抽象類來擴展View。此示例聲明了一個視圖&#xff0c;用于讀取示例中架構中某個類別中添加的待辦事項數量&#xff1a; abstract class C…

Kafka 4.0版本的推出:數據處理新紀元的破曉之光

之前做大數據相關項目&#xff0c;在項目中都使用過kafka。在數字化時代&#xff0c;數據如洪流般涌來&#xff0c;如何高效處理這些數據成為關鍵。Kafka 就像是一條 “智能數據管道”&#xff0c;在數據的世界里扮演著至關重要的角色。如果你第一次接觸它&#xff0c;不妨把它…

RabbitMQ高級篇-MQ的可靠性

目錄 MQ的可靠性 1.如何設置數據持久化 1.1.交換機持久化 1.2.隊列持久化 1.3.消息持久化 2.消息持久化 隊列持久化&#xff1a; 消息持久化&#xff1a; 3.非消息持久化 非持久化隊列&#xff1a; 非持久化消息&#xff1a; 4.消息的存儲機制 4.1持久化消息&…

ctfshow權限維持

1&#xff0c;web670 我們先看一下這個php代碼 error_reporting(0);#關閉錯誤報告 highlight_file(__FILE__);#內容高亮顯示$a$_GET[action];#get傳參switch($a){case cmd:eval($_POST[cmd]);break;case check:file_get_contents("http://checker/api/check");#獲取…

力扣算法ing(71 / 100)

5.15 哈希表合集—349.兩個數組的交集 給定兩個數組 nums1 和 nums2 &#xff0c;返回 它們的 交集 。輸出結果中的每個元素一定是 唯一 的。我們可以 不考慮輸出結果的順序 。 示例 1&#xff1a; 輸入&#xff1a;nums1 [1,2,2,1], nums2 [2,2] 輸出&#xff1a;[2]示例…

(面試)Handler消息處理機制原理

Handler是用于實現線程間通信和任務調度的一種機&#xff08;Handler、 Looper、MessageQueue、 Message&#xff09;。Handler 允許線程間發送Message或Runnable對象進行通信。在Android中UI修改只能通過UI Thread&#xff0c;子線程不能更新UI。如果子線程想更新UI&#xff0…

Dify 實戰教程 | 5分鐘打造文本生成應用( Stable Diffusion 提示詞生成器)

AI 繪畫離不開「提示詞&#xff08;Prompt&#xff09;」——如何構造清晰、生動、有表現力的提示詞&#xff0c;直接決定你生成圖像的質量。而 Stable Diffusion 的提示詞構造相比 Midjourney 更加自由&#xff0c;但也更考驗組織語言的能力。 今天這篇教程&#xff0c;教你零…

RPC框架源碼分析學習(二)

RPC框架源碼分析與原理解讀 前言 在分布式系統開發中&#xff0c;遠程過程調用(RPC)是一項基礎且關鍵的技術。通過對KVstorageBaseRaft-cpp項目RPC模塊的源碼分析&#xff0c;我深入理解了RPC框架的工作原理和實現細節。本文將從程序員視角分享我的學習心得。 框架概述 本項…

當下流行的智能體通信協議:MCP、A2A、ANP 分別是什么?

在當前人工智能&#xff08;AI&#xff09;智能體生態系統中&#xff0c;智能體之間的有效溝通至關重要。為了讓AI智能體能夠高效、安全地協同工作&#xff0c;業界提出了多種通信協議。其中&#xff0c;MCP、A2A 和 ANP 代表了三個關鍵層級的通信協議&#xff0c;各自應對不同…

為什么 cout<<“中文你好“ 能正常輸出中文

一, 簡答: 受python3字符串模型影響得出的下文C字符串模型結論 是錯的&#xff01;C的字符串和python2的字符串模型類似&#xff0c;也就是普通的字符串是ASCII字符串和字節串兩種語義&#xff0c;類似重載或多態&#xff0c;有時候解釋為整數&#xff0c;有時候是字節串。Uni…

鴻蒙的卓易通,讓我踩了一次坑

前言 因為我本身對鴻蒙提不起興趣&#xff0c;哪怕有些文章給鴻蒙穿上了“黑絲”&#xff0c;再加上公司當前沒有適配鴻蒙的計劃&#xff0c;所以關于鴻蒙的消息我都關注的很少。 今早&#xff0c;看到了徐宜生老師的一篇文章&#xff1a;“鴻蒙卓易通&#xff0c;是飲鴆止渴…

Cursor vs VS Code vs Zed

代碼編輯器的世界已經迎來了創新的爆發。曾經由重量級IDE或基礎文本編輯器主導的領域,如今開發者們發現自己正在探索全新一波聚焦于AI集成、協作和性能的工具。 在本文中,我們將深入探討2025年三款流行的編輯器:Cursor、Visual Studio Code (VS Code)和Zed Code Editor。每…

使用 LiteFlow 實現靈活的業務邏輯解耦

1. 引言 1.1 業務邏輯復雜性帶來的挑戰 在現代軟件開發中,隨著業務需求不斷增長,代碼結構日趨復雜。硬編碼式的流程控制方式難以適應頻繁變更的需求,導致維護成本高、可讀性差、擴展性弱。 1.2 規則引擎在解耦中的作用 規則引擎(Rule Engine)通過將業務邏輯與程序代碼…