tfpose与openpose区别_人体姿态识别--Openpose+Tensorflow

目的复现代码

完成视频中的人体姿态识别

复现过程

视频来源:https://www.youtube.com/watch?v=cMhWNGBW1Xg​www.youtube.com

视频动图

检测结果下载的画质本来就不高,再加上两次录屏,画质比较渣。

首先确认工程所需要的依赖:python3

tensorflow 1.4.1+

opencv3, protobuf, python3-tk

slidingwindow

然后进行安装:

$ git clone https://www.github.com/ildoonet/tf-pose-estimation

$ cd tf-pose-estimation

$ pip3 install -r requirements.txt

这里我的当前的环境中,pip对应的版本是python3,所以修改该命令为

pip install -r requirements.txt

遇到以下问题:

Looking in indexes: https://pypi.mirrors.ustc.edu.cn/simple/

Collecting git+https://github.com/ppwwyyxx/tensorpack.git

Cloning https://github.com/ppwwyyxx/tensorpack.git to /tmp/pip-req-build-d9276zkb

Complete output from command python setup.py egg_info:

Traceback (most recent call last):

File "", line 1, in

File "/tmp/pip-req-build-d9276zkb/setup.py", line 7, in

assert version > 30, "Tensorpack installation requires setuptools > 30"

AssertionError: Tensorpack installation requires setuptools > 30

----------------------------------------

Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-req-build-d9276zkb/

根据提示,是因为setuptools版本太低,于是更新

pip install --ignore-installed --upgrade setuptools

后续又提示几个依赖出现同样的版本问题,可以用上面的命令逐一更新。

最后安装成功显示:

Successfully built tensorpack

Installing collected packages: tensorpack

Successfully installed tensorpack-0.9.4

然后编译C++库

$ cd tf_pose/pafprocess

$ swig -python -c++ pafprocess.i && python3 setup.py build_ext --inplace

输出:

swig -python -c++ pafprocess.i && python setup.py build_ext --inplace

The program 'swig' can be found in the following packages:

* swig

* swig2.0

Try: sudo apt install

根据提示安装swig

sudo apt install swig

再次运行

swig -python -c++ pafprocess.i && python setup.py build_ext –inplace

接着遇到了CUDA版本的问题

ImportError: libcublas.so.10.0: cannot open shared object file: No such file or directory

因为之前在python27虚拟环境中使用cuda8,现在在python3中使用cuda10,所以需要更换cuda的路径,这里可以参考:shellyfung:人体姿态识别--AlphaPose+TensorFlow​zhuanlan.zhihu.coma78e5b98d64650492a9b60afa1fed405.png

更换之后运行demo

python run.py --model=mobilenet_thin --resize=432x368 --image=./images/p1.jpg

输出以下信息:

Status: CUDA driver version is insufficient for CUDA runtime version

这里需查看以下内容NVIDIA驱动

CUDA版本

tensorflow版本

这三者之间是有版本对应关系的,因为目前切换了cuda10,而对应的nvidia驱动版本过低,因此重新安装NVIDIA驱动,这里大家可以参考网络上的教程,卸载的方式和你安装的方式最好是对应的。安装完成之后,使用nvidia-smi查看安装结果。

然后运行

python run.py --model=mobilenet_thin --resize=432x368 --image=./images/p1.jpg

可以在对应的路径下查找输出的结果。

检测视频

作者提供了一个摄像头实时检测的脚本

python run_webcam.py --model=mobilenet_thin --resize=432x368 --camera=0

因为我要检测视频,所以需要修改部分内容。

打开run_webcam.py,查看读取摄像头的代码

作者是使用opencv读取的摄像头,而在opencv中,读取摄像头和读取视频使用的方法是一样的,只不过需要修改传入参数。首先在本地测试读入视频,代码如下:

import cv2

import numpy as np

cap = cv2.VideoCapture("video.mp4")

while 1:

ret, frame = cap.read()

cv2.imshow("capture", frame)

if cv2.waitKey(100) & 0xFF == ord('q'):

break

cap.release()

cv2.destroyAllWindows()

可以成功读取视频,只不过使用的是cpu,画面非常的卡顿。

接着修改脚本中的参数:

# parser.add_argument('--camera', type=int, default=0)

parser.add_argument('--camera', type=str, default='0x0')

然后在终端运行:

python run_webcam.py --model=mobilenet_thin --resize=432x368 --camera=video.mp4

只需要将—camera=后面的内容修改为视频的名称就可以,前提是视频需要和脚本放在同一目录下。

然后就可以看到输出结果了,视频截图:

可以看到,在某些动作比较快的画面下,检测结果的丢帧还是存在的。

完整检测后的视频链接:https://youtu.be/zdIyKFJ4xzg​youtu.be

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/272880.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

让 步( 写的太好了!)

一个不懂得为亲人让步,为朋友让步,为爱人让步,为合作伙伴让步的人,是缺乏胸襟的人,最无能和不可交的人。试问一个连自己人都斤斤计较的人可交往吗!长不大的人最重要的标志,就是跟自己人&#xf…

Android学习手记(2) Activity生命周期

1. 单个Activity的生命周期 当只有一个Activity的时候, 首先执行onCreate->onStart->onResume。 这时, 窗口便显示在屏幕上了。 然后我们按返回键退到桌面的时候,便执行onPause->onStop。这时候, 如果我们在最近使用程序…

