在Jetson Nano上十行代码实现目标检测(jetson_inference)

网上有一个10行代码搞定目标检测的视频教程

参考网址:https://www.bilibili.com/video/av91150116/

经测非常实用,通过10行代码实现目标检测,在Jetson Nano上迅速搭建一个目标识别的示例和开发环境。

视频例程使用Jetson官方的深度学习库(jetson_inference)进行目标检测程序实现

项目链接:https://github.com/dusty-nv/jetson-inference

项目介绍页面中Building the Project from Source给出了从源代码进行安装和配置的指南

指南链接:https://github.com/dusty-nv/jetson-inference/blob/master/docs/building-repo-2.md

概要步骤如下

建议在进行安装之前先进行系统环境配置,如apt、pip的源设置,中文输入等。

一、jetson-inference下载和安装

步骤如下

1. 预安装软件

首先安装需要用到的软件包

$ sudo apt instal git cmake libpython3-dev python3-numpy

假定apt update在系统配置时已经运行过了,这里不再重复。

2. 下载代码库

然后下载软件源代码库

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

这一步比较费事,这是一个递归的源代码库,包含多个子代码库,因为国内外网络环境的问题,从Github下载会出现连接不稳定,不能下载全的情况。这种情况建议多尝试几次,或者从其它地方进行下载。

3. 编译安装

之后进入代码目录进行编译安装

$ cd jetson-inference

创建一个cmake编译目录

$ mkdir build
$ cd build

进行cmake

$ cmake ..

在cmake过程中会弹出对话框让选择下载模型和安装pytorch,因为国内连接国外不稳定,建议选择不安装(通过TAB键选择Quit和Skip,按回车),后面进行离线下载和安装。

cmake完成之后,进行编译和安装

$ make -j4
$ sudo make install

这样jetson-inference库就安装完成了。编译之后会在build目录下生成jetson-inference库相关文件,包括头文件、库文件、帮助文件、脚本工具、示例程序等。make install会把相关的文件复制到对应的系统目录。

其中download-model.sh和install-pytorch.sh文件分别是下载模型和安装pytorch的脚本文件,可以查看参考文件,进行离线下载和安装。

其中会生成一个aarch64目录,里面包含jetson-inference库的相关文件,目录结构如下

其中lib目录包含库文件,include目录包含头文件,bin目录包含一些图像分类、目标识别等相关的命令和工具。

4. 测试

安装完成之后,build/aarch64/bin目录包含了一些图像分类、目标识别等方面的执行文件,如下 

可以用这些程序进行目标识别的测试。在bin目录下运行

$ ./imagenet.py --network=resnet-18 images/jellyfish.jpg images/test/output_jellyfish.jpg

就可以对imags/jellyfish.jpg图片进行分类识别。识别结果输出在images/test/output_jellyfish.jpg文件。

因为安装时没有选择在线下载模型,这个程序运行不能成功。可以自己下载模型和建立python文件来进行基于jetson-inference库的例程开发。

5. 模型下载

Github提供了离线下载模型的方法,通过

模型下载链接:https://github.com/dusty-nv/jetson-inference/releases

可以根据需要下载对应的模型,下载到data/networks目录,然后解压,比如

$ tar -zxvf SSD-Mobilenet-v2.tar.gz

常见的有GoogleNet,ResNet,SSD-Mobilenet等,如下

下载和解压到data/networks目录之后,就可以在程序中使用jetson-inference库调用这些模型了。

二、例程编写和测试

这里用一个10行代码的例程来实现目标识别。参考视频,代码如下

import jetson.inference
import jetson.utils

net = jetson.inference.detectNet('SSD-Mobilenet-v2', threshold=0.5)
camera = jetson.utils.gstCamera(1280,720,'0')
display = jetson.utils.glDisplay()

while display.IsOpen():
    img, width, height = camera.CaptureRGBA()
    detections = net.Detect(img, width, height)
    display.RenderOnce(img, width, height)
    display.SetTitle('Object Detection | Network %.1f FPS'%net.GetNetworkFPS())

采用SSD-Mobilenet-v2网络对摄像头视频进行在线目标识别。假定命名程序文件detect_net.py,然后运行

$ python3 detect_net.py

程序结果就会出现摄像头的画面和在线识别的结果,如下 

实际测试响应效果良好,能够达到20多fps的帧率,没有滞后感。

版权声明:本文为CSDN博主「星光2020」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/mbdong/article/details/122230673

星光2020

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

YOLOV3预选框验证

对于一个输入图像,比如416*416*3,相应的会输出 13*13*3 26*26*3 52*52*3 10647 个预测框。我们希望这些预测框的信息能够尽量准确的反应出哪些位置存在对象,是哪种对

单目3D目标检测调研

单目3D目标检测调研 一、 简介 现有的单目3D目标检测方案主要方案主要分为两类,分别为基于图片的方法和基于伪雷达点云的方法。   基于图片的方法一般通过2D-3D之间的几何约束来学习,包括目标形状信息&#xff0