如何在STM32上运行AI应用

2024-09-29

1569

来源:米尔电子
1.X-Linux-AI概述
X-LINUX-AI 是 STM32 MPU OpenSTLinux 扩展包,面向 STM32MP1 和 STM32MP2 系列微处理器的人工智能。它包含 Linux® AI 框架,以及用于开始一些基本使用案例的应用程序示例。
X-LINUX-AI 中提供的示例包括一系列用于图像分类、对象检测、语义分割和人体姿势估计的优化模型。X-LINUX-AI 中作为预构建二进制文件提供的人脸识别应用程序基于 STMicroelectronics 重新训练的模型。
这些示例依赖于基于 TensorFlow™ Lite 推理引擎、ONNX 运行时、OpenVX™ 或 Google Edge TPU™ 加速器的 STAI_MPU API。它们都支持 Python™ 脚本和 C/C++ 应用程序。本文内容将通过MYD-LD25X来演示这些示例demo。
1.1. 硬件资源
带有烧录好MYiR发布镜像的MYD-LD25X开发板
MY-LVDS070C屏幕或者任意HDMI接口显示器
MY-CAM003M米尔MIPI-CSI摄像头模块
1.2.软件资源
本文内容操作均在MYD-LD25X开发板的调试串口执行,请确保先完成了MYD-LD25X快速使用指南(也就是开发板附带的小册子)上的基本内容,并且需要确保开发板能够联通互联网,提供网络的方式有多种,可以是能够连接互联网的路由器,也可以是Wifi,Wifi具体的连接方式可以查阅发布资料中《MYD-LD25X Linux 软件评估指南》Wifi的STA连接章节。
2.开发板安装X-Linux-AI
本章主要介绍如何在MYD-LD25X开发板上安装X-Linux-AI以及相关demo组件等。
2.1.配置准备环境
1)获取校准参数
如果在MYD-LD25X使用LVDS屏幕,初次使用进入weston需要校准屏幕,校准的自动化脚本操作默认添加在autorun脚本中,如果已经执行过校准操作或者使用HDMI屏幕,则可以跳过该小节内容。
运行autorun.sh脚本执行校准操作:
# autorun.sh
执行后lvds屏幕会出现触摸点位,以此点击后完成校准,之后使用屏幕无需再次校准。
2)关闭HMI
避免出现显示冲突,在MYD-LD25X登录后,执行以下操作关闭mxapp2程序也就是MYiR的HMI界面:
# killall mxapp2
并且将autorun脚本中启动mxapp2的行注释掉,下次启动后就不会自动运行了:
# vi /usr/bin/autorun.sh #!/bin/sh ...省略 sync #/usr/sbin/mxapp2 &
3)更新软件源
执行以下命令更新软件源:
# apt update 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). The detailed content licenses can be found at https://wiki.st.com/stm32mpu/wiki/OpenSTLinux_licenses. Get:1 http://packages.openstlinux.st.com/5.1 mickledore InRelease [5,723 B] Get:2 http://packages.openstlinux.st.com/5.1 mickledore/main arm64 Packages [725 kB] Get:3 http://packages.openstlinux.st.com/5.1 mickledore/updates arm64 Packages [38.2 kB] Get:4 http://packages.openstlinux.st.com/5.1 mickledore/untested arm64 Packages [1,338 kB] Fetched 2,107 kB in 3s (690 kB/s) Reading package lists... Done Building dependency tree... Done 1 package can be upgraded. Run 'apt list --upgradable' to see it.
更新源需要MYD-LD25X连接互联网,请确保网络通畅。执行上述命令时,可能会出现以下问题导致更新错误:
l同步时间问题
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. 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.
出现上述问题的原因是当前开发板时间没有和网络时间成功同步,执行以下操作同步网络时间,首先修改timesyncd.conf配置文件,新增FallbackNTP授时中心网站,按如下所示修改:
# vi /etc/systemd/timesyncd.conf ... [Time] #NTP= FallbackNTP=ntp.ntsc.ac.cn cn.ntp.org.cn ...
然后输入如下命令重启同步时间服务:
# systemctl restart systemd-timesyncd
再次输入date查看时间是否成功更新,根据网络情况不同部分情况可能需要一定时间同步:
# date 2023年 03月 03日 星期五 17:50:37 CST # date 2024年 09月 20日 星期五 15:45:15 CST
lDNS问题
运行apt update后可能会出现以下问题:
# apt update ... Err:1 http://packages.openstlinux.st.com/5.1 mickledore InRelease Temporary failure resolving 'packages.openstlinux.st.com' Reading package lists... Done Building dependency tree... Done All packages are up to date. W: Failed to fetch http://packages.openstlinux.st.com/5.1/dists/mickledore/InRelease Temporary failure resolving 'packages.openstlinux.st.com' W: Some index files failed to download. They have been ignored, or old ones used instead.
该问题需要修改/etc/resolve.conf,在文件中添加如下内容:
# vi /etc/resolv.conf ... nameserver 8.8.8.8 nameserver 8.8.4.4
2.2.安装x-linux-ai-tool
当完成环境配置后,输入以下命令安装x-linux-ai-tool:
# apt-get install -y x-linux-ai-tool
安装完成后,输入以下命令确认是否安装完成:
# x-linux-ai -v X-LINUX-AI version: v5.1.0
关于x-linux-ai工具的使用,可以通过x-linux-ai -h查看或者浏览官方wiki:
2.3.安装 X-LINUX-AI 演示包
要开始使用 X-linux-ai,需要安装 X-linux-ai 演示包,该包提供了针对所用特定目标优化的所有 Ai 框架、应用程序示例、工具和实用程序:
# x-linux-ai -i packagegroup-x-linux-ai-demo
2.4.运行demo启动器
ST的官方demo启动器在MYD-LD25X默认已经移除,为了方便使用X-linu-ai的demo应用,需要重新添加随weston自启动的官方demo展示程序。
进入/usr/local/weston-start-at-startup目录,并新建start_up_demo_launcher.sh脚本,按照如下操作添加对应内容到脚本中:
# cd /usr/local/weston-start-at-startup # vi start_up_demo_launcher.sh #!/bin/sh DEFAULT_DEMO_APPLICATION_GTK=/usr/local/demo/launch-demo-gtk.sh if [ -e /etc/default/demo-launcher ]; then source /etc/default/demo-launcher if [ ! -z "$DEFAULT_DEMO_APPLICATION" ]; then $DEFAULT_DEMO_APPLICATION else $DEFAULT_DEMO_APPLICATION_GTK fi else $DEFAULT_DEMO_APPLICATION_GTK fi
然后添加运行权限给脚本:
# chmod a+x start_up_demo_launcher.sh
最后重启weston服务后,可以看到启动器成功运行:
# systemctl restart weston-graphical-session.service

