《Hello AI》系列:Jetson Nano在Jupyterlab中使用DetectNet 定位物体(Python)

DetectNet 介绍

前面的识别示例输出代表整个输入图像的类概率。接下来我们将重点关注对象检测,并通过提取其边界框来查找各种对象在帧中的位置。与图像分类不同,对象检测网络能够在每帧中检测许多不同的对象。

p34j5h46jl34hj34h

detectNet对象接受图像作为输入,并输出检测到的边界框的坐标列表及其类别和置信度值。 detectNet可在PythonC++中使用。 请参阅下文,了解可供下载的各种预训练检测模型。使用的默认模型是在 MS COCO 数据集上训练的91 类SSD-Mobilenet-v2 模型,该模型在使用 TensorRT 的 Jetson 上实现了实时推理性能。

作为使用该类的示例detectNet,我们提供了 C++ 和 Python 的示例程序:

这些样本能够检测图像、视频和摄像头中的对象。有关支持的各种类型的输入/输出流的更多信息,请参阅相机流和多媒体页面。

具体的使用方法与说明,请继续查看以下文档:

https://github.com/dusty-nv/jetson-inference/blob/master/docs/detectnet-console-2.md

前置条件

要完整无错运行以下代码,需要:

  • 1,已经在本地构建好Jetson-Inference
    构建Jetson-Inference的步骤:《Hello AI》Jetson Nano构建Jetson-inference(Build from source)

  • 2,安装Pillow
    使用以下命令进行安装:

    pip3 install Pillow
  • 3,把需要分类检测的图像,存放在与代码同一目录

  • 4,下载好所需要的模型文件。可以使用/jetson-inference/tools目录里面的download-models.sh程序进行模型的下载。

完整Notebook代码

from jetson_inference import detectNet
from jetson_utils import videoSource, videoOutput
import sys

from matplotlib import pyplot as plt

# 加载模型
net = detectNet("ssd-mobilenet-v2", threshold=0.5)

input = videoSource("peds_3.jpg", argv=sys.argv) # 配置需要导入检测的图片

img = input.Capture() # 获取图像数据

detections = net.Detect(img)
# 显示导出图片
fig = plt.figure(figsize=(10, 5)) 

plt.imshow(img)
plt.title('my picture')
plt.show()

如下图所示:

WX20230810-2238022x

可以通过以下代码,查看每一个识别出来的信息

for n in enumerate(detections):
    print(n)