广告

如何在STM32上运行AI应用-基于米尔SMT32MP257开发板

2024-09-30 米尔电子 阅读:
本章主要介绍如何在MYD-LD25X开发板上安装X-Linux-AI以及相关demo组件等。

X-Linux-AI概述

X-LINUX-AI 是 STM32 MPU OpenSTLinux 扩展包,面向 STM32MP1 和 STM32MP2 系列微处理器的人工智能。它包含 Linux® AI 框架,以及用于开始一些基本使用案例的应用程序示例。hS7ednc

X-LINUX-AI 中提供的示例包括一系列用于图像分类、对象检测、语义分割和人体姿势估计的优化模型。X-LINUX-AI 中作为预构建二进制文件提供的人脸识别应用程序基于 STMicroelectronics 重新训练的模型。hS7ednc

这些示例依赖于基于 TensorFlow™ Lite 推理引擎、ONNX 运行时、OpenVX™ 或 Google Edge TPU™ 加速器的 STAI_MPU API。它们都支持 Python™ 脚本和 C/C++ 应用程序。本文内容将通过MYD-LD25X来演示这些示例demo。hS7ednc

硬件资源

带有烧录好MYiR发布镜像的MYD-LD25X开发板(基于SMT32MP257处理器)hS7ednc

hS7ednc

图:MYD-LD25X开发板(基于SMT32MP257处理器)hS7ednc

 hS7ednc

MY-LVDS070C屏幕或者任意HDMI接口显示器hS7ednc

MY-CAM003M米尔MIPI-CSI摄像头模块hS7ednc

软件资源

本文内容操作均在MYD-LD25X开发板的调试串口执行,请确保先完成了MYD-LD25X快速使用指南(也就是开发板附带的小册子)上的基本内容,并且需要确保开发板能够联通互联网,提供网络的方式有多种,可以是能够连接互联网的路由器,也可以是Wifi,Wifi具体的连接方式可以查阅发布资料中《MYD-LD25X Linux 软件评估指南》Wifi的STA连接章节。hS7ednc

开发板安装X-Linux-AI

本章主要介绍如何在MYD-LD25X开发板上安装X-Linux-AI以及相关demo组件等。hS7ednc

配置准备环境

获取校准参数hS7ednc

如果在MYD-LD25X使用LVDS屏幕,初次使用进入weston需要校准屏幕,校准的自动化脚本操作默认添加在autorun脚本中,如果已经执行过校准操作或者使用HDMI屏幕,则可以跳过该小节内容。hS7ednc

运行autorun.sh脚本执行校准操作:hS7ednc

# autorun.shhS7ednc

执行后lvds屏幕会出现触摸点位,以此点击后完成校准,之后使用屏幕无需再次校准。hS7ednc

关闭HMIhS7ednc

避免出现显示冲突,在MYD-LD25X登录后,执行以下操作关闭mxapp2程序也就是MYiR的HMI界面:hS7ednc

# killall mxapp2hS7ednc

并且将autorun脚本中启动mxapp2的行注释掉,下次启动后就不会自动运行了:hS7ednc

# vi /usr/bin/autorun.shhS7ednc

#!/bin/shhS7ednc

...省略hS7ednc

synchS7ednc

#/usr/sbin/mxapp2 &hS7ednc

更新软件源hS7ednc

执行以下命令更新软件源:hS7ednc

# apt updatehS7ednc

The software package is provided AS IS, and by downloading it, you agree to be bound to the terms of the software license agreement (SLA).hS7ednc

The detailed content licenses can be found at https://wiki.st.com/stm32mpu/wiki/OpenSTLinux_licenses.hS7ednc

Get:1 http://packages.openstlinux.st.com/5.1 mickledore InRelease [5,723 B]hS7ednc

Get:2 http://packages.openstlinux.st.com/5.1 mickledore/main arm64 Packages [725 kB]hS7ednc

Get:3 http://packages.openstlinux.st.com/5.1 mickledore/updates arm64 Packages [38.2 kB]hS7ednc

Get:4 http://packages.openstlinux.st.com/5.1 mickledore/untested arm64 Packages [1,338 kB]hS7ednc

Fetched 2,107 kB in 3s (690 kB/s)               hS7ednc

Reading package lists... DonehS7ednc

Building dependency tree... DonehS7ednc

1 package can be upgraded. Run 'apt list --upgradable' to see it. hS7ednc

