Grove Vision AI V2 影像處理模組開箱測評
摘要
今天教大家快速上手 Grove Vision AI V2 影像處理模組,我們將一起探討如何利用 SenseCraft 部署 AI 模型,和如何透過 XIAO ESP32C3 呼叫這些模型,輕鬆實現智慧視覺功能!
原文連結:
FreakStudio的部落格
往期推薦:
學嵌入式的你,還不會物件導向??!
全網最適合入門的物件導向程式設計教程:00 物件導向設計方法導論
全網最適合入門的物件導向程式設計教程:01 物件導向程式設計的基本概念
全網最適合入門的物件導向程式設計教程:02 類和物件的 Python 實現-使用 Python 建立類
全網最適合入門的物件導向程式設計教程:03 類和物件的 Python 實現-為自定義類新增屬性
全網最適合入門的物件導向程式設計教程:04 類和物件的Python實現-為自定義類新增方法
全網最適合入門的物件導向程式設計教程:05 類和物件的Python實現-PyCharm程式碼標籤
全網最適合入門的物件導向程式設計教程:06 類和物件的Python實現-自定義類的資料封裝
全網最適合入門的物件導向程式設計教程:07 類和物件的Python實現-型別註解
全網最適合入門的物件導向程式設計教程:08 類和物件的Python實現-@property裝飾器
全網最適合入門的物件導向程式設計教程:09 類和物件的Python實現-類之間的關係
全網最適合入門的物件導向程式設計教程:10 類和物件的Python實現-類的繼承和里氏替換原則
全網最適合入門的物件導向程式設計教程:11 類和物件的Python實現-子類呼叫父類方法
全網最適合入門的物件導向程式設計教程:12 類和物件的Python實現-Python使用logging模組輸出程式執行日誌
全網最適合入門的物件導向程式設計教程:13 類和物件的Python實現-視覺化閱讀程式碼神器Sourcetrail的安裝使用
全網最適合入門的物件導向程式設計教程:全網最適合入門的物件導向程式設計教程:14 類和物件的Python實現-類的靜態方法和類方法
全網最適合入門的物件導向程式設計教程:15 類和物件的 Python 實現-__slots__魔法方法
全網最適合入門的物件導向程式設計教程:16 類和物件的Python實現-多型、方法重寫與開閉原則
全網最適合入門的物件導向程式設計教程:17 類和物件的Python實現-鴨子型別與“file-like object“
全網最適合入門的物件導向程式設計教程:18 類和物件的Python實現-多重繼承與PyQtGraph串列埠資料繪製曲線圖
全網最適合入門的物件導向程式設計教程:19 類和物件的 Python 實現-使用 PyCharm 自動生成檔案註釋和函式註釋
全網最適合入門的物件導向程式設計教程:20 類和物件的Python實現-組合關係的實現與CSV檔案儲存
全網最適合入門的物件導向程式設計教程:21 類和物件的Python實現-多檔案的組織:模組module和包package
全網最適合入門的物件導向程式設計教程:22 類和物件的Python實現-異常和語法錯誤
全網最適合入門的物件導向程式設計教程:23 類和物件的Python實現-丟擲異常
全網最適合入門的物件導向程式設計教程:24 類和物件的Python實現-異常的捕獲與處理
全網最適合入門的物件導向程式設計教程:25 類和物件的Python實現-Python判斷輸入資料型別
全網最適合入門的物件導向程式設計教程:26 類和物件的Python實現-上下文管理器和with語句
全網最適合入門的物件導向程式設計教程:27 類和物件的Python實現-Python中異常層級與自定義異常類的實現
全網最適合入門的物件導向程式設計教程:28 類和物件的Python實現-Python程式設計原則、哲學和規範大彙總
全網最適合入門的物件導向程式設計教程:29 類和物件的Python實現-斷言與防禦性程式設計和help函式的使用
全網最適合入門的物件導向程式設計教程:30 Python的內建資料型別-object根類
全網最適合入門的物件導向程式設計教程:31 Python的內建資料型別-物件Object和型別Type
全網最適合入門的物件導向程式設計教程:32 Python的內建資料型別-類Class和例項Instance
全網最適合入門的物件導向程式設計教程:33 Python的內建資料型別-物件Object和型別Type的關係
全網最適合入門的物件導向程式設計教程:34 Python的內建資料型別-Python常用複合資料型別:元組和命名元組
全網最適合入門的物件導向程式設計教程:35 Python的內建資料型別-文件字串和__doc__屬性
全網最適合入門的物件導向程式設計教程:36 Python的內建資料型別-字典
更多精彩內容可看:
給你的 Python 加加速:一文速通 Python 平行計算
一文搞懂 CM3 微控制器除錯原理
肝了半個月,嵌入式技術棧大彙總出爐
電子計算機類比賽的“武林秘籍”
一個MicroPython的開源專案集錦:awesome-micropython,包含各個方面的Micropython工具庫
Avnet ZUBoard 1CG開發板—深度學習新選擇
正文部分
1.硬體裝置介紹
首先,讓我們快速瞭解一下我們即將使用的硬體裝置。
我們使用的視覺處理模組為 Grove Vision AI V2 影像處理模組,具有如下特點:
Grove Vision AI 模組會本地處理影像並執行模型推理,然後將結果透過 IIC 或 UART 傳送到 XIAO。XIAO 需要接收並解析來自 Grove Vision AI 的資料,根據這些結果執行相應的操作,如控制 LED、驅動電機或觸發其他外設。這使得 XIAO 成為系統的執行單元,響應 Grove Vision AI 傳遞的檢測結果。
2.SenseCraft 部署模型
2.1 SenseCraft 平臺簡介
Seeed SenseCraft Model Assistant(或簡稱 SSCMA)是一個專注於嵌入式 AI 的開源專案。針對真實場景最佳化了 OpenMMLab 的優秀演算法,使實現更加人性化,在嵌入式裝置上實現更快、更準確的推理。
目前支援以下方向的演算法:
SenseCraft AI 提供了無縫且使用者友好的體驗,可以幫助使用者輕鬆地將大量公開可用的 AI 模型部署到他們的邊緣裝置上。
2.2 部署流程
使用 USB 連結模組和電腦,然後在 SenseCraft 網站上進行部署:
2.3 預覽模型識別效果
2.4 SenseCraft 平臺優勢
- 降低 AI 入門門檻:SenseCraft 的平臺設計簡化了 AI 模型開發的複雜性,使得初學者也能快速上手
- 廣泛的硬體相容性:支援多種 Seeed 硬體產品,使用者可以根據專案需求選擇適合的裝置
- 邊緣計算:本地推理能力減少了對網路的依賴,提高了應用的實時性和安全性
2.5 石頭剪刀布分類模型測試
上程式碼
#include <Seeed_Arduino_SSCMA.h>
SSCMA AI;
void setup()
{
AI.begin();
Serial.begin(9600);
}
void loop()
{
if (!AI.invoke())
{
Serial.println("invoke success");
Serial.print("perf: prepocess=");
Serial.print(AI.perf().prepocess);
Serial.print(", inference=");
Serial.print(AI.perf().inference);
Serial.print(", postpocess=");
Serial.println(AI.perf().postprocess);
for (int i = 0; i < AI.boxes().size(); i++)
{
Serial.print("Box[");
Serial.print(i);
Serial.print("] target=");
Serial.print(AI.boxes()[i].target);
Serial.print(", score=");
Serial.print(AI.boxes()[i].score);
Serial.print(", x=");
Serial.print(AI.boxes()[i].x);
Serial.print(", y=");
Serial.print(AI.boxes()[i].y);
Serial.print(", w=");
Serial.print(AI.boxes()[i].w);
Serial.print(", h=");
Serial.println(AI.boxes()[i].h);
}
for (int i = 0; i < AI.classes().size(); i++)
{
Serial.print("Class[");
Serial.print(i);
Serial.print("] target=");
Serial.print(AI.classes()[i].target);
Serial.print(", score=");
Serial.println(AI.classes()[i].score);
}
for (int i = 0; i < AI.points().size(); i++)
{
Serial.print("Point[");
Serial.print(i);
Serial.print("] target=");
Serial.print(AI.points()[i].target);
Serial.print(", score=");
Serial.print(AI.points()[i].score);
Serial.print(", x=");
Serial.print(AI.points()[i].x);
Serial.print(", y=");
Serial.println(AI.points()[i].y);
}
}
}
接下來我們對程式碼進行簡單分析:
-
先匯入庫函式 <Seeed_Arduino_SSCMA.h>
- SSCAM 庫的主要目的是處理 Grove Vision AI 的資料流,而不涉及模型推理或影像處理。
-
初始化部分:
SSCMA AI;
:建立一個名為AI
的 SSCMA 物件,用於與 Grove Vision AI 進行通訊。void setup()
:在setup()
函式中,首先使用AI.begin()
初始化 Grove Vision AI 模組。然後,透過Serial.begin(9600)
初始化串列埠通訊,以便將結果輸出到串列埠監視器。
-
主迴圈:
void loop()
:loop()
函式會反覆執行,主要用來不斷呼叫 Grove Vision AI 進行推理,並輸出結果。if (!AI.invoke())
:呼叫AI.invoke()
進行推理,如果推理成功(即invoke()
返回false
),則開始處理推理結果。- 效能資訊輸出:
AI.perf()
:獲取推理過程的效能資訊,包括預處理(prepocess
)、推理(inference
)和後處理(postprocess
)的時間。
- 檢測框輸出:
AI.boxes()
:獲取推理結果中的所有檢測框,並迴圈輸出每個檢測框的資訊,包括目標、得分、位置(x, y)和大小(w, h)。
- 分類結果輸出:
AI.classes()
:獲取推理結果中的所有分類資訊,並迴圈輸出每個分類的資訊,包括目標和得分。
- 關鍵點輸出:
AI.points()
:獲取推理結果中的所有關鍵點資訊,並迴圈輸出每個關鍵點的資訊,包括目標、得分和位置(x, y)。
2.6 串列埠輸出訊息解析
invoke success
:這行表明 AI.invoke()
方法呼叫成功,即影像識別過程已經完成。
perf: prepocess=7, inference=80, postpocess=0
:這行顯示了識別過程中的三個關鍵效能指標:
Box[0] target=1, score=81, x=209, y=161, w=63, h=114
:這行表示檢測到的第一個邊界框(box)的資訊:
網站連結:
-
SenseCraft 平臺:https://sensecraft.seeed.cc/ai/#/model
-
官方網址:https://wiki.seeedstudio.com/cn/grove_vision_ai_v2/