处理器SDK Linux软件开发
处理器SDK Linux软件开发
https://software-dl.ti.com/jacinto7/esd/processor-sdk-linux-edgeai/TDA4VM/08_06_01/exports/docs/devices/TDA4VM/linux/index.html
1.概述
欢迎使用处理器SDK Linux版TDA4VM!
SDK提供软件和工具,让用户在德州仪器的边缘人工智能应用处理器上有效平衡深度学习性能与系统功率和成本。为下一代汽车、智能摄像头、边缘人工智能盒子以及自动驾驶机器和机器人提供实用的嵌入式推理解决方案。除了通用微处理器外,TDA4VM还集成了用于神经网络、图像、视觉和多媒体处理的微控制器、DSP和加速器。只需几个简单的步骤,就可以使用实时相机和显示器运行高性能计算机视觉和深度学习演示。
图1.1用于TDA4VM的处理器SDK Linux功能概述
SDK还支持多个开源组件的相互作用,如GStreamer、OpenVx、OpenCV和深度学习运行时,如TFLite、ONNX和Neo AI DLR。参考应用程序展示了基于感知的示例,如Python和C++变体中的图像分类、对象检测和语义分割。SDK支持直接在目标和PC上编辑构建调试周期,以交叉编译和构建应用程序。
图1.2 TDA4VM处理器SDK Linux支持的行业标准组件
SDK主要由三部分组成,如下图所示。Edge AI应用程序堆栈用于运行具有实时输入/输出的分析应用程序。基础Linux组件为远程核心和硬件加速器提供操作系统、uBoot、内核、文件系统、Linux驱动程序和固件。
要开始设置,请单击“下一步”按钮。
2.入门
2.1. 硬件设置
TI的TDA4VM SoC内置双核A72、高性能视觉加速器、视频编解码器加速器、最新的C71x和C66x DSP、用于捕获和显示的高带宽实时IP、GPU、专用安全岛和安全加速器。SoC经过功率优化,可为机器人、工业和汽车应用中的感知、传感器融合、定位和路径规划任务提供一流的性能。
有关更多详细信息,请访问https://www.ti.com/product/TDA4VM
2.1.1. TDA4VM SK
TDA4VM Edge AI入门套件(SK)是一款低成本、小尺寸的板,旨在将智能相机、机器人和智能机器带入生活。有关主板的更多信息、支持的外围设备的完整列表、引导模式的引脚设置等,请访问SK-TDA4VM指南。
要在TDA4VM SK上运行演示,将需要,
1)TDA4VM Edge AI入门套件
2)USB摄像头(任何兼容V4L2的1MP/2MP摄像头,例如罗技C270/C920/C922)
3)全高清eDP/HDMI显示屏
4)最低16GB高性能SD卡
5)连接到互联网的100Base-T以太网电缆
6)UART电缆
7)外部电源或电源附件要求
①标称输出电压:5-20VDC
②最大输出电流:5000毫安
③有关更多详细信息,请参阅SK-TDA4VM指南。
如图所示,将组件连接到SK。
图2.1用于边缘AI连接的TDA4VM入门套件
将引导引脚设置为SD引导模式,如下图所示。
图2.2用于Edge AI引导销的TDA4VM入门套件
2.1.2. USB摄像头
入门套件支持符合UVC(USB视频类)标准的USB摄像头。SDK中启用了相同的驱动程序。该SDK已在罗技USB摄像头的C270/C920/C922版本上进行了测试。请参阅Getting Error when try to capture from multiple USB camera to streaming from multiple U SB camera同时从多个USB摄像机进行流式传输时出错。
2.1.3. OV5640 YUV传感器
OV5640 CSI相机模块是一个内置ISP的2MP传感器,可以通过CSI通道传输原始YUYV帧。此摄像头模块可从订购https://www.leopardimaging.com/product/cmos-sensor-modules/mipi-camera-modules/li-am65x-csi2.摄像头可以连接到Edge AI SK板的底部,如下所示。OV5640相机模块需要额外的电源,并具有以下要求
输出电压:5 VDC
输出电流:2.0 A
为了增加灵活性,可以从这里订购Samtec延长电缆,https://www.samtec.com/products/hqcd
笔记
默认情况下,对TDA4VM SK禁用OV5640。连接相机后,可以通过在/run/media/mmcblk0p1/uEnv.txt中指定dtb覆盖文件来启用它,如下所示,
名称覆盖=k3-j221e-edgei-apps.dtbo k3-j2721e-sk-csi2-ov5640.dtbo
编辑并保存文件后重新启动板。Dtb文件可以在/boot下找到。
2.1.4. RPiV2(IMX219)原始传感器
RPiV2相机模块由TDA4VM SK支持。它是一个没有ISP的8MP传感器,可以在CSI通道上以1080p 60 fps的速度传输原始SRGGB8帧,但linux imx219传感器驱动程序仅实现1080p 30 fps模式。
有关更多详细信息,请访问Rpi相机模块v2
笔记
为了尝试同一传感器的不同分辨率,还需要不同的DCC二进制文件来使用tiovxisp和tiovxldc插件。
以下是发布在上游的补丁,用于启用其他具有较低分辨率模式的更高fpshttps://patchwork.linuxtv.org/project/linux-media/patch/20210115185233.333407-1-angelogioacchino.delregno@somaline.org/
摄像头可以连接到Edge AI SK板上的2个RPi头中的任何一个,如下所示,请注意,必须抬起头才能连接摄像头。
图2.4 IMX219 CSI传感器与Edge AI的TDA4VM入门套件的连接
笔记
默认情况下,IMX219处于禁用状态。连接相机后,可以通过在/run/media/mmcblk0p1/uEnv.txt中指定dtb覆盖文件来启用它,如下所示,
名称覆盖=k3-j221e-edgei-apps.dtbo k3-j2721e-sk-rip-cam-imx219.dtbo
编辑并保存文件后重新启动板。Dtb文件可以在/boot下找到。
请参阅摄像头来源(v4l2),了解如何列出所有连接的摄像头,并选择用于演示的摄像头。
默认情况下,imx219将配置为8位捕获,但它也支持在16位容器中进行10位捕获。要在10位模式下使用它,需要以下步骤:
修改/opt/edgeai gst-apps/scripts/setup_cameras.sh,将格式设置为10位,如下所示
CSI_CAM_0_FMT=“[FMT:SRGGB8_1X10/1920x100]”
CSI_CAM_1_FMT=“[ffmt:SRGGB8_1X10/1920x100]”
将映像二进制文件更改为使用10位版本
mv/opt/imaging/imx219/dcc_2a.bin/opt/immx219/dcc_2a_8b.bin
mv/opt/imaging/imx219/dcc_viss.bin/opt/imaging/imx219/dcc-vis_8b.bin
mv/opt/imaging/imx219/dcc_2a_10b.bin/opt/imaching/imx29/dcc_2a.bin
mv/opt/imaging/imx219/dcc_viss_10b.bin/opt/imaging/imx219/dc_viss.bin
将/opt/edgeai gst-apps/configs/rpiV2_cam_example.yaml中的输入格式设置为rggb10
2.1.5. IMX390原始传感器
IMX390相机由TDA4VM SK支持。它是一个2MP RGGB 12位传感器,可以通过CSI2 Rx传输封装在16位像素容器中的原始SRGGB12帧
笔记
默认情况下,IMX390处于禁用状态。连接相机后,可以通过在/run/media/mmcblk0p1/uEnv.txt中指定dtb覆盖文件来启用它,如下所示,
name_overlays=k3-j221e-edgei-apps.dtbo k3-j721e-fpdlink-sk-fusion.dtbo k3-j721e-ppdlink-imx390-<版本>-<x>-<y>.dtbo
相机的变体:<version>={cm,rcm}
摄像机连接到的CSI通道:<x>={0,1}
融合板上的位置:<y>={0,1,2,3}
可以连接多个摄像头,每个摄像头有一个dtbo条目。编辑并保存文件后重新启动板。
应该只应用那些要捕捉的摄影机的套印格式。例如,如果连接了4个摄像头,并且只想从其中的2个摄像头进行拍摄,那么应该只应用2个覆盖并重新启动
最多可通过Fusion1 Rev C板连接8个IMX390摄像头
请参阅摄像头来源(v4l2),了解如何列出所有连接的摄像头,并选择用于演示的摄像头。
2.2. 软件设置
2.2.1. 准备SD卡图像
下载最新的SD卡.wic图像,并使用Balena etcher工具将其闪至SD卡,网址为:
https://www.balena.io/etcher/
笔记
已经用Balena Etcher版本1.7.0进行了测试,可以在这里找到,https://github.com/balena-io/etcher/releases/tag/v1.7.0
Balena Etcher的最新1.7.2版本似乎存在已知问题https://forums.balena.io/t/etcher-error-message-cannot-read-property-message-of-null/350471
该工具可以安装在Windows/Linux上。只需下载蚀刻机图像并按照说明准备SD卡。
蚀刻器映像是为16 GB SD卡创建的,如果使用的是更大的SD卡,则可以在Linux PC上使用以下步骤扩展根文件系统以使用全部SD卡容量
#find the SD card device entry using lsblk (Eg: /dev/sdc)
#use the following commands to expand the filesystem
#Make sure you have write permission to SD card or run the commands as root
#Unmount the BOOT and rootfs partition before using parted tool
umount /dev/sdX1
umount /dev/sdX2
#Use parted tool to resize the rootfs partition to use
#the entire remaining space on the SD card
#You might require sudo permissions to execute these steps
parted -s /dev/sdX resizepart 2 '100%'
e2fsck -f /dev/sdX2
resize2fs /dev/sdX2
#replace /dev/sdX in above commands with SD card device entry
2.2.2. 开机并引导
插入SD卡之前,请确保已断开电源。一旦SD卡牢固插入插槽,并且主板通电,主板将在不到20秒的时间内启动并显示壁纸,如下图所示。
图2.6启动时的TDA4VM入门套件壁纸
还可以通过将UART电缆连接到电脑并使用串行端口通信程序来查看引导日志。4个串行端口将出现在电脑上,应该连接到端口2以获取引导日志
对于Linux操作系统,minicom**运行良好。有关更多详细信息,请参阅以下关于“minicom”的文档。
https://help.ubuntu.com/community/Minicom
启动minicom时,打开以下颜色选项:
sudo minicom-D/dev/ttyUSB2-c on
对于Windows操作系统,Tera Term运行良好。有关更多详细信息,请参阅以下关于“TeraTerm”的文档
https://learn.sparkfun.com/tutorials/terminal-basics/tera-term-windows
笔记
如果使用Windows计算机,则用户可能需要为端口安装其他驱动程序才能显示:https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers
笔记
在串口通信程序中,波特率应配置为115200 bps。如果在引导完成后连接到UART控制台,则可能看不到任何日志,或者登录提示可能在引导日志之间丢失,请按ENTER键以获得登录提示
作为linux系统的一部分,执行/opt/edgeai gst-apps/init_script.sh,
这将设置必要的环境变量。
如果任何摄像头连接到板上,脚本会对其进行设置并打印其设备id和其他信息。
Linux启动后,以无密码的root用户身份登录。
2.2.3. 远程连接
如果不喜欢UART控制台,也可以使用显示屏上显示的IP地址访问设备。有了IP地址,就可以直接ssh到板上,查看内容并运行演示。为了获得最佳体验,建议使用可以从这里下载的VSCode,
https://code.visualstudio.com/download
还需要在VSCode中安装“远程开发扩展包”,如下所述:
https://code.visualstudio.com/docs/remote/ssh
图2.7用于通过SSH连接到Edge AI的TDA4VM入门套件的Microsoft Visual Studio代码
如果使用的是Ubuntu 22.04,请将以下内容添加到~/.ssh/config中
# Add to ~/.ssh/config. Absolute IP or range of IP can be defined using *
Host 10.24.*
HostKeyAlgorithms=+ssh-rsa
现在可以使用终端进行SSH。
$ ssh root@10.24.69.123
3.边缘AI样本应用
有三种方法可以探索在TDA4VM EVM上运行典型的相机推理显示Edge AI用例,
尝试开箱即用的Edge AI图库应用程序
使用Python和C++参考示例开发Edge AI应用程序
运行“无代码”优化的端到端GStreamer应用程序-OpTIFlow
SDK被封装在网络中,该网络执行如下3个DL任务,
图像分类:检测给定输入帧的Imagenet数据集中前5个最近似的类
对象检测:检测并绘制对象周围的边界框,还将对象分类到coco数据集中的一个类中
语义分割:将ade20k数据集中的每个像素分类
3.1. 开箱即用的GUI应用程序
当TDA4VM EVM在SD卡就位的情况下通电时,Edge AI Gallery应用程序会在启动时出现,如图所示。可以连接USB 2.0鼠标,然后单击左面板中的按钮,启动运行所选DL任务的Edge AI应用程序。在后台,启动了一个GStremer管道,它读取压缩的视频文件并在解码的内容上运行DL网络。DL推断的输出被叠加在图像上并被发送到显示器。
用户可以选择不同的DL任务在压缩视频上执行。还有一个“自定义”按钮,按下该按钮可以选择输入源,可以是压缩视频文件(H.264/H.265)、USB摄像头或IMX219摄像头。还可以从文件系统中可用的预导入DL网络的列表中进行选择并启动应用程序。这将自动构建一个具有所需元素的GStreamer管道,并启动应用程序。
3.2. Python/C++应用程序
基于Python的演示是为图像分类、对象检测和语义分割编写的简单可执行脚本。Demo是使用YAML文件配置的。有关配置文件参数的详细信息,请参阅配置应用程序
开箱即用演示的示例配置文件可以在edgei gst-apps/configs中找到。该文件夹还包含一个模板配置文件,其中包含关于每个可配置参数的简要信息edgeai gst-app/config_template.yaml
以下是如何运行基于Python的图像分类演示,
/opt/edgeai gst-apps/apps_python#/app_edgeai.py/configs/image_classification.yaml
该演示从连接的USB相机捕获输入帧,并在发送到显示器之前经过预处理、推理和后处理。用于图像分类和对象检测演示的样本输出如下,
要退出演示,请按Ctrl+C。
C++应用程序在打包时是交叉编译的,它们可以直接测试,如下所示
/opt/edgeai-gst-apps/apps_cpp# ./bin/Release/app_edgeai ../configs/image_classification.yaml
要退出演示,请按Ctrl+C。
C++应用程序也可以使用以下步骤在目标上进行修改和构建
/opt/edgeai-gst-apps/apps_cpp# rm -rf build bin lib
/opt/edgeai-gst-apps/apps_cpp# mkdir build
/opt/edgeai-gst-apps/apps_cpp# cd build
/opt/edgeai-gst-apps/apps_cpp/build# cmake ..
/opt/edgeai-gst-apps/apps_cpp/build# make -j2
笔记
Python和C++应用程序的结构相似,可以接受相同的配置文件和命令行参数