OpenPose实时地检测人体, 手势, 面部关键点(135点)

OpenPose是第一个实时地检测人体, 手势, 面部关键点(135点)的检测器.

可以从https://github.com/CMU-Perceptual-Computing-Lab/openpose/releases下载最新版本. 或者从源码安装OpenPose.

1. 源码安装OpenPose

git clone https://github.com/CMU-Perceptual-Computing-Lab/openpose
源码需要cuda7.5支持,
可以使用cmake-gui安装, 很方便. 可以界面化选择需要的库路径, 以及一些其他选项. 主要选择:
1> CUDA_TOOLKIT_ROOT_DIR为cuda7.5的路径即可
2> 取消USE_CUDNN.
3> OpenPose基于Caffe框架, 所以需要制定Caffe\路径. 一个可用的Caffe版本见/home/anjiang/Downloads/caffe_master.
4> 安装Eigen. 可以不安装, 将WITH_EIGEN和WITH_CERES取消即可.
5> 将Doxygen所有的东西注释, CmakeLists.txt, 885-900行.

生成了Makefile后:
cd build/
make -jnproc
1> 错误1: Could NOT find HDF5 (missing: HL) (found version “1.8.9”), https://support.hdfgroup.org/ftp/HDF5/releases/下载hdf51.8.9.
export LD_LIBRARY_PATH=/usr/local/hdf5/lib:$LD_LIBRARY_PATH
可能cmake版本太高?? 不是这个原因! 这个错误不知道如何解决!!!

2. 直接运行./ubuntu_deprecated/install_openpose_if_cuda8.sh即可. 修改一下install_openpose_if_cuda8.sh的某些路径即可. 这个sh文件, 就是替换原来的Makefile文件, 采用ubuntu_deprecated下的Makefile.example.

1> 这里会缺少caffe的头文件和库文件, 由于/home/anjiang/Downloads/caffe_master已经安装了caffe, 而且可以正常运行, 所以我们只需要将caffe_master/include下的caffe文件夹拷贝至/usr/local/include下, 将caffe_master/build/src/caffe下的proto文件夹拷贝至/usr/local/include/caffe下. 将caffe_master/build/lib下的文件拷贝至/usr/local/lib下即可. 这样caffe的问题就可以顺利解决.
2> Opencv出现问题, 重新安装opencv3.0.0.
3> 修改./ubuntu_deprecated/Makefile.example, 注释207, 208行. 不指定LIBRARIES += opencv_contrib opencv_gpu.
4> 添加PKG_CONFIG += -lopencv_highgui -lopencv_imgcodecs -lopencv_imgproc -lopencv_core -lopencv_videoio -lopencv_shape

3. 测试

1> Python API
首先需要生成动态链接库-Openpose.so.
cd python/openpose
mkdir build
cd build
修改CMakeLists.txt: 主要错误是include路径不对, 库路径不对, 编辑器选项不对. 参考https://www.cnblogs.com/binbinjx/p/5626916.html即可.
cmake …
make

export LD_LIBRARY_PATH=/home/ly/git/darknet/cuda-7.5/lib64:$LD_LIBRARY_PATH
1> 运行python/openpose下的文件.
首先生成动态库_openpose.so, 可见./python/openpose/build/_openpose.so.
python测试有问题!

4. C++版本测试

OpenPose是一个功能齐全的库, 不仅可以检测多人的关键点, 包括身体15或18关键点检测/姿势估计, 21点手势关键点检测/姿势估计, 70点人脸关键点检测/姿势估计等. 另外, OpenPose库支持以多种形式(JSON, XML, PNG, JPG)保存和加载结果. C++主要的可执行程序就是./build/examples/openpose/openpose.bin, 这个可执行程序有众多的flags. 可参考https://github.com/CMU-Perceptual-Computing-Lab/openpose/blob/master/doc/demo_overview.md下的Main Flags. ./build/examples/openpose/openpose.bin --help可以查看所有flags.
OpenPose主要实现的是人体的关键件检测/姿势估计, 所以所有的实验中, 都会包含人体关键点检测/姿势估计.
–hand: 手势关键点检测
–face: 人脸关键点检测
以后如果想使用OpenPose进行人体, 人脸, 手势关键点检测, 可以只采用C++可执行程序!!!

另外, OpenPose不仅可以得到二维的关键点, 还可以得到三维的关键点!!!

手势关键点检测, 如:

./build/examples/openpose/openpose.bin --face --hand --image_dir ./datasets --write_images results/body+hand/ --write_json results/body+hand/ --display 0 --num_gpu 2
得到的JSON文件解析如下: 身体各部位的位置信息(x, y, score), 每一个部位(如hand_left_keypoints_2d)都是一个数组, 该数组中包含了身体各部位的位置信息和检测置信度, 其格式为x1,y1,c1,x2,y2,c2,… 坐标x和y可以被归一化至区间[0,1], [-1,1], [0,源尺寸], [0,输出尺寸]等等, 这取决于标志位scale_mode. 另外, c值是位于区间[0,1]的置信度.
身体部位关键点的顺序, COCO(18个身体部位), MPI(15个身体部位).

上一篇:ArcGIS自定义工具箱-判断字段值是否相等


下一篇:关闭常见危险端口