面包屑图标 当前位置: 首页
AI资讯
热点详情

基于NVIDIA Jetson的机器学习影像对象检测

AI热点日报
AI热点日报时间:2026-07-08
热点解读

NVIDIA Jetson Inference 是一套专为 Jetson 系列边缘计算设备打造的视觉识别框架,其核心优势在于能够充分利用 Jetson 板载 GPU 实现硬件加速。在实际测试中,尤其在目标检测领域,Detectnet 示例展现出出色的处理效率。 Intel RealSense D43

NVIDIA Jetson Inference 是一套专为 Jetson 系列边缘计算设备打造的视觉识别框架,其核心优势在于能够充分利用 Jetson 板载 GPU 实现硬件加速。在实际测试中,尤其在目标检测领域,Detectnet 示例展现出出色的处理效率。

Intel RealSense D435 作为 RealSense 系列中的深度摄像头,专注于提供精准的深度信息输出,即测距功能。它通过光学方法探测深度,实际表现良好。

图像目标检测是深度学习中最具代表性的应用之一。借助神经网络,我们可以识别图像中的物体类别并标注其位置。然而,传统目标检测仅能输出物体在画面中的二维坐标,无法提供距离信息。这一局限限制了更复杂场景的应用,例如机械臂精准抓取、自动驾驶与无人机避障、以及目标跟踪等。

因此,本文将重点讲解如何将“目标与相机之间的相对距离”整合到目标检测中,形成一个可落地的实战教程。本次使用的微电脑平台为 NVIDIA Jetson Nano 4GB,深度相机采用 Intel RealSense D435。此外,还将简要介绍 NVIDIA GStreamer 技术,因为 Jetson Inference 相关应用均依赖它进行图像数据交换与传输,从而显著提升处理性能。

一、Jetson Inference 运行环境安装与配置步骤

Jetson Inference 环境搭建主要完成以下三项工作:

1. Python 依赖库安装(例如 PyTorch 等)
2. Python 程序编译与路径参数配置
3. 预训练神经网络模型安装

具体安装步骤可参考往期教程。本文将重点使用 detectnet 示例,如果存储空间有限,建议优先安装 detectnet 对应的预训练模型,并尽可能全部安装,以免后续需要时重新下载。需注意,安装过程需从网络下载大量文件,请确保网络环境稳定且传输可靠。

Jetson Inference 的示例程序核心在于通过 CUDA 调用 GPU 执行 TensorRT 加速运算,凭借 GPU 的并行计算能力,神经网络推理效率得到大幅提升。同时,图像串流处理由 GStreamer 完成,能够显著提高数据传输效能。Jetson Inference 中所有神经网络的图像数据传递均依赖 GStreamer。

这两项技术的整合带来了立竿见影的效果。实测显示,运行 detectnet 程序时整体帧率可达约 25 FPS,这充分体现了 CUDA 对 GPU 能力的极致利用。

二、Intel RealSense D435 深度相机应用环境安装与配置

RealSense 相关环境安装与配置主要涉及三方面:

1. Python 依赖库安装
2. RealSense 应用编译与路径设置
3. RealSense-viewer 或 Python 程序安装

具体安装过程同样参考往期文章。RealSense 输出的图像数据必须通过 numpy 库进行转换才能变为实时图像,后续程序片段将重点说明这一过程。RealSense 在工作时会输出两种图像信息:标准 RGB 图像和深度图像。使用时需注意进行“图像信息对齐”——因为两种图像捕获时可能采用不同的分辨率规格,从硬件参数表也能看出它们的分辨率上限存在差异。

(原厂资料图注:Intel RealSense D435 官方规格页)

三、系统架构图详解

从架构图可见,RealSense D435 首先通过 numpy 将图像信息转换为 OpenCV 格式,用于后续的边框绘制、文字标注和实时显示等处理。运行 Jetson Inference 的 detectnet 时,还需借助 CUDA 将 OpenCV 格式转换为 GStreamer 格式,才能输入神经网络。推理完成后,detectnet 输出的边界框位置、物体类别名称等结果被叠加到 RGB 图像上,并与深度图像对齐,最终通过 OpenCV 显示整合后的画面。

四、程序设计说明

导入相关依赖库

1. JetsonInference 相关库:inference, jetson.utils
2. RealSense 相关库:pyrealsense2
3. OpenCV 相关库:cv2
4. Numpy 数值运算相关库:numpy

