当前位置: 首页 > article >正文

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))

效果展示

这里使用演示代码,在测试视频中,计算两辆车的距离。

在这里插入图片描述

随着车辆运动,其距离在不断变化。

在这里插入图片描述

需要注意的是,本方案的距离计算并不精确,它只是使用了平面数据,缺少物体间的深度信息(不能计算三维位置关系)。

相关文章:

YOLO11解决方案之距离计算探索

概述 Ultralytics提供了一系列的解决方案&#xff0c;利用YOLO11解决现实世界的问题&#xff0c;包括物体计数、模糊处理、热力图、安防系统、速度估计、物体追踪等多个方面的应用。 测量两个物体之间的间距被称为特定空间内的距离计算&#xff0c;YOLO11使用两个边界框的中心…...

论文学习_Precise and Accurate Patch Presence Test for Binaries

摘要&#xff1a;打补丁是应对软件漏洞的主要手段&#xff0c;及时将补丁应用到所有受影响的软件上至关重要&#xff0c;然而这一点在实际中常常难以做到&#xff0c;研究背景。因此&#xff0c;准确检测安全补丁是否已被集成进软件发行版本的能力&#xff0c;对于防御者和攻击…...

Ascend的aclgraph(九)AclConcreteGraph:e2e执行aclgraph

1回顾 前面的几章内容探讨了aclgraph运行过程中的涉及到的关键模块和技术。本章节将前面涉及到的模块串联起来&#xff0c;对aclgraph形成一个端到端的了解。 先给出端到端运行的代码&#xff0c;如下&#xff1a; import torch import torch_npu import torchair import log…...

JSX语法介绍

文章目录 JSX介绍JSX的引入JSX的全称babel转换工具 JSX的基本语法创建组件的第一种方式创建组件父组件传值给子组件 class 关键字的介绍class的基本用法&#xff1a;使用class创建对象使用 class 实现 JS 中的继承 创建组件的第二种方式&#xff1a;使用 class 关键字父组件传值…...

增强 HTNN 服务网格功能:基于 Istio 的BasicAuth 与 ACL 插件开发实战

目录 1.引言 什么是HTNN&#xff1f; 为什么开发 BasicAuth 和 ACL 插件&#xff1f; 2.技术背景 技术栈概览 Istio 与服务网格简述 HTNN 框架与插件机制概览 3.插件开发详解&#xff1a;BasicAuth 与 ACL 3.1 BasicAuth插件 功能点 实现细节 3.2 ACL插件 功能点 …...

c++从入门到精通(四)--动态内存,模板与泛型编程

文章目录 动态内存直接管理内存Shared_ptr类Unique_ptrWeak_ptr动态数组allocator类文本查询程序 模板与泛型编程定义模板函数模板类模板模板参数成员模板控制实例化 模板实参推断重载与模板可变参数模板模板特例化 动态内存 c中动态内存的管理是通过new和delete运算符来实现的…...

C盘清理秘籍:快速提升系统性能

C盘清理的重要性 C盘作为系统盘&#xff0c;存储着操作系统和关键程序文件。随着使用时间的增加&#xff0c;C盘空间会逐渐被占用&#xff0c;导致系统运行缓慢、程序启动延迟等问题。定期清理C盘可以有效提升系统性能&#xff0c;延长硬盘寿命。 清理临时文件 Windows系统在…...

从 Vue3 回望 Vue2:组件设计升级——Options API vs Composition API

文章目录 从 Vue3 回望 Vue2&#xff1a;组件设计升级——Options API vs Composition API1、组件范式&#xff1a;框架设计思想的投影2、Vue2&#xff1a;Options API 的结构与局限结构清晰&#xff1a;新手友好、职责分明核心痛点&#xff1a;逻辑分散&#xff0c;难以聚合复…...

寻找两个正序数组的中位数 - 困难

************* Python topic: 4. 寻找两个正序数组的中位数 - 力扣&#xff08;LeetCode&#xff09; ************* Give the topic an inspection. Do the old topic will give you some new sparks. Before that, I do some really good craetive things about my logo. …...

国产密码新时代!华测国密 SSL 证书解锁安全新高度