图2-1. demo启动器-1

图2-2. demo启动器-2
3.运行AI 应用实例
本章节将简单展示上文安装后的几个Demo具体情况,在执行Demo前,需要准备好1.1小节的硬件资源。
以下demo运行都需要使用到MIPI-CSI摄像头,适用于MYD-LD25X开发板的摄像头型号为米尔的MY-CAM003M,在使用该摄像头前需要按照以下命令来初始化配置并事先预览确保摄像头能够正常工作。
进入/etc/myir_test目录,运行myir_camera_play脚本:
# cd /etc/myir_test # ./myir_camera_play
执行后,屏幕上会出现摄像头预览画面,请确保画面显示正常,如果存在问题,请查阅《MYD-LD25X Linux 软件评估指南》中关于MIPI-CSI摄像头的部分检查摄像头连接情况等来排查问题,如有需要请咨询米尔技术支持。
3.1.图像分类
图像分类神经网络模型可以识别图像所代表的对象。它将图像分类为不同的类别。该应用展示了一个计算机视觉的图像分类用例,从相机输入(/dev/videox)捕获帧,并通过OpenVX、TFLite或ONNX框架解析的神经网络模型进行分析。
3.1.1.通过demo启动器运行
可以通过点击demo启动器中的Image Classifiction样例图标来运行该demo,默认情况下,通过2.3小节安装的是OpenVX的应用程序,并且由C/C++和Python两种。
图3-1. 图像分类
3.1.2.通过命令运行
图像分类的C/C++和Python应用程序位于/usr/local/x-linux-ai/image-classification/目录中,可以通过运行程序加-h参数来获取更多帮助信息:
# cd /usr/local/x-linux-ai/image-classification/ # ls -la stai_mpu_image_classification #C++运行程序 stai_mpu_image_classification.py #Python运行程序
为了简化demo的启动,在应用程序目录下有配置好的启动脚本:
使用相机输入启动图像分类demo
launch_bin_image_classification.sh #C++运行程序 launch_python_image_classification.sh #Python运行程序
使用图片输入启动图像分类demo
launch_bin_image_classification_testdata.sh #C++运行程序 launch_python_image_classification_testdata.sh #Python运行程序
3.1.3.demo展示
通过demo启动器启动默认为使用相机输入,和命令启动中使用相机输入的脚本运行结果一致,这里以C/C++程序为例,具体测试情况如下:
# cd /usr/local/x-linux-ai/image-classification # ./launch_bin_image_classification.sh #或者点击demo启动器图标
图3-2. 摄像机输入
运行图片输入的程序脚本前,需要准备识别的图片,这里以一张泰迪熊的图片为例,图片放置目录为/usr/local/x-linux-ai/image-classification/models/mobilenet/testdata,然后运行脚本,这里以C/C++应用程序为例。
# cd /usr/local/x-linux-ai/image-classification/models/mobilenet/testdata # ls -la -rwxr--r-- 1 root root 102821 9 20 23:14 teddy.jpg # cd /usr/local/x-linux-ai/image-classification # ./launch_bin_image_classification_testdata.sh
运行结果如下:

