X-LINUX-AI 是 STM32 MPU OpenSTLinux 擴展包,面向 STM32MP1 和 STM32MP2 系列微處理器的人工智能。它包含 Linux AI 框架,以及用于開(kāi)始一些基本使用案例的應用程序示例。
X-LINUX-AI 中提供的示例包括一系列用于圖像分類(lèi)、對象檢測、語(yǔ)義分割和人體姿勢估計的優(yōu)化模型。X-LINUX-AI 中作為預構建二進(jìn)制文件提供的人臉識別應用程序基于 STMicroelectronics 重新訓練的模型。
這些示例依賴(lài)于基于 TensorFlow Lite 推理引擎、ONNX 運行時(shí)、OpenVX 或 Google Edge TPU 加速器的 STAI_MPU API。它們都支持 Python 腳本和 C/C++ 應用程序。本文內容將通過(guò)MYD-LD25X來(lái)演示這些示例demo。
1.1.硬件資源
帶有燒錄好MYiR發(fā)布鏡像的MYD-LD25X開(kāi)發(fā)板
MY-CAM003M米爾MIPI-CSI攝像頭模塊
1.2.軟件資源
本文內容操作均在MYD-LD25X開(kāi)發(fā)板的調試串口執行,請確保先完成了MYD-LD25X快速使用指南(也就是開(kāi)發(fā)板附帶的小冊子)上的基本內容,并且需要確保開(kāi)發(fā)板能夠聯(lián)通互聯(lián)網(wǎng),提供網(wǎng)絡(luò )的方式有多種,可以是能夠連接互聯(lián)網(wǎng)的路由器,也可以是Wifi,Wifi具體的連接方式可以查閱發(fā)布資料中《MYD-LD25X Linux 軟件評估指南》Wifi的STA連接章節。
2.開(kāi)發(fā)板安裝X-Linux-AI
本章主要介紹如何在MYD-LD25X開(kāi)發(fā)板上安裝X-Linux-AI以及相關(guān)demo組件等。
2.1.配置準備環(huán)境
1)獲取校準參數
如果在MYD-LD25X使用LVDS屏幕,初次使用進(jìn)入weston需要校準屏幕,校準的自動(dòng)化腳本操作默認添加在autorun腳本中,如果已經(jīng)執行過(guò)校準操作或者使用HDMI屏幕,則可以跳過(guò)該小節內容。
運行autorun.sh腳本執行校準操作:
#autorun.sh
執行后lvds屏幕會(huì )出現觸摸點(diǎn)位,以此點(diǎn)擊后完成校準,之后使用屏幕無(wú)需再次校準。
2)關(guān)閉HMI
避免出現顯示沖突,在MYD-LD25X登錄后,執行以下操作關(guān)閉mxapp2程序也就是MYiR的HMI界面:
# killall mxapp2
并且將autorun腳本中啟動(dòng)mxapp2的行注釋掉,下次啟動(dòng)后就不會(huì )自動(dòng)運行了:
# 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連接互聯(lián)網(wǎng),請確保網(wǎng)絡(luò )通暢。執行上述命令時(shí),可能會(huì )出現以下問(wèn)題導致更新錯誤:
l同步時(shí)間問(wèn)題
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.
出現上述問(wèn)題的原因是當前開(kāi)發(fā)板時(shí)間沒(méi)有和網(wǎng)絡(luò )時(shí)間成功同步,執行以下操作同步網(wǎng)絡(luò )時(shí)間,首先修改timesyncd.conf配置文件,新增FallbackNTP授時(shí)中心網(wǎng)站,按如下所示修改:
# vi /etc/systemd/timesyncd.conf...[Time]#NTP=FallbackNTP=ntp.ntsc.ac.cn cn.ntp.org.cn...
然后輸入如下命令重啟同步時(shí)間服務(wù):
# systemctl restart systemd-timesyncd
再次輸入date查看時(shí)間是否成功更新,根據網(wǎng)絡(luò )情況不同部分情況可能需要一定時(shí)間同步:
# date2023年 03月 03日 星期五 17:50:37 CST# date2024年 09月 20日 星期五 15:45:15 CST
lDNS問(wèn)題
運行apt update后可能會(huì )出現以下問(wèn)題:
# 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.
該問(wèn)題需要修改/etc/resolve.conf,在文件中添加如下內容:
# vi /etc/resolv.conf...nameserver 8.8.8.8nameserver 8.8.4.4
2.2.安裝x-linux-ai-tool
當完成環(huán)境配置后,輸入以下命令安裝x-linux-ai-tool:
# apt-get install -y x-linux-ai-tool
安裝完成后,輸入以下命令確認是否安裝完成:
# x-linux-ai -vX-LINUX-AI version: v5.1.0
關(guān)于x-linux-ai工具的使用,可以通過(guò)x-linux-ai -h查看或者瀏覽官方wiki:
X-LINUX-AI Tool - stm32mpu
2.3.安裝 X-LINUX-AI演示包
要開(kāi)始使用 X-linux-ai,需要安裝 X-linux-ai 演示包,該包提供了針對所用特定目標優(yōu)化的所有 Ai 框架、應用程序示例、工具和實(shí)用程序:
# x-linux-ai -i packagegroup-x-linux-ai-demo
2.4.運行demo啟動(dòng)器
ST的官方demo啟動(dòng)器在MYD-LD25X默認已經(jīng)移除,為了方便使用X-linu-ai的demo應用,需要重新添加隨weston自啟動(dòng)的官方demo展示程序。
進(jìn)入/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服務(wù)后,可以看到啟動(dòng)器成功運行:
# systemctl restart weston-graphical-session.service
圖2-1. demo啟動(dòng)器-1
圖2-2. demo啟動(dòng)器-2
3.運行AI 應用實(shí)例
本章節將簡(jiǎn)單展示上文安裝后的幾個(gè)Demo具體情況,在執行Demo前,需要準備好1.1小節的硬件資源。
以下demo運行都需要使用到MIPI-CSI攝像頭,適用于MYD-LD25X開(kāi)發(fā)板的攝像頭型號為米爾的MY-CAM003M,在使用該攝像頭前需要按照以下命令來(lái)初始化配置并事先預覽確保攝像頭能夠正常工作。
進(jìn)入/etc/myir_test目錄,運行myir_camera_play腳本:
# cd /etc/myir_test# ./myir_camera_play
執行后,屏幕上會(huì )出現攝像頭預覽畫(huà)面,請確保畫(huà)面顯示正常,如果存在問(wèn)題,請查閱《MYD-LD25X Linux 軟件評估指南》中關(guān)于MIPI-CSI攝像頭的部分檢查攝像頭連接情況等來(lái)排查問(wèn)題,如有需要請咨詢(xún)米爾技術(shù)支持。
3.1.圖像分類(lèi)
圖像分類(lèi)神經(jīng)網(wǎng)絡(luò )模型可以識別圖像所代表的對象。它將圖像分類(lèi)為不同的類(lèi)別。該應用展示了一個(gè)計算機視覺(jué)的圖像分類(lèi)用例,從相機輸入(/dev/videox)捕獲幀,并通過(guò)OpenVX、TFLite或ONNX框架解析的神經(jīng)網(wǎng)絡(luò )模型進(jìn)行分析。
3.1.1.通過(guò)demo啟動(dòng)器運行
可以通過(guò)點(diǎn)擊demo啟動(dòng)器中的Image Classifiction樣例圖標來(lái)運行該demo,默認情況下,通過(guò)2.3小節安裝的是OpenVX的應用程序,并且由C/C++和Python兩種。
圖3-1. 圖像分類(lèi)
3.1.2.通過(guò)命令運行
圖像分類(lèi)的C/C++和Python應用程序位于/usr/local/x-linux-ai/image-classification/目錄中,可以通過(guò)運行程序加-h參數來(lái)獲取更多幫助信息:
# cd /usr/local/x-linux-ai/image-classification/# ls -lastai_mpu_image_classification #C++運行程序stai_mpu_image_classification.py #Python運行程序
為了簡(jiǎn)化demo的啟動(dòng),在應用程序目錄下有配置好的啟動(dòng)腳本:
使用相機輸入啟動(dòng)圖像分類(lèi)demo
launch_bin_image_classification.sh #C++運行程序launch_python_image_classification.sh #Python運行程序
使用圖片輸入啟動(dòng)圖像分類(lèi)demo
launch_bin_image_classification_testdata.sh #C++運行程序launch_python_image_classification_testdata.sh #Python運行程序
3.1.3.demo展示
通過(guò)demo啟動(dòng)器啟動(dòng)默認為使用相機輸入,和命令啟動(dòng)中使用相機輸入的腳本運行結果一致,這里以C/C++程序為例,具體測試情況如下:
# cd /usr/local/x-linux-ai/image-classification# ./launch_bin_image_classification.sh #或者點(diǎn)擊demo啟動(dòng)器圖標
圖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.對象檢測
該應用展示了一個(gè)計算機視覺(jué)的對象檢測用例,從相機輸入(/dev/videox)捕獲幀,并通過(guò)OpenVX、TFLite或ONNX框架解析的神經(jīng)網(wǎng)絡(luò )模型進(jìn)行分析。使用Gstreamer管道來(lái)流式傳輸相機幀(使用v4l2src),顯示預覽(使用gtkwaylandsink),并執行神經(jīng)網(wǎng)絡(luò )推理(使用appsink)。
3.2.1.通過(guò)demo啟動(dòng)器運行
可以通過(guò)點(diǎn)擊demo啟動(dòng)器中的Object Detection樣例圖標來(lái)運行該demo,默認情況下,通過(guò)2.3小節安裝的是OpenVX的應用程序,并且由C/C++和Python兩種。
圖3-4. 對象檢測
3.2.2.通過(guò)命令運行
對象檢測的C/C++和Python應用程序位于/usr/local/x-linux-ai/object-detection/目錄中,可以通過(guò)運行程序加-h參數來(lái)獲取更多幫助信息:
# cd /usr/local/x-linux-ai/object-detection/# ls -lastai_mpu_object_detection #C++運行程序stai_mpu_object_detection.py #Python運行程序
為了簡(jiǎn)化demo的啟動(dòng),在應用程序目錄下有配置好的啟動(dòng)腳本:
使用相機輸入啟動(dòng)對象檢測demo
launch_bin_object_detection.sh #C++運行程序launch_python_object_detection.sh #Python運行程序
使用圖片輸入啟動(dòng)對象檢測demo
launch_bin_object_detection_testdata.sh #C++運行程序launch_python_object_detection_testdata.sh #Python運行程序
3.2.3.demo展示
通過(guò)demo啟動(dòng)器啟動(dòng)默認為使用相機輸入,和命令啟動(dòng)中使用相機輸入的腳本運行結果一致,這里以C/C++程序為例,具體測試情況如下:
# cd /usr/local/x-linux-ai/object-detection# ./launch_bin_object_detection.sh #或者點(diǎn)擊demo啟動(dòng)器圖標
圖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.姿勢估計
該應用展示了一個(gè)計算機視覺(jué)的人體姿態(tài)估計用例,從相機輸入(/dev/videox)捕獲幀,并通過(guò)OpenVX框架解析的神經(jīng)網(wǎng)絡(luò )模型進(jìn)行分析。該應用使用的模型是從stm32-hotspot ultralytics的GitHub分支下載的ST YoloV8n-pose。
3.3.1.通過(guò)demo啟動(dòng)器運行
可以通過(guò)點(diǎn)擊demo啟動(dòng)器中的PoseEstimation樣例圖標來(lái)運行該demo,默認情況下,通過(guò)2.3小節安裝的是OpenVX的應用程序,默認為Python應用程序。
圖3-7. 姿勢估計
3.3.2.通過(guò)命令運行
姿勢估計的C/C++和Python應用程序位于/usr/local/x-linux-ai/object-detection/目錄中,可以通過(guò)運行程序加-h參數來(lái)獲取更多幫助信息:
# cd /usr/local/x-linux-ai/pose-estimation/# ls -lastai_mpu_pose_estimation.py
為了簡(jiǎn)化demo的啟動(dòng),在應用程序目錄下有配置好的啟動(dòng)腳本:
使用相機輸入啟動(dòng)姿勢估計demo
launch_python_pose_estimation.sh
使用圖片輸入啟動(dòng)姿勢估計demo
launch_python_pose_estimation_testdata.sh
3.3.3.demo展示
通過(guò)demo啟動(dòng)器啟動(dòng)默認為使用相機輸入,和命令啟動(dòng)中使用相機輸入的腳本運行結果一致,這里以C/C++程序為例,具體測試情況如下:
# cd /usr/local/x-linux-ai/pose-estimation/# ./launch_python_pose_estimation.sh #或者點(diǎn)擊demo啟動(dòng)器圖標
圖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.語(yǔ)義分割
該應用展示了一個(gè)計算機視覺(jué)的語(yǔ)義分割用例,從相機輸入(/dev/videox)捕獲幀,并通過(guò)OpenVX框架解析的神經(jīng)網(wǎng)絡(luò )模型進(jìn)行分析。使用Gstreamer管道來(lái)流式傳輸相機幀(使用v4l2src),顯示預覽(使用gtkwaylandsink),并執行神經(jīng)網(wǎng)絡(luò )推理(使用appsink)。推理結果顯示在預覽中,疊加是使用GtkWidget和cairo實(shí)現的。該應用使用的模型是從TensorFlow Lite Hub下載的DeepLabV3。
3.4.1.通過(guò)demo啟動(dòng)器運行
可以通過(guò)點(diǎn)擊demo啟動(dòng)器中的Semantic Segmentation樣例圖標來(lái)運行該demo,默認情況下,通過(guò)2.3小節安裝的是OpenVX的應用程序,默認為Python應用程序。
圖3-10. 語(yǔ)義分割
3.4.2.通過(guò)命令運行
語(yǔ)義分割的C/C++和Python應用程序位于/usr/local/x-linux-ai/object-detection/目錄中,可以通過(guò)運行程序加-h參數來(lái)獲取更多幫助信息:
# cd /usr/local/x-linux-ai/semantic-segmentation/# ls -lastai_mpu_semantic_segmentation.py
為了簡(jiǎn)化demo的啟動(dòng),在應用程序目錄下有配置好的啟動(dòng)腳本:
使用相機輸入啟動(dòng)語(yǔ)義分割demo
launch_python_semantic_segmentation.sh
使用圖片輸入啟動(dòng)語(yǔ)義分割demo
launch_python_semantic_segmentation_testdata.sh
3.4.3.demo展示
通過(guò)demo啟動(dòng)器啟動(dòng)默認為使用相機輸入,和命令啟動(dòng)中使用相機輸入的腳本運行結果一致,這里以C/C++程序為例,具體測試情況如下:
# cd /usr/local/x-linux-ai/semantic-segmentation/# ./launch_python_semantic_segmentation.sh #或者點(diǎn)擊demo啟動(dòng)器圖標
圖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
+關(guān)注
關(guān)注
2262文章
10840瀏覽量
353287 -
AI
+關(guān)注
關(guān)注
87文章
29175瀏覽量
267317 -
開(kāi)發(fā)板
+關(guān)注
關(guān)注
25文章
4809瀏覽量
96605
發(fā)布評論請先 登錄
相關(guān)推薦
評論