更新源需要MYD-LD25X连接互联网,请确保网络通畅。执行上述命令时,可能会出现以下问题导致更新错误:hS7ednc

  • 同步时间问题

E: Release file for http://packages.openstlinux.st.com/5.1/dists/mickledore/InRelease is not valid yet (invalid for another 1383d 8h 14min 14s). Updates for this repository will not be applied.hS7ednc

E: Release file for http://extra.packages.openstlinux.st.com/AI/5.1/dists/mickledore/InRelease is not valid yet (invalid for another 1381d 8h 10min 47s). Updates for this repository will not be applied.hS7ednc

出现上述问题的原因是当前开发板时间没有和网络时间成功同步,执行以下操作同步网络时间,首先修改timesyncd.conf配置文件,新增FallbackNTP授时中心网站,按如下所示修改:hS7ednc

# vi /etc/systemd/timesyncd.confhS7ednc

...hS7ednc

[Time]hS7ednc

#NTP=hS7ednc

FallbackNTP=ntp.ntsc.ac.cn cn.ntp.org.cnhS7ednc

...hS7ednc

然后输入如下命令重启同步时间服务:hS7ednc

# systemctl restart systemd-timesyncdhS7ednc

再次输入date查看时间是否成功更新,根据网络情况不同部分情况可能需要一定时间同步:hS7ednc

# datehS7ednc

2023年 03月 03日 星期五 17:50:37 CSThS7ednc

# datehS7ednc

2024年 09月 20日 星期五 15:45:15 CSThS7ednc

  • DNS问题

运行apt update后可能会出现以下问题:hS7ednc

# apt updatehS7ednc

...hS7ednc

Err:1 http://packages.openstlinux.st.com/5.1 mickledore InReleasehS7ednc

  Temporary failure resolving 'packages.openstlinux.st.com'hS7ednc

Reading package lists... DonehS7ednc

Building dependency tree... DonehS7ednc

All packages are up to date.hS7ednc

W: Failed to fetch http://packages.openstlinux.st.com/5.1/dists/mickledore/InRelease  Temporary failure resolving 'packages.openstlinux.st.com'hS7ednc

W: Some index files failed to download. They have been ignored, or old ones used instead.hS7ednc

该问题需要修改/etc/resolve.conf,在文件中添加如下内容:hS7ednc

# vi /etc/resolv.confhS7ednc

...hS7ednc

nameserver 8.8.8.8hS7ednc

nameserver 8.8.4.4hS7ednc

 hS7ednc

安装x-linux-ai-tool

当完成环境配置后,输入以下命令安装x-linux-ai-tool:hS7ednc

# apt-get install -y x-linux-ai-tool hS7ednc

安装完成后,输入以下命令确认是否安装完成:hS7ednc

# x-linux-ai -vhS7ednc

X-LINUX-AI version: v5.1.0hS7ednc

关于x-linux-ai工具的使用,可以通过x-linux-ai -h查看或者浏览官方wiki:hS7ednc

X-LINUX-AI Tool - stm32mpuhS7ednc

安装 X-LINUX-AI 演示包

要开始使用 X-linux-ai,需要安装 X-linux-ai 演示包,该包提供了针对所用特定目标优化的所有 Ai 框架、应用程序示例、工具和实用程序:hS7ednc

# x-linux-ai -i packagegroup-x-linux-ai-demohS7ednc

运行demo启动器

ST的官方demo启动器在MYD-LD25X默认已经移除,为了方便使用X-linu-ai的demo应用,需要重新添加随weston自启动的官方demo展示程序。hS7ednc

进入/usr/local/weston-start-at-startup目录,并新建start_up_demo_launcher.sh脚本,按照如下操作添加对应内容到脚本中:hS7ednc

# cd /usr/local/weston-start-at-startuphS7ednc

# vi start_up_demo_launcher.shhS7ednc

#!/bin/shhS7ednc

DEFAULT_DEMO_APPLICATION_GTK=/usr/local/demo/launch-demo-gtk.shhS7ednc

if [ -e /etc/default/demo-launcher ]; thenhS7ednc

    source /etc/default/demo-launcherhS7ednc

    if [ ! -z "$DEFAULT_DEMO_APPLICATION" ]; thenhS7ednc

        $DEFAULT_DEMO_APPLICATIONhS7ednc

    elsehS7ednc

        $DEFAULT_DEMO_APPLICATION_GTKhS7ednc

    fihS7ednc

