yydsczq_yyds 2024-01-31 12:34 采纳率: 0%
浏览 12

openpose轻量级版本,不能找到全部关键点时,关键点坐标的输出

在pycharm中运行openpose轻量级版本的demo.py文件,可以识别出人体的关键点,在其中加入坐标输出的模块可以输出所有关键点的坐标。但是当不能找到人体全部关键点时,坐标的输出就会混乱,且失去了关键点序号与人体部位的一一对应关系。运行完成后报一个数组越界的错误IndexError: index 14 is out of bounds for axis 0 with size 14。
我希望比如当只能找到14个点时(标准为18点模型),找不到的点的坐标输出为-1,能找到的点保持关键点序号与人体部位的一一对应关系。代码应该怎么修改?求专业人士解答。
图1:我加入的坐标输出的代码。
图2:全部关键点都能找到时的输出。正确。
图3:部分关键点找不到(不是置信度过低,是压根儿没有)时的输出。输出的非常乱,且失去了关键点序号与人体部位的一一对应关系。

img

img

img

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-01-31 12:36
    关注

    引自免费微信小程序:皆我百晓生

    根据你的描述,你想要修改openpose轻量级版本的demo代码,以便在找不到全部关键点时输出正确的坐标,并保持关键点序号与人体部位的一对一关系。

    为了达到这个目标,你可以使用以下步骤进行修改:

    1. 在代码中找到检测到的关键点数组,通常是一个二维数组。你可以找到类似于keypoints的变量。
    2. 确保关键点数组的长度为标准的18,如果不足18个点,就在数组末尾补上缺失的点。
    3. 在补上缺失的点时,将缺失点的坐标设置为-1。
    4. 最后,使用修改后的关键点数组进行后续操作,如输出坐标。

    下面是一个示例代码的修改,帮助你实现所需的功能:

    keypoints = # 检测到的关键点数组
    
    # 确保关键点数组长度为标准的18
    if len(keypoints) < 18:
        for i in range(len(keypoints), 18):
            keypoints.append([-1, -1, -1])  # 将缺失的点坐标设置为[-1, -1, -1]
    
    # 输出关键点的坐标
    for i, kp in enumerate(keypoints):
        x, y, confidence = kp
        print(f"关键点 {i}: 坐标 ({x}, {y}), 置信度: {confidence}")
    

    这样修改后,无论找到多少个关键点,输出的关键点坐标都是正确的,并且保持关键点序号与人体部位的一一对应关系。

    希望以上解决方案能够帮到你!如果你还有其他问题,请随时提问。

    评论

报告相同问题?

问题事件

  • 创建了问题 1月31日