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-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 updateThe 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... DoneBuilding dependency tree... Done1 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查看時間是否成功更新,根據網絡情況不同部分情況可能需要一定時間同步:
# date2023年 03月 03日 星期五 17:50:37 CST# date2024年 09月 20日 星期五 15:45:15 CST
lDNS問題
運行apt update后可能會出現以下問題:
# apt update...Err:1 http://packages.openstlinux.st.com/5.1 mickledore InReleaseTemporary failure resolving 'packages.openstlinux.st.com'Reading package lists... DoneBuilding dependency tree... DoneAll 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.8nameserver 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 -vX-LINUX-AI version: v5.1.0
關于x-linux-ai工具的使用,可以通過x-linux-ai -h查看或者瀏覽官方wiki:
X-LINUX-AI Tool - stm32mpu
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/shDEFAULT_DEMO_APPLICATION_GTK=/usr/local/demo/launch-demo-gtk.shif [ -e /etc/default/demo-launcher ]; thensource /etc/default/demo-launcherif [ ! -z "$DEFAULT_DEMO_APPLICATION" ]; then$DEFAULT_DEMO_APPLICATIONelse$DEFAULT_DEMO_APPLICATION_GTKfielse$DEFAULT_DEMO_APPLICATION_GTKfi
然后添加運行權限給腳本:
# 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 -lastai_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 -lastai_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啟動器中的PoseEstimation樣例圖標來運行該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 -lastai_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 -lastai_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. 圖片輸入
-
STM32
+關注
關注
2272文章
10923瀏覽量
357549 -
AI
+關注
關注
87文章
31513瀏覽量
270323 -
開發板
+關注
關注
25文章
5121瀏覽量
98189
發布評論請先 登錄
相關推薦
如何在RK3399上搭建Tengine AI推理框架呢
如何在基于Arm的設備上運行游戲AI呢
如何在STM32上開始使用ML &AI的選項?
海思AI芯片(Hi3519A/3559A)學習(四)如何在3519A板子上運行sample code
![海思<b class='flag-5'>AI</b>芯片(Hi3519A/3559A)學習(四)如<b class='flag-5'>何在</b>3519A板子<b class='flag-5'>上</b><b class='flag-5'>運行</b>sample code](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
如何在KV260上快速體驗Vitsi AI圖像分類示例程序
![如<b class='flag-5'>何在</b>KV260<b class='flag-5'>上</b>快速體驗Vitsi <b class='flag-5'>AI</b>圖像分類示例程序](https://file1.elecfans.com/web2/M00/A2/91/wKgZomT_xzaANnPBAAAYl_pGrV4041.jpg)
如何在OpenMV生態系統中集成STM32Cube.AI生成的代碼
![如<b class='flag-5'>何在</b>OpenMV生態系統中集成<b class='flag-5'>STM32Cube.AI</b>生成的代碼](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論