elsehS7ednc

    $DEFAULT_DEMO_APPLICATION_GTKhS7ednc

fihS7ednc

然后添加运行权限给脚本:hS7ednc

# chmod a+x start_up_demo_launcher.shhS7ednc

最后重启weston服务后,可以看到启动器成功运行:hS7ednc

# systemctl restart weston-graphical-session.servicehS7ednc

hS7ednc

图2-1. demo启动器-1hS7ednc

hS7ednc

图2-2. demo启动器-2hS7ednc

 hS7ednc

运行AI 应用实例

本章节将简单展示上文安装后的几个Demo具体情况,在执行Demo前,需要准备好1.1小节的硬件资源。hS7ednc

以下demo运行都需要使用到MIPI-CSI摄像头,适用于MYD-LD25X开发板的摄像头型号为米尔的MY-CAM003M,在使用该摄像头前需要按照以下命令来初始化配置并事先预览确保摄像头能够正常工作。hS7ednc

进入/etc/myir_test目录,运行myir_camera_play脚本:hS7ednc

# cd /etc/myir_testhS7ednc

# ./myir_camera_playhS7ednc

执行后,屏幕上会出现摄像头预览画面,请确保画面显示正常,如果存在问题,请查阅《MYD-LD25X Linux 软件评估指南》中关于MIPI-CSI摄像头的部分检查摄像头连接情况等来排查问题,如有需要请咨询米尔技术支持。hS7ednc

图像分类

图像分类神经网络模型可以识别图像所代表的对象。它将图像分类为不同的类别。该应用展示了一个计算机视觉的图像分类用例,从相机输入(/dev/videox)捕获帧,并通过OpenVX、TFLite或ONNX框架解析的神经网络模型进行分析。hS7ednc

通过demo启动器运行

可以通过点击demo启动器中的Image Classifiction样例图标来运行该demo,默认情况下,通过2.3小节安装的是OpenVX的应用程序,并且由C/C++和Python两种。hS7ednc

hS7ednc

图3-1. 图像分类hS7ednc

通过命令运行

图像分类的C/C++和Python应用程序位于/usr/local/x-linux-ai/image-classification/目录中,可以通过运行程序加-h参数来获取更多帮助信息:hS7ednc

# cd /usr/local/x-linux-ai/image-classification/hS7ednc

# ls -lahS7ednc

stai_mpu_image_classification #C++运行程序hS7ednc

stai_mpu_image_classification.py #Python运行程序hS7ednc

为了简化demo的启动,在应用程序目录下有配置好的启动脚本:hS7ednc

使用相机输入启动图像分类demohS7ednc

launch_bin_image_classification.sh #C++运行程序hS7ednc

launch_python_image_classification.sh #Python运行程序hS7ednc

使用图片输入启动图像分类demohS7ednc

launch_bin_image_classification_testdata.sh #C++运行程序hS7ednc

launch_python_image_classification_testdata.sh #Python运行程序hS7ednc

demo展示

通过demo启动器启动默认为使用相机输入,和命令启动中使用相机输入的脚本运行结果一致,这里以C/C++程序为例,具体测试情况如下:hS7ednc

# cd /usr/local/x-linux-ai/image-classificationhS7ednc

# ./launch_bin_image_classification.sh #或者点击demo启动器图标hS7ednc

hS7ednc

图3-2. 摄像机输入hS7ednc

运行图片输入的程序脚本前,需要准备识别的图片,这里以一张泰迪熊的图片为例,图片放置目录为/usr/local/x-linux-ai/image-classification/models/mobilenet/testdata,然后运行脚本,这里以C/C++应用程序为例。hS7ednc

# cd /usr/local/x-linux-ai/image-classification/models/mobilenet/testdatahS7ednc

# ls -lahS7ednc

-rwxr--r-- 1 root root 102821  9 20 23:14 teddy.jpghS7ednc

# cd /usr/local/x-linux-ai/image-classificationhS7ednc

# ./launch_bin_image_classification_testdata.shhS7ednc

运行结果如下:hS7ednc

hS7ednc

图3-3. 图片输入hS7ednc

 hS7ednc

对象检测

