点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

介绍

人体姿态估计是一个非常有趣的领域,如果我们能够将诸如棒球摆动或投球等运动的人体姿势量化为数据,那么我们或许能够将数据转化为有用的见解,例如伤害预防或高级训练。

有一些开源人体姿态估计,例如PoseNet和OpenPose,OpenPose 由 CMU 团队开发并得到广泛应用。

OpenPose

OpenPose 团队使用两个不同的数据集提供了两个预训练模型:多人数据集 (MPII) 和 COCO 数据集。COCO 模型产生 18 个点,MPII 模型产生 15 个点,我们将在这项工作中使用 MPII。

设置模型

首先,我们需要下载模型并将其保存到项目文件夹中。

protoFile = "openpose/mpi/pose_deploy_linevec_faster_4_stages.prototxt"
weightsFile = "openpose/mpi/pose_iter_160000.caffemodel"

然后我们使用OpenCV的dnn模块来加载模型;

net = cv2.dnn.readNetFromCaffe(protoFile, weightsFile)

阅读视频

然后我们使用OpenCV逐帧读取视频:

# capture video
cap = cv2.VideoCapture(video_path)
# Check if video file is opened successfully
if (cap.isOpened() == False):print("Error opening video stream or file")
# Read until video is completed
while(cap.isOpened()):
# Capture frame-by-frameret, frame = cap.read()if ret == True:frame = cv2.resize(frame, (width_out, int(width_out*height/width)), cv2.INTER_AREA)# process the frame here
# Break the loopelse:break


分析框架

在循环内部,我们需要将框架输入模型中,并使用以下方法处理结果:

inpBlob =  cv2.dnn.blobFromImage(frame, 1.0 / 255, (inWidth, inHeight), (0, 0, 0), swapRB = False,crop = False) net.setInput(inpBlob) output = net.forward()

这会产生结果,然后我们需要处理它。使用Vikas Gupta的本教程中的代码,我们可以获得关键点并将其绘制在框架上。

H = out.shape[2]
W = out.shape[3]
# Empty list to store the detected keypoints
points = []
for i in range(len()):# confidence map of corresponding body's part.probMap = output[0, i, :, :]# Find global maxima of the probMap.minVal, prob, minLoc, point = cv2.minMaxLoc(probMap)# Scale the point to fit on the original imagex = (frameWidth * point[0]) / Wy = (frameHeight * point[1]) / Hif prob > threshold :cv2.circle(frame, (int(x), int(y)), 15, (0, 255, 255), thickness=-1, lineType=cv.FILLED)cv2.putText(frame, "{}".format(i), (int(x), int(y)), cv2.FONT_HERSHEY_SIMPLEX, 1.4, (0, 0, 255), 3, lineType=cv2.LINE_AA)# Add the point to the list if the probability is greater than the thresholdpoints.append((int(x), int(y)))else :points.append(None)

然后我们可以连接关键点并在它们之间画线。但首先,我们需要定义如何连接这些点。基于 MPII 的关键点描述:

Head – 0
Neck – 1
Right Shoulder – 2
Right Elbow – 3
Right Wrist – 4
Left Shoulder – 5
Left Elbow – 6
Left Wrist – 7
Right Hip – 8
Right Knee – 9
Right Ankle – 10
Left Hip – 11
Left Knee – 12
Left Ankle – 13
Chest – 14
Background – 15

我们可以定义这一对:

POSE_PAIRS = [[0,1], [1,2], [2,3], [3,4], [1,5], [5,6], [6,7], [1,14] , [14,8], [8,9], [9,10], [14,11], [11,12], [12,13] ]

然后,我们可以简单地使用 OpenCV 绘制线:

for pair in POSE_PAIRS:partA = pair[0]partB = pair[1]if points[partA] and points[partB]:cv2.line(frameCopy, points[partA], points[partB], (0, 255, 0), 3)


视频输出

我们也可以使用 OpenCV 输出视频,只需创建一个视频编写器。

out = cv2.VideoWriter(out_path + '/' + out_name + '.webm', cv2.VideoWriter_fourcc(*'VP90'), FPS, size_out)

