Grove Vision AI Module V2 (WiseEye2 HX6538) を使ってみる
株式会社Acculusの笹尾です。Himax社の低消費電力AIプロセッサであるWiseEye2を搭載した、Seeed Studio社のモジュールを試してみたいと思います。
Himax Technologies WiseEye2 AI Processor (WE2)
ARM社のアーキテクチャを採用しており、Cortex-M55 400MHz(Big), Cortex-M55 150MHz(Little) の2コアCPUと、NPUであるEthos-U55、内部メモリとして2MB SRAM, 512KB TCMを備えます。50GOPSの処理能力とのことです。DVFSによる電力管理、Q-SPI、MIPI-CSI2 などもあります。
こちらのページに消費電力値やデモ動画など詳しい情報があります。https://himaxwiseeyeplus.github.io/
M55.Big=U55=400MHz, M55.Little=100MHz, 顔特徴点検出デモを動かした時、35.0mA @ 1.8V。
ニューラルネットワーク実行はTensorflow-Lite Runtime。
デモ動画には、顔特徴点検出、(単一人)人姿勢検出、YoloV8n 物体検出、YoloV8n 複数人姿勢検出、があります。
Seed Studio Grove Vision AI Module V2
Seeed Studio Grove Vision AI v2 Kit
https://www.seeedstudio.com/Grove-Vision-AI-V2-Kit-p-5852.html
Seeed Studio Wiki
https://wiki.seeedstudio.com/grove_vision_ai_v2/
github/Seeed_Grove_Vision_AI_Module_V2
https://github.com/HimaxWiseEyePlus/Seeed_Grove_Vision_AI_Module_V2
Grove — Vision AI Module V2を動かしてみた (Seeed K.K. エンジニアブログ)
https://lab.seeed.co.jp/entry/2024/04/18/120000
前世代のGrove Vision AI Moduleには、Himaxの前世代 HX6537-Aが搭載されていました。https://wiki.seeedstudio.com/Grove-Vision-AI-Module/
今回のAI Module 2ではHX6538を採用し、Tensorflow/Pytorchの実行が可能、Aruduino IDE使用可能、さらにSenseCraftのAIプラットフォームに対応し、コーディング無しでモデル実行を試せるようになっています。
CSIコネクタがありOV5647カメラを接続でき、USB TypeCの他、Seeed社のGroveコネクタがあります。ラズパイなどの制御マイコンからは、このGroveやUSB経由でのUART,I2C,SPI制御の他、Seeed社のXIAOと同じ配置のソケットが付いていて、XIAOを制御マイコンとして使いやすいようになっています。USB-UART変換にCH343、あと外付け16MBフラッシュROMがあります。
[使い方1] SenseCraft AI で始める
SenseCraftはSeed Studio社が開発している、ユーザが早く簡単にサービスを実行できるソフトウェア群で、Data, Edge, AI を対象としています。
ブラウザから以下にアクセスし、Sign Inからユーザ登録してログインします。https://sensecraft.seeed.cc/ai/#/home
モジュールのほうはカメラを接続し、USBケーブルでPCと接続しておきます。
Device Workspace-MCUs/DevBoards で、左上のGrove Vision AI(V2)を選び、Connectを押します。UARTを使うためCOMポートのアクセス許可が求められます。
ModelのDeployから、様々なモデルを選んでモジュールに焼き、Preview画面で実行結果を見ることができます。小型デバイスながら、ブラウザでマウスをポチポチするだけで様々なモデルを実行できるのは便利です。現在、Pet Detection, Gesture Detection, Face Detection, Digital Meter Water, Digital Meter Electricity, Person Classification, Strawberry Detection, Apple Detection, Person Detection (YOLOv8), Person Detection(YOLOv5), Person Detection (Swift YOLO), FOMOなどがあります。
ConfigurationからWiFi設定もできますが、このモジュール自身にはWiFiが無いため無意味のはずです。
[使い方2] XIAOを接続してArduinoでプログラミング
Seeed_Arduino_SSCMA Library によって、ArduinoホストCPUから、SSCMA-Microファームウェアを組み込んだ機器へのアクセスが可能になります。Arduinoスケッチでは最初に以下をincludeします。
#include <Seeed_Arduino_SSCMA.h>
Arduinoホスト(XIAO)からVision Module V2へはI2Cでアクセスし、I2Cアドレスは0x62 = 98 です。この値はSSCMA.begin()の引数addressに指定しますが、デフォルト値がこの値になっています。
SSCMA AI;
void setup()
{
AI.begin();
Serial.begin(9600);
}
手順
- Vision AI Module V2には、SenseCraftを使って何か認識モデルを書いておきます。ここではFace Detectionを焼いておきます。
- Seeed Studio XIAO ESP32S3 にピン(横7pin x2)を付け、Vision AI Module V2に取り付けます。XIAOのみUSBでPCに接続します。
- Arduino IDE ダウンロード(ver 2.3.2, Windows用) https://www.arduino.cc/en/software
- ESP32S3はこちらの手順でセットアップします。
https://wiki.seeedstudio.com/xiao_esp32s3_getting_started/#software-preparation
Board ManagerではArduino ESP32 Boards ver 2.0.13 をインストール。
XIAOをPCとUSBで接続し、Select BoardでESP32S3を選択します (自動だとなぜかESP32C3が選択されていました)。
サンプルプログラムのLチカ:File > Examples > 01.Basics > Blink が実行できることを確認しておきます。 - Library Managerから、「Seeed Arduino SSCMA」をインストールしておきます。依存する「ArduinoJSON」もインストールされます。(説明にはAdd .ZIP Libraryからインストールするようにありますが、この方法で問題ありません)
- Demo1 のプログラムを実行します。
https://wiki.seeedstudio.com/grove_vision_ai_v2_software_support/#demo-1-use-xiao-to-get-recognition-results
Arduino IDEのSerial Monitorで以下のような出力ログが確認できます。perfが前処理/推論/後処理の処理時間、Boxが検出した顔の座標とスコアのようです。
perf: prepocess=2, inference=32, postpocess=0
invoke success
perf: prepocess=2, inference=32, postpocess=1
Box[0] target=0, score=38, x=145, y=145, w=97, h=138
invoke success
XIAOではなく他のマイコンでも、I2CやUARTでVision AI Module V2と接続し、SSCMAに沿って通信すれば、処理結果を受け取れることになります。
UARTやI2Cでの通信の例は以下にもあります。
XIAOと連携した具体的なデモはこちらに紹介があります。
https://wiki.seeedstudio.com/grove_vision_ai_v2_demo/
1. 顔検出してサーボ制御して扇風機の向け制御
2. 顔認識してPCを自動ロック/アンロック
3. 手を検出してマウス移動操作、ジェスチャーによるクリック操作
HACS (Home Assistant Community Store) とMQTTを使ったホームアシスタントのサンプルもあります。
https://wiki.seeedstudio.com/connect_vision_ai_v2_to_ha/
[使い方3] Vision AI Module V2ファームをビルド (Himax SDKプログラミング)
Ubuntu PCで以下の手順でビルドします。
# ツールチェイン ダウンロード
wget https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x86_64-arm-none-eabi.tar.xz
# 展開してPATHに追加
tar -xvf arm-gnu-toolchain-13.2.rel1-x86_64-arm-none-eabi.tar.xz
export PATH="$PWD/arm-gnu-toolchain-13.2.Rel1-x86_64-arm-none-eabi/bin/:$PATH"
# git からソースコード取得
git clone https://github.com/HimaxWiseEyePlus/Seeed_Grove_Vision_AI_Module_V2
cd Seeed_Grove_Vision_AI_Module_V2
# ビルド
cd EPII_CM55M_APP_S
make clean
make -j8
elfファイルが出力されます。
./obj_epii_evb_icv30_bdv10/gnu_epii_evb_WLCSP65/EPII_CM55M_gnu_epii_evb_WLCSP65_s.elf
Memory region Used Size Region Size %age Used
CM55M_S_APP_ROM: 52792 B 256 KB 20.14%
CM55M_S_APP_DATA: 28000 B 256 KB 10.68%
CM55M_S_SRAM: 966048 B 1924 KB 49.03%
arm-none-eabi-size obj_epii_evb_icv30_bdv10/gnu_epii_evb_WLCSP65/EPII_CM55M_gnu_epii_evb_WLCSP65_s.elf
text data bss dec hex filename
398952 1244 646616 1046812 ff91c obj_epii_evb_icv30_bdv10/gnu_epii_evb_WLCSP65/EPII_CM55M_gnu_epii_evb_WLCSP65_s.elf
elfファイルから書き込むイメージファイル output.img を生成します。
cd ../we2_image_gen_local/
cp ../EPII_CM55M_APP_S/obj_epii_evb_icv30_bdv10/gnu_epii_evb_WLCSP65/EPII_CM55M_gnu_epii_evb_WLCSP65_s.elf input_case1_secboot/
./we2_local_image_gen project_case1_blp_wlcsp.json
実機への書き込みはPythonでも可能とのことで試してみます。
# pythonモジュールをインストール
pip install -r xmodem/requirements.txt
# AI Module V2 をUSB接続、/dev/ttyACM0 があることを確認。
# permissionを与える、[USERNAME]はLinuxユーザ名
sudo setfacl -m u:[USERNAME]:rw /dev/ttyUSB0
# output.img 書き込み
python xmodem/xmodem_send.py --port=/dev/ttyACM0 --baudrate=921600 --protocol=xmodem --file=we2_image_gen_local/output_case1_sec_wlcsp/output.img
# 書き込み終わったら、実機のRSTボタンを押してリセット
リセットすると、人を識別しているようなデモの出力結果が表示されます。
b'EVT event = 10'
b'SENSORDPLIB_STATUS_XDMA_FRAME_READY 2472'
b'write frame result 0, data size=13928,addr=0x340e04e0'
b'invoke pass'
b'person_score:97'
b'EVT event = 10'
b'SENSORDPLIB_STATUS_XDMA_FRAME_READY 2473'
b'write frame result 0, data size=14376,addr=0x340e04e0'
b'invoke pass'
b'person_score:86'
なお、アプリの種類はmakefileの中のAPP_TYPEで選択できるようになっています。これは EPII_CM55M_APP_S/app/scenario_app 内の各ディレクトリに対応しているようです。
# allon_sensor_tflm
# allon_sensor_tflm_cmsis_nn (LIB_CMSIS_NN_ENALBE = 1)
# allon_sensor_tflm_fatfs
# allon_sensor_tflm_freertos
# fatfs_mmc_spi
# hello_world_freertos_tz_s_only
# tflm_fd_fm
# tflm_yolov8_od
# tflm_yolov8_pose
# pdm_record
# imu_read
# hello_world_cmsis_dsp
##
APP_TYPE = allon_sensor_tflm
顔検出、YOLOv8などの.tfliteファイルがあります。
https://github.com/HimaxWiseEyePlus/Seeed_Grove_Vision_AI_Module_V2/tree/main/model_zoo
Himax SDKの説明は以下に少しあります。
最後に
当社では、HX6538のような小型・低消費電力のAIチップを多数評価しています。AIチップを用いたエッジAIカメラも発表しています。お気軽にご連絡ください。 株式会社Acculus 笹尾
https://acculus.jp/mini-watt-vision