【OpenCV】129 OpenCV DNN 调用openpose模型实现姿态评估

138 篇文章 38 订阅
订阅专栏

129 OpenCV DNN 调用openpose模型实现姿态评估

代码

# To use Inference Engine backend, specify location of plugins:
# export LD_LIBRARY_PATH=/opt/intel/deeplearning_deploymenttoolkit/deployment_tools/external/mklml_lnx/lib:$LD_LIBRARY_PATH
import cv2 as cv
import numpy as np
import argparse

parser = argparse.ArgumentParser(
        description='This script is used to demonstrate OpenPose human pose estimation network '
                    'from https://github.com/CMU-Perceptual-Computing-Lab/openpose project using OpenCV. '
                    'The sample and model are simplified and could be used for a single person on the frame.')
parser.add_argument('--input', help='Path to image or video. Skip to capture frames from camera', default='../images/bodypose.jpg')
parser.add_argument('--proto', help='Path to .prototxt', default='openpose_pose_coco.prototxt')
parser.add_argument('--model', help='Path to .caffemodel', default='pose_iter_440000.caffemodel')
parser.add_argument('--dataset', help='Specify what kind of model was trained. '
                                      'It could be (COCO, MPI) depends on dataset.', default='COCO')
parser.add_argument('--thr', default=0.1, 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()

if args.dataset == 'COCO':
    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"] ]
else:
    assert(args.dataset == 'MPI')
    BODY_PARTS = { "Head": 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, "Chest": 14,
                   "Background": 15 }

    POSE_PAIRS = [ ["Head", "Neck"], ["Neck", "RShoulder"], ["RShoulder", "RElbow"],
                   ["RElbow", "RWrist"], ["Neck", "LShoulder"], ["LShoulder", "LElbow"],
                   ["LElbow", "LWrist"], ["Neck", "Chest"], ["Chest", "RHip"], ["RHip", "RKnee"],
                   ["RKnee", "RAnkle"], ["Chest", "LHip"], ["LHip", "LKnee"], ["LKnee", "LAnkle"] ]

inWidth = args.width
inHeight = args.height

net = cv.dnn.readNetFromCaffe(cv.samples.findFile(args.proto), cv.samples.findFile(args.model))

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]
    inp = cv.dnn.blobFromImage(frame, 1.0 / 255, (inWidth, inHeight),
                              (0, 0, 0), swapRB=False, crop=False)
    net.setInput(inp)
    out = net.forward()

    # 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)

实验结果

在这里插入图片描述

解释

OpenCV DNN模块中使用openopse的深度学习模型,实现人体单人姿态评估, 首先需要下载人体姿态评估的预训练模型。
基于COCO数据集训练的模型下载地址如下:
模型地址
prototxt

基于MPI数据集训练的模型下载地址如下:
模型地址
prototxt

手势姿态模型
模型地址
prototxt

其中COCO模型会生成18个点,MPI模型生成14个点,手势姿态模型生成20个点,根据这些点可以绘制出人体的关键节点或者手的关键节点。OpenCV DNN支持的姿态评估都是基于预训练的Caffe模型,而且模型没有经过专门的优化处理,速度特别的慢,在CPU上基本是秒级别才可以出结果,离实时运行差好远,但是对一些静态的手势分析还是有一定的帮助与作用。
代码实现可以分为如下几个步骤

  1. 加载网络
  2. 获取heatmap数据,根据heatmap寻找最大score与位置信息
  3. 根据位置信息,绘制连接直线

所有内容均来源于贾志刚老师的知识星球——OpenCV研习社,本文为个人整理学习,已获得贾老师授权,有兴趣、有能力的可以加入贾老师的知识星球进行深入学习。
在这里插入图片描述