墙角的父亲(一篇让千万人潸然泪下好文)

前言:拥有思想的瞬间,是幸福的;拥有感受的快意,是幸福的;拥有父爱也是幸福的。帮老乡大将搬家。在整理一堆旧书籍的时候,大将蹲在地上呜呜大哭起来。大将打开的是一个笔记本,上面记着日常开支&a…

react遍历对象的值_React 原理之实现 createElement 和 render 方法

前言在 React 中,我们都知道可以写 jsx 代码会被编译成真正的 DOM 插入到要显示的页面上。这具体是怎么实现的,今天我们就自己动手做一下。实现 createElement 方法这个方法平时开发我们并不会用到,因为它是经 babel 编译后的代码&#xff0c…

成熟就是深谙世故却不世故

对于一个打小在农村长大的孩子而言,被夸作“早熟”是一种荣耀。它意味着你足够懂事,可以分担父母的一些忧愁。但这也是一个怪圈,因为你常要背负这种光环去做一些超乎自己年龄的事,强迫自己变得坚忍、不可战胜。那年,我…

什么叫工作到位?很深刻!

1、汇报工作说结果不要告诉老板工作过程多艰辛,你多么不容易!老板不傻,否则做不到今天。举重若轻的人老板最喜欢,一定要把结果给老板,结果思维是第一思维。2、请示工作说方案不要让老板做问答题,而是要让老…

react 给一个引用的组件添加新属性_高阶组件在React中的应用

高阶组件的定义接受React组件作为输入,输出一个新的React组件。概念源自于高阶函数,将函数作为参数,或者输出一个函数,如map,reduce,sort。 用haskell的函数签名来表示: hocFactory:: W: React.…

好好的活,简简单单过!

生命,每个人只有一次,或长或短;生活,每个人都在继续,或悲或欢;人生,每个人都在旅途,或起或伏。人无完人,事无完美,有些小人,你不须计较&#xff0…

lunixs 退出mysql_MySQL的基本操作

1、数据库登录格式:mysql -h主机地址 -u用户名 -p用户密码 -P端口 -D数据库 -e “SQL内容”[rootwulaoer ~]# mysql -uroot -p2、修改密码格式:mysqladmin -u用户名 -p旧密码 password 新密码[rootwulaoer ~]# mysqladmin -uroot password 123456注&…

交际中你所不知道的说话的12个技巧!

1.“有一说一”和“自以为是”不同,别把粗鲁当成真性情与 他人相处,要遵循一个基本原则:己所不欲,勿施于人。你可以真挚地描述自己的感受,前提是不要带有攻击性,至于对他人做出评价和判断,则需要…

宽客的人amp;amp;事件映射

看完《宽客》这本书,叙事介绍20世纪华尔街对冲基金、股票、投资者依赖股市从直觉交易数学家的早期演化、物理学家用数学模型开发过程中的交易,这些进入金融数学家、物理学家依靠大数据分析、稍纵即逝的交易机会来买入卖出;同一时候找出交易模…

社交中的黄金法则,你要细细体会品味

1,不要急着用你的嘴,来为你的眼睛辩护什么。因为天知道你的嘴说出什么来。2,假如有人朝你扔石头,就收起来。因为那会是你日后建高楼的基石。3,能忍则忍,忍不了就改变,改变不了就认了哇。4&#…

这些略带幽默句子,笑的同时多感悟一下吧(收好)

1、穷,并不可怕,我怕穷着穷着就习惯了。2、世界上唯一不用努力,就能得到的只有年龄。3、我是你转身就忘的路人甲,凭什么陪你蹉跎年华到天涯?4、世界上最快乐的事情就是吃,第二快乐的是待会再吃。5、琴棋书画…

java 异常机制_深入理解Java异常处理机制

一、引子try…catch…finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解。不过,我亲自体验的“教训”告诉我,这个东西可不是想象中的那么简单、听话。不信?那你看看下面的代码&…

做人:失信是最大的破产!

一个人最大的破产是信用的破产!哪怕你一无所有,但只要信用还在,就还有翻身的本金。保护好信用,珍惜别人给你的每一次信任!因为有时候我们只有一次机会!朋友有时候就像钞票,有真也有假。我们需要…

【干货】微信公众号运营必备工具(完整版)

做微信公众号运营最基本的要素有两点:一是内容要强大(内),二是排版要美观(外)。做好前者,你需要有充足的知识储备以及精彩独到的文笔作为支撑,而做好后者则相对简单许多,…

成功,要“借力”,不要“尽力”(深刻!)

01每个人都喜欢成功,却又时常感觉自己力不从心一个小男孩在院子里搬一块石头,父亲在旁边鼓励:“孩子,只要你全力以赴,一定搬得起来!”但是石头太重,最终孩子也没能搬起来。他告诉父亲&#xff1…

从0开始学Java——JSPServlet——HttpServletRequest相关的几个路径信息

在HttpServletRequest中有几个获取路径的接口:getRequestURI/getContextPath/getServletPath/getPathInfo 这些接口互相之间有什么区别,通过下面这段代码就可以分辨清楚了: 1 WebServlet("/hello.view")2 public class FirstServle…

C#编译和运行过程图例

一张图,描述C#编译和运行过程,比较容易记忆理解