#!/usr/bin/python3
# Copyright (c) 2021, Ca vedu. All rights reserved.
#
import jetson.inference
import jetson.utils
import argparse
import sys
import os
import cv2
import re
import numpy as np
import io
import time
import json
import random
import pyrealsense2 as rs

程序外部参数设定

1. –network:指定预训练神经网络模型
2. –threshold:设定置信度阈值(超过该分数才显示)
3. –width:图像宽度
4. –height:图像高度

# parse the command line
parser = argparse.ArgumentParser(description="Locate objects in a live camera stream using an object detection DNN.",
                                 formatter_class=argparse.RawTextHelpFormatter,
                                 epilog=jetson.inference.detectNet.Usage() + jetson.utils.logUsage())
parser.add_argument("--network", type=str, default="ssd-mobilenet-v2",
                    help="pre-trained model to load (see below for options)")
parser.add_argument("--threshold", type=float, default=0.5,
                    help="minimum detection threshold to use")
parser.add_argument("--width", type=int, default=640,
                    help="set width for image")
parser.add_argument("--height", type=int, default=480,
                    help="set height for image")
opt = parser.parse_known_args()[0]

配置 Jetson Inference 的神经网络为 detectnet,并通过外部参数指定预训练模型。

# load the object detection network
net = jetson.inference.detectNet(opt.network, sys.argv, opt.threshold)

配置 RealSense 的启动参数并启动串流。

# Configure depth and color streams
pipeline = rs.pipeline()
config = rs.config()
config.enable_stream(rs.stream.depth, opt.width, opt.height, rs.format.z16, 30)
config.enable_stream(rs.stream.color, opt.width, opt.height, rs.format.bgr8, 30)
# Start streaming
pipeline.start(config)

程序运行时计算量较大,会导致主板发热,因此使用一行命令开启散热风扇。

os.system("sudo sh -c 'echo 128 > /sys/devices/pwm-fan/target_pwm'")

读取 RealSense D435 的图像数据,并通过 numpy 转换为 OpenCV 格式。

depth_image:深度图像数据
show_img:BGR图像数据

press_key = 0
while(press_key == 0):
    # Wait for a coherent pair of frames: depth and color
    frames = pipeline.wait_for_frames()
    depth_frame = frames.get_depth_frame()
    color_frame = frames.get_color_frame()
    if not depth_frame or not color_frame:
        continue
    # Convert images to numpy arrays
    depth_image = np.asanyarray(depth_frame.get_data())
    show_img = np.asanyarray(color_frame.get_data())

使用 CUDA 将 OpenCV 的 BGR 格式转换为神经网络所需的 GStreamer 格式(img)。

    # convert to CUDA (cv2 images are numpy arrays, in BGR format)
    bgr_img = jetson.utils.cudaFromNumpy(show_img, isBGR=True)
    # convert from BGR -> RGB
    img = jetson.utils.cudaAllocMapped(width=bgr_img.width, height=bgr_img.height, format='rgb8')
    jetson.utils.cudaConvertColor(bgr_img, img)

将 img 输入神经网络进行目标检测,检测结果存储在 detections 中。

    # detect objects in the image (with overlay)
    detections = net.Detect(img)

遍历所有检测结果,提取物体类别与位置信息。

    box_XXXXX:边界框坐标
    score:置信度分数
    label_name:物体类别名称

    for num in range(len(detections)) :
        score = round(detections[num].Confidence, 2)
        box_top = int(detections[num].Top)
        box_left = int(detections[num].Left)
        box_bottom = int(detections[num].Bottom)
        box_right = int(detections[num].Right)
        box_center = detections[num].Center
        label_name = net.GetClassDesc(detections[num].ClassID)

使用 OpenCV 绘制边界框、中心十字线,并标注识别结果与距离信息。

        point_distance = 0.0
        for i in range(10):
            point_distance = point_distance + depth_frame.get_distance(int(box_center[0]), int(box_center[1]))
        point_distance = np.round(point_distance / 10, 3)
        distance_text = str(point_distance) + 'm'

        cv2.rectangle(show_img, (box_left, box_top), (box_right, box_bottom), (255,0,0), 2)
        cv2.line(show_img,
                 (int(box_center[0])-10, int(box_center[1])),
                 (int(box_center[0]+10), int(box_center[1])),
                 (0, 255, 255), 3)
        cv2.line(show_img,
                 (int(box_center[0]), int(box_center[1]-10)),
                 (int(box_center[0]), int(box_center[1]+10)),
                 (0, 255, 255), 3)
        cv2.putText(show_img,
                    label_name + ' ' + distance_text,
                    (box_left+5, box_top+20),
                    cv2.FONT_HERSHEY_SIMPLEX, 0.4,
                    (0,255,255), 1, cv2.LINE_AA)

