ubuntu18編譯安裝opencv3.4.3, caffe和openpose, 踩坑記錄.

1. 配置

基本配置 版本號
CPU Intel® Core™ i5-8400 CPU @ 2.80GHz × 6
GPU GeForce RTX 2070 SUPER/PCIe/SSE2
OS Ubuntu18.04
openjdk 1.8.0_242
python 3.6.9
gcc 5.5
g++ 8.4
opencv 3.4.3
cmake 3.17.2
protobuf 3.0.0

hint:

  1. 如何多版本gcc,g++共存並且切換: https://blog.csdn.net/weixin_43056275/article/details/105124979
  2. 如何安裝cmake: https://www.cnblogs.com/jsdy/p/11759247.html
  3. 注意: 編譯caffe和openpose所使用的opencv必須版本一致, 不然到最後會報錯!!!
  4. opencv版本4.0以上測試openpose會報錯:. 錯誤: opencv-4.0.0/modules/highgui/src/window_gtk.cpp:146: error: (-215:Assertion failed) dst.data == widget->original_image->data.ptr in function ‘cvImageWidgetSetImage’

2. opencv3.4.3安裝編譯

見我的博客https://blog.csdn.net/weixin_43056275/article/details/106005112

3. caffe安裝

見我的博客https://blog.csdn.net/weixin_43056275/article/details/105790929

4. openpose安裝

4.1 下載舊版openpose

因爲我編譯新版openpose時, 出現了has no member named ‘set-gpu-data’openpose.dir/core/arrayCpuGpu.cpp.o’ failed 此類錯誤, 看了官網谷歌百度都沒解決. 於是安裝編譯了舊版的openpose. 最後成功!
下載地址
https://download.csdn.net/download/weixin_43056275/12402443

4.2 下載模型

打開openpose-master/models

./getModels.sh

最好是提前先下載好, 雖然編譯的時候也會自動下載, 但是網速不好會下載不完全, 導致編譯失敗, 我就因爲這個問題看了別人錯誤的解決措施, 繞了一大圈彎路
如果你在終端下載速度慢, 可以網頁下載並放到指定的文件下. coco比較大, 可以等需要用的時候再下載. 他們下載後放置的位置就是他們的網址後半段.
http://posefs1.perception.cs.cmu.edu/OpenPose/models/pose/coco/pose_iter_440000.caffemodel

http://posefs1.perception.cs.cmu.edu/OpenPose/models/face/pose_iter_116000.caffemodel

http://posefs1.perception.cs.cmu.edu/OpenPose/models/hand/pose_iter_102000.caffemodel

http://posefs1.perception.cs.cmu.edu/OpenPose/models/pose/mpi/pose_iter_160000.caffemodel

http://posefs1.perception.cs.cmu.edu/OpenPose/models/pose/body_25/pose_iter_584000.caffemodel

4.3 編譯

在openpose-master路徑下
執行

mkdir build
cd build
cmake -DBUILD_CAFFE=OFF  -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-10.0 -DCaffe_INCLUDE_DIRS=/home/ying/usb/key_points/caffe_train-master/include   -DCaffe_LIBS=/home/ying/usb/key_points/caffe_train-master/build/lib/libcaffe.so  ..
make all -j`nproc`

關閉build caffe, 指定cuda和caffe的路徑

4.4 測試

視頻測試
在openpose-master路徑下

./build/examples/openpose/openpose.bin --video examples/media/video.avi

或者可以保存到本地

在openpose-master路徑下

mkdir output

./build/examples/openpose/openpose.bin --video examples/media/video.avi --write_video output/result.avi --write_json output/ --display 0

在這裏插入圖片描述
圖片測試:
mkdir output_image
./build/examples/openpose/openpose.bin --image_dir examples/media/ --face --hand --write_images output_image/ --display 0

./build/examples/openpose/openpose.bin --help可以查看有哪些命令

5. openpose踩坑

問題一:

error詳細內容:

ptxas /tmp/tmpxft_00002121_00000000-5_pyramidalLK.ptx, line 9; fatal : Unsupported .version 6.1; current version is ‘6.0’
ptxas fatal : Ptx assembly aborted due to errors
CMake Error at openpose_generated_pyramidalLK.cu.o.Release.cmake:279 (message):
Error generating file
/home/a421/YuWentao/huawei_fatigue_driving_detection/openpose/build/src/openpose/CMakeFiles/openpose.dir/tracking/./openpose_generated_pyramidalLK.cu.o

src/openpose/CMakeFiles/openpose.dir/build.make:112: recipe for target ‘src/openpose/CMakeFiles/openpose.dir/tracking/openpose_generated_pyramidalLK.cu.o’ failed
make[5]: *** [src/openpose/CMakeFiles/openpose.dir/tracking/openpose_generated_pyramidalLK.cu.o] Error 1
make[5]: *** Waiting for unfinished jobs…
CMake Error at openpose_generated_renderFace.cu.o.Release.cmake:279 (message):
Error generating file
/home/a421/YuWentao/huawei_fatigue_driving_detection/openpose/build/src/openpose/CMakeFiles/openpose.dir/face/./openpose_generated_renderFace.cu.o

src/openpose/CMakeFiles/openpose.dir/build.make:63: recipe for target ‘src/openpose/CMakeFiles/openpose.dir/face/openpose_generated_renderFace.cu.o’ failed
make[5]: *** [src/openpose/CMakeFiles/openpose.dir/face/openpose_generated_renderFace.cu.o] Error 1
CMake Error at openpose_generated_renderHand.cu.o.Release.cmake:279 (message):
Error generating file
/home/a421/YuWentao/huawei_fatigue_driving_detection/openpose/build/src/openpose/CMakeFiles/openpose.dir/hand/./openpose_generated_renderHand.cu.o

