对于jetson nano 的docker部署jetson-inference等模型

article/2025/8/22 17:09:28

对于Nvidia jetson nano来说是一款十分优秀的网络模型部署设备我对于nano来说也是学习了2个星期左右.这也是对我这一阶段做一个复习总结吧!

目录

烧录

 下载jetson-inference

dock镜像部署操作

 跑个例程助助兴

找到函数接口进行调整

我用的是jetson nano a02 版本 是4GB内存大小的

烧录

首先你得获取一张至少是32GB的TF/sd卡去烧录jetson nano的系统镜像 系统镜像的获取是在

网址:JetPack SDK 4.6.1 | NVIDIA Developerhttps://developer.nvidia.com/embedded/jetpack-sdk-461这个网址上

框框内就是jetson nano 4GB对应的系统镜像.直接下载就行.用了两个软件,还有另外一个链接软件也是很常用的

1.SDFormatter   (sd卡格式化软件)   2.balena.etcher  (镜像烧录软件)

3.MobaXterm(ssh链接以及文件传输软件)

当镜像烧录好之后插入jetson nano 的 SD卡的卡槽

小心插拔这个sd卡槽,切忌用蛮力注意金手指朝上!!

然后烧录就完成啦!!!

我建议每个jetson nano都买个风扇这样的话就不会造成跑着跑着东西,nano自动关机啦!!

这样我们配置一下(配置的话我就不细说了基本上是默认滴,改一下语言就行了)

每个nano上应该都自动装着jtop ,可以实时监控nano的资源性能等信息(在任意路径下的Terminal输入jtop即可启动)

 下载jetson-inference

在github上官网找到,并且选择docker镜像的方法

GitHub - dusty-nv/jetson-inference: Hello AI World guide to deploying deep-learning inference networks and deep vision primitives with TensorRT and NVIDIA Jetson.Hello AI World guide to deploying deep-learning inference networks and deep vision primitives with TensorRT and NVIDIA Jetson. - GitHub - dusty-nv/jetson-inference: Hello AI World guide to deploying deep-learning inference networks and deep vision primitives with TensorRT and NVIDIA Jetson.https://github.com/dusty-nv/jetson-inference

并且在

 

 选择JetPack 4.6.1的版本对应jetson nano 烧录镜像的版本号

在jetson nano 的Terminal上输入 docker pull dustynv/jetson-inference:r32.7.1

提示没有权限所以我们要到Docker Hubhttps://hub.docker.com/%C2%A0

这里去注册一下自己 的账号

然后在Terminal上登录  docker login --username 账号名

再进行拉取镜像

在拉取镜像的Terminal路径下会生成一个jetson-inference的文件集是容器在宿主机的数据

dock镜像部署操作

 跑个例程助助兴

•    docker run --runtime nvidia -it 【容器id】 【命令】

并且我做的是detection任务所以我又创建了一个的detection的文件夹去让容器被映射到.

在终端中输入那么一长串命令,你们得根据自己的地址以及自己的摄像头信息去整

docker run -it --rm --runtime nvidia -v ~/Desktop/AI/jetson-inference/data:/jetson-inference/data -v /dev/video0:/dev/video0 --device /dev/video0 --network host -e DISPLAY=$DISPLAY -v /tmp/.X11-unix/:/tmp/.X11-unix -v /etc/enctune.conf:/etc/enctune.conf -v ~/Desktop/AI/detection/data:/jetson-inference/python/training/detection/ssd/data -v ~/Desktop/AI/detection/models:/jetson-inference/python/training/detection/ssd/models -v ~/Desktop/AI/detection:/jetson-inference/python/training/detection/ssd 7a7d343029a2 /bin/bash

 

这一长串命令 是为了进入容器中,并且要让自己宿主机的文件夹映射到容器中,不然很容易发生找不到文件夹的报错

进入到容器中

 由于我都利用download-models.sh脚本在nano上自己下载好了模型文件,并且获取了onnx推理过的文件

下载的文件都在jetson-inferernce/data/networks里面,

当然解压过后是在jetson-inferernce/data/networks/SSD-Mobilenet-v2的文件夹中我们可以看到一个.uff文件这个文件和onnx一样是未经过tensorRT推理过的一个.engine文件是经过推理过的工程文件,ssd_coco_labels.txt是对应的txt文件

 

