Jetson Xavier NX 试玩 (二)

Hello AI World Inference

人工智能推理模型

0 前言

想玩一玩 jetson 的人工智能功能,官方的 instructional guide 地址:https://github.com/dusty-nv/jetson-inference .

就是有个函数库,怎么用呢,有使用docker的方法,有从源码编译的方法。我选择了从源码编译的方法。编译需要准备一下环境,首先在下载镜像阶段,我只下了OS,这次需要用到一些SDK COMPONENTS,所以需要先用 SDK Manager 将SDK COMPONENTS下到jetson里去。

1 下载 SDK COMPONENTS

这个没啥难度,和下载镜像时一样,就不再多说了。

下完后有个VPI Demos v1.2

打开可以跑 demo,虽然我也看不懂,不过似乎有点意思

2 编译 jetson library

1)更新软件源

sudo apt-get update

2)安装需要用的软件

sudo apt-get install git cmake libpython3-dev python3-numpy

3)克隆仓库

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

recursive 表示将该仓库下的子仓库一起克隆下来

这个过程中因为网络问题可能会出现一些问题,可以给 git 设置一下全局代理啥的,网络问题,懂得都懂。

4)构建cmake

cd jetson-inference/
mkdir build
cd build/
cmake ../

然后就是等待,会有个图形化的图框交互出现让你选择你想下的模型,可以都取消,需要啥再下啥。当然,也可以选择要用的组件,比如 SSD-Mobilenet-v2 ,这个会使用 detectNet 检测动态物体,下载模型时因为网络问题可能会下载失败,因此我还是推荐不要在这个阶段下载模型,之后要用到某个模型,可以在本地下载下来再传给jetson。地址:https://github.com/dusty-nv/jetson-inference/releases

然后,会问你要不要安装pytorth,可以不用安装。

5)编译

make -j$(nproc)

nproc就是可用的cpu核数, NX有6个cpu,但是有2个cpu默认是关闭状态,因此这里是4个

6)安装

sudo make install

7)共享动态链接库

安装完成某个工程后生成许多动态库,为了让这些动态链接库为系统所共享,还需运行动态链接库的管理命令

sudo ldconfig

8)验证

jetson_utils库可以import,应该是成功把库安装下来了

3 玩玩

detectNet

玩这个要先下 SSD-Mobilenet-v2.tar.gz ,在这 https://github.com/dusty-nv/jetson-inference/releases/tag/model-mirror-190618

detectnet challenge_video.mp4

imageNet

玩这个要先下 GoogleNet.tar.gz ,在这 https://github.com/dusty-nv/jetson-inference/releases/tag/model-mirror-190618

cd ~/Desktop/jetson-inference/build/aarch64/bin

./imagenet-console来调用imageNet程序对输入图片检测,并将结果输出到指定位置

./imagenet-console ~/baiyug_ws/230312aPicture2.png ~/baiyug_ws/230312aPicture2_ouput.png

230312aPicture2_ouput.png如下

...

......

4 在程序中调用库接口

新建一个python程序,名为app.py

import jetson_inference
import jetson_utils net = jetson_inference.detectNet("ssd-mobilenet-v2", threshold = 0.5)
camera = jetson_utils.videoSource("/home/jetson/baiyug_ws/challenge_video.mp4") display = jetson_utils.videoOutput("display://0") while display.IsStreaming():
img = camera.Capture()
detections = net.Detect(img)
display.Render(img)
display.SetStatus("OUTPUT")

其实这就调用了detectNet这个程序

python3 app.py

效果和使用 detectNet 这个命令是一样的

5 在程序中调用库接口同时使用opencv

用resize窗口为例,有使用到imutils库

sudo apt install python3-pip
pip3 install imutils

需要点明,pip这个工具和git一样是不走系统全局代理的,要让他走代理要使用类似以下的命令

pip3 --proxy=192.168.0.17:7890 install imutils

192.168.0.17:7890就是代理服务器端口地址

然后新建python程序,名为app_use_cv2.py

