Jetson Nano踩坑记录贴——安装NVDIA对象检测和推理工具

  • jetson-inference安装
  • 准备依赖库文件
  • 编译jetson-inference库
  • 安装jetson-inference库
  • jetcam的安装
  • 基于jetson-inference库物体对象检测


jetson-inference安装

由于某比赛需求,本小白在导师推荐下入坑了英伟达的开发板,踩了不少次坑,于是决心制作一个记录贴。因此这仅仅是一个记录贴,若有侵权请联系我删除。同时若有读者发现我的问题,也欢迎指出帮助我进行改进学习,感谢。

本文记录的是在jetson nano b01上安装NVDIA对象检测和推理工具。

准备依赖库文件

sudo apt-get update
sudo apt-get install git cmake libpython3-dev python3-numpy

编译jetson-inference库

git clone --recursive https://github.com/dusty-nv/jetson-inference

在第一次执行时提示了如下的错误:
fatal: unable to access‘‘:gnutls_handshake() failed: The TLS connection was non-properly terminated.

不知为什么重新再执行一次就成功了。

之后再执行如下操作:

cd jetson-inference
git submodule update --init

重要:切换模型和 pytorch 的安装源
若后面要在线安装模型与pytorch,请务必更换源!!!注意tools这个单词前面有空格。

sed -in-place -e 's@https://nvidia.box.com/shared/static@https://bbs.gpuworld.cn/mirror@g' tools/download-models.sh 
sed -in-place -e 's@https://nvidia.box.com/shared/static@https://bbs.gpuworld.cn/mirror@g' tools/install-pytorch.sh
mkdir build
cd build
cmake ../

在弹出的model downloader页面选择quit即可,换源后安装仍然可能会出错,后面再补。

若选择直接安装,编译好了后,会自动弹出安装模型的绿色提示框,此时就可以根据需求选择安装的模型。

其中上下键用来切换模型、空格键用来切换当前模型是否安装(模型前面的括号有*号,表示安装该模型)、左右键用来切换执行安装和退出安装的命令。

要稍后再次运行Model Downloader工具,可以使用以下命令:

$ cd jetson-inference/tools 
$ ./download-models.sh

手动下载后将目标存放在<jetson-inference/data/networks>目录下,然后使用以下命令解压:

cd jetson-inference/data/networks/
tar -zxvf <model-archive-name>.tar.gz

之后会弹出pytorch的安装,由于我已经安装有pytorch,直接跳过。在此若和我一样选择了skip,也可在之后有需要时进行手动安装。

若稍后要再次运行安装PyTorch,也可以稍后再次运行此工具:

$ cd jetson-inference / build 
$ ./install-pytorch.sh

安装jetson-inference库

编译完成后即可安装jetson-inference库。
注意:下面三步仍然需要在刚才的build目录下进行。

make -j$(nproc)
sudo make install
sudo ldconfig

jetcam的安装

接下来安装jetcam官方库以调用CSI摄像头。

git clone https://github.com/NVIDIA-AI-IOT/jetcam
cd jetcam
sudo python3 setup.py install

报错No nodule named ‘traitlets’则先安装traitlets

pip3 install traitlets

基于jetson-inference库物体对象检测

在此以SSD-Mobilenet-v2为例进行简单测试。在JupyterLab中导入以下程序,否则即使安装了ipywidgets,将提示无此module:

import ipywidgets
from IPython.display import display
from jetcam.utils import bgr8_to_jpeg
import jetson.inference
import jetson.utils
import cv2
import numpy as np
# load detect net
net = jetson.inference.detectNet("ssd-mobilenet-v2", threshold=0.5)
camera = jetson.utils.gstCamera(0)
image_widget = ipywidgets.Image(format='jpeg')
text_widget = ipywidgets.Text(value='Hello World')
display(image_widget,text_widget)

while 1:
    img, width, height = camera.CaptureRGBA(zeroCopy=1) 
    # detect, also appends image with found objects
    detections = net.Detect(img, width, height)    
    # we need a jpeg to display, depth is 4 because of alpha channel
    image = jetson.utils.cudaToNumpy(img,width, height, 4)   
    image1 = cv2.cvtColor (image.astype (np.uint8), cv2.COLOR_RGBA2BGR)
    image_widget.value = bgr8_to_jpeg(image1,0)
    # lets put the found things in a text field just because
    text_widget.value = " ".join([net.GetClassDesc(d.ClassID) for d in detections])

运行后即可在界面中实时显示识别信息,并在text框中输出所有识别到的label。