Help us understand the problem. What is going on with this article?

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

https://github.com/kendryte/kendryte-gnu-toolchain/releases

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/

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした