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。