图3-3. 图片输入
3.2.对象检测
该应用展示了一个计算机视觉的对象检测用例,从相机输入(/dev/videox)捕获帧,并通过OpenVX、TFLite或ONNX框架解析的神经网络模型进行分析。使用Gstreamer管道来流式传输相机帧(使用v4l2src),显示预览(使用gtkwaylandsink),并执行神经网络推理(使用appsink)。
3.2.1.通过demo启动器运行
可以通过点击demo启动器中的Object Detection样例图标来运行该demo,默认情况下,通过2.3小节安装的是OpenVX的应用程序,并且由C/C++和Python两种。

图3-4. 对象检测
3.2.2.通过命令运行
对象检测的C/C++和Python应用程序位于/usr/local/x-linux-ai/object-detection/目录中,可以通过运行程序加-h参数来获取更多帮助信息:
# cd /usr/local/x-linux-ai/object-detection/ # ls -la stai_mpu_object_detection #C++运行程序 stai_mpu_object_detection.py #Python运行程序
为了简化demo的启动,在应用程序目录下有配置好的启动脚本:
使用相机输入启动对象检测demo
launch_bin_object_detection.sh #C++运行程序 launch_python_object_detection.sh #Python运行程序
使用图片输入启动对象检测demo
launch_bin_object_detection_testdata.sh #C++运行程序 launch_python_object_detection_testdata.sh #Python运行程序
3.2.3.demo展示
通过demo启动器启动默认为使用相机输入,和命令启动中使用相机输入的脚本运行结果一致,这里以C/C++程序为例,具体测试情况如下:
# cd /usr/local/x-linux-ai/object-detection # ./launch_bin_object_detection.sh #或者点击demo启动器图标

图3-5. 摄像机输入
运行图片输入的程序脚本前,需要准备识别的图片,这里以一张泰迪熊和小猫的图片为例,图片放置目录为:
/usr/local/x-linux-ai/object-detection/models/coco_ssd_mobilenet/testdata
然后运行脚本,这里以C/C++应用程序为例。
# cd /usr/local/x-linux-ai/object-detection/models/coco_ssd_mobilenet/testdata # ls -la -rwxr--r-- 1 root root 102821 9 20 23:14 teddy-and-cat.jpg # cd /usr/local/x-linux-ai/object-detection # ./launch_bin_object_detection_testdata.sh
运行结果如下:

图3-6. 图片输入
3.3.姿势估计
该应用展示了一个计算机视觉的人体姿态估计用例,从相机输入(/dev/videox)捕获帧,并通过OpenVX框架解析的神经网络模型进行分析。该应用使用的模型是从stm32-hotspot ultralytics的GitHub分支下载的ST YoloV8n-pose。
3.3.1.通过demo启动器运行
可以通过点击demo启动器中的Pose Estimation样例图标来运行该demo,默认情况下,通过2.3小节安装的是OpenVX的应用程序,默认为Python应用程序。

图3-7. 姿势估计
3.3.2.通过命令运行
姿势估计的C/C++和Python应用程序位于/usr/local/x-linux-ai/object-detection/目录中,可以通过运行程序加-h参数来获取更多帮助信息:
# cd /usr/local/x-linux-ai/pose-estimation/ # ls -la stai_mpu_pose_estimation.py
为了简化demo的启动,在应用程序目录下有配置好的启动脚本:
使用相机输入启动姿势估计demo
launch_python_pose_estimation.sh
使用图片输入启动姿势估计demo
launch_python_pose_estimation_testdata.sh
3.3.3.demo展示
通过demo启动器启动默认为使用相机输入,和命令启动中使用相机输入的脚本运行结果一致,这里以C/C++程序为例,具体测试情况如下:
# cd /usr/local/x-linux-ai/pose-estimation/ # ./launch_python_pose_estimation.sh #或者点击demo启动器图标

