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