import cv2
import jetson_inference
import jetson_utils
import imutils #read the video
capture = cv2.VideoCapture("/home/jetson/baiyug_ws/challenge_video.mp4")
#load the model in need
net = jetson_inference.detectNet("ssd-mobilenet-v2") while True:
#read the frame
res, frame = capture.read()
if not res:
break
#resize the window
frame = imutils.resize(frame, width = 800)
#convert the format from numpy to cuda
img = jetson_utils.cudaFromNumpy(frame)
#pass the cuda fomat image to the model
detections = net.Detect(img) #printing all the boundary boxes of the detections
for obj in detections:
cv2.rectangle(frame, (int(obj.Left), int(obj.Bottom), int(obj.Right), int(obj.Top)), (0, 0, 255), 2) #display the img
cv2.imshow("OUTPUT", frame)
key = cv2.waitKey(1)
if key == ord("q"):
break cv2.destroyAllWindows
python3 app_use_cv2

效果

6 Build OPENCV with CUDA

NX在安装SDK COMPONENTS的过程是有opencv预装的,

但是,存在一个问题,这个opencv库是不会使用cuda加速的,可以使用jtop工具查看jetson上的数据,

使用jtop要先下载一个库,jetson-stats,

sudo -H pip3 --proxy=192.168.0.17:7890 install --no-cache-dir -U jetson-stats

之所以加了一些奇怪的参数,似乎是因为jetson-stats的一个bug,详见https://github.com/rbonghi/jetson_stats/issues/86, 另外,我还使用了代理。

然后,就可以使用jtop了,

jtop

可以看到,预装的opencv no with cuda,那么如何让他yes with cuda呢

其实很简单,见 https://github.com/JetsonHacksNano/buildOpenCV

JetsonHacksNano 有个开源脚本 buildOpenCV.sh 就是用来编译opencv的,默认是 jetson nano 的参数,在 jetson NX 上使用只需要改一个地方

ARCH_BIN=5.3 改为 ARCH_BIN=7.2

为什么呢?

这个其实是cuda的架构参数

然后直接运行这个脚本即可

./buildOpenCV.sh |& tee build.log

这个命令分两个部分,一个是执行buildOpenCV.sh脚本, 一个是将输出到终端的日志保存在build.log文件里。

如果一切正常,一个小时差不多就可以编译完,然后就可以查看到 opencv yes with cuda 了。

当然,在国内网络条件下,如果没有合适的手段,一般会遇到问题,而且大多数是git访问问题。

这种问题首先要保证你本地的局域网上下行的速度,其次就是代理服务器的设置或者是VPN的设置问题了。


本文参考这个博主:https://www.youtube.com/@RocketSystems/videos

Jetson Xavier NX 试玩 (二)的更多相关文章

  1. ESP32 LyraT音频开发板试玩(二):播放音乐

    我是卓波,很高兴你来看我的博客. 系列文章: ESP32 LyraT音频开发板试玩(一):搭建开发环境 ESP32 LyraT音频开发板试玩(二):播放音乐 本文延续上一篇博客 将D:\msys32\ ...

  2. ESP32 LyraT音频开发板试玩(一):搭建开发环境

    我是卓波,很高兴你来看我的博客. 系列文章: ESP32 LyraT音频开发板试玩(一):搭建开发环境 ESP32 LyraT音频开发板试玩(二):播放音乐 关于ESP32的开发环境搭建,官方有教程, ...

  3. HTML5+JS 《五子飞》游戏实现(七)游戏试玩

    前面第一至第六章我们已经把<五子飞>游戏的基本工作都已经讲得差不多了,这一章主要是把所有的代码分享给大家,然后小伙伴们也可以玩一玩. 至于人机对战的我们放到后面讲进行分析. 试玩地址:ht ...

  4. 花一天时间试玩vsphere6.7(EXSI)服务器版的vmware

    花一天时间试玩vsphere6.7(EXSI)服务器版的vmware 要注册账号(2019年11月14注册): 登陆网址:https://my.vmware.com/cn/group/vmware/h ...

  5. 一个小玩意 PHP实现微信红包金额拆分试玩

    <meta charset="utf-8"> <?php // 新年红包金额拆分试玩 class CBonus { public $bonus;//红包 publ ...

  6. 1.2G内存试玩RAMOS_XP

    1.2G内存试玩RAMOS_XP1.为了防止做系统时出现意外,用Bootice把C盘MBR修改为Grub4dos,这样子系统如果失败,可以进入PE重做. 2.进入PE格式化C盘,格式化的时候勾选启用N ...

  7. 8个经典的HTML5游戏在线试玩及源码学习

    原文地址:http://www.oschina.net/news/32364/html5-games 游戏,毫无疑问是拿来供大家娱乐玩耍的,这也无可厚非,但是,今天给大家分享的8个HTML5游戏,在好 ...

  8. Apollo框架试玩

    2017年7月5日,百度举行了AI开发者大会,在会上发布了Apollo项目,并进行了演示,该项目在Github上已经能够被访问.出于一个程序员的好奇,昨天试玩了一把,确实不错. http://apol ...

  9. 发布到FaceBook试玩广告,FaceBook要求要一个Html文件

    Facebook 试玩广告具体要求: 试玩广告参数是创建试玩广告素材时要满足的要求. 试玩素材应为 HTML5 格式. 试玩广告素材不应使用 mraid.js 格式. 包含所有素材的试玩广告的单个 H ...

  10. [试玩] FMXLinux (Firemonkey for Linux) Linux 桌面开发(第三方插件)

    FMXLinux 是一个可以用来开发 Linux 桌面软件的第三方插件,它需要配合 Delphi 10.2 Toyko 官网:http://www.fmxlinux.com/ 使用方法:开启 FMX ...

