文章目录
- 1、编译opencv 和 opencv_contrib
- 2、编译caffe
- 2.1错误排除
- 2.1.1 nvcc fatal : Unsupported gpu architecture 'compute_20'
- 2.1.2 fatal error: opencv2/core/core.hpp: 没有那个文件或目录
- 2.1.3fatal error: glog/logging.h: No such file or directory compilation terminated.
- 2.1.4fatal error: gflags/gflags.h:没有那个文件或目录
- 2.1.5fatal error: hdf5.h: 没有那个文件或目录
- 2.1.6 error: ‘CV_LOAD_IMAGE_COLOR’ was not declared in this scope
- 3、编译OpenPose
- 4 测试
1、编译opencv 和 opencv_contrib
1.1安装最新版本opencv4.5.3(跳过)-caffee版本不匹配
下载并解压opencv_contrib
wget https://github.com/opencv/opencv_contrib/archive/refs/tags/4.5.3.zip
unzip opencv_contrib-4.5.3.zip
下载并解压opencv
https://github.com/opencv/opencv/archive/refs/tags/4.5.3.zip
unzip opencv-4.5.3.zip
创建构建目录并进入该目录
mkdir opencv-4.5.3/build
cd opencv-4.5.3/build
安装必要的包
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
注掉anaconda的环境配置
vi ~/.bashrc
保存配置
source ~/.bashrc
执行cmake
这里看自己文件夹python版本
PYTHON_DEFAULT_EXECUTABLE
PYTHON3_INCLUDE_DIR
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.5.3/modules -D PYTHON_DEFAULT_EXECUTABLE=/usr/bin/python3.8 -D BUILD_opencv_python3=ON -D BUILD_opencv_python2=OFF -D PYTHON3_EXCUTABLE=/usr/bin/python3.8 -D PYTHON3_INCLUDE_DIR=/usr/include/python3.8 -D WITH_CUDA=OFF -D OPENCV_GENERATE_PKGCONFIG=ON -D WITH_GTK_2_X=ON ..
如果看到如下信息,说明cmake执行成功
-- Configuring done
-- Generating done
-- Build files have been written to: xxx/opencv-4.5.3/build
执行编译
make -j8
不报错的话即编译成功。
安装
sudo make install
如果要卸载
sudo make uninstall
1.2安装opencv3.4.3
1安装所需要的依赖
sudo apt install build-essential
sudo apt install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff5-dev libdc1394-22-dev # 处理图像所需的包
sudo apt install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev liblapacke-dev
sudo apt install libxvidcore-dev libx264-dev # 处理视频所需的包
sudo apt install libatlas-base-dev gfortran # 优化opencv功能
sudo apt install ffmpeg
2.去官网下载opencv,在本教程中选用的时opencv3.4.6
https://opencv.org/releases/page/3/
wget https://github.com/opencv/opencv/archive/3.4.6.zip
3安装依赖库
sudo apt update
sudo apt install cmake
sudo apt install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff4.dev libswscale-dev libjasper-dev
3解压
unzip opencv-3.4.6.zip
cd opencv-3.4.6
mkdir build
cd build
4cmake
cmake -D WITH_OPENGL=ON -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local/opencv343 ..
成功
5执行编译
sudo make -j8
6执行命令
sudo make install
7配置环境
sudo make install 执行完毕后OpenCV编译过程就结束了,接下来就需要配置一些OpenCV的编译环境首先将OpenCV的库添加到路径,从而可以让系统找到
sudo gedit /etc/ld.so.conf.d/opencv.conf
执行此命令后打开的可能是一个空白的文件,不用管,只需要在文件末尾添加
/usr/local/lib
执行如下命令使得刚才的配置路径生效
sudo ldconfig
配置bash
sudo gedit /etc/bash.bashrc
在最末尾添加
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
保存,执行如下命令使得配置生效
source /etc/bash.bashrc
更新
sudo updatedb
如果没有安装执行
sudo apt-get install mlocate
8测试
至此所有的配置都已经完成,下面用一个小程序测试一下
cd到opencv-3.4.6/samples/cpp/example_cmake目录下
我们可以看到这个目录里官方已经给出了一个cmake的example我们可以拿来测试下
按顺序执行
cmake .
make
./opencv_example
2、编译caffe
下载并解压源代码:
wget -c https://codeload.github.com/BVLC/caffe/zip/f019d0dfe86f49d1140961f8c7dec22130c83154 -O caffe1.zip
unzip caffe1.zip
安装库
$ sudo apt-get update
$ sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
$ sudo apt-get install --no-install-recommends libboost-all-dev
$ sudo apt-get install libatlas-base-dev liblmdb-dev
修改文件
cd caffe1
protoc src/caffe/proto/caffe.proto --cpp_out=.
mkdir include/caffe/proto
mv src/caffe/proto/caffe.pb.h include/caffe/proto
修改Makefile.config
cp Makefile.config.example Makefile.config
# 根据本机环境修改 Makefile.config
...
将
#USE_CUDNN := 1
修改成:
USE_CUDNN := 1
...
...
#如果此处是OpenCV2,则不用修改
将
#OPENCV_VERSION := 3
修改为:
OPENCV_VERSION := 3
...
...
将
#WITH_PYTHON_LAYER := 1
修改为
WITH_PYTHON_LAYER := 1
...
...
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
修改为:
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial
...
...
将
CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \
-gencode arch=compute_20,code=sm_21 \
-gencode arch=compute_30,code=sm_30 \
-gencode arch=compute_35,code=sm_35 \
-gencode arch=compute_50,code=sm_50 \
-gencode arch=compute_52,code=sm_52 \
-gencode arch=compute_60,code=sm_60 \
-gencode arch=compute_61,code=sm_61 \
-gencode arch=compute_61,code=compute_61
修改为
CUDA_ARCH := -gencode arch=compute_30,code=sm_30 \
-gencode arch=compute_35,code=sm_35 \
-gencode arch=compute_50,code=sm_50 \
-gencode arch=compute_52,code=sm_52 \
-gencode arch=compute_60,code=sm_60 \
-gencode arch=compute_61,code=sm_61 \
-gencode arch=compute_61,code=compute_61
...
然后修改 caffe 目录下的 Makefile 文件:
sudo gedit Makefile
...
将:
NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)
替换为:
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
...
...
将:
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
改为:
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial
...
然后修改 /usr/local/cuda/include/host_config.h 文件
#error-- unsupported GNU version! gcc versions later than 4.9 are not supported!
改为
//#error-- unsupported GNU version! gcc versions later than 4.9 are not supported!
但是我发现文件中并没有#error-- unsupported GNU version! gcc versions later than 4.9 are not supported!,然后就发现有个/usr/local/cuda/include/crt/host_config.h,然后gedit进去改了一个相似的。
开始编译
不要直接在caffe里make all -j8
使用官方的安装方式
mkdir build
cd build
cmake -DCUDNN_LIBRARY=/usr/local/cuda/lib64/libcudnn.so \
-DPYTHON_LIBRARY=/usr/lib/python3.8/config-3.8-x86_64-linux-gnu/libpython3.8.so \
-DPYTHON_INCLUDE_DIRS=/usr/include/python3.8 ..
make all -j8
make install
make runtest
2.1错误排除
如果编译失败 进入caffee文件夹
sudo make clean
2.1.1 nvcc fatal : Unsupported gpu architecture ‘compute_20’
解决办法:修改Makefile.config文件
# CUDA architecture setting: going with all of them.
# For CUDA < 6.0, comment the *_50 through *_61 lines for compatibility.
# For CUDA < 8.0, comment the *_60 and *_61 lines for compatibility.
# For CUDA >= 9.0, comment the *_20 and *_21 lines for compatibility.
CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \
-gencode arch=compute_20,code=sm_21 \
-gencode arch=compute_30,code=sm_30 \
-gencode arch=compute_35,code=sm_35 \
-gencode arch=compute_50,code=sm_50 \
-gencode arch=compute_52,code=sm_52 \
-gencode arch=compute_60,code=sm_60 \
-gencode arch=compute_61,code=sm_61 \
-gencode arch=compute_61,code=compute_61
把下面这两行删除就可以了
-gencode arch=compute_20,code=sm_20 \
-gencode arch=compute_20,code=sm_21 \
2.1.2 fatal error: opencv2/core/core.hpp: 没有那个文件或目录
这个问题,可以查看include_dir
文件夹错位了在下一层
这里在下一层去复制过来就可以了
sudo cp -r /usr/local/include/opencv4/opencv2/ /usr/include/
2.1.3fatal error: glog/logging.h: No such file or directory compilation terminated.
方法1
sudo apt-get install libgoogle-glog-dev
方法2
出现这个错误是因为本机没有安装glog,安装方法:csdn查询对应ubuntu系统版本的安装方法
1、安装autoreconf
sudo apt install autoconf automake libtool
2下载glog源文件:
git clone https://github.com/google/glog.git
3根据https://github.com/google/glog底部的安装步骤安装glog:
./autogen.sh
./configure
make
sudo make install
2.1.4fatal error: gflags/gflags.h:没有那个文件或目录
sudo apt-get install libgflags-dev
2.1.5fatal error: hdf5.h: 没有那个文件或目录
这次是ubuntu 16.04修改了hdf5头文件目录导致的,要在Makefile.config中把hdf5的一个目录添加进来:
# 找到这行:
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
# 替换为:
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
2.1.6 error: ‘CV_LOAD_IMAGE_COLOR’ was not declared in this scope
cd ..
sed -i 's/CV_LOAD_IMAGE_COLOR/cv::IMREAD_COLOR/g' src/caffe/layers/window_data_layer.cpp
sed -i 's/CV_LOAD_IMAGE_COLOR/cv::IMREAD_COLOR/g' src/caffe/util/io.cpp
sed -i 's/CV_LOAD_IMAGE_GRAYSCALE/cv::ImreadModes::IMREAD_GRAYSCALE/g' src/caffe/util/io.cpp
#下面部分忽略。。。上面三行就可以
sed -i 's/CV_LOAD_IMAGE_COLOR/cv::IMREAD_COLOR/g' src/caffe/test/test_io.cpp
sed -i 's/CV_LOAD_IMAGE_GRAYSCALE/cv::ImreadModes::IMREAD_GRAYSCALE/g' src/caffe/test/test_io.cpp
3、编译OpenPose
下载并解压代码:
wget -c https://github.com/CMU-Perceptual-Computing-Lab/openpose/archive/refs/tags/v1.7.0.zip -O openpose-1.7.0.zip
unzip openpose-1.7.0.zip
下载第三方包
cd openpose-1.7.0/3rdparty
git clone https://gitee.com/yao_yu/pybind11.git
创建构建目录
cd ../
mkdir openpose-1.7.0/build
启动cmake-ui
cmake-gui
这是最终效果
点击 Configure 在弹出的窗口中点Finish如果不报错再点击Generate
如果一切顺利 切换到openpose-1.7.0/build目录
cd openpose-1.7.0/build
make -j8
如果编译过程中出现过一个错误 cannot find #include “caffe/proto/caffe.pb.h”
# 在caffe根目录
protoc src/caffe/proto/caffe.proto --cpp_out=.
mkdir include/caffe/proto
mv src/caffe/proto/caffe.pb.h include/caffe/proto
然后在build目录下重新编译
不报错即编译成功
make clean
make -j8
sudo make install
报错
pybind11
这里需要下载pybind11
随便在码云找一个pybind11的包下载到3edparty文件夹中
roy@ngi:~/data/gitte/openpose_make/openpose-1.7.0/3rdparty$ git clone https://gitee.com/zzwmirrors/pybind11.git
Library was built without OpenGL support in function ‘cvNamedWindow’
解决方案
https://blog.csdn.net/weixin_40198941/article/details/97523485
4 测试
在根目录下
./build/examples/openpose/openpose.bin --video examples/media/video.avi
出现问题可以查看
https://www.freesion.com/article/2784790670/
也有可能电脑新能跟不上改为下面的检测点由25个变为15个
./build/examples/openpose/openpose.bin -model_pose MPI -net_resolution -1x368 --video examples/media/video.avi