#概要
#M5StickV でお顔認識 pic.twitter.com/Mi488TYHq4
— nnn (@nnn112358) December 10, 2019
sipeed からMaix用の顔認識モデルが公開されました。なんと、クラウドに繋ぐことなしにコンパクトなマイコンだけで、お顔を認識することができます。
M5StickVでお顔を試してみました。
ソースコードはこちらです。
https://gist.github.com/anoken/7fc193959d64f139a135e859461789aa
#仕組み
お顔認証の仕組みは以下のような流れになっていると推測します。
(あくまでソースコードからの予想)
1.yolov2のニューラルネットワークで顔部分を領域特定。
2.顔周辺エリアを切り取って、128x128にリサイズ。
3.顔周辺から、ニューラルネットワークで目・鼻・口を特定する
4.正面顔に幾何学変換
5.mobilenetv1 のニューラルネットワークで転移学習により、お顔を認識。
#Maixのシリアル番号の取得
Sipeedのサイトから、key genをダウンロードします。
http://blog.sipeed.com/p/1338.html#more-1338
MaixPy IDEのコンソールで、起動すると、シリアルコードが表示されます。
コピーして保存しておきます。
シリアルコードはMaixボード個体毎に生成されるものです。
Sipeedの学習モデルの入手
maixhubから、Sipeedの学習モデルを入手します。
https://www.maixhub.com/
ダウンロードにはシリアルコードが求められるので、Maixボードから取得したものを入力します。
以下の3つのK210用のニューラルネットワークのモデルが入っています。
M5StickVへの書き込み
M5StickVのファームウェアとニューラルネットワークのモデルをkflashで書き込みして、
ソースコードを実行すると、お顔の認識が動かせる状態になり、、、、
ソースコードはこちらです。
https://gist.github.com/anoken/7fc193959d64f139a135e859461789aa
これだけでは動きません!!
#M5StickVのメモリ最適化
お顔認証は、3つのニューラルネットワークのモデルを読み込む必要があり、Maixボードのシステムヒープメモリに3MB以上の空きサイズが必要です。空きサイズは、kpu.memtest()コマンドで確認することができます。
M5StickVのMaixPy最新版(19/12/11時点 ver0.4.0.92)では、システムヒープメモリの空きが2.5MBしかありませんので、モデルを読み込むことができません。
SipeedのMaixボードであれば、minimum版のバイナリが提供されているのですが、M5Stickvはカメラや電源ICがMaixボードとは異なるので、minimum版のバイナリでは色々と不都合があります。
そこで、M5StickVのファイムウェアをカスタマイズし、メモリ最適化をします。
##環境
以下の作業はUbuntu(Linux)が必要です。
Ubuntu18.04 (5.0.0-36-generic)
##ファームウェアのコンパイル
Maixpyのダウンロード
Maixpyのファームウェアをソースコードからビルドします
$ git clone https://github.com/sipeed/MaixPy.git
$ git submodule update --recursive --init
Pythonのインストール
Miniconda をインストールして、 Python の環境を作ります。
Miniconda のインストーラは、 Miniconda のウェブサイトからダウンロードして取得し
ます。
Miniconda : https://docs.conda.io/en/latest/miniconda.html
$ wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
$ sh https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
conda を起動します。
$ conda create -n ml python=3.6
$ conda activate ml
pyserialをpipでインストールします。
$ pip3 install -r requirements.txt
kendryte-toolchainのインストール
kendryteのtoolchainを、/opt/kendryte-toolchain/にインストールします。
$ wget http://dl.cdn.sipeed.com/kendryte-toolchain-ubuntu-amd64-8.2.0-20190409.tar.xz
$ sudo tar -Jxvf kendryte-toolchain-ubuntu-amd64-8.2.0-20190409.tar.xz -C /opt
$ ls /opt/kendryte-toolchain/bin
MaixPyのFirmwareのライブラリを減らす
MaixPyのFirmwareのライブラリを減らすことでシステムヒープメモリの容量をあけることができます。
$ cd MaixPy
$ cd projects/maixpy_m5stickv/
$ python3 project.py menuconfig
MicroPython Configrationを選びます。
今回は、MaixPy IDE Supportを残して他をOFFにしました。
MaixPyをビルドします。maixpy.binというファイルが生成されれば完了です。
python3 project.py build
生成されたMaixPyバイナリと学習モデルをKfashで書き込んでみましょう。
今度こそ、動かすことができました。
#参考サイト
SIPEED BLOG
http://blog.sipeed.com/p/1338.html
SIPEED maixhub
https://www.maixhub.com/
お顔の画像はぱくたそ様を使いました。
https://www.pakutaso.com/