图3-8. 摄像机输入
运行图片输入的程序脚本前,需要准备识别的图片,这里以一张人跑步的图片为例,图片放置目录为:/usr/local/x-linux-ai/pose-estimation/models/yolov8n_pose/testdata,然后运行脚本,这里以C/C++应用程序为例。
# cd /usr/local/x-linux-ai/pose-estimation/models/yolov8n_pose/testdata # ls -la -rwxr--r-- 1 root root 102821 9 20 23:14 person-run.jpg # cd /usr/local/x-linux-ai/pose-estimation # ./launch_python_pose_estimation_testdata.sh
运行结果如下:
图3-9. 图片输入
3.4.语义分割
该应用展示了一个计算机视觉的语义分割用例,从相机输入(/dev/videox)捕获帧,并通过OpenVX框架解析的神经网络模型进行分析。使用Gstreamer管道来流式传输相机帧(使用v4l2src),显示预览(使用gtkwaylandsink),并执行神经网络推理(使用appsink)。推理结果显示在预览中,叠加是使用GtkWidget和cairo实现的。该应用使用的模型是从TensorFlow™ Lite Hub下载的DeepLabV3。
3.4.1.通过demo启动器运行
可以通过点击demo启动器中的Semantic Segmentation样例图标来运行该demo,默认情况下,通过2.3小节安装的是OpenVX的应用程序,默认为Python应用程序。
图3-10. 语义分割
3.4.2.通过命令运行
语义分割的C/C++和Python应用程序位于/usr/local/x-linux-ai/object-detection/目录中,可以通过运行程序加-h参数来获取更多帮助信息:
# cd /usr/local/x-linux-ai/semantic-segmentation/ # ls -la stai_mpu_semantic_segmentation.py
为了简化demo的启动,在应用程序目录下有配置好的启动脚本:
使用相机输入启动语义分割demo
launch_python_semantic_segmentation.sh
使用图片输入启动语义分割demo
launch_python_semantic_segmentation_testdata.sh
3.4.3.demo展示
通过demo启动器启动默认为使用相机输入,和命令启动中使用相机输入的脚本运行结果一致,这里以C/C++程序为例,具体测试情况如下:
# cd /usr/local/x-linux-ai/semantic-segmentation/ # ./launch_python_semantic_segmentation.sh #或者点击demo启动器图标

图3-11. 摄像机输入
运行图片输入的程序脚本前,需要准备识别的图片,这里以一张人正在办公的图片为例,图片放置目录为:
/usr/local/x-linux-ai/semantic-segmentation/models/deeplabv3/testdata
然后运行脚本,这里以C/C++应用程序为例。
# cd /usr/local/x-linux-ai/semantic-segmentation/models/deeplabv3/testdata # ls -la -rwxr--r-- 1 root root 102821 9 20 23:14 person-work.jpg # cd /usr/local/x-linux-ai/semantic-segmentation # ./launch_python_semantic_segmentation_testdata.sh
运行结果如下:

