保姆级在Windows下复现OpenPose+ST-GCN行为识别

发布于:2024-05-08 ⋅ 阅读:(44) ⋅ 点赞:(0)

前言

具体原理这里不介绍,大家自行查阅,比如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编译安装)及常见问题

复现旧版STGCN GPU版 (win10+openpose1.5.0)
复现st-gcn(win10+openpose1.5.1+VS2017+cuda10+cudnn7.6.4)