视觉学习笔记0——在Jetson nano安装编辑openpose

在Jetson nano安装编辑openpose

~~ 如果你有台好电脑就用电脑安装吧,除非你是真的没办法。~~
因为要做项目,我打算在Jetson nano(B1)上安装编译openpose(虽然我知道这并不是一个好主意),安装这个东西我走了很多弯路,兜兜转转至少安装了20多次,重装nano镜像至少5次,耗时大概4个星期,最后成功了,为了确定我的成功使具有可复制性,我又重头装多了两次,确定可行。我觉得绝大多数错误我都踩过,并将自己踩过的坑分享给大家,希望能够帮助到有同样需要的兄弟。

    [https://blog.csdn.net/taiyangmiaomiao/article/details/97638598](https://blog.csdn.net/taiyangmiaomiao/article/details/97638598)
    [https://blog.csdn.net/weixin_30514003/article/details/113090195](https://blog.csdn.net/weixin_30514003/article/details/113090195)

以上两篇文章是我参照最多的文章,帮了我很多,在这里向两位博主表示衷心的感谢。

如果是用过的镜像,建议重新烧录,因为有一些软件要求用的是旧的版本

一、烧录镜像

如果你有TB官方提供的教程可以按那个来烧录

内存卡选择:64G内存卡(32G都不知道可不可以跑的动)

1.镜像文件

https://developer.nvidia.com/jetson-nano-sd-card-image-r322

找个文件夹放着就好,记得路径,别搞丢了

2.格式化软件

我用的是SD Card Formatter
随便去网上下载一个,下个新的也行
https://www.sdcard.org/downloads/formatter/eula_windows/
在这里插入图片描述

首先,如果是用过的镜像,建议重新烧录确定内存,注意卡里没有重要文件删除了别找我。
接着,格式化内存卡(就是这么简单)

3.烧录软件

我用的是balenaEtcher1.5.116
随便去网上下载一个,下个新的也行
https://www.balena.io/etcher/
在这里插入图片描述
第一个选择镜像,第二个选择TF卡,第三个是确认烧录
最后耐心等待

烧录半途中和完成后,会弹出很多个盘(什么E\F\G一大堆),不用管,烧录完后就直接关掉就行,千万不要格式化!

4、换源和安装软件

可以参考https://blog.csdn.net/beckhans/article/details/89138876

比较推荐换源(清华源),不换会很慢

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

防止误操作后无法恢复,先备份原文件sources.list

sudo gedit /etc/apt/sources.list

然后删除原来的源,复制下面的清华源(我的话会新建一个文件,复制原来的源存放)

deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main
multiverse restricted universe deb
http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main
multiverse restricted universe deb
http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main
multiverse restricted universe deb
http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports
main multiverse restricted universe deb-src
http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main
multiverse restricted universe deb-src
http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main
multiverse restricted universe deb-src
http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main
multiverse restricted universe deb-src
http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports
main multiverse restricted universe

到sources.list后保存文件,之后打开终端输入让它编辑运行

sudo apt-get update

编辑运行后的镜像已经自带了JetPack,cuda,cudnn,opencv等都已经安装好,并有例子,这些例子安装路径如下所示
在这里插入图片描述

(1)检查CUDA

Jetson-nano中已经安装了CUDA10.0版本,但是此时你如果运行 nvcc -V是不会成功的,需要你把CUDA的路径写入环境变量中。OS中自带Vim工具 ,所以运行下面的命令进入环境变量

sudo vim ~/.bashrc

在环境变量最后面添加

export CUDA_HOME=/usr/local/cuda
export LD_LIBRARY_PATH=/usr/local/cuda/lib64: L D L I B R A R Y P A T H e x p o r t P A T H = / u s r / l o c a l / c u d a / b i n : LD_LIBRARY_PATH export PATH=/usr/local/cuda/bin: LDLIBRARYPATHexportPATH=/usr/local/cuda/bin:PATH

然后保存退出

修改:

I

退出修改:

Esc

保存退出:

:wq

最后source一下这个文件。

source ~/.bashrc

source后,此时再执行nvcc -V执行结果如下

beckhans@Jetson:~$ nvcc -V
nvcc: NVIDIA ® Cuda compiler driver
Copyright © 2005-2018 NVIDIA Corporation
Built on Sun_Sep_30_21:09:22_CDT_2018
Cuda compilation tools, release 10.0,V10.0.166
beckhans@Jetson:~$

(2)检查OpenCV

Jetson-nano中已经安装了OpenCV3.3版本,可以使用命令检查OpenCV是否安装就绪

pkg-config opencv --modversion

如果OpenCv安装就绪,会显示版本号,我的版本是3.3.1

(3)检查cuDNN

Jetson-nano中已经安装好了cuDNN,并有例子可供运行,我们运行一下例子,也正好验证上面的CUDA

cd /usr/src/cudnn_samples_v7/mnistCUDNN
进入例子目录

sudo make
编译一下例子

sudo chmod a+x mnistCUDNN
为可执行文件添加执行权限

./mnistCUDNN
执行

如果成功,如下所示

beckhans@Jetson:/usr/src/cudnn_samples_v7/mnistCUDNN$ ./mnistCUDNN
cudnnGetVersion() : 7301 , CUDNN_VERSION from cudnn.h : 7301 (7.3.1)
Host compiler version : GCC 7.3.0 There are 1 CUDA capable devices on
your machine : device 0 : sms 1 Capabilities 5.3, SmClock 921.6 Mhz,
MemSize (Mb) 3964, MemClock 12.8 Mhz, Ecc=0, boardGroupID=0 Using
device 0 Testing single precision Loading image data/one_28x28.pgm
Performing forward propagation … Testing
cudnnGetConvolutionForwardAlgorithm … Fastest algorithm is Algo 1
Testing cudnnFindConvolutionForwardAlgorithm … ^^^^
CUDNN_STATUS_SUCCESS for Algo 1: 0.325104 time requiring 3464 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 0: 0.387500 time requiring 0 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 2: 0.540729 time requiring 57600
memory ^^^^ CUDNN_STATUS_SUCCESS for Algo 4: 4.965156 time requiring
207360 memory ^^^^ CUDNN_STATUS_SUCCESS for Algo 7: 5.201146 time
requiring 2057744 memory Resulting weights from Softmax:
0.0000000 0.9999399 0.0000000 0.0000000 0.0000561 0.0000000 0.0000012 0.0000017 0.0000010 0.0000000 Loading image data/three_28x28.pgm Performing forward propagation … Resulting weights from Softmax:
0.0000000 0.0000000 0.0000000 0.9999288 0.0000000 0.0000711 0.0000000 0.0000000 0.0000000 0.0000000 Loading image data/five_28x28.pgm Performing forward propagation … Resulting weights from Softmax:
0.0000000 0.0000008 0.0000000 0.0000002 0.0000000 0.9999820 0.0000154 0.0000000 0.0000012 0.0000006 Result of classification: 1 3 5 Test passed! Testing half precision (math in single precision)
Loading image data/one_28x28.pgm Performing forward propagation …
Testing cudnnGetConvolutionForwardAlgorithm … Fastest algorithm is
Algo 1 Testing cudnnFindConvolutionForwardAlgorithm … ^^^^
CUDNN_STATUS_SUCCESS for Algo 0: 0.113750 time requiring 0 memory ^^^^
CUDNN_STATUS_SUCCESS for Algo 1: 0.119792 time requiring 3464 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 2: 0.236198 time requiring 28800
memory ^^^^ CUDNN_STATUS_SUCCESS for Algo 4: 1.031719 time requiring
207360 memory ^^^^ CUDNN_STATUS_SUCCESS for Algo 5: 5.049948 time
requiring 203008 memory Resulting weights from Softmax:
0.0000001 1.0000000 0.0000001 0.0000000 0.0000563 0.0000001 0.0000012 0.0000017 0.0000010 0.0000001 Loading image data/three_28x28.pgm Performing forward propagation … Resulting weights from Softmax:
0.0000000 0.0000000 0.0000000 1.0000000 0.0000000 0.0000714 0.0000000 0.0000000 0.0000000 0.0000000 Loading image data/five_28x28.pgm Performing forward propagation … Resulting weights from Softmax:
0.0000000 0.0000008 0.0000000 0.0000002 0.0000000 1.0000000 0.0000154 0.0000000 0.0000012 0.0000006 Result of classification: 1 3 5 Test passed!

(4)Jetson Nano Swap交换空间增加
依次输入以下命令,可以使交换空间增加4G,解决一些耗尽内存的程序出错。(我不知道这个有没有影响,有人说可以不用搞这个,不过我觉得交换空间增加可能可以提高运行空间吧,如果你不做也成功了就在评论区告诉我)

sudo fallocate -l 4G /var/swapfile

sudo chmod 600 /var/swapfile

sudo mkswap /var/swapfile

sudo swapon /var/swapfile

sudo bash -c ‘echo “/var/swapfile swap swap defaults 0 0” >>
/etc/fstab’

(5)安装环境依赖

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
sudo apt install libcanberra-gtk-module
sudo apt-get install qtbase5-dev

二、安装openpose

建立pose文件夹,专门存放openpose、cmake、protobuf 2.6和配置.git文件

1、openpose

(1)openpose下载

首先在github上下载openpose
https://github.com/CMU-Perceptual-Computing-Lab/openpose/blob/master/doc/installation.md

如果你觉得github下的好慢的话可以用CSDN的开源广场下载
https://codechina.csdn.net/mirrors/CMU-Perceptual-Computing-Lab/openpose

但是无论是在github还是CODE CHINA上clone的openpose项目都存在一个问题,就是openpose项目目录下的3rdparty目录中的caffe目录和pybind11为空,需要单独下载。

(2)caffe 下载

openpose 的 caffe 下载地址:
https://github.com/CMU-Perceptual-Computing-Lab/caffe/tree/b5ede488952e40861e84e51a9f9fd8fe2395cc8a
(caffe最好用openpose自带的,不然会有很多问题)

(3)pybind11 下载

openpose 的 pybind11 下载地址:

https://github.com/pybind/pybind11/tree/085a29436a8c472caaaf7157aa644b571079bcaa
(单独下载这两个文件夹后,对3rdparty目录中的caffe目录和pybind11进行替换,注意文件夹名称保持不变,还是“caffe”和“pybind11”,不然可能存在路径问题。)

(4)openpose模型下载
提前下好模型,到时候cmake-gui编译就不用等太久,5个模型分别放在OpenPose目录下的models文件下的对应模型文件里
https://blog.csdn.net/weixin_40245131/article/details/106988775?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161797492516780264024387%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=161797492516780264024387&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-1-106988775.first_rank_v2_pc_rank_v29&utm_term=openpose%E6%A8%A1%E5%9E%8B%E4%B8%8B%E8%BD%BD

2.安装protobuf 2.6

有人说因为caffe不支持3.0以上的protobuf要用2.6版本,但是我是用openpose自带caffe,不知道对protobuf有没有要求,所以我没冒险还是用2.6版,毕竟protobuf不是核心工具,如果你试过可以的话就在评论区和我说。
查看当前protoc的版本

protoc --version

查看哪些路径下安装了protoc

whereis protoc

下载protobuf 2.6:

https://github.com/google/protobuf/releases/download/v2.6.1/protobuf-2.6.1.tar.gz

安装依赖

sudo apt-get install build-essential

进入protobuf-2.6.1

cd pose/protobuf-2.6.1/

配置安装文件

./configure

编译

make

检测编译安装环境

make check

安装

sudo make install

检查环境变量是否安装配置好protoc

protoc --version

一般来说是没有的,只会提示出现以下报错

protoc: error while loading shared libraries: libprotocbuf.so.9:
cannot open shared

解决以上报错需要在 /etc/ld.so.conf.d/目录下创建一个 bprotobuf.conf文件,不过需要管理员root权限。
进入root

sudo su

退出root

su 用户名

进入root后

vim bprotobuf.conf

往bprotobuf.conf文件添加的内容

/usr/local/lib

创建好bprotobuf.conf文件后,在 /etc/ld.so.conf.d/目录下输入命令:

sudo ldconfig

最后再次检查环境变量是否有protoc

protoc --version
libprotoc 2.6.1

安装好后,注意不要更新protobuf,不要使用sudo apt upgrade。

3.安装cmake

愿世界没有cmake,实在恶心人,这里的坑太多,经过兜兜转转才我走出来(泪目,给我点个赞吧)
首先安装依赖

sudo apt-get install qtbase5-dev

在cmake官方网站下载cmake的安装文件,我建议下载的是3.16版本,太高版本可能存在不适应,一大堆麻烦。

https://cmake.org/files/v3.16/
然后提取到pose文件夹下安装编译

cd pose/cmake-3.16.0

./configure --qt-gui

./bootstrap

make

sudo make install

检查cmake是否完成安装,如果安装成功可以看到这样的图标,通过图形界面打开cmake软件。
在这里插入图片描述

三、编译openpose

1、新建build文件夹

在pose文件夹下openpose文件夹下新建build文件夹

在这里插入图片描述

2、编译cmake

打开cmake,源文件:openpose文件夹;目标文件:openpose下新建build文件夹
在这里插入图片描述
(注意打钩的地方)
新建build会有如下提示,选择“Finish”就好。

在这里插入图片描述

3、Configure与Generate

先点击“Configure”按钮,如果成功,会提示“Configuring done”。

再点击“Generate”,如果成功,会提示“Generate done”
(注意顺序)
如果有这么简单就好了。。。
实际上点击“Configure”按钮后即使提示“Configuring done”了,但仔细看它会在“Configure”按钮下面的编辑进度框里提示你有一个错误:致命git。

4、git与master的配置

(1)git

git出错主要是我们还没有给git配置好,首先你要去github注册一个号。
在终端输入命令安装

sudo apt-get install git

安装完成后进行git配置,输入指令

git config --global user.name “github用户名”

git config --global user.eamil “github注册邮箱”

因为git是通过ssh的方式访问资源库的,所以需要在本地创建验证用的文件。
使用命令

ssh-keygen -C ‘github注册邮箱’ -t rsa

(这个命令是在用户目录~/.ssh/下建立相应的密钥文件)
(2)github
进入.ssh

cd ~/.ssh

进入后输入,获取公钥内容

gedit id_rsa.pub

将id_rsa.pub文件公钥内容复制添加到github上
在这里插入图片描述
在这里插入图片描述
Title随便取个名,key是公钥内容,然后Add SSH key。
(3)master
回到终端,进入pose文件夹,运行命令初始化git

git init

进入openpose下把build文件夹删掉,再新建一个build文件夹
然后在终端进入/pose/openpose/build下输入

vi …/CMakeLists.txt

在CMakeLists.txt的68%处,
把master那行的#去掉,把下面c95002f那行的#加上

在这里插入图片描述
如下
在这里插入图片描述
在CMakeLists.txt的70%处还有两行,
也是把master那行的#去掉,把下面c95002f那行的#加上
(c95002f可能每个人都不是很一样,比如我是1807add,我觉得问题不大)

再到cmake-gui,重复上面的编译步骤运行Configure
很好,又报错。

error: pathspec ‘master’ did not match any file(s) known to

出现这个错误是因为git的本地分支master进不去,我猜是git还没提交过所以识别不了master。

下面是我的测试解决的整个过程

git init

$Initialized empty Git repository in e:/tRepo/.git/

ls -ah

$ .git

git checkout -b dev

$Switched to a new branch ‘dev’

git checkout master

$error: pathspec ‘master’ did not match any file(s) known to git.

vim readme.txt

可以输入点东西,也可以不输。

git status

$On branch dev
Initial commit
Untracked files:
(use “git add …” to include in what will be committed)
readme.txt
nothing added to commit but untracked files present (use “git add” to track

git add .

等它传输

git status

$On branch dev
Initial commit
Changes to be committed:
(use “git rm --cached …” to unstage)
new file: readme.txt

git commit -m “add a new file:readme.txt”

$[dev (root-commit) 06e83d0] add a new file:readme.txt
1 file changed, 1 insertion(+)
create mode 100644 readme.txt

git checkout dev

$Already on ‘dev’

git checkout master

$error: pathspec ‘master’ did not match any file(s) known to git.

git checkout -b master

$Switched to a new branch ‘master’

git checkout master

$Already on ‘master’

git checkout dev

$Switched to branch ‘dev’

git checkout -

$Switched to branch ‘master’

ok,搞好了

再再回到cmake-gui,先点击“Configure”按钮,如果成功,会提示“Configuring done”。

再点击“Generate”,如果成功,会提示“Generate done”
(注意顺序)
然后我的gui就编译通过了。

四、编译cmake

进入build文件夹

cd pose/openpose/build/

编译make

sudo make

编译要很慢,也没有错误提出

五、运行openpose

Jetson nano算力其实有限,比较容易使Jetson nano卡住不动,最后什么也没出来,提示“killed”(裂开)。需要缩小网络,缩小usb摄像头画面大小,否则nano也可能自己关机了

使用usb摄像头:

./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摄像头,即插即用(必须是Ubuntu下免驱的),比较方便。

本文为学习笔记,供自己学习记录,如果有错请勿骂人。
希望相互学习,共同进步,望三连哦!

评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值