通过 net.GetNetworkFPS 获取推理帧率并显示在画面上。

    cv2.putText(show_img,
                "{:.0f}FPS".format(net.GetNetworkFPS()),
                (int(opt.width*0.8), int(opt.height*0.1)),
                cv2.FONT_HERSHEY_SIMPLEX, 1,
                (0,255,255), 2, cv2.LINE_AA)

使用 OpenCV 的 resize 调整画面大小并实时显示。

    display = cv2.resize(show_img, (int(opt.width*1.5), int(opt.height*1.5)))
    cv2.imshow('Detecting...', display)
    keyValue = cv2.waitKey(1)
    if keyValue & 0xFF == ord('q'):
        press_key = 1

按 q 退出后,关闭所有窗口并停止 RealSense 串流。

cv2.destroyAllWindows()
pipeline.stop()

五、程序运行与执行方法

1. 可通过 MobaXterm 等 SSH 客户端登录 Jetson Nano 终端,或直接连接 HDMI 显示器与 USB 键鼠操作。
2. 运行前请确保已正确安装 Jetson Inference 与 RealSense 相关程序,缺少任一组件均无法正常运行。
3. 在终端中进入指定文件夹(以 Realsense_Jetson_Inference 为例):

cd ~
cd Realsense_Jetson_Inference

4. 确认测试程序位于该文件夹内,执行以下命令(默认使用 ssd-mobilenet-v2 模型):

python3 detectnet_realsense.py

执行效果如下图所示:

5. 如需指定其他预训练模型(例如 pednet),可执行以下命令:

python3 detectnet_realsense.py --network=pednet

热点追踪提示词
你是一名 AI 行业编辑,请围绕下面这条热点输出一份资讯解读:
热点:基于NVIDIA Jetson的机器学习影像对象检测要求:
1. 先用一句话解释这条热点在讲什么
2. 再总结它为什么重要
3. 说明会影响哪些 AI 产品或内容方向
4. 最后给出 3 个适合资讯站使用的标题
来源:https://m.elecfans.com/article/1928254.html
IDIA

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关热点
AI热点2026-07-08 18:15
Qwen3之后我终于敢真正投资AI应用了

Qwen3通过全谱系模型(0 6B至235B)、混合推理与真开源策略,满足从端侧到云端多样化部署需求,支持Agent开发与低代码构建。其技术突破与产业验证提振了AI应用投资信心,成为开发者与企业的理想基座模型。

AI热点2026-07-08 18:15
知识大航海时代企业如何提升知识力

对于绝大多数个人、企业乃至整个社会来说,最重要的资产是什么?答案可能会让人有些意外——是知识。 今天,知识这种无形的智力资产,已经在财富创造中占据了主导地位。它不仅能直接带来收益,比如技能、专利、许可、品牌等创新成果,还能融入文化、体系和业务流程,帮企业构建持久的竞争优势。 正因如此,有学者指出,工

AI热点2026-07-08 18:15
基于知识图谱的建筑垂直领域大模型部署关键要素探讨

先聊几句背景。建筑行业一直是一个“慢变量”的领域——项目周期长、参与方众多、信息碎片化问题严重。但随着AI大模型的爆发,越来越多的人开始认真思考:这个传统行业究竟能否真正实现“智能化”?答案是肯定的,但关键要走对路径。今天,我们以知识图谱这一技术基石为切入点,探讨它如何在建筑垂直领域助力大模型真正落

AI热点2026-07-08 18:15
清华大学在集成光计算领域取得新进展

清华大学提出集成衍射光子神经网络芯片,利用亚波长结构突破集成度瓶颈,实现计算单元大规模片上拓展。该芯片计算吞吐量达1 38×10⁴TOPS,算力密度10¹⁶FLOPS mm²,能耗仅10⁻¹⁷J FLOP,具有完全自主知识产权并与CMOS工艺兼容。

延伸阅读