在数字安全被提升到国家战略高度的今天&#xff0c;国产密码算法成为筑牢网络安全防线的关键力量。华测国密SSL证书凭借其强大性能与贴心服务&#xff0c;为企业网络安全保驾护航&#xff0c;成为符合国家安全要求的不二之选&#xff01;​ 智能兼容&#xff0c;告别浏览器适配…...

【金仓数据库征文】从云计算到区块链:金仓数据库的颠覆性创新之路

目录 一、引言 二、金仓数据库概述 2.1 金仓数据库的背景 2.2 核心技术特点 2.3 行业应用案例 三、金仓数据库的产品优化提案 3.1 性能优化 3.1.1 查询优化 3.1.2 索引优化 3.1.3 缓存优化 3.2 可扩展性优化 3.2.1 水平扩展与分区设计 3.2.2 负载均衡与读写分离 …...

互联网大厂Java求职面试:AI与大模型集成的云原生架构设计

互联网大厂Java求职面试&#xff1a;AI与大模型集成的云原生架构设计 引言 在现代互联网企业中&#xff0c;AI与大模型技术的应用已经成为不可或缺的一部分。特别是在短视频平台、电商平台和金融科技等领域&#xff0c;如何高效地将大模型集成到现有的云原生架构中是一个巨大…...

股指期货套期保值怎么操作?

股指期货套期保值就是企业或投资者通过持有与其现货市场头寸相反的期货合约&#xff0c;来对冲价格风险的一种方式。换句话说&#xff0c;就是你在股票市场上买了股票&#xff08;现货&#xff09;&#xff0c;担心股价下跌会亏钱&#xff0c;于是就在期货市场上卖出相应的股指…...

基于IBM BAW的Case Management进行项目管理示例

说明&#xff1a;使用IBM BAW的难点是如何充分利用其现有功能根据实际业务需要进行设计&#xff0c;本文是示例教程&#xff0c;因CASE Manager使用非常简单&#xff0c;这里重点是说明如何基于CASE Manager进行项目管理&#xff0c;重点在方案设计思路上&#xff0c;其中涉及的…...

黑马k8s(七)

1.Pod介绍 查看版本&#xff1a; 查看类型,这里加s跟不加s没啥区别&#xff0c;可加可不加 2.Pod基本配置 3.镜像拉去策略 本地没有这个镜像&#xff0c;策略是Never&#xff0c;启动失败 查看拉去策略&#xff1a; 更改拉去策略&#xff1a; 4.启动命令 运行的是nginx、busv…...

九、HQL DQL七大查询子句

作者&#xff1a;IvanCodes 日期&#xff1a;2025年5月15日 专栏&#xff1a;Hive教程 Apache Hive 的强大之处在于其类 SQL 的查询语言 HQL&#xff0c;它使得熟悉 SQL 的用户能够轻松地对存储在大规模分布式系统&#xff08;如 HDFS&#xff09;中的数据进行复杂的查询和分析…...

基于中心点预测的视觉评估与可视化流程

基于中心点预测的视觉评估与可视化流程 基于中心点预测的视觉评估与可视化流程一、脚本功能概览二、可视化与评分机制详解1. 真实框解析2. 调用模型处理帧3. 预测中心点与真实值的对比4. 打分策略5. 图像可视化三、目录结构要求四、运行方式五、应用场景与拓展思路六、总结七,…...

RTSP 播放器技术探究:架构、挑战与落地实践

RTSP 播放器为什么至今无法被淘汰&#xff1f; 在实时视频传输领域&#xff0c;RTSP&#xff08;Real-Time Streaming Protocol&#xff09;作为最基础、最常见的协议之一&#xff0c;至今依然被广泛用于监控设备、IP Camera、视频服务器等设备中。然而&#xff0c;要构建一个稳…...

实验5 DNS协议分析与测量

实验5 DNS协议分析与测量 1、实验目的 了解互联网的域名结构、域名系统DNS及其域名服务器的基本概念 熟悉DNS协议及其报文基本组成、DNS域名解析原理 掌握常用DNS测量工具dig使用方法和DNS测量的基本技术 2、实验环境 硬件要求&#xff1a;阿里云云主机ECS 一台。 软件要…...

