【AI达人创造营三期】中国交通标志识别-JetsonNano部署

2023-10-24 04:20

本文主要是介绍【AI达人创造营三期】中国交通标志识别-JetsonNano部署,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【AI达人创造营三期】中国交通标志识别-JetsonNano部署

1. 项目简介

  • 本项目针对JetsonNano开发板进行项目部署落地,并完成真实场景的交通标志识别。
  • 本部署项目依托于【校园AI Day-AI workshop】中国交通标志图像分类项目,在该项目训练好的模型基础上进行开发板部署落地。
  • 对该项目训练好的PaddleDetection中的Picodet模型进行导出,进而完成开发板部署整体流程,包括开发板组装、系统烧入、磁盘空间扩充、分配虚拟内存、导入模型、安装摄像头、C++部署等几个主要步骤。
  • 下面将进行详细介绍。

2. 开发板组装

本项目主要用到的硬件包括:

  1. Jetson nano开发板主体
  2. 支持HDMI的显示器
  3. 鼠标
  4. 键盘
  5. 网线(用于给开发板联网导入训练好的模型等)
  6. CSI摄像头(用于实时检测)
  7. 32G的SD存储卡(用于烧录系统)

注意在脚针那一侧的侧盖可以先不用安装,因为后续要用到侧面脚针。组装完成的开发板如下图所示:

在这里插入图片描述

3. 系统烧录

系统烧录主要分两步骤,虚拟机烧录eMMC文件以及SD卡烧录系统,两步骤缺一不可,否则可能会导致开发板开不开机。

3.1 虚拟机烧录

首先要在自己的电脑上安装VMware虚拟机。注意:在设置虚拟机配置的时候要开启USB接口,也就是让虚拟机能够识别你电脑的物理USB接口接入的设备。

然后,因为开发板提供了系统优盘,我们可以导出U盘中提供的clb_jetson.vmx文件,然后在虚拟机窗口选择打开虚拟机,然后选择该文件代开,如下图所示:

在这里插入图片描述

然后使用跳线连接开发板侧面的第二脚针和第三脚针。如下图所示:

在这里插入图片描述

接下来,使用usb连接线连接电脑与开发板,并且连接电源线为开发板通电。

在这里插入图片描述

然后,电脑的虚拟机就可以识别到USB设备(开发板)了,进而就可以进行eMMC文件烧录,烧录具体步骤请参考系统烧录

3.2 烧录SD卡

在PC上安装U盘中提供的 Balena Etcher 烧录工具。

在这里插入图片描述

然后,将SD储存卡放入读卡器,并插入电脑。具体系统烧录过程请参考:安装系统。

最后,拔掉与电脑之间的usb连接线,拔掉跳线。保留电源线,使用hdmi线连接显示器,即可开机。

在这里插入图片描述

4. 扩充磁盘空间

使用如下命令安装磁盘工具:
sudo apt-get install gparted

然后打开磁盘工具,在右上角选择sda,然后右键sda磁盘条,选择resize,然后将磁盘条拖到最大空间,应用即可。

5. 释放虚拟内存

扩充内存空间是必要的,显存各个内存是共享受的,物理内存比较小只有4G,所以应该加上。Swap交换空间是在硬盘上,当物理内存RAM用完时,会开始使用。交换空间可以采用专用交换分区或交换文件的形式。在大多数情况下,不存在交换分区,因此唯一的选择是创建交换文件。具体扩充步骤请参考:增加交换空间大小

6. 摄像头安装

  • 注意:在安装摄像头的时候需要断电
  • 首先把Nano的这个CSI接口的这个销子轻轻拔起,注意要小心,千万别拔断
  • 然后插入CSI摄像头的排线线缆,注意方向和正反,别插反了
  • 接下来把刚才拔起来的销子压下去固定好
  • 别忘记把摄像头的保护贴膜去掉

在这里插入图片描述

安装摄像头以后使用如下命令查看是否有摄像头接入,能否被系统识别:

在确定有摄像头设备接入后,使用第二个命令开启视像头,进行摄像头测试:

