精华内容
下载资源
问答
  • 姿态估计

    2019-09-19 11:16:44
    终于说到了正题,姿态解算这一部分很重要,主要的基础就是惯性导航和多传感器数据融合,很多公司都在招...姿态估计(1)——互补滤波(Complementary filter ) 姿态估计(2)—— 扩展卡尔曼滤波(Extended Kalman...

    终于说到了正题,姿态解算这一部分很重要,主要的基础就是惯性导航和多传感器数据融合,很多公司都在招这方面的人才,如百度的无人驾驶在招传感器数据融合,网易的人机交互工程师也在找这方面的人,因为它是信息流的源泉,准确的姿态信息需要靠他们解算出来才能进行后续的步骤。

    姿态估计(1)——互补滤波(Complementary filter )

    姿态估计(2)—— 扩展卡尔曼滤波(Extended Kalman Filter—EKF)

    展开全文
  • 1、人体姿态估计简介 2、人体姿态估计数据集 3、OpenPose库 4、实现原理 5、实现神经网络 6、实现代码 1、人体姿态估计简介 人体姿态估计(Human Posture Estimation),是通过将图片中已检测到的人体关键点...

    目录

    1、人体姿态估计简介

    2、人体姿态估计数据集

    3、OpenPose库

    4、实现原理

    5、实现神经网络

    6、实现代码


    1、人体姿态估计简介

    人体姿态估计(Human Posture Estimation),是通过将图片中已检测到的人体关键点正确的联系起来,从而估计人体姿态。

    人体关键点通常对应人体上有一定自由度的关节,比如颈、肩、肘、腕、腰、膝、踝等,如下图。

     

    通过对人体关键点在三维空间相对位置的计算,来估计人体当前的姿态。

    进一步,增加时间序列,看一段时间范围内人体关键点的位置变化,可以更加准确的检测姿态,估计目标未来时刻姿态,以及做更抽象的人体行为分析,例如判断一个人是否在打电话等。

    人体姿态检测的挑战:

    1. 每张图片中包含的人的数量是未知的。
    2. 人与人之间的相互作用是非常复杂的,比如接触、遮挡等,这使得联合各个肢体,即确定一个人有哪些部分变得困难。
    3. 图像中人越多,计算复杂度越大(计算量与人的数量正相关),这使得实时检测变得困难。

    2、人体姿态估计数据集

    由于缺乏高质量的数据集,在人体姿势估计方面进展缓慢。在近几年中,一些具有挑战性的数据集已经发布,这使得研究人员进行研发工作。人体姿态估计常用数据集:

    3、OpenPose库

     OpenPose人体姿态识别项目是美国卡耐基梅隆大学(CMU)基于卷积神经网络和监督学习并以Caffe为框架开发的开源库。可以实现人体动作、面部表情、手指运动等姿态估计。适用于单人和多人,具有极好的鲁棒性。是世界上首个基于深度学习的实时多人二维姿态估计应用,基于它的实例如雨后春笋般涌现。

    其理论基础来自Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields ,是CVPR 2017的一篇论文,作者是来自CMU感知计算实验室的曹哲(http://people.eecs.berkeley.edu/~zhecao/#top),Tomas Simon,Shih-En Wei,Yaser Sheikh 。

    人体姿态估计技术在体育健身、动作采集、3D试衣、舆情监测等领域具有广阔的应用前景,人们更加熟悉的应用就是抖音尬舞机。

    OpenPose项目Github链接:https://github.com/CMU-Perceptual-Computing-Lab/openpose

    4、实现原理

    1. 输入一幅图像,经过卷积网络提取特征,得到一组特征图,然后分成两个岔路,分别使用 CNN网络提取Part Confidence Maps 和 Part Affinity Fields;
    2. 得到这两个信息后,我们使用图论中的 Bipartite Matching(偶匹配) 求出Part Association,将同一个人的关节点连接起来,由于PAF自身的矢量性,使得生成的偶匹配很正确,最终合并为一个人的整体骨架;
    3. 最后基于PAFs求Multi-Person Parsing—>把Multi-person parsing问题转换成graphs问题—>Hungarian Algorithm(匈牙利算法)

    (匈牙利算法是部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法。)

    5、实现神经网络

    阶段一:VGGNet的前10层用于为输入图像创建特征映射。

    阶段二:使用2分支多阶段CNN,其中第一分支预测身体部位位置(例如肘部,膝部等)的一组2D置信度图(S)。 如下图所示,给出关键点的置信度图和亲和力图 - 左肩。

    第二分支预测一组部分亲和度的2D矢量场(L),其编码部分之间的关联度。 如下图所示,显示颈部和左肩之间的部分亲和力。

    阶段三: 通过贪心推理解析置信度和亲和力图,对图像中的所有人生成2D关键点。

    6、实现代码

    import cv2 as cv
    import numpy as np
    import argparse
    
    parser = argparse.ArgumentParser()
    parser.add_argument('--input', help='Path to image or video. Skip to capture frames from camera')
    parser.add_argument('--thr', default=0.2, type=float, help='Threshold value for pose parts heat map')
    parser.add_argument('--width', default=368, type=int, help='Resize input to specific width.')
    parser.add_argument('--height', default=368, type=int, help='Resize input to specific height.')
    
    args = parser.parse_args()
    
    BODY_PARTS = { "Nose": 0, "Neck": 1, "RShoulder": 2, "RElbow": 3, "RWrist": 4,
                   "LShoulder": 5, "LElbow": 6, "LWrist": 7, "RHip": 8, "RKnee": 9,
                   "RAnkle": 10, "LHip": 11, "LKnee": 12, "LAnkle": 13, "REye": 14,
                   "LEye": 15, "REar": 16, "LEar": 17, "Background": 18 }
    
    POSE_PAIRS = [ ["Neck", "RShoulder"], ["Neck", "LShoulder"], ["RShoulder", "RElbow"],
                   ["RElbow", "RWrist"], ["LShoulder", "LElbow"], ["LElbow", "LWrist"],
                   ["Neck", "RHip"], ["RHip", "RKnee"], ["RKnee", "RAnkle"], ["Neck", "LHip"],
                   ["LHip", "LKnee"], ["LKnee", "LAnkle"], ["Neck", "Nose"], ["Nose", "REye"],
                   ["REye", "REar"], ["Nose", "LEye"], ["LEye", "LEar"] ]
    
    inWidth = args.width
    inHeight = args.height
    
    net = cv.dnn.readNetFromTensorflow("graph_opt.pb")
    
    cap = cv.VideoCapture(args.input if args.input else 0)
    
    while cv.waitKey(1) < 0:
        hasFrame, frame = cap.read()
        if not hasFrame:
            cv.waitKey()
            break
    
        frameWidth = frame.shape[1]
        frameHeight = frame.shape[0]
        
        net.setInput(cv.dnn.blobFromImage(frame, 1.0, (inWidth, inHeight), (127.5, 127.5, 127.5), swapRB=True, crop=False))
        out = net.forward()
        out = out[:, :19, :, :]  # MobileNet output [1, 57, -1, -1], we only need the first 19 elements
    
        assert(len(BODY_PARTS) == out.shape[1])
    
        points = []
        for i in range(len(BODY_PARTS)):
            # Slice heatmap of corresponging body's part.
            heatMap = out[0, i, :, :]
    
            # Originally, we try to find all the local maximums. To simplify a sample
            # we just find a global one. However only a single pose at the same time
            # could be detected this way.
            _, conf, _, point = cv.minMaxLoc(heatMap)
            x = (frameWidth * point[0]) / out.shape[3]
            y = (frameHeight * point[1]) / out.shape[2]
            # Add a point if it's confidence is higher than threshold.
            points.append((int(x), int(y)) if conf > args.thr else None)
    
        for pair in POSE_PAIRS:
            partFrom = pair[0]
            partTo = pair[1]
            assert(partFrom in BODY_PARTS)
            assert(partTo in BODY_PARTS)
    
            idFrom = BODY_PARTS[partFrom]
            idTo = BODY_PARTS[partTo]
    
            if points[idFrom] and points[idTo]:
                cv.line(frame, points[idFrom], points[idTo], (0, 255, 0), 3)
                cv.ellipse(frame, points[idFrom], (3, 3), 0, 0, 360, (0, 0, 255), cv.FILLED)
                cv.ellipse(frame, points[idTo], (3, 3), 0, 0, 360, (0, 0, 255), cv.FILLED)
    
        t, _ = net.getPerfProfile()
        freq = cv.getTickFrequency() / 1000
        cv.putText(frame, '%.2fms' % (t / freq), (10, 20), cv.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 0))
    
        cv.imshow('OpenPose using OpenCV', frame)

    本项目实现代码及模型参见网址:https://download.csdn.net/download/m0_38106923/11265524

     关注公众号,发送关键字:关键点检测,获取资源。

    展开全文
  • OpenCV实现人体姿态估计(人体关键点检测)OpenPose

    万次阅读 多人点赞 2019-08-04 11:53:03
    OpenCV实现人体姿态估计(人体关键点检测)OpenPose OpenPose人体姿态识别项目是美国卡耐基梅隆大学(CMU)基于卷积神经网络和监督学习并以Caffe为框架开发的开源库。可以实现人体动作、面部表情、手指运动等姿态...

    OpenCV实现人体姿态估计(人体关键点检测)OpenPose


     

    OpenPose人体姿态识别项目是美国卡耐基梅隆大学(CMU)基于卷积神经网络和监督学习并以Caffe为框架开发的开源库。可以实现人体动作、面部表情、手指运动等姿态估计。适用于单人和多人,具有极好的鲁棒性。是世界上首个基于深度学习的实时多人二维姿态估计应用,基于它的实例如雨后春笋般涌现。

    其理论基础来自Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields ,是CVPR 2017的一篇论文,作者是来自CMU感知计算实验室的曹哲(http://people.eecs.berkeley.edu/~zhecao/#top),Tomas Simon,Shih-En Wei,Yaser Sheikh 。

    人体姿态估计技术在体育健身、动作采集、3D试衣、舆情监测等领域具有广阔的应用前景,人们更加熟悉的应用就是抖音尬舞机。

    OpenPose的效果并不怎么好,强烈推荐《2D Pose人体关键点检测(Python/Android /C++ Demo)2D Pose人体关键点实时检测(Python/Android /C++ Demo)_pan_jinquan的博客-CSDN博客 ,提供了C++推理代码和Android Demo

    人体关键点检测需要用到人体检测,请查看鄙人另一篇博客:2D Pose人体关键点实时检测(Python/Android /C++ Demo)_pan_jinquan的博客-CSDN博客

    OpenPose项目Github链接:https://github.com/CMU-Perceptual-Computing-Lab/openpose

    OpenCV实现的Demo链接:https://github.com/PanJinquan/opencv-learning-tutorials/blob/master/opencv_dnn_pro/openpose-opencv/openpose_for_image_test.py


    1、实现原理

    输入一幅图像,经过卷积网络提取特征,得到一组特征图,然后分成两个岔路,分别使用 CNN网络提取Part Confidence Maps 和 Part Affinity Fields;


    得到这两个信息后,我们使用图论中的 Bipartite Matching(偶匹配) 求出Part Association,将同一个人的关节点连接起来,由于PAF自身的矢量性,使得生成的偶匹配很正确,最终合并为一个人的整体骨架;
    最后基于PAFs求Multi-Person Parsing—>把Multi-person parsing问题转换成graphs问题—>Hungarian Algorithm(匈牙利算法)
    (匈牙利算法是部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法。)


    2、实现神经网络

    阶段一:VGGNet的前10层用于为输入图像创建特征映射。

    阶段二:使用2分支多阶段CNN,其中第一分支预测身体部位位置(例如肘部,膝部等)的一组2D置信度图(S)。 如下图所示,给出关键点的置信度图和亲和力图 - 左肩。

    第二分支预测一组部分亲和度的2D矢量场(L),其编码部分之间的关联度。 如下图所示,显示颈部和左肩之间的部分亲和力。

    阶段三: 通过贪心推理解析置信度和亲和力图,对图像中的所有人生成2D关键点。


    3.OpenCV-OpenPose实现推理代码

    # -*-coding: utf-8 -*-
    """
        @Project: python-learning-notes
        @File   : openpose_for_image_test.py
        @Author : panjq
        @E-mail : pan_jinquan@163.com
        @Date   : 2019-07-29 21:50:17
    """
    
    import cv2 as cv
    import os
    import glob
    
    BODY_PARTS = {"Nose": 0, "Neck": 1, "RShoulder": 2, "RElbow": 3, "RWrist": 4,
                  "LShoulder": 5, "LElbow": 6, "LWrist": 7, "RHip": 8, "RKnee": 9,
                  "RAnkle": 10, "LHip": 11, "LKnee": 12, "LAnkle": 13, "REye": 14,
                  "LEye": 15, "REar": 16, "LEar": 17, "Background": 18}
    
    POSE_PAIRS = [["Neck", "RShoulder"], ["Neck", "LShoulder"], ["RShoulder", "RElbow"],
                  ["RElbow", "RWrist"], ["LShoulder", "LElbow"], ["LElbow", "LWrist"],
                  ["Neck", "RHip"], ["RHip", "RKnee"], ["RKnee", "RAnkle"], ["Neck", "LHip"],
                  ["LHip", "LKnee"], ["LKnee", "LAnkle"], ["Neck", "Nose"], ["Nose", "REye"],
                  ["REye", "REar"], ["Nose", "LEye"], ["LEye", "LEar"]]
    
    
    def detect_key_point(model_path, image_path, out_dir, inWidth=368, inHeight=368, threshhold=0.2):
        net = cv.dnn.readNetFromTensorflow(model_path)
        frame = cv.imread(image_path)
        frameWidth = frame.shape[1]
        frameHeight = frame.shape[0]
        scalefactor = 2.0
        net.setInput(
            cv.dnn.blobFromImage(frame, scalefactor, (inWidth, inHeight), (127.5, 127.5, 127.5), swapRB=True, crop=False))
        out = net.forward()
        out = out[:, :19, :, :]  # MobileNet output [1, 57, -1, -1], we only need the first 19 elements
        assert (len(BODY_PARTS) == out.shape[1])
        points = []
        for i in range(len(BODY_PARTS)):
            # Slice heatmap of corresponging body's part.
            heatMap = out[0, i, :, :]
            # Originally, we try to find all the local maximums. To simplify a sample
            # we just find a global one. However only a single pose at the same time
            # could be detected this way.
            _, conf, _, point = cv.minMaxLoc(heatMap)
            x = (frameWidth * point[0]) / out.shape[3]
            y = (frameHeight * point[1]) / out.shape[2]
            # Add a point if it's confidence is higher than threshold.
            points.append((int(x), int(y)) if conf > threshhold else None)
        for pair in POSE_PAIRS:
            partFrom = pair[0]
            partTo = pair[1]
            assert (partFrom in BODY_PARTS)
            assert (partTo in BODY_PARTS)
    
            idFrom = BODY_PARTS[partFrom]
            idTo = BODY_PARTS[partTo]
    
            if points[idFrom] and points[idTo]:
                cv.line(frame, points[idFrom], points[idTo], (0, 255, 0), 3)
                cv.ellipse(frame, points[idFrom], (3, 3), 0, 0, 360, (0, 0, 255), cv.FILLED)
                cv.ellipse(frame, points[idTo], (3, 3), 0, 0, 360, (0, 0, 255), cv.FILLED)
    
        t, _ = net.getPerfProfile()
        freq = cv.getTickFrequency() / 1000
        cv.putText(frame, '%.2fms' % (t / freq), (10, 20), cv.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 0))
    
        cv.imwrite(os.path.join(out_dir, os.path.basename(image_path)), frame)
        cv.imshow('OpenPose using OpenCV', frame)
        cv.waitKey(0)
    
    
    def detect_image_list_key_point(image_dir, out_dir, inWidth=480, inHeight=480, threshhold=0.3):
        image_list = glob.glob(image_dir)
        for image_path in image_list:
            detect_key_point(image_path, out_dir, inWidth, inHeight, threshhold)
    
    
    if __name__ == "__main__":
        model_path = "pb/graph_opt.pb"
        # image_path = "body/*.jpg"
        out_dir = "result"
        # detect_image_list_key_point(image_path,out_dir)
        image_path = "./test.jpg"
        detect_key_point(model_path, image_path, out_dir, inWidth=368, inHeight=368, threshhold=0.05)

    参考资料:

    [1].Python+OpenCV+OpenPose实现人体姿态估计(人体关键点检测)_不脱发的程序猿-CSDN博客

    展开全文
  • 头部姿态估计

    2016-11-17 20:35:44
    深度图像,头部姿态估计
  • 电信设备-移动物体位置姿态估计装置和移动物体位置姿态估计方法.zip
  • AHRS,MEMS姿态估计

    2019-04-11 14:11:50
    UKF姿态估计算法。同时,另有十种论文中常见姿态估计方法如:EKF姿态估计、、Madgwick算法、Mahony算法、PX4姿态估计、四元数、扩展信息滤波、tride、DCM等等 有数据,有参考文献
  • 姿态估计调研

    2019-10-09 10:47:21
    文章目录 人体姿态估计的过去,现在,未来 重新思考人体姿态估计 Rethinking Human Pose Estimation GitHub:人体姿态估计最全资料集锦 awesome-human-pose-estimation ...

    综述

    1. 人体姿态估计的过去,现在,未来
    2. 重新思考人体姿态估计 Rethinking Human Pose Estimation
    3. GitHub:人体姿态估计最全资料集锦
    4. awesome-human-pose-estimation

    有代码的论文

    2D pose estimation

    RGBD

    • 3D Human Pose Estimation in RGBD Images for Robotic Task Learning

    3D Human Pose

    • Lifting from the Deep: Convolutional 3D Pose Estimation from a Single Image
    • 3D human pose estimation in video with temporal convolutions and semi-supervised training#SOTA

    Multi-view 3D Human Pose

    • Self-Supervised Learning of 3D Human Pose using Multi-view Geometry#13 best
    • Learnable Triangulation of Human Pose#SOTA
    • Cross View Fusion for 3D Human Pose Estimation#SOTA
    • Unsupervised Geometry-Aware Representation for 3D Human Pose Estimation

    最相关的论文

    • A Multi-view RGB-D Approach for Human Pose Estimation in Operating Rooms
    • MVOR: A Multi-view RGB-D Operating Room Dataset for 2D and 3D Human Pose Estimation

    数据集

    影像精度的因素

    • 环境
    • 着装

    Advantage of RGBD multi-view 3d pose estimation

    • enables us to back-project points that are only visible in one view, while in multi-view RGB systems, points should be visible in at least two views.
    • reduce the risk of occlusions
    • In a multi-view RGB system, correspondences across views are traditionally established by relying on appearance similarity and triangulation [6, 14, 2, 7], which is unreliable in OR environments containing many surfaces that are visually similar
    展开全文
  • 物体姿态估计综述

    2021-03-22 22:58:43
    传统的6d位姿估计fangfa1_6D姿态估计算法汇总(上) 物体姿态估计——DeepIM 物体姿态估计——SilhoNet 人工智能机器人抓取中用于三维物体姿态估计和抓取规划的RGB方法 DeepIM:基于深度网络的6D位姿迭代新方法 姿态...
  • 2D单人姿态估计

    2018-01-26 12:08:55
    2D环境下单人姿态估计的方法综述,由电子科技大学的张峰制作
  • 接下来,我会为大家无死角的解析DenseFusion(6D姿态估计-物体六自由度位姿估计),之前的文章,如下(以下是我工作的所有项目,每一个项目都是,我都做了百分百的详细解读,随着项目增多,为了方便不臃肿,所以给出...
  • 人脸姿态估计

    千次阅读 2017-05-12 17:12:36
    人脸姿态估计
  • 姿态估计

    2017-11-02 15:44:28
    实时多人姿态估计caffe_rtpose-master.zip。。。。。。。。。。。。
  • 人体姿态估计综述

    千次阅读 多人点赞 2020-10-14 19:18:11
    一、人体姿态估计常用数据集 二、人体姿态估计常用评估指标 三、人体姿态估计论文 3.1 DeepPose: Human Pose Estimation via Deep Neural Networks(2014) 3.2 Convolutional Pose Machines(2016) 3.3Stacked ...
  • 以下链接是个人关于DenseFusion(6D姿态估计) 所有见解,如有错误欢迎大家指出,我会第一时间纠正。有兴趣的朋友可以加微信:a944284742相互讨论技术。若是帮助到了你什么,一定要记得点赞!因为这是对我最大的鼓励。...
  • 针对四旋翼飞行器姿态估计中传感器由于旋翼振动带来的测量误差,通过卡尔曼滤波方法融合加速度计和陀螺仪的测量数据来提高姿态估计精度,减少因载体振动带来的噪声并解决陀螺漂移问题。先分析了惯性器件误差类型,然后...
  • 深度图像 头部姿态估计
  • 基于姿态加权核回归的航天器姿态估计
  • 以下链接是个人关于DenseFusion(6D姿态估计) 所有见解,如有错误欢迎大家指出,我会第一时间纠正。有兴趣的朋友可以加微信:a944284742相互讨论技术。若是帮助到了你什么,一定要记得点赞!因为这是对我最大的鼓励。...
  • 这是基于python的opencv人体动作姿态估计的源代码。
  • pytorch实现的头部姿态估计(偏航、横滚、俯仰)和情绪检测算法
  • 人体姿态估计梳理

    2020-12-18 14:55:05
    重新思考人体姿态估计 Rethinking Human Pose Estimation 人体姿态估计的过去、现在和未来 A 2019 guide to Human Pose Estimation witth deep learning 人体姿态估计(Human Pose Estimation)经典方法整理 ...
  • 基于 PSO 的人脸姿态估计
  • 姿态篇:一.初识姿态估计

    万次阅读 多人点赞 2018-08-16 18:17:59
    [深入浅出多旋翼飞控开发][姿态篇][一][初识姿态估计] 作者:BlueSky QQ : 352707983 Github 一.什么是姿态 在学习姿态估计之前,我们先来了解一下,什么是“姿态”。 想象一架飞机准备起飞,于是它在...
  • 人体姿态估计

    千次阅读 2019-06-13 22:19:16
    人体姿态估计(Human Pose Estimation)也称为人体关键点检测(Human Keypoints Detection)。对于人体姿态估计的研究,大致可做如下分类。 1. RGB vs RGBD 后者多一项Depth信息,常用于3D人体姿态估计的研究。 2...
  • 人体姿态估计研究文集 3D人体姿态估计笔记 人体姿态估计的过去,现在,未来 重新思考人体姿态估计 人体姿态估计(Human Pose Estimation)经典方法整理 A 2019 guide to Human Pose Estimation with Deep ...
  • 文中针对羽毛球运动系统化、科学化和高效化训练的需求,研究了基于姿态估计的羽毛球运动辅助训练系统。该系统采用分部三维姿态估计的方法,将三维人体姿态估计问题简化为多个二维子问题。通过采用贝叶斯算法对人体...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,747
精华内容 9,098
关键字:

姿态估计