opencv dnn模块调用caffe模型
07-15
利用opencv dnn模块调用caffe 模型,并给出一个训练好的模型(cifar10集合上的image classification模型),cmakelists.txt要设置CMAKE_MODULE_PATH指向opencv#3.3.1的头文件和库的路径
OpenPose 基于OpenCV DNN 的多人姿态估计
长风破浪会有时,直挂云帆济沧海
03-29 5182
原文: OpenPose 基于OpenCV DNN 的多人姿态估计 - AIUAI OpenPose 可以对图片中单个人体目标的姿态估计,也可以处理图片中多人的姿态估计. OpenPose 基于OpenCV DNN 的单人姿态估计 - AIUAI 这里主要记录基于 OpenCV 4.x DNN 模块和 OpenPose 开源模型的多人人体姿态估计 的实现. 采用的模型的基于 COCO 数据集训...
opencv深度学习识别手部姿态
12-05
在Linux系统下实现opencv库需要自己安装,压缩包里面有完整的素材,使用的LDE是Clion
OpenCV自带dnn的Example研究(4)— openpose
weixin_30299539的博客
04-29 161
这个博客系列,简单来说,今天我们就是要研究https://docs.opencv.org/master/examples.html下的6个文件,看看在最新的OpenCV中,它们是如何发挥作用的。在配置使用的过程中,需要注意使用较高版本的VS避免编译器兼容问题;由于DNN程序的运行依赖于训练成功的模型,因此需要预先下载准备;此外如果出现各种报错,需要对症下药。此外,由于需要使用common.hpp文...
OpenPose 基于OpenCV DNN 的单人姿态估计
长风破浪会有时,直挂云帆济沧海
03-29 5142
原文: OpenPose 基于OpenCV DNN 的单人姿态估计 - AIUAI OpenCV4.0 版本以后可以直接读取 Caffe、TensorFlow、ONNX 等模型的 API,直接采用OpenCVDNN 模块即可. 这里主要测试下基于 DNN 模块和 OpenPose 模型的单人人体姿态估计的具体实现. Github 项目 - OpenPose 关键点输出格式 - AIUAI ...
OpenCV dnn调用keras生成的深度学习模型,判断图像分类
08-31
在本项目中,我们将探讨如何将使用Keras构建的深度学习模型应用于OpenCVdnn模块,以实现交通标志的图像分类。Keras是一个高级神经网络API,它可以在TensorFlow等后端上运行,而OpenCVdnn模块则允许我们在计算机...
OpenNI读取深度图像与彩色图像并显示,OpenCV调用openpose模型OpenNI彩色图像进行姿态估计
05-20
在这个项目中,OpenCV被用来调用OpenPose模型,这是一个实时的人体姿态估计算法,可以识别出图像中人体的关键关节位置。 首先,我们需要了解OpenNI的工作原理。OpenNI通过与硬件设备通信,能够获取到原始的深度图像...
Opencv DNN各种网络模型
09-07
OpenCV(开源计算机视觉库)中的DNN(Deep Neural Network)模块是用于处理深度学习模型的强大工具,它支持TensorFlow、Caffe、ONNX等多种框架训练的模型。本压缩包文件"OpenCV_dnn_module"可能包含了使用OpenCV的...
opencv-dnn模块调用YOLO模型进行目标检测
10-09
该文件中代码通过C++和opencvDNN模块调用darknet训练的yolo检测模型实现目标检测。
opencv dnn模块 示例(7) openpose关键点
热爱生活,忠于自己
02-12 5873
opencv dnn openpose关键点检测。三个模型测试 coco、mpi、hand。
opepose opencv_DNN人体姿态检测模型
03-08
opencv dnn模块 openpose人体姿态检测caffe模型 openpose_pose_coco.prototxt
graph_opt—CV之DNN:基于OpenPoseOpenCV利用DNN算法实现对单人体姿态(美女跳舞)实时估计检测.rar
12-17
graph_opt—CV之DNN:基于OpenPoseOpenCV利用DNN算法实现对单人体姿态(美女跳舞)实时估计检测.rar
头部姿势估计:使用TensorFlow和OpenCV进行头部姿势估计
02-05
头部姿势估计 使用TensorFlow和OpenCV进行实时人头姿势估计。 入门 这些说明将为您提供在本地计算机上运行并运行的项目的副本,以进行开发和测试。 先决条件 该代码已在Ubuntu 20.04上进行了测试。 正在安装 该存储库已经提供了用于面部标志检测的预训练模型。 只是git clone然后就可以了。 # From your favorite development directory: git clone https://github.com/yinguobing/head-pose-estimation.git 跑步 视频文件或摄像头索引应通过参数分配。 如果未提供任何来源
opencv dnn模块的demo
04-29
opencv dnn模块的demo,详情可见下面文章 http://blog.csdn.net/weixinhum/article/details/70982048
CV之IPE之DNN:基于OpenPoseOpenCV利用DNN算法的.pb文件实现对视频单个体进行实时姿态估计检测(以詹姆斯扣篮+美女跳舞为例)案例应用
近期请国内外头部出版社可尽快私信博主!——心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,谦虚,自律,反思,成长,还算是比较正能量的博主,公益免费传播……内心特别想在AI界做出一些可以推进历史进程影响力的东西(兴趣使然,有点小情怀,也有点使命感呀)…
12-17 5973
CV之IPE之DNN:基于OpenPoseOpenCV利用DNN算法的.pb文件实现对视频单个体进行实时姿态估计检测(以詹姆斯扣篮+美女跳舞为例)案例应用。
OpenCV使用OpenPose dnn进行人或手姿势检测的实例(附完整代码)
希望我的博客,能帮上你解决学习中工作中所遇到的问题
04-26 875
OpenCV使用OpenPose dnn进行人或手姿势检测的实例OpenCV使用OpenPose dnn进行人或手姿势检测的实例 OpenCV使用OpenPose dnn进行人或手姿势检测的实例 #include <opencv2/dnn.hpp> #include <opencv2/imgproc.hpp> #include <opencv2/highgui.hpp> using namespace cv; using namespace cv::dnn; #inclu
openpose实操(三)基于OpenCV使用OpenPose进行多个人体姿态估计
qq_43258953的博客
02-29 2171
OpenPoseOpenCV DNN 实现 一,模型加载 1.建模,cv2.dnn.readNetFromCaffe(),需要两个参数,模型结构文件prototxt,及模型权重文件caffemodel。 2.cv2.dnn.blobFromImage用于把image转成网络输入的blob。 3.net.setInput() blob输入网络模型 4.output = net.forward(...
OpenCV深度神经网络实现人体姿态评估
小白学视觉
11-15 939
点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达OpenCV DNN模块介绍OpenCV自从发布了DNN模块之后,就开始以开挂的方式支持各种深度学习预训练模型调用,...
3,第一次尝试使用 OpenCV 基于深度学习的人体姿态估计——实验1
Mr.林先生的博客
10-09 619
参考博文:人体姿态项目的一个博客 https://learnopencv.com/deep-learning-based-human-pose-estimation-using-opencv-cpp-python/ 本项目实现: 1.single 单人图像的姿态扫描 2.single 单人视频的姿态识别 插播一个有意思的哔哩哔哩视频:https://www.bilibili.com/video/BV1fW411N7nf?spm_id_from=333.999.0.0 极乐净土多人体姿态识别 我们将看到如何
OpenCvSharp.Dnn 调用onnx模型
最新发布
04-04
OpenCvSharp.Dnn是一个...在使用OpenCvSharp.Dnn调用ONNX模型时,你可以按照以下步骤进行操作: 1. 导入必要的命名空间: ```csharp using OpenCvSharp; using OpenCvSharp.Dnn; ``` 2. 加载ONNX模型: ```csharp ...
写文章

热门文章

  • HSV图像与RGB图像分布代表着什么意思 4839
  • Windows10下Tensorflow2.0 安装及环境配置教程 4274
  • 【OpenCV】45 图像二值化与去噪 4207
  • 关于机器学习算法中的准确率(Accuracy)、精准率(Precision)、召回率(Recall)的理解 2660
  • Ubuntu中修改Home目录下中文目录为英文 1815

分类专栏

  • OpenCV 138篇
  • 随感
  • Jetson 1篇
  • LInux 1篇
  • Tensorflow 2篇
  • Python 1篇
  • 深度学习 2篇
  • 数据结构 1篇
  • 笔记 4篇
  • 机器学习 4篇

最新评论

  • 【OpenCV】113 KMeans图像分割—主色彩提取

    震震课代表: 博主你好,请问最后可视化的颜色色带可以实现按颜色占比从大到小排序吗?

  • 【OpenCV】32 图像梯度–更多梯度算子(rober算子、prewitt算子)

    伏尔加河的卷毛: 想问下为什么imshow画出来的是三个边缘检测结果?

  • Ubuntu中修改Home目录下中文目录为英文

    xuuyann: 简洁明了,点赞!

  • 【OpenCV】135 OpenCV DNN 实时快速的图像风格迁移

    学python的小菜鸡一枚: 使用的时候报错。请问是什么原因啊? net = cv.dnn.readNetFromTorch(base_dir + styles[index]) cv2.error: OpenCV(4.5.5) D:\a\opencv-python\opencv-python\opencv\modules\dnn\src\torch\THDiskFile.cpp:496: error: (-2:Unspecified error) cannot open <../models/fast_style/la_muse.t7> in mode r in function 'TH::THDiskFile_new'

  • 【OpenCV】知识汇总

    ReedswayYuH.C: 是在jetson上进行的开发吗

大家在看

  • VD4054 线性锂离子电池充电管理IC 328
  • NS2159 1A 线性锂离子电池充电管理IC
  • 时间序列无监督异常点检测算法_孤立森林,局部离群因子检测和自编码器
  • (32)时钟专题--->(032)时钟输入全局缓冲原语 2
  • Certbot实现自动签发及续签Let‘s Encrypt免费SSL证书

最新文章

  • 【Jetson】Jetson Nano学习汇总
  • HSV图像与RGB图像分布代表着什么意思
  • Ubuntu中修改Home目录下中文目录为英文
2020年147篇
2019年6篇

目录

目录

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

玻璃钢生产厂家商场美陈布置地铁站时尚玻璃钢卡通雕塑定制玻璃钢十二生肖雕塑河南节庆商场美陈市场报价银川公园玻璃钢雕塑制作玻璃钢桃子雕塑厂家地址黄山商场美陈装饰西安玻璃钢抽象雕塑商场春季美陈材质阳江商场美陈卡通雕塑商场美陈装饰在哪做四川人物玻璃钢雕塑供应商宁河区商场美陈青海玻璃钢瓜果雕塑鹤壁不锈钢玻璃钢仿铜雕塑陕西水果玻璃钢雕塑设计民权玻璃钢雕塑厂家清远玻璃钢仿铜人物雕塑供货商秋季商场美陈销售企业西藏园林玻璃钢雕塑设计天水玻璃钢头像雕塑新乡梅州玻璃钢卡通雕塑洛阳玻璃钢圆门头雕塑通渭玻璃钢雕塑安装深圳玻璃钢大象雕塑商场美陈工作流程南昌欧式玻璃钢雕塑供应商湖北潜江玻璃钢动物雕塑云南人物玻璃钢雕塑批发四川玻璃钢雕塑厂招聘香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化