前言
具体原理这里不介绍,大家自行查阅,比如Openpose是个啥?ST-GCN又是个啥?
一、默认Openpose已经配置好
二、下面配置ST-GCN
下载stgcn先放着:
gitbub上fork后导入到gitee快些: https://github.com/yysijie/st-gcn
也可以直接下载zip文件后解压
1.激活自己的虚拟环境
2.安装ffmpeg,必须用conda安装否则后面会报错
conda install ffmpeg
3.进入到st-gcn源码包目录下:
cd D:\cs\gcn
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
结果如下:
三、st-gcn源码编译运行
1.安装
cd D:\cs\gcn
cd torchlight
python setup.py install
cd ..
2.python api
openpose安装好了后,把生成的build/bin文件夹下的所有库复制到build/x64/release/下,
将models文件夹复制到build中
3.预训练模型下载
下载地址:预训练模型
将下载好的模型文件拷贝至./models文件路径下
4.代码测试
(1)demo_old测试
python main.py demo_old --video D:/cs/gcn/resource/media/clean_and_jerk.mp4 --openpose D:/cs/openpose/build/x64/Release
报错如下:
错误1:
系统找不到指定的路径。
Can not find pose estimation results
解决办法:
更改demo_old里的文件内容如下:
将openpose = '{}/examples/openpose/openpose.bin'.format(self.arg.openpose)改为如下语句:
openpose = 'D:/cs/openpose/build/x64/Release/OpenPoseDemo.exe'.format(self.arg.openpose)
改成对应自己OpenPoseDemo.exe所在位置
错误2:
Check failed: error == cudaSuccess (2 vs. 0) out of memory
解决办法:
更改网络分辨率
更改demo_old里的文件内容如下:
添加net_resolution='320x176'到openpose_args中
openpose_args = dict(
video=self.arg.video,
write_json=output_snippets_dir,
display=0,
render_pose=0,
model_pose='COCO',
net_resolution='320x176')
测试结果可在data/demo_result中查看
注意:有的电脑打开视频是黑屏,但是把视频传送到手机上,手机却可以正常播放!!
(2)demo_offline测试
python main.py demo_offline --video D:/cs/gcn/resource/media/clean_and_jerk.mp4 --openpose D:/cs/openpose
报错如下:
错误1:
video, data_numpy = self.pose_estimation() TypeError: ‘NoneType’ object is not iterable
解决办法:
更改demo_offline里的文件内容如下:
将pose_estimation()函数更改如下
def pose_estimation(self):
# load openpose python api
if self.arg.openpose is not None:
sys.path.append('D:/cs/openpose/build/python/openpose/Release'.format(self.arg.openpose))
os.environ['PATH'] = os.environ[
'PATH'] + ';' + 'D:/cs/openpose/build/x64/Release/;' + 'D:/cs/openpose/build/bin;'
# sys.path.append('{}/python'.format(self.arg.openpose))
# sys.path.append('{}/build/python'.format(self.arg.openpose))
try:
# from openpose import pyopenpose as op
import pyopenpose as op
except:
print('Can not find Openpose Python API.')
return
错误2:
opWrapper.emplaceAndPop([datum])
TypeError: emplaceAndPop(): incompatible function arguments. The following argument types are supported:
1. (self: pyopenpose.WrapperPython, arg0: std::vector<std::shared_ptrop::Datum,std::allocator<std::shared_ptrop::Datum > >) -> bool
Invoked with: <pyopenpose.WrapperPython object at 0x00000263AFEEA8F0>, [<pyopenpose.Datum object at 0x00000263AFF05F10>]
解决办法:
更改demo_offline里的文件内容如下:
将opWrapper.emplaceAndPop([datum])更改如下:
opWrapper.emplaceAndPop(op.VectorDatum([datum]))
错误3:
Check failed: error == cudaSuccess (2 vs. 0) out of memory
解决办法:
更改网络分辨率
更改demo_offline里的文件内容如下:
将params = dict(model_folder='./models', model_pose='COCO')更改如下:
params = dict(model_folder='./models', model_pose='COCO', net_resolution='320x176')
结果如下:
参考:ST-GCN源码运行完整版(含OpenPose编译安装)及常见问题