所以我可以直接调用模型文件

我先加入我自己映射到的文件夹

cd python/training/detection/ssd

 然后我们去github上查看官方文档与官方例程jetson-inference/docs at master · dusty-nv/jetson-inference · GitHubHello AI World guide to deploying deep-learning inference networks and deep vision primitives with TensorRT and NVIDIA Jetson. - jetson-inference/docs at master · dusty-nv/jetson-inferencehttps://github.com/dusty-nv/jetson-inference/tree/master/docs

 由于我这次做的都是detection的模型所以我打开了detectnet-example-2.md的文档

 直接拷贝官方例程(但是注意一下你得改一下摄像头的参数哦!!!)  

直接输入 python3 example.py运行就行了

这个就是MobileNetV2的网络  跑出来的,但是只有24帧,我也测过mobilenetV1,有40多帧数

找到函数接口进行调整

但是这些都是根据我们到例程,我们怎么做开发呢???本人熟练使用opencv,所以我想用opencv的操作去读取去整这些图像

 所以我又苦逼的去查官网文档的函数参数去咯!!!

点击这个detectNet 然后就跳转到函数解析的地址了

 那么我就可以看到这个函数的参数和输出了,找了我2天的时间,我也是个新手,英文读的也是有点麻烦,终于找到了这个  

detections = net.Detect(img)

的输出

 

 磨磨蹭蹭终于做好了修改,顺便加了一个框哈哈哈哈!那么这个阶段性成果就到这啦!

import cv2
import jetson.inference
import jetson.utils
from jetson.inference import detectNet
from jetson.utils import videoSource, videoOutput, logUsage, cudaFont
import numpy as np
import time
import sys
import random
# width=1280
# height=720
# dispW=width
# dispH=height
# flip=2#以下是使用nano板载摄像头
#camSet='nvarguscamerasrc !  video/x-raw(memory:NVMM), width=3264, height=2464, format=NV12, framerate=21/1 ! nvvidconv flip-method='+str(flip)+' ! video/x-raw, width='+str(dispW)+', height='+str(dispH)+', format=BGRx ! videoconvert ! video/x-raw, format=BGR ! videobalance  contrast=1.5 brightness=-.3 saturation=1.2 ! appsink  '
#cam1=cv2.VideoCapture(camSet)#此处我们使用的usb摄像头
cam1=cv2.VideoCapture('/dev/video0')
#cam1.set(cv2.CAP_PROP_FRAME_WIDTH,dispW)
#cam1.set(cv2.CAP_PROP_FRAME_HEIGHT,dispH)#添加自己训练的模型,预训练后面加数组,添加自己的模型标签!!
#net=jetson.inference.imageNet('alexnet',['--model=/home/nano/jetson-inference/python/training/classification/myModel/resnet18.onnx','--input_blob=input_0','--output_blob=output_0','--labels=/home/nano/jetson-inference/myTrain/labels.txt'])#=======#
#       #
#       #
#=======#
def plot_one_box(x, img, color=None, label=None, line_thickness=None):# Plots one bounding box on image imgtl = line_thickness or round(0.002 * (img.shape[0] + img.shape[1]) / 2) + 1  # line/font thicknesscolor = color or [random.randint(0, 255) for _ in range(3)]c1, c2 = (int(x[0]), int(x[1])), (int(x[2]), int(x[3]))cv2.rectangle(img, c1, c2, color, thickness=tl, lineType=cv2.LINE_AA)if label:tf = max(tl - 1, 1)  # font thicknesst_size = cv2.getTextSize(label, 0, fontScale=tl / 3, thickness=tf)[0]c2 = c1[0] + t_size[0], c1[1] - t_size[1] - 3cv2.rectangle(img, c1, c2, color, -1, cv2.LINE_AA)  # filledcv2.putText(img, label, (c1[0], c1[1] - 2), 0, tl / 3, [225, 255, 255], thickness=tf, lineType=cv2.LINE_AA)#=========配置=========#
net = detectNet("ssd-mobilenet-v2", threshold=0.5)  #网络配置
font=cv2.FONT_HERSHEY_SIMPLEX  #字体设置
timeMark=time.time()
fpsFilter=0
cls_num= 100
colors = [[random.randint(0, 255) for _ in range(3)] for _ in range(cls_num)]
#======================##以下是opencv处理
while True:_,frame=cam1.read()img=cv2.cvtColor(frame,cv2.COLOR_BGR2RGBA).astype(np.float32)img=jetson.utils.cudaFromNumpy(img)detections = net.Detect(img)if len(detections)>0:for detection in detections:lab_id = detection.ClassIDlabel = '%s %.2f' % (net.GetClassDesc(lab_id), detection.Confidence)x1y1x2y2 = [detection.Left,detection.Top,detection.Right,detection.Width]plot_one_box(x1y1x2y2,frame,color = colors[lab_id],label = label)dt=time.time()-timeMarkfps=1/dtfpsFilter=.95*fpsFilter +.05*fpstimeMark=time.time()cv2.putText(frame, str(round(fpsFilter, 1)) + ' fps ', (0, 30), font, 1, (0, 0, 255), 2)cv2.imshow('recCam',frame)     ###记住重新绘制函数名字要一样!!!!别瞎动这两个函数,不然直接死机cv2.moveWindow('recCam',0,0)   ###记住重新绘制函数名字要一样!!!!if cv2.waitKey(1)==ord('q'):break
cam1.release()
cv2.destroyAllWindows()

 下一阶段那么就是得做自己训练的网络再进行直接识别和开机启动与复制sd卡