ls /dev/vid*gst-launch-1.0 nvarguscamerasrc ! 'video/x-raw(memory:NVMM),width=3820, height=2464, framerate=21/1, format=NV12' ! nvvidconv flip-method=0 ! 'video/x-raw,width=960, height=616' ! nvvidconv ! nvegltransform ! nveglglessink -e

7. C++部署

7.1 环境准备

安装所需的包, c m a k e cmake cmake g + + g++ g++ p a t c h e l f patchelf patchelf(用于编译),在终端中使用如下命令进行安装。

  • 注意:使用如下命令安装的cmake版本过低,会导致后续部署失败,需要手动升级,或者是直接手动安装高版本cmake。
    步骤1:访问cmake官网,找到对应的版本。
  • 本项目使用的开发板需要选择Linux aarch64平台,然后选择合适版本的压缩包cmake-3.23.4-linux-aarch64.tar.gz进行手动下载

在这里插入图片描述

步骤2:解压安装
找到download目录下刚刚下好的安装包,打开终端使用如下命令进行解压缩:
tar -zxvf cmake-3.23.4-linux-aarch64.tar.gz
然后可以将解压好的文件夹移动到/opt/cmake3.23目录下(/cmake3.23可以根据需要可以自己命名成别的),使用如下命令查看是否安装成功:

cmake -version

若提示此错误:cmake :command not found,说明需要设置一下路径

解决办法:

  • 按照提示需要在终端执行命令:export PATH=/opt/cmake3.23/bin:$PATH
sudo apt-get install build-essential make cmakesudo apt-get install git g++ pkg-config curlsudo apt-get install patchelf

7.2 FastDeploy 的 C++ 部署

编译 FastDeploy 的 C++ SDK,使用如下命令先从官网克隆FastDeploy,然后进行编译:

/home/nvidia/FastDeploy/build/fastdeploy_cpp_sdk/目录下的即为编译产出的C++部署库。包括C++的实例代码也在里面。

git clone https://github.com/PaddlePaddle/FastDeploycd FastDeploymkdir build && cd buildcmake .. -DBUILD_ON_JETSON=ON -DENABLE_VISION=ON -DCMAKE_INSTALL_PREFIX=${PWD}/fastdeploy_cpp_sdkmake -j8make install

7.3 Picodet模型部署

步骤1:导入依赖库

注意:依赖库导入环境变量的脚本在/home/nvidia/FastDeploy/build/fastdeploy_cpp_sdk/fastdeploy_init.sh需要我们在终端中使用如下命令导入:

source /home/nvidia/FastDeploy/build/fastdeploy_cpp_sdk/fastdeploy_init.sh

步骤2:修改源码

FastDeploy 提供的示例代码在以下路径:

/home/nvidia/FastDeploy/build/fastdeploy_cpp_sdk/examples/vision/detection/paddledetection/cpp/infer_picodet.cc

  • 但是使以上路径中的infer_picodet.cc文件直接编译的话,不能调用摄像头,只能本地推理,因此需要将该infer_picodet.cc文件内容进行改动。
  • 修改好的infer_picodet.cc文件已经在本项目aistudio目录下了,可以将其下载下来,替换原来的infer_picodet.cc文件。
  • 这样,在接下来的编译后就能调用摄像头进行实时推理了。

在这里插入图片描述


步骤3:编译

需要我们进入到此目录下开启终端:/home/nvidia/FastDeploy/build/fastdeploy_cpp_sdk/examples/vision/detection/paddledetection/cpp/

然后使用如下命令进行编译:

mkdir build && cd buildcmake .. -DFASTDEPLOY_INSTALL_DIR=YourPathTo/fastdeploy_cpp_sdkcpp_sdkmake -j

