0. 警告
16G
不够用!!一个cuda
就快塞满了,还要torch torchvision
,不懂商家怎么想的。
1. 组装
直接照说明书或者视频组装即可。WiFi
天线好像装不装信号差别不大。另外,需要一台Ubuntu
电脑,实测用Windows+VMware
也行,不过要多给一些硬盘,20G不够,后来给了50G。另外,云服务器Ubuntu+VNC
是不行的,浪费了100元。
2. 系统烧录
使用的是带16G eMMC (Embedded Multi Media Card)
的版本,默认已经烧录了系统Ubuntu
,也就是L4T(Linux for Tegra)
,是arm64
架构的,适用aarch64
版本。
本来不想烧录的,但是在eMMC
上折腾一圈后发现空间不够用,得在U盘或microSD
上装系统,于是买了128G的microSD
。不过U盘或microSD
启动也还是需要eMMC
上的系统进行引导,之前eMMC
已经被我折腾得面目全非,于是考虑也先烧录eMMC
系统练练手,然后再试试microSD
。
2.0 安装SDK Manager
在Windows
装VMware 16
,然后下载Ubuntu 18.04 desktop
,安装好调好分辨率。再次提醒,别买云服务器装,什么VNC
方式折腾半天也不成功!
在Ubuntu
上打开浏览器,去https://developer.nvidia.com/zh-cn/embedded/jetpack
注册下载:
然后安装:
sudo dpkg -i sdkmanager_1.6.1-8175_amd64.deb
如果报错dpkg frontend is locked by another process
,可以:
sudo lsof /var/lib/dpkg/lock-frontend
sudo kill -9 PID # 杀掉上一步看到的进程
如果报错:
看起来是缺少东西,继续装:
sudo apt install libgconf-2-4
继续报错,不过给出提示解决。
sudo apt --fix-broken install
然后可以启动了,如果还不行,可以再尝试安装sdkmanager_1.6.1-8175_amd64.deb
一次。启动直接输入:
sdkmanager # 一开始用云服务器+VNC,折腾半天显示can not open display blabla...
2.1 烧录eMMC
系统
之前已经在Windows
上分配了50G
空间,用VMware
安装了Ubuntu
。接下来把nano
的核心板拆开,用跳线帽连接上rec
和gnd
进入恢复模式,然后再装上核心板,接上电源线,稍等片刻开机好了,接上microUSB连接线,这时候Ubuntu
虚拟机会显示新设备,选择用Ubuntu
来连接即可。对了,有的microUSB连接线可能不靠谱,多试试,多准备几根。
接下来打开sdkmanager
,(提前打开也可以),
正常的话会识别出
Nano
,按照识别的版本即可,然后因为只是烧系统,就取消掉Host Machine
,然后选择下JetPack
版本,一般4.6
就可以,至于4.6.1
,4.6.2
应该也行吧。继续之后,取消掉
CUDA
,暂时不想在eMMC
上装这些,准备在后面的microSD
卡安装,空间足够大。继续后,会在Ubuntu
建个目录,应该是临时安装文件,这里分配的50G就派上用场了,不然各种报错,根本继续不下去。这里大概是说如果以前已经装了系统,可以类似
ssh
登录进去进行自动模式,我没成功,于是选择手动模式:然后就等烧录吧,十几分钟吧,好了后
finish
退出。然后断电,拆开核心板,去掉跳线帽,暂时先别装外壳了,装上核心板,把键鼠显示器先接好了,然后上电开机试试。正常的话,进入
Ubuntu
配置,一路下一步即可。
2.2 烧录microSD
系统
U盘需要在Ubuntu
下复制文件,烧录引导程序,没试,还是microSD
卡优雅一些吧。先装上读卡器,格式化,注意别选错了:
请用商家预先配置好的镜像,因为
Nvidia
官网的镜像都是要做开机配置的,microSD
启动无法做开机配置。另外,普遍认为版本最好跟eMMC
的版本一致,比如都是4.6.1
,本文不一致,有可能是这个原因导致后面出现Failed to start nvpmodel service
,后来找商家重新弄搞定,读者可以试试看,这里可能有点玄学。选好后,刻写镜像,:
接下来做引导,进入
Ubuntu
虚拟机,安装,没什么问题:
sudo apt-get install device-tree-compiler
进入2.1步SDK Manager
下载的安装目录,视版本略有差异,反编译:
cd ~/nvidia/nvidia_sdk/JetPack_4.6_Linux_JETSON_NANO_TARGETS/Linux_for_Tegra/kernel/dtb
dtc -I dtb -O dts -o tegra210-p3448-0002-p3449-0000-b00.dts tegra210-p3448-0002-p3449-0000-b00.dtb
然后修改文件,随便用什么编辑器:
sudo vim tegra210-p3448-0002-p3449-0000-b00.dts
找到sdhci@700b0400
,修改或添加这部分内容:
cd-gpios = <0x5b 0xc2 0x0>;
sd-uhs-sdr104;
sd-uhs-sdr50;
sd-uhs-sdr25;
sd-uhs-sdr12;
no-mmc;
uhs-mask = <0xc>;
如图:
再编译回去:
dtc -I dts -O dtb -o tegra210-p3448-0002-p3449-0000-b00.dtb tegra210-p3448-0002-p3449-0000-b00.dts
给nano
装上跳帽,进入恢复模式,烧写引导:
cd ~/nvidia/nvidia_sdk/JetPack_4.6_Linux_JETSON_NANO_TARGETS/Linux_for_Tegra
sudo ./flash.sh jetson-nano-emmc mmcblk0p1
然后断电,拔掉跳帽,插入microSD
卡,上电开机,这时候还是eMMC
系统,
sudo ls /dev/mmcblk*
如果能看到一堆,证明microSD
识别没问题。继续修改启动顺序:
sudo vim /boot/extlinux/extlinux.conf
# 找到APPEND ${cbootargs} quiet root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 console=ttyS0,115200n8 console=tty0
# 将mmclk0p1 改成 mmclk1p1,保存重启
正常的话,就正常了。
2.3 扩容
也可以用U盘或TF卡扩容,使用apt
安装GParted
磁盘分区工具,待试。
3. 开机测试
3.1 版本
接上显示器和键鼠,开机,以官方版本为例,设置下Ubuntu
,用户名密码,连上网。
看下版本:
$ uname -a
Linux myjetsonname 4.9.253-tegra #1 SMP PREEMPT Mon Jul 26 12:13:06 PDT 2021 aarch64 aarch64 aarch64 GNU/Linux
再查看下L4T
的版本:
$ cat /etc/nv_tegra_release
# R32 (release), REVISION: 6.1, GCID: 27863751, BOARD: t210ref, EABI: aarch64, DATE: Mon Jul 26 19:20:30 UTC 2021
个人理解:这里的R32
版本,适配了jetpack
的4.6版本,升级后者需要先升级前者。
3.2 远程连接
还可以用其它电脑ssh
登陆nano
,连上也能看到版本Welcome to Ubuntu 18.04.6 LTS (GNU/Linux 4.9.253-tegra aarch64)
。但还需要设置一下开机自动连WiFi
。
sudo nmcli dev wifi # 扫描WIFI
sudo nmcli dev wifi connect "wifi_name" password "wifi_password"
会断开重连一下,好了,以后nano
不需要显示屏了,开机后直接其它电脑ssh user@192.168.1.x
来远程连接nano
,具体IP
可以通过路由器管理页面查看。有时候换个地方就不行,很奇怪。
3.3. 其它
测试摄像头:
nvgstcapture-1.0 --sensor-id=1 # 摄像头序号从0开始
系统自带温控,不过也测试风扇(可调速风扇):
sudo sh -c 'echo 255 > /sys/devices/pwm-fan/target_pwm' # 转速0~255
cat /sys/class/thermal/thermal_zone0/temp # 获取CPU温度
4. 开发环境配置
4.1 安装SDK
也就是Jetpack SDK
,烧录系统只是最基本的部分,其它组件包括CUDA
需要进一步安装。可以使用SDK Manager
,MicroUSB
连到电脑上,虚拟机也能识别,然后在SDK Manager
里注册下载包,但看起来挺麻烦的,勾选的SDK pack
也不知道需不需要,于是选择apt
方式。参考官方:
https://docs.nvidia.com/jetson/jetpack/install-jetpack/index.html
更新apt
后安装,
sudo apt update
sudo apt install nvidia-jetpack
会自动分析升级安装,体验不错。
发现好像也在安装
cuda
相关的包。需要点时间,耐心等待吧,万幸没啥报错幺蛾子。安装完了,看下包的内容:
sudo apt show nvidia-jetpack
看下版本,4.6
,后来刷成4.6.2
了,应该是nano
支持的最高版本:
Package: nvidia-jetpack
Version: 4.6-b199
...
另外发现cuda
确实装了,只不过还是有点问题似的。
$ cat /usr/local/cuda/version.txt
CUDA Version 10.2.300
$ nvcc -V
-bash: nvcc: command not found
$ nvidia-smi
-bash: nvidia-smi: command not found
用apt list --installed
看下已经安装的apt
包,看见一些眼熟的已经有了:
至于
nvcc
不行,应该是要安装nvidia-cuda-toolkit
,试试看:字面理解吧,后来在这里
/usr/local/cuda-10.2/bin
找到了,那就顺便设置下环境变量:
export CUDA_HOME=/usr/local/cuda-10.2
export PATH=/usr/local/cuda-10.2/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-10.2/lib64:$LD_LIBRARY_PATH
上面也可以vim ~/.bashrc
来设置,懂的都懂。再看看版本:
$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2021 NVIDIA Corporation
Built on Sun_Feb_28_22:34:44_PST_2021
Cuda compilation tools, release 10.2, V10.2.300
Build cuda_10.2_r440.TC440_70.29663091_0
倒是跟上面的版本一致。再看看nvidia-smi
为啥不行,应该是要安装nvidia-340 nvidia-utils-390
,但也报错软件包没有可安装候选。后来搜到说,Tegra
平台没有这个命令,而是用jtop
,于是先安装pip
,因为要sudo
安装,所以conda
自带的pip
是不行的。
sudo apt-get install python3-pip python3-dev
sudo -H pip3 install jetson-stats # 带jtop
必须重启后,试试看,很华丽。
如果要升级,参考官网,也正如上文提到的,应该是先升级L4T
:
# To upgrade from JetPack 5.0/5.0.1 Developer Preview, first edit /etc/apt/sources.list.d/nvidia-l4t-apt-source.list to point to the 35.1 repo (just change the version to r35.1 in both lines). Next, use the following commands, then physically reboot the system:
sudo apt update
sudo apt dist-upgrade # 几分钟更新包
sudo apt install --fix-broken -o Dpkg::Options::="--force-overwrite"
# The last line is required because in the JetPack 5.0.2 release, the cuda-nvprof-11-4 package was renamed.
没成功,
看官网,可能
nano
不支持吧。
# https://developer.nvidia.com/embedded/jetson-linux
NVIDIA Jetson Linux 35.1
Jetson Linux 35.1 is a production release and replaces Jetson LInux 34.1.1/34.1 which were meant for development only. Jetson Linux 35.1 includes Linux Kernel 5.10, an Ubuntu 20.04 based root file system, a UEFI based bootloader, and OP-TEE as Trusted Execution Environment.
This release supports Jetson AGX Orin 32GB production module and Jetson AGX Orin Developer Kit. It also supports Jetson AGX Xavier series and Jetson Xavier NX series modules, as well as Jetson AGX Xavier Developer Kit and Jetson Xavier NX Developer Kit.
这个网页https://developer.nvidia.com/zh-cn/embedded/jetpack
还说4.4就是最新版本,Nvidia
官网真是无力吐槽,暂不升级了。
4.2 安装pip
和conda
安装更新pip
:
sudo apt update
sudo apt-get install python3-pip python3-dev
python3 -m pip install --upgrade pip
python3 -m pip install --upgrade --force-reinstall pip # 出现问题后使用
sudo reboot
装个conda
管理环境吧,选择miniconda
,去官网下载了合适的版本,
一阵操作,最后还是报错:
Unpacking payload ...
Illegal instruction (core dumped)
于是下载这个:
安装成功了。
4.3 安装CUDA
之前装jetpack
,好像顺便装上了cuda
,如果没有的话,就打开SDK Manager
,登陆,进入step 01
:
Host Machine
可以不选,右边选下型号,然后最后的DeepStream
也可以勾上备用,点继续:再继续到
step 02
:主要就是
Jetson SDK
的,下载个几分钟。会在Downloads/nvidia/sdkm_downloads
里冒出一堆文件。可以想办法拷贝到jetson
上,然后安装,总之相当麻烦。或者microUSB
直连安装,由于空间不大,所以就只拷贝cuda
相关的deb
吧,也麻烦。
4.4 安装torch
和torchvision
。
先参考这里,看版本是否支持:
https://forums.developer.nvidia.com/t/pytorch-for-jetson/72048 # 有下载地址
https://catalog.ngc.nvidia.com/orgs/nvidia/containers/l4t-pytorch
https://docs.nvidia.com/deeplearning/frameworks/install-tf-jetson-platform-release-notes/tf-jetson-rel.html#tf-jetson-rel
# 这个页面看起来4.6.1也能跑1.11+?下面这个页面也可以研究
https://docs.nvidia.com/deeplearning/frameworks/install-pytorch-jetson-platform-release-notes/pytorch-jetson-rel.html#pytorch-jetson-rel
https://docs.nvidia.com/deeplearning/frameworks/install-pytorch-jetson-platform/index.html
PyTorch
的,看起来最多1.10.0
了:
还有
TensorFlow
的:先安装依赖包:
sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libavcodec-dev libavformat-dev libswscale-dev libopenblas-base libopenmpi-dev
官网选择一个版本,这里一看,因为nano
的JetPack
最多4.6+
,而下面的包都是cp36
,岂不是Python
只能到3.6.9
,有读者成功安装更高版本且能跑torch
,欢迎评论。
下载后传到
nano
上,
scp torch-1.10.0-cp36-cp36m-linux_aarch64.whl jackal@192.168.2.xxx:~/
然后安装:
sudo pip3 install torch-1.10.0-cp36-cp36m-linux_aarch64.whl
注意,sudo pip
会安装到conda
外的原生环境里,如果要安装到conda
里,最好用sudo python -m pip
。
测试没问题。
安装
torchvision
,参考这个选择版本,比如0.11.1
。git clone --branch v0.11.1 https://github.com/pytorch/vision torchvision
cd torchvision
export BUILD_VERSION=0.11.1
sudo python3 setup.py install # 注意如果在conda环境里,去掉sudo,不然就装在外面
这个编译安装过程有几十分钟,如果报错:
就降
PIL
的版本。
sudo pip3 uninstall pillow
sudo pip3 install pillow # 官网建议'pillow<7'
自动降到8.4.0
了,试试:
如果报错:
ModuleNotFoundError: No module named 'numpy'
就安装下numpy
:
pip install numpy==1.19.4
不要安装1.19.5
,否则会报错Illegal instruction (core dumped)
。
最后总结下支持链,nano
最高Jetpack4.6.2
,4.6.2
最高torch-1.10.0
,而官网的1.10.0
只能到Python3.6.9
和torchvision 0.11.1
。当然安装更低的torch-1.9.0-cp36-cp36m-linux_aarch64.whl
和torchvision 0.10.1
也是可以的。读者如果成功安装了更高的版本,欢迎告知,反正我试了几次Python3.7+
,装torch
的时候报错platform
不合适。
4.5 安装VS CODE
本来去官网下载了一个arm64
的版本,安装好之后卡得不能用,不知道什么原因。只好退而求其次,下载衍生版本code-oss
。
sudo apt-get install curl
curl -L https://github.com/toolboc/vscode/releases/download/1.32.3/code-oss_1.32.3-arm64.deb -o code-oss_1.32.3-arm64.deb
sudo dpkg -i code-oss_1.32.3-arm64.deb
运行code-oss
即可,使用正常。
5. YOLOv5+TensorRT
5.1 使用tensorrtx
假设读者会用YOLO
,注意拖下来安装环境的时候,把requirements.txt
里的torch
和torchvision
注释掉,因为之前安装过了,另外选下版本,报错可能性低,如下:
matplotlib==3.2.2
numpy==1.19.4
# torch>=1.7.0
# torchvision>=0.8.1
因为之前装的是Python3.6.9
,而YOLOv5
要求3.7.0
,所以会警告,不过也能用,FPS
为5左右,略卡,得加速。之前安装Jetpack
时已经安装了TensorRT
:
安装一下
pycuda
,onnx
:
pip install pycuda==2020.1 # /usr/src/tensorrt/samples/python/yolov3_onnx/requirements.txt要求pycuda<2021.1
pip install onnx==1.11.0 # 1.12.0会报错
接下来参考,其实跟github
上的教程类似:
https://wiki.seeedstudio.com/YOLOv5-Object-Detection-Jetson/#inference-on-jetson-device
直接使用大佬封装好的tensorrtx
,方便不少:
git clone git@github.com:wang-xinyu/tensorrtx.git
cp tensorrtx/yolov5/gen_wts.py path/to/my/yolov5/project/
cd path/to/my/yolov5/project/
python gen_wts.py -w best.pt # 已经训练好的best.pt,大概几十秒
mv best.wts ../tensorrtx/yolov5/
然后vim ../tensorrtx/yolov5/yololayer.h
,修改下种类数,还有宽高。我的pt
是用960
训练的,但这里没改宽高,倒是也能跑:
然后编译:
cd ../tensorrtx/yolov5/
mkdir build
cd build
cmake ..
make # 一两分钟的样子
# 转engine文件 sudo ./yolov5 -s [.wts] [.engine] [n/s/m/l/x/n6/s6/m6/l6/x6 or c/c6 gd gw]
sudo ./yolov5 -s ../best.wts ../best.engine n # 我是yolov5n,所以选n
最后一步转.engine
大概几分钟,耐心等下,同时还有libmyplugin.so
文件,可用于后面的DeepStream
。最后就可以跑了:
./yolov5 -d ../best.engine my_images/ # 必须是目录
在当前目录就生成识别好的图片了。当然,有了engine
文件,也可以使用yolov5_trt.py
来运行,试试看:
5.2 摄像头
上一节最后运行只能是指定图片目录,太局限了。网上有大佬稍作修改,可以指定单张图片、视频以及摄像头。这里参考实现摄像头,先复制一份代码:
把最后改成:
def detect_camera(camera, yolov5_wrapper):
while True:
ret, img = camera.read() # cv2
img = cv2.resize(img, (640, 480)) # 调整输入帧的尺寸
img_batch = [img]
img, use_time = yolov5_wrapper.infer(img_batch) # 简化去掉原始的warmup线程,虽然不懂为什么warmup
cv2.imshow('Press q to exit...', img)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
if __name__ == "__main__":
'''基于cv2的摄像头'''
camera = cv2.VideoCapture(0) # 设置为正确的序号
# 以下备用
# w = int(camera.get(cv2.CAP_PROP_FRAME_WIDTH))
# h = int(camera.get(cv2.CAP_PROP_FRAME_HEIGHT))
# fps = camera.get(cv2.CAP_PROP_FPS)
PLUGIN_LIBRARY = "build/libmyplugins.so"
engine_file_path = "build/yolov5s.engine"
if len(sys.argv) > 1:
engine_file_path = sys.argv[1]
if len(sys.argv) > 2:
PLUGIN_LIBRARY = sys.argv[2]
ctypes.CDLL(PLUGIN_LIBRARY)
categories = ["class_0", "class_1", "class_2", "class_3"] # 自定义
yolov5_wrapper = YoLov5TRT(engine_file_path)
print('batch size is', yolov5_wrapper.batch_size)
detect_camera(camera, yolov5_wrapper)
# 结束
yolov5_wrapper.destroy()
camera.release()
cv2.destroyAllWindows()
最后还得确认下tensorrt
的pip
库:
其实直接在安装
pycuda
的时候已经安装了,如图:需要设置下路径,也可以添加到
.bashrc
里:
export PYTHONPATH=/usr/lib/python3.6/dist-packages:$PYTHONPATH
再import tensorrt as trt
,成功,运行吧。
> python yolov5_trt_camera.py best.engine
虽然报错Gtk-Message: Failed to load module"canberra-gtk-module"
,不过跑起来了。至于这个错误,参考:
https://blog.csdn.net/GungnirsPledge/article/details/110200146
试试:
sudo cp /etc/matplotlibrc /etc/matplotlibrc_bak
vim /etc/matplotlibrc
# 改成 QT5Agg
sudo apt install qt5-doc qt5-doc-html qtbase5-doc-html qtbase5-examples -y
还是没解决。。
C++
重新编译的方式可参考:
https://blog.csdn.net/hahasl555/article/details/116500763
我没试过。
5.3 DeepStream
还记得之前SDK Manager
安装的时候,可以勾选同时安装DeepStream
,就装入了nano
,这时候派上用场了。
5.3.1 DeepStream-Yolo
git clone https://github.com/marcoslucianops/DeepStream-Yolo
注意下版本:
cp DeepStream-Yolo/utils/gen_wts_yoloV5.py yolov5 # 这个yolov5目录是yolov5的repo下,不是tensorrtx的
cd yolov5
python3 gen_wts_yoloV5.py -w best.pt # 生成cfg和wts文件,理解是模型的配置和权重,可以看源代码, -s height width修改推理尺寸,会自动加上yolov5_前缀
cp yolov5_best.cfg ~/DeepStream-Yolo
cp yolov5_best.wts ~/DeepStream-Yolo
cd ~/DeepStream-Yolo
CUDA_VER=10.2 make -C nvdsinfer_custom_impl_Yolo # 6.0.1/6.0
编辑:
vim config_infer_primary_yoloV5.txt
[property]
...
custom-network-config=yolov5_best.cfg
model-file=yolov5_best.wts
...
num-detected-classes=80 # 修改种类,然后labels.txt也要改一下
...
编辑deepstream_app_config.txt
,与上面文件名一致:
vim deepstream_app_config.txt
...
[primary-gie]
...
config-file=config_infer_primary_yoloV5.txt
默认是用SDK
的例子视频跑,参考官方https://aijishu.com/a/1060000000223353
,需要改一下来源:
[source0]
enable=1
# type = {1: "CameraV4L2", 2: "URI", 3: "MultiURI", 4: "RTSP", 5: "CSI"}
# CameraV4L2是USB摄像头,耗CPU;CSI摄像头用GPU,专用
type=1
camera-width=960
camera-height=540
camera-fps-n=30
camera-fps-d=1
# v4l2-ctl --list-devices检查一下node
camera-v4l2-dev-node=0
其中node
号可以查,注意是L
不是412
,代表video for linux two
:
sudo apt install v4l-utils # 没有2
v4l2-ctl --list-devices
v4l2-ctl --list-formats-ext --device=0 # 看分辨率
最后,跑起来:
deepstream-app -c deepstream_app_config.txt
5.3.2 Yolov5-in-Deepstream
这种方式可以跟TensorRT
结合。
git clone git@github.com:DanaHan/Yolov5-in-Deepstream-5.0.git
修改种类:
cd Deepstream\ 5.0/nvdsinfer_custom_impl_Yolo
make # 得到libnvdsinfer_custom_impl_Yolo.so,注意路径后面使用
回到上级目录,把.engine
和libmyplugin.so
文件拷过来,然后编辑deepstream_app_config_yoloV5.txt
,可以调整显示宽高,再把source
改成摄像头,也设置下输入的宽高(不要超过摄像头的固有宽高),跟上一小节有点类似:
[tiled-display]
enable=1
rows=1
columns=1
width=960
height=540
...
[source0]
enable=1
#Type - 1=CameraV4L2 2=URI 3=MultiURI,咋没有CSI?
type=1
camera-width=960
camera-height=540
camera-fps-n=30
camera-fps-d=1
...
[primary-gie]
enable=1
gpu-id=0
model-engine-file=yolov5s.engine # 自定义
labelfile-path=labels.txt # 自定义,补一个文件
...
[streammux]
gpu-id=0
...
width=960 # 自定义
height=540 # 自定义
[tracker]
...
ll-lib-file=/opt/nvidia/deepstream/deepstream-5.1/lib/libnvds_mot_klt.so # 自定义,改成5.1
然后编辑config_infer_primary_yoloV5.txt
,这几处按需修改、确认好:
然后运行:
LD_PRELOAD=./libcustomOp.so deepstream-app -c deepstream_app_config_yoloV5.txt
即可。
5.4 总结对比
有几种方式:
- 无加速检测,
FPS
为5 -
TensorRT
加速,FPS
未见到提高,待查 -
DeepStream-Yolo
加速 -
TensorRT + Yolov5-in-Deepstream
加速
官方是推荐用DeepStream
的,因为DeepStream
是全管道优化,而TensorRT
会使用OpenCV
作为摄像机接口,没有针对性优化,会使用CPU
作为缓存。
6. 播放声音
nano
没有声卡,怎么发声?
- 内置声卡,可惜没有适配的外壳,但可能是最好的方式;
-
USB
声卡+特定接口的扬声器,一堆外接线不够优雅; -
HDMI
的带耳机孔的显示屏,记得选一下音频输出,可惜有启动延迟,音头都没了,调试了好几天搞不定。
播放可以使用playsound
库:
pip install playsound
# 可能会报错什么cairo,那就需要装下面的
sudo apt install libcairo2 libcairo2-dev libgirepository1.0-dev
pip install pygobject
这个也不错,官方论坛推荐:
import simpleaudio as sa
wave_obj = sa.WaveObject.from_wave_file('sound.wav')
play_obj = wave_obj.play()
play_obj.wait_done()
搞定!