用python+YOLOV8图片车辆车距

1. 检测车辆:

使用深度学习模型(例如 YOLO、Mask R-CNN)来检测照片中的车辆,并得到每辆车的边界框(Bounding Box)。
工具与技术:
  • YOLOv5/YOLOv8:高效的实时目标检测模型。
  • OpenCV:进行边界框绘制和图像处理。
  • Detectron2:适合高精度对象检测。

2. 计算两车的距离:

根据照片中两辆车的边界框,选择适当的点(例如中心点或边界最近点),计算这两个点的像素距离。
公式:
如果选择中心点作为测量依据:Distance=(x2−x1)2+(y2−y1)2\text{Distance} = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2}Distance=(x2​−x1​)2+(y2​−y1​)2​
其中:
  • (x1,y1)(x_1, y_1)(x1​,y1​) 和 (x2,y2)(x_2, y_2)(x2​,y2​) 是两辆车中心点的像素坐标。
有许多现成的大模型可以用于目标检测和距离估算任务。以下是推荐的一些大模型及其使用场景:

1. YOLO 系列 (You Only Look Once)

  • 特点:
    • 实时目标检测,速度快。
    • 可检测照片中的多个目标并返回边界框和类别信息。
  • 模型版本:
    • YOLOv5 (最流行)
    • YOLOv8 (最新版本,支持更高精度和简单部署)
  • 适用场景:
    • 检测照片中的车辆。
    • 通过边界框计算距离。
  • 工具链:
    • PyTorch 实现:Ultralytics YOLO

2. Detectron2

  • 特点:
    • Facebook AI 开发,支持多种高级任务,如目标检测、实例分割。
    • 精度高,适合需要精准定位的任务。
  • 适用场景:
    • 检测车辆并输出更准确的边界框。
    • 如果车辆有遮挡,这个模型效果更好。
  • 工具链:
    • 特点: 文档

3. Segment Anything Model (SAM)

  • 特点:
    • Meta AI 开发,用于分割任何目标。
    • 输入一张图片,可以直接分割出车辆的轮廓。
  • 适用场景:
    • 获取车辆的精确轮廓,便于更精准的距离计算。
    • 无需训练即可快速分割图像中的目标。
  • 工具链:
    • SAM GitHub

4. OpenCV DNN 模块

  • 特点:
    • 集成了常用的大模型,如 MobileNet-SSD、YOLO、ResNet。
    • 易于部署,不依赖复杂的深度学习框架。
  • 适用场景:
    • 简单目标检测,不需要复杂模型部署时。
  • 工具链:
    • OpenCV 官方文档:OpenCV DNN

5. DeepSORT(目标跟踪与检测结合)

  • 特点:
    • 结合 YOLO 和目标跟踪算法。
    • 在多目标场景中,可持续跟踪车辆的位置。
  • 适用场景:
    • 检测两辆车并在运动视频中实时更新它们的距离。

使用预训练的YOLOv8模型来检测车辆,并计算它们之间的距离。

第一步:需要下载的库

pip install opencv-python-headless  # 如果需要无头版本
pip install opencv-python           # 安装带有GUI支持的版本
pip install torch torchvision
pip install ultralytics

第二步:下载数据库,

要连接到 Microsoft SQL Server 数据库,您可以使用 pyodbc 或者 pymssql 这样的 Python 库。

需要下载插件 微软的

pip install pyodbc

第三步:demo