随机推荐

  1. spring-configuration-metadata元数据与additional-spring-configuration-metadata元数据区别

    参考 https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-configuration-metadata.ht ...

  2. spider_object_01使用正则爬取百度贴吧所有内容保存成html

    """本案例不涉及数据提取,仅指导 网页分页爬取的两种方式 思路非第一种:利用while Ture,传参,然后在设定一个判断条件,案例中用的是如果找不到下一页,循环退出( ...

  3. FreeSql 将 Saas 租户方案精简到极致[.NET ORM]

    什么是多租户 维基百科:"软件多租户是指一种软件架构,在这种软件架构中,软件的一个实例运行在服务器上并且为多个租户服务".一个租户是一组共享该软件实例特定权限的用户.有了多租户架构 ...

  4. python 列表中随机抽取多个数

    方法一:[random.randint(0,100) for _ in range(2)]输出: [34, 44]方法二:list中随机去取K个数list=[1,2.3,......] random. ...

  5. web测试:test过程中接口报错 "Object reference not set to an instance of an object."

    "Object reference not set to an instance of an object." 对象引用未设置为对象的实例 可能原因: 1.参数类型传错,或少传参数 ...

  6. CGTime CMTimeRange CMTimeMapping 小结

    CMTime CMTimeRange CMTimeMapping 在使用 AVFoundation 框架处理多媒体资源时,通常会用到一些在 CoreMedia 框架中定义的结构体, 这里对其中描述时间 ...

  7. Python + Selenium + Microsoft Edge浏览器运行环境搭建及配置无界面模式

    介绍 在python中用selenium驱动Microsoft Edge(Chromium版)浏览器,并设置headless模式,也可以参考微软官方指导文档,更全更清晰 安装selenium 可以通过 ...

  8. 网络同步时钟单路耐压测试突破17V

    自动同步标准化考场时钟系统------专业LED时钟厂家![点击进入] 一.网络同步时钟耐压测试作用概述: 同步时钟耐压试验是鉴定时钟绝缘强度和稳定性最直接的方法,它对于判断NTP同步时钟设备能否投入 ...

  9. requests模块之post请求传参json和data区别

    post请求参数到底是传data还是json,此时要看请求头里的content-type类型 请求头中content-type为application/json, 为json形式,post请求使用js ...

  10. dos的使用

    打开cmd的方式 开始+系统+命令提示符 win+r,输入cmd 在任意的文件夹下面,按住shift键+鼠标右键点击,在此处打开命令运行窗口 打开我的电脑 在资源管理器的地址栏前面加上cmd路径 常用 ...