步骤4:推理
  • 进入到/home/nvidia/FastDeploy/build/fastdeploy_cpp_sdk/examples/vision/detection/paddledetection/cpp/build目录,可找到编译后的可执行文件: infer_picodet_demo
  • 将我们之前训练好的 PicoDet 模型和测试图片拷贝到当前build目录下
  • 使用如下命令进行推理
  • infer_picodet_demo:代表使用的推理文件
  • ./picodet_s_320_coco_lcnet:表示要使用的训练好的推理模型
  • 036_1_0002_1_j.png:表示要推理的图片(因为源码中没改图片传入,所以实时推理的时候也需要给一张图片路径),但是不影响启动摄像头实时推理
  • 命令中最后那个0:代表使用CPU推理;也可选择2:代表GPU上TensorRT推理(TRT推理加载时间比较长,请耐心等待)。根据需要选择。
  • 使用如下命令进行推理:
./infer_picodet_demo ./picodet_s_320_coco_lcnet 036_1_0002_1_j.png 2

8. 实时推理效果展示

最终选择了GPU上TensorRT推理,推理效果如下图中所示,可以看出经过部署,能够将不同的交通标志进行识别与分类。


本地推理结果如下所示:

在这里插入图片描述

实时推理结果如下所示:

在这里插入图片描述

在这里插入图片描述

请点击此处查看本环境基本用法.

Please click here for more detailed instructions.

此文章为搬运
原项目链接

这篇关于【AI达人创造营三期】中国交通标志识别-JetsonNano部署的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/272660

相关文章

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.

Python验证码识别方式(使用pytesseract库)

《Python验证码识别方式(使用pytesseract库)》:本文主要介绍Python验证码识别方式(使用pytesseract库),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录1、安装Tesseract-OCR2、在python中使用3、本地图片识别4、结合playwrigh

Web技术与Nginx网站环境部署教程

《Web技术与Nginx网站环境部署教程》:本文主要介绍Web技术与Nginx网站环境部署教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Web基础1.域名系统DNS2.Hosts文件3.DNS4.域名注册二.网页与html1.网页概述2.HTML概述3.

Spring AI 实现 STDIO和SSE MCP Server的过程详解

《SpringAI实现STDIO和SSEMCPServer的过程详解》STDIO方式是基于进程间通信,MCPClient和MCPServer运行在同一主机,主要用于本地集成、命令行工具等场景... 目录Spring AI 实现 STDIO和SSE MCP Server1.新建Spring Boot项目2.a

Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例

《Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例》本文介绍Nginx+Keepalived实现Web集群高可用负载均衡的部署与测试,涵盖架构设计、环境配置、健康检查、... 目录前言一、架构设计二、环境准备三、案例部署配置 前端 Keepalived配置 前端 Nginx

ubuntu如何部署Dify以及安装Docker? Dify安装部署指南

《ubuntu如何部署Dify以及安装Docker?Dify安装部署指南》Dify是一个开源的大模型应用开发平台,允许用户快速构建和部署基于大语言模型的应用,ubuntu如何部署Dify呢?详细请... Dify是个不错的开源LLM应用开发平台,提供从 Agent 构建到 AI workflow 编排、RA

ubuntu16.04如何部署dify? 在Linux上安装部署Dify的技巧

《ubuntu16.04如何部署dify?在Linux上安装部署Dify的技巧》随着云计算和容器技术的快速发展,Docker已经成为现代软件开发和部署的重要工具之一,Dify作为一款优秀的云原生应用... Dify 是一个基于 docker 的工作流管理工具,旨在简化机器学习和数据科学领域的多步骤工作流。它

Nginx部署React项目时重定向循环问题的解决方案

《Nginx部署React项目时重定向循环问题的解决方案》Nginx在处理React项目请求时出现重定向循环,通常是由于`try_files`配置错误或`root`路径配置不当导致的,本文给大家详细介... 目录问题原因1. try_files 配置错误2. root 路径错误解决方法1. 检查 try_f

使用Python和PaddleOCR实现图文识别的代码和步骤

《使用Python和PaddleOCR实现图文识别的代码和步骤》在当今数字化时代,图文识别技术的应用越来越广泛,如文档数字化、信息提取等,PaddleOCR是百度开源的一款强大的OCR工具包,它集成了... 目录一、引言二、环境准备2.1 安装 python2.2 安装 PaddlePaddle2.3 安装

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小