【玩转Jetson TX2 NX】(十二)TX2 NX 板载摄像头+UNet算法实时显著目标分割(详细教程+错误解决)

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实时显著目标分割】

希望本文对大家有帮助,上文若有不妥之处,欢迎指正

分享决定高度,学习拉开差距

猜你喜欢

转载自blog.csdn.net/qq_42078934/article/details/129967861