目的复现代码
完成视频中的人体姿态识别
复现过程
视频来源:https://www.youtube.com/watch?v=cMhWNGBW1Xgwww.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+TensorFlowzhuanlan.zhihu.com
更换之后运行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/zdIyKFJ4xzgyoutu.be