图3-12. 图片输入
4. 参考资料
lX-Linux-AI-Tool
lST 官方Wiki
2025-09-04
6TOPS算力驱动30亿参数LLM,米尔RK3576部署端侧多模态多轮对话
关键词:瑞芯微 RK3576、NPU(神经网络处理器)、端侧小语言模型(SLM)、多模态 LLM、边缘 AI 部署、开发板当 GPT-4o 用毫秒级响应处理图文混合指令、Gemini-1.5-Pro 以百万 token 上下文 “消化” 长文档时,行业的目光正从云端算力竞赛转向一个更实际的命题:如何让智能 “落地”?—— 摆脱网络依赖、保护本地隐私、控制硬件成本,让设备真正具备 “看见并对话” 的
2025-09-04
直播预告 | 恩智浦技术日巡回研讨会:技术盛宴,“云端”开席!
9月9日,恩智浦技术日巡回研讨会将在杭州举办!活动同期,恩智浦携手生态合作伙伴,将对会议中精彩的技术演讲全程进行网络直播,让更多的开发者足不出户,也能够直击活动现场,解锁前沿产品方案,共赴“云端”技术盛宴!直播期间,参与观众互动,还有好礼等你拿~~点击文章顶部卡片,或扫描海报二维码,约起来吧!
2025-08-28
米尔发表演讲,并携瑞萨RZ产品亮相2025 Elexcon深圳电子展
2025年8月26日-28日,Elexcon深圳国际电子展在深圳会展中心(福田)1号馆(展台号:1L30)盛大举行。作为全球电子产业链的重要盛会,展会汇聚创新技术与行业解决方案。米尔电子MYIR携RZ系列核心板、开发板等方案Demo亮相瑞萨嵌入式MCU/MPU生态专区,并发表主题演讲。技术盛宴:瑞萨RZ系列产品矩阵亮相展会上,米尔展示了基于RZ/G2L、RZ/G2UL、RZ/T2H的核心板
2025-08-28
留言领奖!2025 STM32研讨会即将启幕,米尔期待与你共会
2025年9月11日及9月17日,STM32研讨会将走进北京和上海,为大家深入解读STM32的中国战略,并围绕STM32在不同领域的最新产品布局和生态展开主题演讲,包括边缘人工智能、电源能源、无线连接、安全等,深入探讨STM32带来的前沿科技成果。同时,STM32还将携手业内多家合作伙伴,展示STM32在更多领域的解决方案及应用实例。欢迎开发者及工程师莅临现场,与ST专家面对面沟通交流,体验不同产
2025-08-28
Qwen2-VL-3B模型在米尔瑞芯微RK3576开发板NPU多模态部署指导与评测
关键词:瑞芯微 RK3576、NPU(神经网络处理器)、端侧小语言模型(SLM)、多模态 LLM、边缘 AI 部署、开发板、RKLLM随着大语言模型(LLM)技术的快速迭代,从云端集中式部署到端侧分布式运行的趋势日益明显。端侧小型语言模型(SLM)凭借低延迟、高隐私性和离线可用的独特优势,正在智能设备、边缘计算等场景中展现出巨大潜力。瑞芯微 RK3576 开发板作为一款聚焦边缘 AI 的硬件平台,
2025-08-14
12路1080P高清视频流,米尔RK3576开发板重塑视频处理极限
在智能视觉技术不断发展的今天,多路摄像数据的处理与传输已成为众多应用场景的核心需求。从智能安防监控领域的全面覆盖,到工业视觉处理网关的精准检测,再到车载环视融合平台的实时驾驶辅助以及智慧社区AI防控的快速响应,多路摄像数据的处理与传输已成为关键需求,而高效且低延时的解决方案则是实现这些应用的核心。目前多路摄像传输方案往往存在一定局限,接入路数有限,难以满足大规模监控场景的需求,且延迟较高,影响实时
2025-08-14
共建生态,米尔将出席2025安路科技FPGA技术沙龙
在数字化浪潮席卷全球的今天,FPGA技术正成为驱动创新的核心引擎。2025年8月21日,深圳将迎来一场聚焦FPGA技术与产业应用的盛会——2025安路科技FPGA技术沙龙。本次沙龙以“定制未来 共建生态”为主题,汇聚行业专家、企业代表及技术开发者,探讨前沿技术趋势,解锁定制化解决方案,共建开放共赢的FPGA生态圈!米尔作为领先的嵌入式处理器模组厂商,将携安路FPGA核心板和开发板亮相,并发表主题演
2025-08-08
如何在RK3576开发板上板端编译OpenCV并搭建应用
本文将介绍基于米尔电子MYD-LR3576开发板(米尔基于瑞芯微 RK3576开发板)的板端编译OpenCV及环境搭建方案的开发测试。摘自优秀创作者-短笛君RK3576具有如下配置:4× Cortex-A72(大核,主频最高 2.2GHz)4× Cortex-A53(小核,主频最高 1.8GHz)NPU(AI加速单元):独立 NPU,算力典型值6 TOPS(INT8)支持 TensorFlow L
2025-08-08
倒计时!米尔-安路飞龙派创意秀奖品等您领~~
创意秀活动进入倒计时阶段2025年米尔-安路飞龙派FPGA FPSoC创意开发大赛即将于8月15日正式收官(原定于6月15日,已延期到8月15日)。作为国产工业级FPGA领域的赛事,本次活动已吸引多支开发团队参与,基于MYD-YM90X开发板产出了众多创新解决方案。现距截稿仅剩7天,米尔特别提醒尚未提交作品的开发者把握最后几天,分享您的技术创作,申领米尔电子的奖品。活动链接:https://mp
2025-07-25
如何在RK3576开发板上运行TinyMaix :超轻量级推理框架--基于米尔MYD-LR3576开发板
本文将介绍基于米尔电子MYD-LR3576开发平台部署超轻量级推理框架方案:TinyMaix摘自优秀创作者-短笛君TinyMaix 是面向单片机的超轻量级的神经网络推理库,即 TinyML 推理库,可以让你在任意低资源MCU上运行轻量级深度学习模型。关键特性核心代码少于 400行(tm_layers.c+tm_model.c+arch_cpu.h),代码段(.text)少于3KB低内存消耗支持 I