因爲項目原因,需要在Jetson nano上跑openpose,在網上找相關資源,只找到了 小乖的晴天的一篇名爲Jetson nano安裝openpose的文章,這篇文章真的是幫了我大忙,在這裏向這位博主表示衷心的感謝。本人按照這位博主的教程一步一步操作,其中因爲自己的一些操作失誤原因,踩了一些坑,總共寫了三次系統,用了四天的時間,終於在板子上跑來了openpose,這裏將自己踩過的一些坑分享給大家,希望能夠幫助到有同樣需要的夥伴們。
參考: 小乖的晴天
本文直接從安裝openpose環境開始講起,此時假設你已經有一塊已寫入系統的板子。
一、準備openpose安裝環境——caffe
建議使用openpose自帶caffe(不過需要先安裝好caffe的依賴)
不需要過多操作,保證openpose——3rdparty——caffe文件夾和github上一樣即可
(直接clone整個openpose,3rdparty裏會有caffe這個文件夾,但裏邊是空的,攤手~)
openpose 的 caffe 下載地址:
https://github.com/CMU-Perceptual-Computing-Lab/caffe/tree/b5ede488952e40861e84e51a9f9fd8fe2395cc8a
關於安裝caffe依賴:
caffe需要一些依賴,否則後面編譯會報錯。具體步驟如下。
Jetson nano已經安裝好CUDA,cuDNN,以及OpenCV,但是需要配置一些,配置可以參考:
https://blog.csdn.net/beckhans/article/details/89138876(第3部分,檢查已經安裝的系統組件)
這一塊建議按照這個步驟做,可以少踩很多坑!
1.安裝protobuf 2.6
因爲caffe不支持3.0以上的protobuf,所以這裏用2.6,這是在單獨安裝caffe時出現的問題,不知道使用openpose自帶caffe是否還對protobuf有要求,有試過的同學可以交流一下。
protoc --version 可查看當前protoc的版本
whereis protoc 可以查看哪些路徑下安裝了protoc
下載protobuf 2.6:
https://github.com/google/protobuf/releases/download/v2.6.1/protobuf-2.6.1.tar.gz
安裝:
安裝完成,如果可以查看版本號,則證明安裝成功,如果出現錯誤:
protoc: error while loading shared libraries: libprotocbuf.so.9: cannot open shared
在 /etc/ld.so.conf.d/目錄下創建 bprotobuf.conf文件,文件內容如下:
/usr/local/lib
這裏要注意:你可能沒有在/etc/ld.so.conf.d/目錄下創建 bprotobuf.conf文件的權限,所以要給當前用戶加讀寫ld.so.conf.d目錄下文件的權。#當前路徑爲/etc
sudo chmod 777 -R ld.so.conf.d
創建好bprotobuf.conf文件後,在 /etc/ld.so.conf.d/目錄下輸入命令:
sudo ldconfig
再輸入protoc --version,就可以查看protobuf版本號了。
2.安裝其他依賴
注意:千萬不要去切換apt-get的源。因爲apt-get的默認源在國外,下載包速度很慢,當時本人將apt-get的源換成了國內的,結果有些依賴包就下載不下來。
sudo apt-get install libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install libopenblas-dev liblapack-dev libatlas-base-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
sudo apt-get install git build-essential
安裝時,注意不要更新protobuf,不要使用sudo apt upgrade
如果出現sudo apt-get install 命令不能用的情況,kill -9 相關進程也沒有用,可以試試萬能重啓。
關於 pybind11
如果這個文件夾爲空,後續編譯時會報錯
openpose——3rdparty——pybind11文件夾也存在可能爲空的問題
openpose 的 pybind11 下載地址:
https://github.com/pybind/pybind11/tree/085a29436a8c472caaaf7157aa644b571079bcaa
可以單獨下載這兩個文件夾,進行替換,注意文件夾名稱保持不變,還是“caffe”和“pybind11”,不然可能存在路徑問題。
二、編譯openpose
1.保證openpose——3rdparty——caffe 和 pybind11 兩個文件夾非空且內容和github上一樣
2.安裝cmake-gui
因爲jetson nano的系統是Ubuntu 18,所以需要cmake>=3.12(一般默認爲3.10)
卸載低版本cmake(如果已安裝)
sudo apt purge cmake-qt-gui
執行
sudo apt-get install qtbase5-dev
下載最新版本cmake:
解壓文件,使用命令行進入文件夾,依次運行
./configure --qt-gui
./bootstrap && make -j8 && sudo make install -j2
注:make install時,如果不加sudo可能會報權限錯誤
-j2,可以量力而行,2可以改爲更大的數,但需保證是2的倍數
如果安裝成功可以看到這樣的圖標(本文中安裝的是cmake 3.14)
3.編譯openpose
- 新建build文件夾
- 打開cmake,源文件:openpose文件夾;目標文件:openpose下新建build文件夾
如果openpose文件夾下之前沒有build。會有如下提示,選擇“Finish”就好。
實際操作界面
- Configure
點擊“Configure”按鈕,如果成功,會提示“Configuring done”。這時,會出現一些選項
使用openpose自帶caffe需要按照下圖勾選:
千萬注意不要勾選錯了,否則會很麻煩!
注意:最後一項不要選!!!
說明:
1.BUILD_CAFFE:使用自帶caffe進行編譯
2.BUILD_EXAMPLE:可以使用openpose示例程序
3.BUILD_PYTHON:如果需要使用Python的API,需要勾選此項
4.USE_CUDNN:使用CUDNN加速,不勾選後期調整網絡也能跑
注:WITH_OPENCV_WITH_OPENGL:不用勾選,jetson nano沒有OPENGL,如果勾選編譯時會報錯,或者也可以先安裝所需文件,不過本文沒有嘗試。
注意:如果之前自己安裝過caffe,但是現在想用openpose自帶的caffe,一定記得刪除之前caffe的環境變量。
sudo vim ~/.bashrc
刪除環境變量/caffe/python,保存文件後記得source一下
source ~/.bashrc
如果想要使用自己安裝的caffe,不需要勾選BUILD_CAFFE,而是設置下面兩項內容,讓cmake可以找到caffe
- Generate
點擊“Generate”,如果成功,會提示“Generate done”
- make
進入openpose——build,然後make,然後等待,直到100%。
cd openpose/build/
sudo make -j2
三、運行openpose
如果上面的步驟都沒問題,那麼恭喜你,基本上可以成功運行openpose程序了。
Jetson nano算力有限,如果直接照搬quickstart的示例,很可能發現Jetson nano卡住不動,最後什麼也沒出來,提示“killed”。
這時候,需要縮小網絡,如果需要外接攝像頭,還需要縮小相機畫面大小,否則nano也可能自己關機了
比如直接使用攝像頭:
./build/examples/openpose/openpose.bin -camera_resolution 320x160 -net_resolution 64x32
注意:兩個數值可以調整,但需要是16的倍數
其他示例也需要設置網絡大小,否則很難在Jetson nano上跑起來,
比如處理視頻:
./build/examples/openpose/openpose.bin --video examples/media/video.avi --net_resolution 64x32
比如處理圖片:
./build/examples/openpose/openpose.bin --image_dir examples/media/ --net_resolution 64x32
注意:處理圖片時,example/media/文件中有多張圖片,如果想要快速檢測,可以只留一張圖片在此文件夾中,其他圖片另存備份。
關於網絡大小:
其實128x96效果比較好(這也是本文嘗試的最大值),但是很容易自動關機。網絡太小時,需要離攝像頭很近,才能檢測出姿態,如果距離較遠,會檢測不出姿態或者姿態不準確。而網絡較大時,距離較遠就可以準確識別姿態,但是會比較緊張,因爲Jetson nano隨時會關機。
關於攝像頭:
可以用樹莓派攝像頭,但是好像需要進行一些設置。
也可以用usb口的攝像頭,即插即用(本文用的這種),比較方便。
【參考】:
安裝系統:
https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit#write
openpose準備工作:
https://github.com/CMU-Perceptual-Computing-Lab/openpose/blob/master/doc/prerequisites.md
openpose安裝:
https://github.com/CMU-Perceptual-Computing-Lab/openpose/blob/master/doc/installation.md
openpose在jetson nano上示例:
https://github.com/CMU-Perceptual-Computing-Lab/openpose/blob/master/doc/quick_start.md
https://developer.ridgerun.com/wiki/index.php?title=Setting_up_OpenPose_on_NVidia_Jetson_TX2
安裝protobuf:
https://blog.csdn.net/yunyi4367/article/details/78071872
安裝caffe依賴:
https://blog.csdn.net/beckhans/article/details/89393280