该应用展示了一个计算机视觉的对象检测用例,从相机输入(/dev/videox)捕获帧,并通过OpenVX、TFLite或ONNX框架解析的神经网络模型进行分析。使用Gstreamer管道来流式传输相机帧(使用v4l2src),显示预览(使用gtkwaylandsink),并执行神经网络推理(使用appsink)。hS7ednc

通过demo启动器运行

可以通过点击demo启动器中的Object Detection样例图标来运行该demo,默认情况下,通过2.3小节安装的是OpenVX的应用程序,并且由C/C++和Python两种。hS7ednc

hS7ednc

图3-4. 对象检测hS7ednc

通过命令运行

对象检测的C/C++和Python应用程序位于/usr/local/x-linux-ai/object-detection/目录中,可以通过运行程序加-h参数来获取更多帮助信息:hS7ednc

# cd /usr/local/x-linux-ai/object-detection/hS7ednc

# ls -lahS7ednc

stai_mpu_object_detection #C++运行程序hS7ednc

stai_mpu_object_detection.py #Python运行程序hS7ednc

为了简化demo的启动,在应用程序目录下有配置好的启动脚本:hS7ednc

使用相机输入启动对象检测demohS7ednc

launch_bin_object_detection.sh #C++运行程序hS7ednc

launch_python_object_detection.sh #Python运行程序hS7ednc

使用图片输入启动对象检测demohS7ednc

launch_bin_object_detection_testdata.sh #C++运行程序hS7ednc

launch_python_object_detection_testdata.sh #Python运行程序hS7ednc

demo展示

通过demo启动器启动默认为使用相机输入,和命令启动中使用相机输入的脚本运行结果一致,这里以C/C++程序为例,具体测试情况如下:hS7ednc

# cd /usr/local/x-linux-ai/object-detectionhS7ednc

# ./launch_bin_object_detection.sh #或者点击demo启动器图标hS7ednc

hS7ednc

图3-5. 摄像机输入hS7ednc

运行图片输入的程序脚本前,需要准备识别的图片,这里以一张泰迪熊和小猫的图片为例,图片放置目录为:hS7ednc

/usr/local/x-linux-ai/object-detection/models/coco_ssd_mobilenet/testdatahS7ednc

然后运行脚本,这里以C/C++应用程序为例。hS7ednc

# cd /usr/local/x-linux-ai/object-detection/models/coco_ssd_mobilenet/testdatahS7ednc

# ls -lahS7ednc

-rwxr--r-- 1 root root 102821  9 20 23:14 teddy-and-cat.jpghS7ednc

# cd /usr/local/x-linux-ai/object-detectionhS7ednc

# ./launch_bin_object_detection_testdata.shhS7ednc

运行结果如下:hS7ednc

hS7ednc

图3-6. 图片输入hS7ednc

 hS7ednc

姿势估计

该应用展示了一个计算机视觉的人体姿态估计用例,从相机输入(/dev/videox)捕获帧,并通过OpenVX框架解析的神经网络模型进行分析。该应用使用的模型是从stm32-hotspot ultralytics的GitHub分支下载的ST YoloV8n-pose。hS7ednc

通过demo启动器运行hS7ednc

可以通过点击demo启动器中的Pose Estimation样例图标来运行该demo,默认情况下,通过2.3小节安装的是OpenVX的应用程序,默认为Python应用程序。hS7ednc

hS7ednc

图3-7. 姿势估计hS7ednc

通过命令运行hS7ednc

姿势估计的C/C++和Python应用程序位于/usr/local/x-linux-ai/object-detection/目录中,可以通过运行程序加-h参数来获取更多帮助信息:hS7ednc

# cd /usr/local/x-linux-ai/pose-estimation/hS7ednc

# ls -lahS7ednc

stai_mpu_pose_estimation.pyhS7ednc

为了简化demo的启动,在应用程序目录下有配置好的启动脚本:hS7ednc

使用相机输入启动姿势估计demohS7ednc

launch_python_pose_estimation.shhS7ednc

使用图片输入启动姿势估计demohS7ednc

launch_python_pose_estimation_testdata.shhS7ednc

demo展示hS7ednc

通过demo启动器启动默认为使用相机输入,和命令启动中使用相机输入的脚本运行结果一致,这里以C/C++程序为例,具体测试情况如下:hS7ednc

# cd /usr/local/x-linux-ai/pose-estimation/hS7ednc

# ./launch_python_pose_estimation.sh #或者点击demo启动器图标hS7ednc

hS7ednc

图3-8. 摄像机输入hS7ednc

