YOLOv8进行对象检测与关键点定位:实时计算关键点间实际距离并可视化

主要功能如下:

该脚本主要实现了使用预训练的YOLO模型对输入图片进行对象检测与关键点定位,计算特定关键点之间的实际距离,并在图片上可视化这些信息(包括边界框、关键点标记、实际距离文字标注),最后保存处理后的图片。

from ultralytics import YOLO
import cv2
import numpy as np
import sys# 读取命令行参数
weight_path = "./runs/pose/train/weights/best.onnx"  # 模型权重文件路径
media_path = "./dataset/my_yolo/images/val/00001.jpg"  # 待检测图片路径# 加载模型
model = YOLO(weight_path)  # 使用YOLO加载模型# 获取类别
objs_labels = model.names  # 获取模型识别的所有类别标签
print(objs_labels)  # 输出类别标签列表# 类别的颜色
class_color = [(255, 0, 0), (0, 255, 0), (0, 0, 255), (255, 255, 0)]  # 不同类别的颜色设置# 关键点的顺序
keypoint_list = ["1", "2"]  # 关键点对应的标签# 关键点的颜色
keypoint_color = [(255, 0, 0), (0, 255, 0)]  # 第一个关键点为红色,第二个关键点为绿色# 读取图片
frame = cv2.imread(media_path)  # 读取待检测图片
frame = cv2.resize(frame, (frame.shape[1] // 2, frame.shape[0] // 2))  # 缩小图片尺寸
#
# 检测
result = list(model(frame, conf=0.3, stream=True))[0]  # 进行推理,conf=0.3表示设定的检测阈值,stream=True表示返回生成器对象
boxes = result.boxes  # 获取检测到的边界框信息
boxes = boxes.cpu().numpy()  # 将边界框信息转换为NumPy数组# 遍历关键点
keypoints = result.keypoints  # 获取检测到的关键点信息
keypoints = keypoints.cpu().numpy()  # 转换为NumPy数组# 绘制关键点
for keypoint in keypoints.data:for i in range(len(keypoint)):x, y, c = keypoint[i]  # 获取当前关键点的坐标和置信度x, y = int(x), int(y)  # 转换坐标为整数cv2.circle(frame, (x, y), 1, keypoint_color[i], -1)  # 绘制关键点if len(keypoint) >= 2:  # 如果当前有至少两个关键点# 绘制连接两个关键点的红色直线x1, y1, _ = keypoint[0]  # 获取第一个关键点坐标x2, y2, _ = keypoint[1]  # 获取第二个关键点坐标cv2.line(frame, (int(x1), int(y1)), (int(x2), int(y2)), (0, 0, 255), 2)  # 绘制红色直线pixel_distance = np.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2)actual_distance = pixel_distance * 0.096  # 计算实际距离print(f"Actual distance between keypoints: {actual_distance:.2f} mm")midpoqint_x = int((x1 + x2) / 2)midpoqint_y = int((y1 + y2) / 2)text_offset_y = 20cv2.putText(frame, f"{actual_distance:.2f} mm", (midpoqint_x, midpoqint_y + text_offset_y),cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 0), 1)# 保存处理后的图片
cv2.imwrite("result/result_onnx.jpg", frame)
print("save result.jpg")  # 输出提示信息,表示图片已保存

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

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

相关文章

解决Java中的IllegalThreadStateException异常的方法

解决Java中的IllegalThreadStateException异常的方法 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在Java编程中,IllegalThreadStateException异…

代码随想录-Day38

509. 斐波那契数 斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) 0,F(1) 1 F(n) F(n - 1) F(n - 2),其中 …

计算机基础——经典排序算法总结

1.选择排序 找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换)。其次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。如此往复,直到将…

[已解决] AI2THOR-2.1.0的卡死问题

