用Jetson NANO实现物件识别Demo

技术部
887 0 2019-05-14

今天我们来一起用Jetson NANO实现物件识别的DEMO。
(注、本文也适用于 Jetson TX1/TX2/Xavier
准备材料:
1. Jetson NANO 并且用Jetpack 4.x 安装好环境(TensorRT版本问题)
2. CSI摄像头(如果用 USB 摄像头者,请看本文最末处
NVIDIA有一个Hello AI的 "Two Days to a Demo(点击进入)“课程 (如下图)

完整来说,Demo 总共有以下部分
- System Setup
- Image Recognition
- Object Detection
- Segmentation
本教程以前两个部分:System Setup与 Image Recognition 应用为主,带着大家轻松上手


所有代码,都可以透过 git clone https://developer.nvidia.com/embedded/twodaystoademo 轻松

这里包含很多预先训练好的模型,可以识别1000多类物件,我们将演示这个过程。
编译时需要用到 cmake,请确认系统上已安装 git 与 cmake,或者执行以下指令:

sudo apt install -y git cmake

然后将 git 的代码复制一份到设备上

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

接着进入该目录并取得代码更新版本

cd jetson-inference
git submodule update --init

在执行 cmake 编译之前,有个地方需要调整。由于这里的 cmake 会调用 CMakePreBuild.sh去下载很多预训练好的模型,但这些模型放在 nvidia.app.box.com 上面,国内没法直接访问造成绝大部分用户的困扰。因此我们特别过年建了一个专属的镜像站,执行 cmake .. 之前将 CMakePreBuild.sh 的位置转到这个镜像站去,就能非常流畅地下载这些模型,执行的指令如下:

sed -in-place -e 's@https://nvidia.box.com/shared/static@https://bbs.gpuworld.cn/mirror@g' CMakePreBuild.sh

接着回到标准的执行步骤,到 build 目录执行 cmake .. 进行环境配置

mkdir build && cd build
cmake ../

如果环境备注正确的话,最后会出现下图最后一行“Build files have been written to: xxxxx/build” 的信息,否则就会出现错误信息。
如果出现错误,建议把 build 目录产生的内容全部清空(在 build 目录下执行 rm -rf *),然后重新 cmake ..

如果配置正确的话,就可以继续往下执行

# 这里的 make 不用 sudo
# 后面 -j4 使用 4 个 CPU 核同时编译,缩短时间
make -j4

如果编译正确的话,就可以继续往下执行

# 这里 make install 因为要写入系统目录去,因此需要 sudo
sudo make install

以上步骤都执行后,就完成 System Setup 部分!


接着就能立即执行 Image Recognition 任务。
当完成 System Setup 之后,过程会将执行档存在 jetson-inference/buidl/aarch64/bin 下,请自行更换到该目录,然后执

./imagenet-camera googlenet

就能看到 CSI 摄像头的画面(如下图)
注、第一次运行的时候时间会比较长,后面再运行就会快很多了,这是因为 TensorRT 的特性问题!


问题:如果使用 USB 摄像头的话,该如何修改代码?
回答:请到 jetson-inference/imagenet-camera 目录下,修改 imagenet-camera.cpp 第37行
            #define DEFAULT_CAMERA -1
            原值 -1 会使用 CSI/MIPI 摄像头,如果改成 0或1或2。。。(根据您设备在 /dev/video 后面的号码而定)就能调用 USB 摄像头
            不过一次只能指定一个摄像头
            修改完后,到 build 目录下执行 make -j4 && sudo make install  后即