# -*- coding: utf-8 -*-
import cv2
import numpy as np
from ultralytics import YOLO# 加载预训练的YOLOv5模型
model = YOLO('yolov8s.pt')# 读取图像
image_path = 'C:/Users/licam/Desktop/ba0f18d2d8b17488ad28f7cd587ea06.jpg'
image = cv2.imread(image_path)# 使用YOLOv5进行检测
results = model(image)# 获取检测结果
detections = results[0].boxes.xyxy.cpu().numpy()# 定义像素到米的转换比例因子(根据实际情况调整)
PIXELS_TO_METERS = 0.05  # 每个像素代表0.01米def calculate_distance(box1, box2):center1 = ((box1[0] + box1[2]) / 2, (box1[1] + box1[3]) / 2)center2 = ((box2[0] + box2[2]) / 2, (box2[1] + box2[3]) / 2)distance_pixels = ((center1[0] - center2[0]) ** 2 + (center1[1] - center2[1]) ** 2) ** 0.5distance_meters = distance_pixels * PIXELS_TO_METERSreturn distance_meters# 存储所有距离信息以供打印
all_distances = []# 绘制检测框和距离,并收集距离信息
for i in range(len(detections)):distances_text = ""for j in range(len(detections)):if i != j:distance = calculate_distance(detections[i], detections[j])distances_text += f'{distance:.2f}m\n'all_distances.append(f"Vehicle {i + 1} to Vehicle {j + 1}: {distance:.2f}m")distances_text = distances_text.rstrip('\n')top_left = (int(detections[i][0]), int(detections[i][1]) - 10)text_size, _ = cv2.getTextSize(distances_text, cv2.FONT_HERSHEY_SIMPLEX, 0.5, 1)if top_left[1] - text_size[1] < 0:top_left = (top_left[0], top_left[1] + text_size[1] + 10)cv2.putText(image, distances_text, top_left, cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 1, cv2.LINE_AA)cv2.rectangle(image, (int(detections[i][0]), int(detections[i][1])),(int(detections[i][2]), int(detections[i][3])), (0, 255, 0), 2)# 打印所有车辆之间的距离
print("Distances between vehicles:")
for dist in all_distances:print(dist)# 保存处理后的图像
output_image_path = 'C:/Users/licam/Desktop/processed_image_with_distances.jpg'
cv2.imwrite(output_image_path, image)print(f"\nProcessed image saved to: {output_image_path}")# 显示图像
cv2.imshow('Detected Vehicles', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/64644.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数理统计】参数估计

文章目录 点估计矩估计法最大似然估计法 区间估计单个正态总体参数的区间估计均值 μ \mu μ 的区间估计方差 σ 2 \sigma^2 σ2 的区间估计 两个正态总体参数的区间估计&#xff08;略&#xff09;补充&#xff1a;单侧置信区间 点估计 矩估计法 【定义】设 X X X 是随机…

冯诺依曼架构与哈佛架构的对比与应用

冯诺依曼架构&#xff08;Von Neumann Architecture&#xff09;&#xff0c;也称为 冯诺依曼模型&#xff0c;是由著名数学家和计算机科学家约翰冯诺依曼&#xff08;John von Neumann&#xff09;在1945年提出的。冯诺依曼架构为现代计算机奠定了基础&#xff0c;几乎所有现代…

linux不同发行版中的主要差异

一、初始化系统 Linux不同发行版中的系统初始化系统&#xff08;如 System V init、Upstart 或 systemd&#xff09; System V init&#xff1a; 历史&#xff1a;System V init 是最传统的 Linux 系统初始化系统&#xff0c;起源于 Unix System V 操作系统。运行级别&#xff…

3D造型软件solvespace在windows下的编译

3D造型软件solvespace在windows下的编译 在逛开源社区的时候发现了几款开源CAD建模软件&#xff0c;一直囿于没有合适的建模软件&#xff0c;虽然了解了很多的模拟分析软件&#xff0c;却不能使之成为整体的解决方案&#xff0c;从而无法产生价值。opencascad之流虽然可行&…

机器学习04-为什么Relu函数

机器学习0-为什么Relu函数 文章目录 机器学习0-为什么Relu函数 [toc]1-手搓神经网络步骤总结2-为什么要用Relu函数3-进行L1正则化修改后的代码解释 4-进行L2正则化解释注意事项 5-Relu激活函数多有夸张1-细数Relu函数的5宗罪2-Relu函数5宗罪详述 6-那为什么要用这个Relu函数7-文…

Redis篇-21--运维篇3-集群(分片,水平扩展,高可用,集群配置案例,扩展哨兵案例)

1、概述 Redis集群&#xff08;Cluster&#xff09;通过分片&#xff08;sharding&#xff09;实现了水平扩展&#xff0c;允许数据分布在多个节点上&#xff0c;从而提升性能和存储容量。 在Redis集群中&#xff0c;数据被分割成16384个哈希槽&#xff08;hash slots&#x…

QScreen在Qt5.15与Qt6.8版本下的区别

简述 QScreen主要用于提供与屏幕相关的信息。它可以获取有关显示设备的分辨率、尺寸、DPI&#xff08;每英寸点数&#xff09;等信息。本文主要是介绍Qt5.15与Qt6环境下&#xff0c;QScreen的差异&#xff0c;以及如何判断高DPI设备。 属性说明 logicalDotsPerInch&#xff1…

[HNCTF 2022 Week1]你想学密码吗?

下载附件用记事本打开 把这些代码放在pytho中 # encode utf-8 # python3 # pycryptodemo 3.12.0import Crypto.PublicKey as pk from hashlib import md5 from functools import reducea sum([len(str(i)) for i in pk.__dict__]) funcs list(pk.__dict__.keys()) b reduc…

shell8

until循环(条件为假的时候一直循环和while相反) i0 until [ ! $i -lt 10 ] doecho $i((i)) done分析 初始化变量&#xff1a; i0&#xff1a;将变量i初始化为0。 条件判断 (until 循环)&#xff1a; until [ ! $i -lt 10 ]&#xff1a;这里的逻辑有些复杂。它使用了until循环…

【游戏中orika完成一个Entity的复制及其Entity异步落地的实现】 1.ctrl+shift+a是飞书下的截图 2.落地实现

一、orika工具使用 1)工具类 package com.xinyue.game.utils;import ma.glasnost.orika.MapperFactory; import ma.glasnost.orika.impl.DefaultMapperFactory;/*** author 王广帅* since 2022/2/8 22:37*/ public class XyBeanCopyUtil {private static MapperFactory mappe…

frp内网穿透笔记

文章目录 一、环境介绍二、配置过程2.1 下载文件2.3 服务器A的配置2.3 目标机B的配置2.4 电脑C怎么用 三、问题汇总 一、环境介绍 带公网的vps服务器A&#xff0c;需要穿透到的无公网目标电脑B&#xff0c;以及一台需要通过公网访问B的电脑C。frp 0.47.0&#xff1a;frp_0.47.…

PostgreSQL的交互式终端使用一系列命令来获取有关文本搜索配置对象的信息

在 psql&#xff08;PostgreSQL 的交互式终端&#xff09;中&#xff0c;你可以使用一系列命令来获取有关文本搜索配置对象的信息。这些命令主要围绕 \dF 系列&#xff0c;以及使用 SQL 查询 pg_ts_config 系统视图。以下是你可以使用的一些方法&#xff1a; 使用 \dF 系列命令…

写定制程序容易遇见的问题(FLASH不够时)

做了一个关于定制两条串口协议的活&#xff0c;主要是要在源代码基础上进行修改。源代码只剩了200多字节flash。本来最初我的想法很奇特&#xff0c;用结构体来模仿寄存器的写法。当我写完几行代码后&#xff0c;编译链接&#xff0c;立马就报CODE内存超了。 然后最终还是选择…

【Leetcode 热题 100 - 扩展】303. 区域和检索 - 数组不可变

问题背景 给定一个整数数组 n u m s nums nums&#xff0c;处理以下类型的多个查询&#xff1a; 计算索引 l e f t left left 和 r i g h t right right&#xff08;包含 l e f t left left 和 r i g h t right right&#xff09;之间的 n u m s nums nums 元素的 和 &a…

本地缓存和Redis缓存 存储更新时间的更新套路

//先获取redis key和local key //从reids中获取数据 – 为空 先设置redis缓存30天,value为当前时间 然后设置本地缓存,value为当前时间 从数据库里读数据 – 不为空 获取本地缓存时间 if本地缓存时间 < redis缓存时间(认为已更新)或者本地为空 从数据库读数据 else 从本地缓…

处理错误的两种方式:try...catch 与 then...catch

一、try...catch try...catch 是一种用于捕获和处理同步代码中异常的机制。其基本结构如下&#xff1a; try {// 可能会抛出异常的代码 } catch (error) {// 处理异常 }使用场景&#xff1a; 主要用于同步代码&#xff0c;尤其是在需要处理可能抛出的异常时。适用于函数调用…

【十进制整数转换为其他进制数——短除形式的贪心算法】

之前写过一篇用贪心算法计算十进制转换二进制的方法&#xff0c;详见&#xff1a;用贪心算法计算十进制数转二进制数&#xff08;整数部分&#xff09;_短除法求二进制-CSDN博客 经过一段时间的研究&#xff0c;本人又发现两个规律&#xff1a; 1、不仅仅十进制整数转二进制可…

【Harmony Next】多个图文配合解释DevEco Studio工程中,如何配置App相关内容,一次解决多个问题?

解决App配置相关问题列表 1、Harmony Next如何配置图标&#xff1f; 2、Harmony Next如何配置App名称&#xff1f; 3、Harmony Next如何配置版本号&#xff1f; 4、Harmony Next如何配置Bundle ID? 5、Harmony Next如何配置build号&#xff1f; 6、Harmony Next多语言配置在哪…

Mybatis分页插件的使用问题记录

项目中配置的分页插件依赖为 <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.1.7</version></dependency>之前的项目代码编写分页的方式为&#xff0c;通过传入的条件…

Anthropic 工程师关于提示词工程的深入探讨

李玉光 北京聚云科技有限公司 联合创始人兼首席架构师 拥有 12 年以上的 Amazon Web Services 开发与架构经验。擅长设计和实施大规模、高弹性、自动化的云原生解决方案。云成本优化方面经验丰富&#xff0c;帮助众多企业有效降低云使用成本。并协助各类行业客户利用 Amazon We…