运行图片输入的程序脚本前,需要准备识别的图片,这里以一张人跑步的图片为例,图片放置目录为:/usr/local/x-linux-ai/pose-estimation/models/yolov8n_pose/testdata,然后运行脚本,这里以C/C++应用程序为例。hS7ednc

# cd /usr/local/x-linux-ai/pose-estimation/models/yolov8n_pose/testdatahS7ednc

# ls -lahS7ednc

-rwxr--r-- 1 root root 102821  9 20 23:14 person-run.jpghS7ednc

# cd /usr/local/x-linux-ai/pose-estimationhS7ednc

# ./launch_python_pose_estimation_testdata.shhS7ednc

运行结果如下:hS7ednc

hS7ednc

图3-9. 图片输入hS7ednc

 hS7ednc

语义分割

该应用展示了一个计算机视觉的语义分割用例,从相机输入(/dev/videox)捕获帧,并通过OpenVX框架解析的神经网络模型进行分析。使用Gstreamer管道来流式传输相机帧(使用v4l2src),显示预览(使用gtkwaylandsink),并执行神经网络推理(使用appsink)。推理结果显示在预览中,叠加是使用GtkWidget和cairo实现的。该应用使用的模型是从TensorFlow™ Lite Hub下载的DeepLabV3。hS7ednc

通过demo启动器运行hS7ednc

可以通过点击demo启动器中的Semantic Segmentation样例图标来运行该demo,默认情况下,通过2.3小节安装的是OpenVX的应用程序,默认为Python应用程序。hS7ednc

hS7ednc

图3-10. 语义分割hS7ednc

通过命令运行hS7ednc

语义分割的C/C++和Python应用程序位于/usr/local/x-linux-ai/object-detection/目录中,可以通过运行程序加-h参数来获取更多帮助信息:hS7ednc

# cd /usr/local/x-linux-ai/semantic-segmentation/hS7ednc

# ls -lahS7ednc

stai_mpu_semantic_segmentation.pyhS7ednc

为了简化demo的启动,在应用程序目录下有配置好的启动脚本:hS7ednc

使用相机输入启动语义分割demohS7ednc

launch_python_semantic_segmentation.shhS7ednc

使用图片输入启动语义分割demohS7ednc

launch_python_semantic_segmentation_testdata.shhS7ednc

demo展示hS7ednc

通过demo启动器启动默认为使用相机输入,和命令启动中使用相机输入的脚本运行结果一致,这里以C/C++程序为例,具体测试情况如下:hS7ednc

# cd /usr/local/x-linux-ai/semantic-segmentation/hS7ednc

# ./launch_python_semantic_segmentation.sh #或者点击demo启动器图标hS7ednc

hS7ednc

图3-11. 摄像机输入hS7ednc

运行图片输入的程序脚本前,需要准备识别的图片,这里以一张人正在办公的图片为例,图片放置目录为:hS7ednc

/usr/local/x-linux-ai/semantic-segmentation/models/deeplabv3/testdata hS7ednc

然后运行脚本,这里以C/C++应用程序为例。hS7ednc

# cd /usr/local/x-linux-ai/semantic-segmentation/models/deeplabv3/testdata hS7ednc

# ls -lahS7ednc

-rwxr--r-- 1 root root 102821  9 20 23:14 person-work.jpghS7ednc

# cd /usr/local/x-linux-ai/semantic-segmentationhS7ednc

# ./launch_python_semantic_segmentation_testdata.shhS7ednc

运行结果如下:hS7ednc

hS7ednc

图3-12. 图片输入hS7ednc

 hS7ednc

参考资料

X-Linux-AI-ToolhS7ednc

https://wiki.st.com/stm32mpu/wiki/X-LINUX-AI_ToolhS7ednc

ST 官方WikihS7ednc

https://wiki.st.com/stm32mpu/wiki/Category:X-LINUX-AI_expansion_packagehS7ednc

责编:Demi
文章来源及版权属于米尔电子,EDN电子技术设计仅作转载分享,对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。如有疑问,请联系Demi.xia@aspencore.com
  • 微信扫一扫
    一键转发
  • 最前沿的电子设计资讯
    请关注“电子技术设计微信公众号”
广告
广告
热门推荐
广告
广告
EE直播间
在线研讨会
广告
面包芯语
广告
向右滑动:上一篇 向左滑动:下一篇 我知道了