matplotlib 骨骼关键点

本文介绍了如何使用matplotlib库在Python中进行骨骼关键点的可视化,包括展示效果图和绘制散点图的方法,特别提到了在使用'Agg'后端时可能出现的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

可视化骨骼关键点

效果图:​编辑

绘制散点图


可视化骨骼关键点

加上agg参数代码就不能可视化了:

matplotlib.use('Agg') 

plt.switch_backend('agg')

# author: muzhan
import matplotlib
import numpy as np
import matplotlib.pyplot as plt
# matplotlib.use('Agg')


ap1 = [[9.07790224, -72.22343977, -76.2384473, -14.76985357, 93.36553108,
        37.00967529, 50.77555181, 23.629042, -8.17606904, -55.17824984,
        -20.64523825, 128.93648202, 161.99088735, 137.73662061, -105.13621915,
        -173.42035763, -139.20512344],
       [17.67119202, 117.5121073, 80.80944741, 151.41362938, -82.1697299,
        -108.63658419, -62.51112022, 25.61594197, -0.93282285, -57.61404975,
        -33.30759321, -92.44999831, -192.53606268, -213.71209574, 110.08766607,
        213.40229899, 135.205
### YOLOv8 中实现关键点连线功能的方法 YOLOv8 提供了强大的关键点检测能力,能够识别图像中的多个关键点位置。然而,默认情况下,YOLOv8 的输出仅提供关键点的位置坐标,并不会自动绘制连接线表示人体或其他对象的结构关系[^1]。为了实现在检测到的关键点之间绘制连线的功能,可以按照以下方式处理: #### 数据准备与模型训练 在使用 YOLOv8 进行关键点检测之前,需要准备好带有关键点标注的数据集。通常,这种数据集中不仅包含关键点的位置信息,还定义了各个关键点之间的拓扑关系(即哪些点应该被连起来)。例如,在 COCO 数据集中,关键点的连接顺序已经被预定义好。 如果自定义数据集,则需手动指定关键点间的连接规则。这可以通过修改配置文件完成,具体路径位于 `ultralytics/yolo/data/datasets` 文件夹下[^3]。 #### 绘制连线的核心逻辑 要实现关键点连线功能,可以在推理阶段通过 Python 脚本对预测结果进行后处理。以下是具体的实现思路: 1. **获取关键点坐标** 使用 YOLOv8 推理 API 获取每张图片中所有目标及其对应的关键点坐标列表。假设返回的结果是一个字典形式的对象,其中包含了每个目标的关键点集合。 2. **定义连接规则** 预先设定一组索引来描述哪些关键点应相互连接。例如,对于人体姿态估计任务,COCO 数据集的标准连接规则如下: ```python skeleton = [ (0, 1), (0, 2), (1, 3), (2, 4), # 手臂部分 (5, 7), (7, 9), # 右侧肢体 (6, 8), (8, 10), # 左侧肢体 (5, 6), (11, 12), # 上半身骨架 (5, 11), (6, 12), (11, 13), # 下肢左侧 (12, 14), (13, 15), (14, 16) # 下肢右侧 ] ``` 3. **绘制线条** 利用 OpenCV 或 Matplotlib 库将上述连接规则应用于实际的关键点坐标上,从而绘制出对应的骨骼图。 下面是一段完整的代码示例用于展示如何基于 YOLOv8 输出绘制关键点连线: ```python import cv2 from ultralytics import YOLO def draw_skeleton(image, keypoints, skeleton): """ 在给定图像上绘制关键点和它们之间的连线。 参数: image -- 输入图像数组 keypoints -- 关键点坐标的二维列表 [[x1,y1], [x2,y2], ...] skeleton -- 定义关键点间连接关系的元组列表 [(i,j),(k,l)] 返回值: 带有绘制好的关键点和连线的新图像 """ for i, j in skeleton: pt1 = tuple(map(int, keypoints[i])) pt2 = tuple(map(int, keypoints[j])) if None not in {pt1, pt2} and all(pt1) and all(pt2): # 确保两点有效 cv2.line(image, pt1, pt2, color=(0, 255, 0), thickness=2) model = YOLO('yolov8n-pose.pt') # 加载预训练权重 results = model.predict(source='path/to/image.jpg', conf=0.5) for result in results: img = result.orig_img.copy() kpts_list = result.keypoints.xy.tolist() # 获取所有目标的关键点 for idx, kpts in enumerate(kpts_list): draw_skeleton(img, kpts, skeleton=skeleton) cv2.imshow("Skeleton", img) cv2.waitKey(0) ``` 此脚本加载了一个预先训练过的姿势估计算法模型并对其输入的一幅测试图片执行推断操作;随后提取该物体的所有关节节点位置作为参数传入函数内部完成绘图工作[^2]。 --- #### 注意事项 - 如果计划部署至边缘设备或嵌入式平台,可考虑将 PyTorch 模型转换为 ONNX 格式后再利用 TensorRT 等工具优化性能表现。 - 对于复杂场景下的多人姿态追踪问题,可能还需要额外引入 Kalman Filter 或 SORT 类似技术辅助解决遮挡情况下的身份匹配难题。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI算法网奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值