問題一解決:

指定-DCUDA_TOOLKIT_ROOT_DIR時 不能使用默認的/usr/local/cuda, 需要加上版本號, 正確的應該是: -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-10.0

問題二:

在成功編譯OpenPose後,測試時,報如下錯誤:

root@/openpose# ./build/examples/openpose/openpose.bin
Starting OpenPose demo…
Configuring OpenPose…
Starting thread(s)…
Desired webcam resolution 1280x720 could not being set. Final resolution: 640x480 in /home/a421/YuWentao/huawei_fatigue_driving_detection/openpose/src/openpose/producer/webcamReader.cpp:WebcamReader():36
Auto-detecting camera index… Detected and opened camera 0.
Auto-detecting all available GPUs… Detected 2 GPU(s), using 2 of them starting at GPU 0.
[libprotobuf ERROR google/protobuf/message_lite.cc:118] Can’t parse message of type “caffe.NetParameter” because it is missing required fields: layer[0].clip_param.min, layer[0].clip_param.max
F0224 20:12:24.419100 309 upgrade_proto.cpp:97] Check failed: ReadProtoFromBinaryFile(param_file, param) Failed to parse NetParameter file: models/pose/body_25/pose_iter_584000.caffemodel
*** Check failure stack trace: ***
@ 0x7f9caf6f60cd google::LogMessage::Fail()
@ 0x7f9caf6f7f33 google::LogMessage::SendToLog()
@ 0x7f9caf6f5c28 google::LogMessage::Flush()
@ 0x7f9caf6f8999 google::LogMessageFatal::~LogMessageFatal()
@ 0x7f9caf294d71 caffe::ReadNetParamsFromBinaryFileOrDie()
@ 0x7f9caf2742ba caffe::Net<>::CopyTrainedLayersFromBinaryProto()
@ 0x7f9cb15246c8 op::NetCaffe::initializationOnThread()
@ 0x7f9cb154066e op::addCaffeNetOnThread()
@ 0x7f9cb1541971 op::PoseExtractorCaffe::netInitializationOnThread()
@ 0x7f9cb15467f0 op::PoseExtractorNet::initializationOnThread()
@ 0x7f9cb153d281 op::PoseExtractor::initializationOnThread()
@ 0x7f9cb1537c91 op::WPoseExtractor<>::initializationOnThread()
@ 0x7f9cb1575b11 op::Worker<>::initializationOnThreadNoException()
@ 0x7f9cb1575c50 op::SubThread<>::initializationOnThread()
@ 0x7f9cb1578b68 op::Thread<>::initializationOnThread()
@ 0x7f9cb1578d6d op::Thread<>::threadFunction()
@ 0x7f9cb08878f0 (unknown)
@ 0x7f9caffa96db start_thread
@ 0x7f9cb02e288f clone
Aborted (core dumped)

問題二解決:

caffe model下載不完全, 參考我上面的4.2手動下載model並放入指定目錄.

問題三:

完成編譯後, 測試時出現
./build/examples/openpose/openpose.bin --video examples/media/video.avi的時候 出現 OpenCV(4.0.0) /home/ying/usb/Download2/opencv-4.0.0/modules/highgui/src/window_gtk.cpp:146: error: (-215:Assertion failed) dst.data == widget->original_image->data.ptr in function ‘cvImageWidgetSetImage’ .

問題三解決:

原因是, opencv4.0版本過高, 卸載重新安裝opencv3.4.3, 具體安裝過程可參考我的另一個博客.

問題四:

runtime library [libcublas.so.10.0] in /usr/local/cuda/lib64 may be hidden by files in: /usr/local/lib
/usr/bin/ld: cannot find -lcudart /usr/bin/ld: cannot find -lcurand /usr/bin/ld: cannot find -lcudnn

問題四解決:

原因是之前安裝opencv默認直接安裝到/usr/local, 導致cmake訪問了多個libcublas.so.10.0. 解決: 卸載乾淨opencv, 手動刪除/usr/local/lib中沒有刪除乾淨的文件, 如下圖.
在這裏插入圖片描述刪除/usr/local/share中的OpenCV, /usr/local/include中的opencv和opencv2.
重新下載編譯opencv時, 注意一定要指定到一個空的文件夾, 並且必須要/usr/local下, 不然openpose找不到(就算指定opencv路徑也找不到). 比如cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local/opencv343 … 指定到/usr/local/opencv343目錄下.

錯誤五:

has no member named ‘set-gpu-data’
openpose.dir/core/arrayCpuGpu.cpp.o’ failed

錯誤五解決:

這是新版openpose的問題, 安裝舊版本的openpose. 我上文有講.

錯誤六:

cmake-gui的時候出現.
Caffe not found. Either turn on the BUILD _CAFFE option or specify the path of Caffe includes and libs using -DCaffe_INCLUDE_DIRS and -DCaffe_LIBS.

錯誤六解決:

這是因爲cmake-gui出問題了, 我卸載了cmake-gui重新安裝還是有這個問題. 於是我刪除build, 使用cmake編譯, 不使用cmake-gui就成功了.

如果還有什麼不清楚的可以加我微信, huanying1314f. 問題補充可以寫在評論區.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章