1 写在前面的话
阅读本博客前,需要先熟悉如下博客内容:
【玩转Jetson TX2 NX】(八)TX2 NX Visual Studio Code(VSCode)安装(详细教程)
【玩转Jetson TX2 NX】(九)TX2 NX 安装onnx-tensorrt工具(详细教程+错误解决)
【玩转Jetson TX2 NX】(十)TX2 NX 安装Archiconda3+创建pytorch环境(详细教程+错误解决)
【玩转Jetson TX2 NX】(十一)TX2 NX 基于UNet网络实现显著目标分割(详细教程+错误解决)
2 jetcam运行板载CSI摄像头
首先输入命令,安装traitlets,参考大佬文章: Jetson nano使用jetcam运行CSI摄像头
pip3 install traitlets==4.3.3
如图所示:
然后,安装jetcam,依次输入命令
git clone https://github.com/NVIDIA-AI-IOT/jetcam
cd jetcam
sudo python3 setup.py install
如图所示:
安装成功,如图所示:
运行程序,测试摄像头
from jetcam.csi_camera import CSICamera
import cv2
camera0 = CSICamera(capture_device=0, width=224, height=224)
image0 = camera0.read()
print(image0.shape)
print(camera0.value.shape)
while 1:
image0 = camera0.read()
cv2.imshow("CSI Camera0", image0)
kk = cv2.waitKey(1)
if kk == ord('q'): # 按下 q 键,退出
break
如图所示:
3 基于UNet算法实时显著目标分割
利用板载摄像头实时显著目标分割代码如下:
from jetcam.csi_camera import CSICamera
import cv2
import tensorrt as trt
import numpy as np
import inference as inference_utils
camera0 = CSICamera(capture_device=0, width=480, height=320)
image0 = camera0.read()
print(image0.shape)
print(camera0.value.shape)
# 1. 网络构建
# Precision command line argument -> TRT Engine datatype
TRT_PRECISION_TO_DATATYPE = {
16: trt.DataType.HALF,
32: trt.DataType.FLOAT
}
# datatype: float 32
trt_engine_datatype = TRT_PRECISION_TO_DATATYPE[16]
# batch size = 1
max_batch_size = 1
engine_file_path = "/home/tx2_lei/WHL/unet_lei/models/unet_deconv.trt"
onnx_file_path = "/home/tx2_lei/WHL/unet_lei/models/unet_deconv.onnx"
new_width, new_height = 480, 320
output_shapes = [(1, new_height, new_width)]
trt_inference_wrapper = inference_utils.TRTInference(
engine_file_path, onnx_file_path,
trt_engine_datatype, max_batch_size,
)
while 1:
image0 = camera0.read()
# 2. 图像预处理
img = image0
# inference
trt_outputs = trt_inference_wrapper.infer(img, output_shapes, new_width, new_height)[0]
# 输出后处理
out_threshold = 0.5
print("the size of tensorrt output : {}".format(trt_outputs.shape))
output = trt_outputs.transpose((1, 2, 0))
# # 0/1像素值
output[output > out_threshold] = 255
output[output <= out_threshold] = 0
output = output.astype(np.uint8)
cv2.imshow("CSI Camera0", output)
kk = cv2.waitKey(1)
if kk == ord('q'): # 按下 q 键,退出
break
运行被killed,如图所示:
解决上述问题,增加swap分区大小,首先输入命令查看swp分区
sudo jtop
如图所示,分区大小为2GB
接下俩增加Swap内存,依次输入命令
#1)新增swapfile文件大小自定义
sudo fallocate -l 6G /var/swapfile
#2)配置该文件的权限
sudo chmod 600 /var/swapfile
#3)建立交换分区
sudo mkswap /var/swapfile
#4)启用交换分区
sudo swapon /var/swapfile
如图所示:
再次输入命令查看swp分区大小
sudo jtop
如图所示,swap内存大小为8GB
设置为自启动swapfile,输入命令
sudo bash -c 'echo "/var/swapfile swap swap defaults 0 0" >> /etc/fstab'
如图所示:
然后回到vscode,运行程序,成功,如图所示,利用板载摄像头实时显著目标分割
按q
,退出,如图所示:
B站视频链接: 【手把手一起在Jetson TX2 NX部署UNet实时显著目标分割】
希望本文对大家有帮助,上文若有不妥之处,欢迎指正
分享决定高度,学习拉开差距