并在循环中调用 out.write(frame) ,最后调用 out.release()。

也就是说,现在这个程序能够读取视频并使用 OpenPose 在帧上绘制骨架,并将结果输出为视频。

Streamlit

如果我们为用户提供一个简单的用户界面会更方便。Streamlit 是一个强大的工具,可以在没有 Web 开发技能的情况下创建 Web 应用程序。

下载模型

这个应用程序的第一件事是下载模型。因为模型太大(>200MB),不方便推送到 Github 或者直接推送到 Heroku 。因此,我们需要应用程序从外部 url 下载文件,以确保模型已准备就绪。

我们可以将模型存储在我们的保管箱帐户中,并创建一个可下载的链接。

EXTERNAL_DEPENDENCIES = {
“openpose/coco/pose_iter_440000.caffemodel”:{
"url": "https://dl.dropboxusercontent.com/s/xxxxx/pose_iter_440000.caffemodel?dl=0",
“大小”:209274056}
}

然后我们使用 Streamlit 演示(https://github.com/streamlit/streamlit)中的代码来创建带有进度条的下载功能。

我们可以调用函数并下载模型

for filename in EXTERNAL_DEPENDENCIES.keys():download_file(filename)

为用户创建上传工具

我们想有一个允许用户上传他们的视频进行分析的工具,Streamlit 提供了一个制作工具:st.file_uploader

uploaded_file = st.file_uploader("upload a video", type=['mp4'])

然后我们将它保存到一个临时位置

if uploaded_file is not None:g = io.BytesIO(uploaded_file.read())  # BytesIO Objecttemporary_location = "image/temp.mp4"with open(temporary_location, 'wb') as out:  # Open temporary file as bytesout.write(g.read())  # Read bytes into file# close fileout.close()

视频上传工具

分析

然后我们可以修改上面提到的 OpenPose 过程,让它成为一个函数,并在按下 “分析” 按钮时调用该函数来分析上传的视频。它生成姿势估计的结果和带有人体姿势的视频,然后我们就可以使用 Streamlit 的视频功能将其展示在页面上。

st.video(str(path_video_out/filename/'output'/(filename+'_out'))+'.webm')

就是这样,现在我们有了一个简单的 web 应用程序,允许用户上传视频和分析人体姿势。

部署

下一步是部署应用程序,我们将尝试两个选项。

Streamlit share

Streamlit 最近推出了Streamlit share,这使得部署 Streamlit 应用程序变得非常容易。我们只需要将我们的应用程序推送到 Github,并将其连接到 Streamlit share,然后它就会负责部署。

在 Streamlit share 上运行我们的应用程序的一个缺点是它不提供 GPU 计算。然而,姿势检测的计算量非常大,需要 GPU 来加速推理时间,因此仅使用 CPU 处理视频需要相当长的时间。

Google Colab

另一个选项是 Google Colab,它提供 GPU 服务,因此推理时间要快得多。但是,部署只是暂时的,当 Colab notebook 关闭(或运行超过 12 小时)时,部署会关闭。此外,它还需要更多的设置步骤。

结论

通过获取身体运动的量化数据,可以从数据中找到见解。例如,可以计算手的速度,也可以计算摆动过程中关节之间的角度,还可以比较球员的挥杆。这些数据可能有助于高级训练和预防损伤。

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

基于 OpenCV 和 OpenPose 的棒球挥杆人体姿势估计相关推荐

  1. ICCV 2019丨基于跨视角信息融合的三维人体姿态估计

    点击我爱计算机视觉标星,更快获取CVML新技术 52CV曾经在该论文刊出的第一时间对其报道:ICCV 2019 | 微软开源跨视图融合的3D人体姿态估计算法,大幅改进SOTA精度,该文为原作者解读. ...

  2. 从DeepNet到HRNet,这有一份深度学习“人体姿势估计”全指南

    大数据文摘出品 来源:blog.nanonets 作者:栾红叶.熊琰.周家乐.钱天培 从DeepNet到HRNet,这有一份深度学习"人体姿势估计"全指南 几十年来,人体姿态估计( ...

  3. 利用深度学习进行人体姿势估计--概述

    本文转载于原文链接 什么是姿势估计? 人体姿势估计和跟踪是一项计算机视觉任务,包括检测.关联和跟踪语义关键点.语义关键点的例子是 "右肩"."左膝 "或 &qu ...

  4. 论文笔记--3D Human Pose Estimation with Spatial and Temporal Transformers(用空间和时间变换器进行三维人体姿势估计)

    用空间和时间变换器进行三维人体姿势估计 摘要   Transformer架构已经成为自然语言处理中的首选模型,现在正被引入计算机视觉任务中,如图像分类.物体检测和语义分割.然而,在人类姿势估计领域,卷 ...

  5. 无需3D运动数据训练,最新人体姿势估计方法达到SOTA | CVPR 2020

    作者 | Muhammed Kocabas 译者 | 刘畅 出品 | AI科技大本营(ID:rgznai100) 人体的运动对于理解人的行为是非常重要的.尽管目前已经在单图像3D姿势和动作估计方面取得 ...

  6. CVPR2020|无需3D运动数据训练,最新SOTA人体姿势估计方法

    点击我爱计算机视觉标星,更快获取CVML新技术 作者 | Muhammed Kocabas 译者 | 刘畅 出品 | AI科技大本营(ID:rgznai100) 人体的运动对于理解人的行为是非常重要的 ...

  7. python绘制图形沙漏_pytorch-pose一个用于二维人体姿势估计的PyTorch工具包。 - pytorch中文网...

    pytorch-pose PyTorch-Pose是2D单人姿态估计的一般流水线的PyTorch实现.其目的是为最流行的人体姿态数据库(如MPII人体姿态,LSP和FLIC)提供训练/推理/评估的接口 ...

  8. 有了TensorFlow.js,浏览器中也可以实时人体姿势估计

    翻译文章,内容有删减.原文地址:https://medium.com/tensorflow/real-time-human-pose-estimation-in-the-browser-with-te ...

  9. 基于深度学习和传统算法的人体姿态估计,技术细节都讲清楚了

    作者 | 站长 pursueYfuture 来源 | AI专栏(ID: pursue-Y-future) 计算机视觉的一大研究热点是人体姿态估计,还有很多问题急需解决,比如遮挡,交互等等.在最近的CV ...

最新文章

  1. 如何识别和避免间谍软件
  2. kindeditor用法
  3. http://www.cnblogs.com/dolphin0520/p/3949310.html
  4. Oracle Enterprise Manager Cloud Control最新文档合集
  5. Ajax搜索结果页面下方的分页按钮的生成
  6. 人生哲理---你值得借鉴
  7. 百年难得一见!阿里园区惊现双月争辉奇观!
  8. 详细整理分层开发步骤!
  9. 频谱分析仪维修论坛_是德E4405B频谱分析仪报错故障维修案例-安泰维修
  10. 【node内存泄漏耗尽之解决方法】
  11. 【转】LDA-linear discriminant analysis
  12. 软件项目开发完整流程及参与人员
  13. linux把终端嵌入桌面,在你的Ubuntu Linux桌面上嵌入终端窗口
  14. python哪些模板引擎比较_3 个 Python 模板库比较
  15. ccy测试dlx 模块化与全局变量
  16. swift网络请求封装(Moya)
  17. ios-音乐播放器的简单实现
  18. 关于统计检验中P值的解释
  19. 基于openstack安装部署私有云详细图文教程
  20. AES密钥编排Python实现

热门文章

  1. 从词袋到Transfomer,NLP十年突破史
  2. 李沐亲授加州大学伯克利分校深度学习课程移师中国,现场资料新鲜出炉
  3. 程序员假冒AI,印度公司竟骗取2亿元投资
  4. 自动驾驶激荡风云录:来自圈内人的冷眼解读
  5. 如何更好地玩转GitHub?
  6. 春节囤货清单 | 15篇近期值得读的AI论文
  7. 图解:电商支付架构设计
  8. IDEA的debug功能,背后的原理是怎样的?
  9. 我竟然被“双亲委派”给虐了
  10. JDK9,像Unix脚本一样执行Java代码