LoginSignup
33
26

More than 3 years have passed since last update.

#M5StickV でお顔認証する手順

Last updated at Posted at 2019-12-10

概要

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に書き込みます。
03.jpg

MaixPy IDEのコンソールで、起動すると、シリアルコードが表示されます。
コピーして保存しておきます。
シリアルコードはMaixボード個体毎に生成されるものです。

04.png

Sipeedの学習モデルの入手

maixhubから、Sipeedの学習モデルを入手します。
https://www.maixhub.com/

05.jpg

ダウンロードにはシリアルコードが求められるので、Maixボードから取得したものを入力します。
06.jpg

以下の3つのK210用のニューラルネットワークのモデルが入っています。
クリップボード06.jpg

M5StickVへの書き込み

M5StickVのファームウェアとニューラルネットワークのモデルをkflashで書き込みして、
ソースコードを実行すると、お顔の認識が動かせる状態になり、、、、

ソースコードはこちらです。
https://gist.github.com/anoken/7fc193959d64f139a135e859461789aa

02.jpg

これだけでは動きません!!

M5StickVのメモリ最適化

お顔認証は、3つのニューラルネットワークのモデルを読み込む必要があり、Maixボードのシステムヒープメモリに3MB以上の空きサイズが必要です。空きサイズは、kpu.memtest()コマンドで確認することができます。

EKsm0BDUcAEHP3N.jpg

M5StickVのMaixPy最新版(19/12/11時点 ver0.4.0.92)では、システムヒープメモリの空きが2.5MBしかありませんので、モデルを読み込むことができません。
SipeedのMaixボードであれば、minimum版のバイナリが提供されているのですが、M5Stickvはカメラや電源ICがMaixボードとは異なるので、minimum版のバイナリでは色々と不都合があります。

クリップボード01.jpg

そこで、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を選びます。
Screenshot from 2019-12-08 15-04-16.png

MicroPython Configrationを選びます。
Screenshot from 2019-12-08 15-04-23.png

Module Configrationを選びます。
Screenshot from 2019-12-08 15-04-33.png

使わないライブラリをOFFにします。
Screenshot from 2019-12-08 15-05-12.png

今回は、MaixPy IDE Supportを残して他をOFFにしました。
Screenshot from 2019-12-08 15-05-54.png

MaixPyをビルドします。maixpy.binというファイルが生成されれば完了です。

python3 project.py build

生成されたMaixPyバイナリと学習モデルをKfashで書き込んでみましょう。
今度こそ、動かすことができました。
02.jpg

参考サイト

SIPEED BLOG
http://blog.sipeed.com/p/1338.html

SIPEED maixhub
https://www.maixhub.com/

お顔の画像はぱくたそ様を使いました。
https://www.pakutaso.com/

33
26
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33
26