在使用一些数据集的时候,例如ALFRED,需要调用AI2THOR-2.1.0版本。调用如下的测试脚本测试AI2THOR-2.1.0的安装情况: from ai2thor.controller import Controllerc Controller() c.start() event c.step(dict(action"MoveAhead")…

01 Swift 基础语法(变量,常量,注释,整数,浮点数,元组)

Swift 介绍 Swift 是一门用于开发 iOS、macOS、watchOS 和 tvOS 应用的新编程语言。它以安全、快速和互动的特点而著称。Swift 提供了代码预览(playgrounds)功能,使程序员可以在不编译和运行应用程序的情况下,实时运行 Swift 代码…

React面试题(二)

说说React的事件机制 是什么 React基于浏览器的事件机制自身实现了一套事件机制,包括事件注册,事件的合成,事件派发等 在React中这套事件机制被称之为合成事件 合成事件(SyntheicEvent) 合成事件是React模拟原生DO…

如何实现CloudFlare免费内网穿透?

有时候我们可能需要用到内网穿透技术,将本机的资源开放到网络上供人访问! 但是有时候我们只需要将一个项目开放的时候,使用frp就有点不划算了,特别是近几年服务器的价格水涨船高,要知道使用frp需要一台服务器和一个域名才可以的,这不今天就告诉大家一个用cloudflare实现…

Python web 开发 flask 实践

1、前言 前文已经介绍了很多关于 python 的算法和脚本的写法,在本文将开启python的 web 的开发,和java 类似的,对于 web 开发也需要引入框架,对于 python 的 web 开发来说常见的有 flask 和 django 两种,在本文中将要…

vscode用vue框架1写一个登陆页面

目录 一、创建登录页面 二、构建好登陆页面的路由 三、编写登录页代码 1.添加基础结构 2.给登录页添加背景 3.解决填充不满问题 4.我们把背景的红颜色替换成背景图: 5.在页面中央添加一个卡片来显示登录页面 6.设置中间卡片页面的左侧 7.设置右侧的样式及…

华芯微特SWM34-使用定时器捕获快速解码EV1527编码

在无线应用领域,很多433Mhz和315Mhz的遥控器,红外探测器,门磁报警器,无线门铃等都使用EV1527编码格式来发射数据。发射和接收均有对应的RF芯片完成,而且成本极低(目前市场价3毛钱不到)。接收芯片…

复分析——第7章——ζ 函数和素数定理(E.M. Stein R. Shakarchi)

第7章 ζ函数和素数定理 Bernhard Riemann, whose extraordinary intuitive powers we have already mentioned, has especially renovated our knowledge of the distribution of prime numbers, also one of the most mysterious questions in mathematics. He has tau…

《中国尘肺病农民工调查报告(2023)》

这份报告由中华社会救助基金会大爱清尘基金发布。 《中国尘肺病农民工调查报告(2023)》是一份深入探讨中国尘肺病农民工现状与挑战的研究报告。报告不仅详细记录了尘肺病患者的生存困境、经济与医疗状况,还对政策的实施效果进行了评估,并提出了针对性的建议。通过对不同地区、…

Vitis Accelerated Libraries 学习笔记--Vision 库介绍

目录 1. 简介 2. 分类介绍 2.1 图像容器 2.2 图像处理基础 2.3 图像滤波和平滑 2.4 图像变换和增强 2.5 图像分析和特征检测 2.6 数学和算术操作 2.7 图像校正和优化 2.8 颜色和阈值处理 2.9 高级图像处理 2.10 光流和运动估计 2.11 图像转换和映射 2.12 其他特殊…

docker camunda 8.5 部署步骤

Camunda Platform 8 环境准备 Docker 版本要求 Docker 20.10.16 is required; docker compose version 1.27.0.;github 开源地址:https://github.com/camunda/camunda-platformcamunda7 文档地址:https://docs.camunda.org/manual/7.21/user-guide/process-engine/社区地址: …

Android Media Framework(八)OMXNodeInstance - Ⅰ

OpenMAX框架的学习有两大难点,一是组件的状态切换与buffer的流转过程,这部分内容我们已经在IL Spec中学习过了;二是OMX组件使用的buffer类型与buffer分配过程,这一节我们来重点剖析OMX组件使用的buffer类型。 1、引言 在实际应用…

业务架构交付物

背景 业务的核心元素、扩展元素以及它们的协同关系,业务架构和其他架构的关系等等已经有了不少认识,那么,通过对业务架构的还原和分析,到底能够得到什么业务架构的内容呢?它可以是一套流程框架体系,也可以…

探索约束LLM输出JSON的应用

0、 引言 JSON(JavaScript Object Notation)因其简洁、易读和易于解析的特性,已成为全球使用最广泛的数据交换格式之一。它能够满足各种数据交换需求,特别是在构建人工智能驱动的应用程序时,工程师们经常需要将大型语…

深度学习工具|LabelImg(标注工具)的安装与使用教程

1 简介 Label是一款免费的图像标注软件,可以以矩形框的形式对图像中的物体进行标记,常用于分类和目标检测。并可以将标记信息保存为PasclVOC(xml)、YOLO(txt)、CreateML(json)格式。…

Python中对含有转义字符的变量,如何处理

file_path C:\Users\EDY\PJ-IPAStudio\designer\project 这是一个路径的字符串,要访问这个路径下的文件,是会报错的 file_path rC:\Users\EDY\PJ-IPAStudio\designer\project 需要在前面添加 r 如果他是一个变量,如何对变量里的字符修改呢&…

0802功放2

功放要记一般的式子,而非最大的式子,因为总不能总开到最大音量上工作,而是在比较合适的音量上工作 运放的最大电压也是比电源低1~2V 饱和三极管的功率,电流越大,饱和压降越大???不…