MaixPyを使ってMaixduinoで顔認識

MaixPyを使ってMaixduinoで顔認識を試してみました。

現在開発中のロボットのメイン頭脳にMaixduinoを使おうかといろいろ検証中です。
Maixduinoにはカメラが付いているので、顔認識や物体検知などに使えそうですね。今回は、最低限のコードだけで簡単に顔認識を試してみます。

Sipeedのサイトにもサンプルあります。
私のコードよりも少し複雑ですが、上級者の方はこちらを参考にしたほうがいいです。
https://github.com/sipeed/MaixPy_scripts/blob/master/machine_vision/face_find/demo_find_face.py

テスト環境:

・ Maixduino — カスタムファームウェアv0.6.2 (speech_recognizer Enabled)
・ MaixPy IDE

Maixduino関連記事

1.顔認識用モデルをアップロード

まずは顔認識に使うフェイスモデルをMaixduinoにアップロードします。

必要に応じてここからダウンロードしてください。
・kflash_gui — https://github.com/sipeed/kflash_gui/releases
・Face Model — https://dl.sipeed.com/shareURL/MAIX/MaixPy/model

kflash_guiを開いて、フェイスモデルを選んで、ボードとポートを設定してダウンロードボタンを押します。

2.顔認識スクリプトを書く

顔認識を試すのに最低限必要なコードでサンプルを書くと!?

import sensor,image,lcd
import KPU as kpu
import utime
lcd.init()
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_hmirror(0)
sensor.run(1)
anchor = (1.889, 2.5245, 2.9465, 3.94056, 3.99987, 5.3658, 5.155437, 6.92275, 6.718375, 9.01025)
task = kpu.load(0x300000)
kpu.init_yolo2(task, 0.5, 0.3, 5, anchor)
img_lcd=image.Image()
while(True):
img = sensor.snapshot()
objects = kpu.run_yolo2(task, img)
if objects:
for i in objects:
img.draw_rectangle(i.rect())
lcd.display(img)
kpu.deinit(task)

7行目から11行目で、カメラを初期化してスタートしてます。
MaixPyでは”sensor”モジュールを使ってカメラを操作することができます。

今回は”yolo2”をアルゴリズムを使って顔認識をしています。
yolo2は画像処理において最も効率がいいといわれているアルゴリズムです。
16行目で、アンカーとモデルを渡し、yolo2を初期化しています。

21行目で、sensor.snapshot()で読み込んだ画像を、kpu.run()で処理しています。分析結果のリストをobjectsで受け取り、img.draw_rectangle()で枠で囲ってディスプレイに表示してます。

最後にkpu.deinit()を忘れずに。

3.実行結果

MaixPyIDEにスクリプトをロードして、実行ボタンを押すと!?

右上にカメラの画像が表示され、顔の周りに枠が表示されていれば、顔認識できてます。

10年前はこれだけのことをするのに、OpenCVを30万円ハイスペックPCで動かしてやっとだったのになぁ…。
今は3千円のボードでできちゃうんだもんな、テクノロジーの進歩って恐ろしい。

タイトルとURLをコピーしました