编程日志5.8

二叉树练习题 1.965. 单值二叉树 - 力扣(LeetCode) /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) :…...

【鸿蒙开发】性能优化

语言层面的优化 使用明确的数据类型&#xff0c;避免使用模糊的数据类型&#xff0c;例如ESObject。 使用AOT模式 AOT就是提前编译&#xff0c;将字节码提前编译成机器码&#xff0c;这样可以充分优化&#xff0c;从而加快执行速度。 未启用AOT时&#xff0c;一边运行一边进…...

2025-05-13 学习记录--Python-循环:while循环 + while-else循环 + for循环 + 循环控制

合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、循环 ⭐️ &#xff08;一&#xff09;、while循环 &#x1f36d; 初始条件设置 -- 通常是重复执行的 计数器while 条件(判…...

Vue3学习(组合式API——生命周期函数基础)

目录 一、Vue3组合式API中的生命周期函数。 &#xff08;1&#xff09;各阶段生命周期涉及函数简单介绍。 <1>创建挂载阶段的生命周期函数。 <2>更新阶段的生命周期函数。 <3>卸载阶段的生命周期函数。 <4>错误处理的生命周期函数。 &#xff08;2&…...

全面指南:Xinference大模型推理框架的部署与使用

全面指南:Xinference大模型推理框架的部署与使用 Xinference(Xorbits Inference)是一个功能强大的分布式推理框架,专为简化各种AI模型的部署和管理而设计。本文将详细介绍Xinference的核心特性、版本演进,并提供多种部署方式的详细指南,包括本地部署、Docker-Compose部署…...

计量——检验与代理变量

1.非嵌套模型的检验 1Davidson-Mackinnon test 判断哪个模型好 log&#xff08;y&#xff09;β0β1x1β2x2β3x3u log&#xff08;y&#xff09;β0β1log&#xff08;x1&#xff09;β2log&#xff08;x2&#xff09;β3log&#xff08;x3&#xff09;u 1.对log&#xff…...

Cocos Creator 3.8.5 构建依赖环境配置文档

Cocos Creator 3.8.5 构建依赖环境配置文档 文章目录 Cocos Creator 3.8.5 构建依赖环境配置文档✅ 构建依赖汇总表✅ 构建平台配置说明&#x1f449; Windows 构建&#x1f449; Android 构建 ✅ 推荐构建环境组合&#xff08;稳定&#xff09;✅ 常见问题提示 适用于打包 An…...

实验五:以太网UDP全协议栈的实现(通过远程实验系统)

文章目录 FPGA以太网:从ARP到UDP的完整协议栈一、引言二、核心模块详解1. ARP协议处理模块1.1 `arp_cache`:ARP缓存模块1.2 `arp_tx`:ARP请求与应答发送模块1.3 `arp_rx`:ARP接收与解析模块2. MAC层处理模块2.1 `mac_layer`:MAC层顶层模块2.2 `mac_tx_mode`:MAC发送模式选…...

HTML-实战之 百度百科(影视剧介绍)

本系列可作为前端学习系列的笔记&#xff0c;代码的运行环境是在HBuilder中&#xff0c;小编会将代码复制下来&#xff0c;大家复制下来就可以练习了&#xff0c;方便大家学习。 系列文章目录 HTML-1.1 文本字体样式-字体设置、分割线、段落标签、段内回车以及特殊符号 HTML…...

了解光学影像

本文来源 &#xff1a; 腾讯元宝 光学影像是一种通过光学技术捕捉、记录和处理图像的技术&#xff0c;广泛应用于医学、工业、安防、科研等多个领域。以下是关于光学影像的详细介绍&#xff1a; 1. ​​基本原理​​ 光学影像基于光的传播、反射、折射和散射等物理现象。通过…...

计算机视觉---目标追踪(Object Tracking)概览

一、核心定义与基础概念 1. 目标追踪的定义 定义&#xff1a;在视频序列或连续图像中&#xff0c;对一个或多个感兴趣目标&#xff08;如人、车辆、物体等&#xff09;的位置、运动轨迹进行持续估计的过程。核心任务&#xff1a;跨帧关联目标&#xff0c;解决“同一目标在不同…...