はじめに
オクタコア(Arm® Cortex-A78 x4 + A55 x4)の MediaTek® Genio 1200 を搭載した
ADLINK社 I-Pi SMARC 1200 で Yocto Linux の環境を構築してみました。
環境構築するにあたり、ボードをフラッシュしたり制御するために MediaTek社が提供している AIoT ツールを使用しました。
その手順をまとめてみましたのでぜひお試しください。
<今回使用した主な製品>
-
I-Pi SMARC 1200 (I-Pi SMARC Plusキャリア、ADLINK社 SMARC LEC-MTK-I1200 モジュール, 4GB LPDDR4X, 64GB UFSストレージ)
MediaTek® Genio 1200 プラットフォームベースのI-Pi SMARC開発キットです
その他に今回用意するもの:
- Linux Host PC ( SMARC の UFS ストレージへの Yocto イメージの書き込みとして使用)
- HDMI ケーブル・モニター
- USB マウス・キーボード
- LAN ケーブル(インターネットへの接続に使用)
- ウェブカメラ(AIデモに使用)
参考:
- Installing AIoT Tools on Linux (I-Pi SMARC 1200 wiki)
- Boot From UFS (I-Pi SMARC 1200 wiki)
- AIoT tools manual
主な手順としては、以下のとおりです。
- Linux Host PC の書き込み環境のセットアップ (AIoT ツール)
- ハードウェアのセットアップ
- Host PC から SMARC 開発キットへの Yocto イメージの書き込みおよび Yocto の起動
- ( おまけ ) TensorFlow Lite の量子化モデルを使用した Object Detection デモ
1.Linux Host PC の書き込み環境のセットアップ (AIoT Tools)
STEP 1-1 : Git と Pip のインストール
Host PC に Ubuntu 22.04 をインストールし、git をインストールするために次のコマンドを実行します。
sudo apt update
sudo apt install git
python3 -V
python 3.10 で最新の pip をインストールします。
sudo apt install python3-pip
pip --version
STEP 1-2 : fastboot のインストール
イメージを書き込むために AIoT ツールは fastboot を使用します。
sudo apt update
sudo apt install android-tools-adb android-tools-fastboot
STEP 1-3 : USB デバイスルール
新しい udev ルールとユーザーカウントを plugdev に追加します。
echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="0e8d", ATTR{idProduct}=="201c", MODE="0660", $ GROUP="plugdev"' | sudo tee -a /etc/udev/rules.d/96-rity.rules
echo -n 'SUBSYSTEM=="usb", ATTR{idVendor}=="0e8d", ATTR{idProduct}=="201c", MODE="0660", TAG+="uaccess"
SUBSYSTEM=="usb", ATTR{idVendor}=="0e8d", ATTR{idProduct}=="0003", MODE="0660", TAG+="uaccess"
SUBSYSTEM=="usb", ATTR{idVendor}=="0403", MODE="0660", TAG+="uaccess"
SUBSYSTEM=="gpio", MODE="0660", TAG+="uaccess"
' | sudo tee /etc/udev/rules.d/72-aiot.rules
sudo udevadm control --reload-rules
sudo udevadm trigger
sudo usermod -a -G plugdev $USER
STEP 1-4 : AIoT ツールのインストール
Linux Host PC に AIoT ツールをインストールするため次のコマンドを実行します。
pip3 install -U -e "git+https://gitlab.com/mediatek/aiot/bsp/aiot-tools.git#egg=aiot-tools"
export PATH="$HOME/.local/bin:$PATH"
sudo adduser $USER dialout
Host PCを再起動し、AIoT ツールをチェックするためにターミナルで次のコマンドをタイプします。
aiot-config
上記のようなメッセージが出れば、Host PC での環境構築は終了です。
2.ハードウェアのセットアップ
I-Pi SMARC 開発キットで以下の接続を実施します。
・HDMIケーブルでモニターと接続
・LANケーブルの挿入 (インターネットへの接続に使用)
・USBマウス/キーボード
※今回は写真のように USB Hub を使用して接続しました。
・ウェブカメラ
・USB type-A to micro USB ケーブル (キットに付属)
※USB type-A 側を Linux Host PC、micro USB 側を I-Pi SMARC 開発キットに接続
3.Host PC から SMARC 開発キットへの Yocto イメージの書き込みおよび Yocto の起動
Home の下に Yocto ディテクリを作成します。
sudo mkdir Yocto
I-Pi SMARC 1200 Download (ipi.wiki)
上記リンクへアクセスし Yocto のプリビルドイメージの (Yocto LEC-MTK-1200 ) のところで右クリック後、"名前を付けてリンク先を保存”を選択し、さきほど作成したディレクトリに保存します。
(ファイルサイズが 3.5GB あるのでダウンロードに時間がかかります)
無事ダウンロードできました。
ダウンロードファイルの保存先のディレクトリに移動します。
cd Yocto
ダウンロードしたファイルを unzip コマンドで解凍します。
unzpip LEC-1200-IPi-SMARC-PLUS_Yocto_kirkstone_V2_R8_2023_08_02.zip
解凍したディレクトリに移動します。
cd LEC-1200-IPi-SMARC-PLUS_Yocto_kirkstone_V2_R8_2023_08_02/
Host PCと SMARC 開発キットを USB ケーブルで接続し、SMARC 開発キットの電源を接続したあと開発キットのリセットボタンを押します。
参考:リセットボタンの場所 https://www.ipi.wiki/pages/1200-docs?page=CarrierIntroduction.html
SMARC に搭載されている UFS ストレージへイメージを書き込むために、次のコマンドを実行します。
aiot-flash
上記のメッセージのあと書き込みは進みませんが、開発キットの電源ボタンを押すと書き込みが開始されます。
参考:電源ボタンの場所 https://www.ipi.wiki/pages/1200-docs?page=CarrierIntroduction.html
下記のようなメッセージが出力されれば、無事イメージファイルの書き込みは終了です。
無事書き込みが完了しますと、自動的にSMARC 開発キットが再起動します。
SMARC 開発キットから HDMI で接続しているモニターの左上に ”ターミナル” のアイコンが表示されればブートは成功です。
4.( おまけ ) TensorFlow Lite の量子化モデルを使用した Object Detection デモ
STEP 4-1 : TensorFlow Runtime のサンプルを Github リポジトリからダウンロード
SMARC 開発キットで Yocto Linux を起動後、左上のターミナルのアイコンをクリックして起動します。
Home の下に py_work ディテクリを作成します。
sudo mkdir py_work
作成したディレクトリに移動します。
cd py_work
wget コマンドを使用し、下記 Github リボジトリから Python のサンプル一式をダウンロードします。
https://github.com/PINTO0309/TensorflowLite-bin
wget https://github.com/PINTO0309/TensorflowLite-bin/archive/refs/heads/main.zip
無事ダウンロードが完了すると下記メッセージが表示されます。(ファイル名:main.zip)
STEP 4-2: Python のソースコードの編集
unzip コマンドでダウンロードした ファイルを解凍します。
unzip main.zip
生成された TensorflowLite-bin-main ディレクトリに cd コマンドで移動します。
cd TensorflowLite-bin-main
ls コマンドを実行すると3種類の python のファイルがあることが判ります。
今回、mobilenetv2ssd-async-usbcam.py を使用します。
テキストエディターで Python のコード(mobineletv2ssd-async-usb.py)を修正します。
(下記では vi を使用)
vi mobineletv2ssd-async-usbcam.py
- メイン関数内でウェブカメラの 番号、FPS を修正
## parser.add_argument("--usbcamno", type=int, default=0, help="USB Camera number.")
parser.add_argument("--usbcamno", type=int, default=1, help="USB Camera number.")
# vidfps = 60
vidfps = 30
STEP 4-3 : Object Detection Python デモの実行
下記コマンドで python のデモを実行します。
python3 mobilenetv2ssd-async-usbcam.py
物体が検出されているのが判ります。推論性能は 今回使用したウェブカメラの上限の 30 FPS まで出ています。
なお、デモの停止をしたい場合は、ターミナルウインドウにて Ctrl + C を押します。
まとめ
今回は ADLINK 社が用意している Yocto Linux イメージ を使用しましたが、ユーザーが用意したイメージを使用することも可能です。ぜひお試しください。
また、mobilenetv2ssd-async-usbcam.py を修正して、python でのウェブカメラのデモを実施しましたが、NNStreamer も使用可能ですので、ぜひお試しください。
参考: