#M5StickV でお顔認証する手順


概要

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

KFlashでM5StickVに書き込みます。

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

Conponent Configrationを選びます。

MicroPython Configrationを選びます。

Module Configrationを選びます。

使わないライブラリをOFFにします。

今回は、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/