http://chatgpt.dhexx.cn/article/hwCxQupg.shtml

相关文章

LLM Inference 串讲

大家好,这里是 NewBeeNLP。 本文主要概述一下当前LLM 是如何生成文本及为什么对应的资源(cost/latency)与prompt 和completion 都有关系。更佳阅读体验请点击原博客地址:LLM Inference 串讲(https://xv44586.github.io/2023/03/10/llm-inf/) …

【PaddleInferenceSharp】基于C#和Paddle Inference 部署PaddlePaddle模型

1. 项目介绍 Paddle Inference 是飞桨的原生推理库, 提供服务器端的高性能推理能力,直接基于飞桨的训练算子,因此它支持飞桨训练出的所有模型的推理;Paddle Inference 功能特性丰富,性能优异,针对不同平台不…

Paddle Inference C++ 依赖库安装(Windows)

Paddle Inference C 依赖库安装 1. 环境准备2. 下载安装库3. 设置环境变量4. VS C 项目配置 Paddle Inference 是飞桨的原生推理库, 提供服务器端的高性能推理能力。由于 Paddle Inference 能力直接基于飞桨的训练算子,因此它支持飞桨训练出的所有模型的…

ESIM:Enhanced LSTM for Natural Language Inference

原文链接:https://aclanthology.org/P17-1152.pdf ACL 2017 概述 对于自然语言推理任务,Bowman等人在2015年提出了一个大数据集,大多数工作就开始使用神经网络来对该任务进行训练。但作者认为序列模型的潜力还没有完全被挖掘,因此…

Triton Inference Server教程2

本文介绍如何编写一个config文件,config.pbtxt文件中包含哪些可以配置的参数,这些参数又会对triton server产生什么影响。 必须指定的模型参数 platform/backend:模型要在什么backend上面运行,可以用两种参数指定,一…

变分推断(variational inference)/variational EM

诸神缄默不语-个人CSDN博文目录 由于我真的,啥都不会,所以本文基本上就是,从0开始。 我看不懂的博客就是写得不行的博客。所以我只写我看得懂的部分。 持续更新。 文章目录 1. 琴生不等式2. 香农信息量/自信息I3. 信息熵4. 相对熵/KL散度/信…

Hugging Face - 推理(Inference)解决方案

每天,开发人员和组织都在使用 Hugging Face 平台上托管的模型,将想法变成概念验证(proof-of-concept)的 demo,再将 demo 变成生产级的应用。 Transformer 模型已成为广泛的机器学习(ML)应用的流…

变分推断(Variational Inference)解析

一、什么是变分推断 假设在一个贝叶斯模型中, x x x为一组观测变量, z z z为一组隐变量(参数也看做随机变量,包含在 z z z中),则推断问题为计算后验概率密度 P ( z ∣ x ) P(z|x) P(z∣x)。根据贝叶斯公式…

深度学习-在线推断(Inference)技术

深度学习一般分为训练和在线推断两个部分,大家平时经常关注的多为训练阶段,也就是搜索和求解模型最优参数的阶段。而当模型参数已经求解出来,如何使用模型,以及在在线环境中部署模型,也是非常重要的。 一般会比较关注其…

推理(Inference)与预测(Prediction)

在机器学习的背景下,很多人似乎混淆了这两个术语。这篇文章将试图澄清我们所说的这两个词是什么意思,每一个词在哪里有用,以及它们是如何应用的。在这里,我将举几个例子来直观地理解两者之间的区别。 推理和预测这两个术语都描述…

嵌入式C语言自我修养:从芯片、编译器到操作系统(附送书籍)

关注星标公众号,不错过精彩内容 来源 | 宅学部落 最近,阅读了王工(王利涛)赠送的一本由他编著的书籍《嵌入式C语言自我修养》,感觉写的挺不错。今天分享一下这本书籍《嵌入式C语言自我修养》:从芯片、编译器…

进行嵌入式C语言编程调试的通用办法

总结了一下调试我们嵌入式C程序的一些基本的办法和思想,供大家学习参考: 打印日志:在代码中添加打印语句,输出变量值、函数调用等信息,以便在程序运行时观察程序执行情况。 断点调试:在代码中添加断点&…

linux c与c语言的区别吗,嵌入式c语言与c语言的区别

原标题:嵌入式c语言与c语言的区别 最广泛使用的系统编程语言是C语言,它是使用自由格式源代码的简单编程语言;它曾用于以前用汇编语言构建的应用程序中。嵌入式C是C语言的扩展,它在嵌入式系统中应用于编写嵌入式软件,那么二者之间究竟有什么差异呢? 一、启动过程 1. 通用c…

嵌入式C语言——常见面试题

1、描述一下gcc编译过程? gcc编译过程分为4步骤:预处理、编译、汇编、链接。 预处理:头文件包含、宏替换、条件编译、删除注释。编译:主要进行词法、语法、语义分析等等,检查无误后把预处理好的文件编译成汇编文件。…

c语言对嵌入式的作用是什么,关于嵌入式C语言它有些什么意义

描述 首先,在当前产业结构升级的大背景下,机械行业未来的自动化、智能化程度会越来越高,所以机械类相关专业的知识结构必然会不断得到丰富和发展,而学习编程语言对于机械类专业来说具有较为实际的意义,尤其是C语言。 机…

总结嵌入式C语言难点(2部分)

结构类型和对齐 C语言提供自定义数据类型来描述一类具有相同特征点的事务,主要支持的有结构体,枚举和联合体。其中枚举通过别名限制数据的访问,可以让数据更直观,易读,实现如下: 联合体的是能在同一个存储…

嵌入式c语言教程 题库 百度云,嵌入式c语言视频教程尚观主讲视频教程

嵌入式C语言培训-01C语言概述-01C语言概念-发展历史-特点.mp4 嵌入式C语言培训-01C语言概述-02C基本程序结构-第一个helloworld程序-Linux下编辑编译执行.mp4 嵌入式C语言培训-01C语言概述-03C语言第2个程序第3个程序.mp4 嵌入式C语言培训-01C语言概述-04C程序开发过程.mp4 嵌入…

《嵌入式C语言》C语言介绍及环境搭建

--最具价值的嵌入式C语言1 C语言简介 C语言是国际上广泛流行的高级语言,是在B语言的基础上发展起来的, 1970年, 美国贝尔实验室的D.M.Ritchie设计了B 语言, 并用于编写了第一个UNIX操作系统。 1973年, D.M.Ritchie 在B语言的基础…

嵌入式C语言深入篇之 —— 变量

新建一个物联网行业交流学习QQ群,感兴趣可加:928840648 CUT 变量 可执行程序存储区 当一个C/C原码文件被编译链(比如gcc/g)编译及链接成为可执行程序后,由4个段组成,分别是:代码段&#xff…

嵌入式C语言编程技巧

基础语法编程技巧 变量 (1)变量名需见名知意,用英文单词命名,尽可能避免出现 a b 等单一字母的变量 (2)变量在定义同时进行初始化,防止乱码数据 (3)变量序号尽可能用英语…