LoginSignup
0
0

More than 3 years have passed since last update.

機械が言うと角が立たない2

Last updated at Posted at 2021-05-04

背景

前回からの続きです

何をする?

この後色々難儀なことが出てくると思いつつ、まずは前回の設定を目指す

どうやって作ろう

同じく前回確認した内容をもとにもう少し具体化
- マイコンボード上にカメラ、音声出力、ネットワーク機能を搭載
- Lobeで作成したモデルの実行環境を構築

大まかな処理は以下のイメージ

  1. カメラで定期的に写真を撮る
  2. 写真の中から顔を切り切り出す(Azure Detection)
  3. マスクをしているか判定(Lobe)
    1. マスクをしている場合は称賛のコメント発声
    2. マスクをしていない場合は前回判定時の顔を同一であるか判定(Azure 顔検証)
      1. 同じ人である場合はマスク着用を強く強くお勧め
      2. 違う人であればマスク着用を強くお勧め
  4. 前回保存画像を削除し、今回撮影画像を保存
  5. 繰り返し

まずは処理部分を開発する

lobeからtensorflow liteで出力

ボタンを押すだけ。
難しいところを優しくGUIで包んでくれて、外の世界にもオープンマインド。
すごい世界になったものだ、、
tensorflow_lite_export.jpg

ローカルで一式開発する

サンプルはpython3.6が前提。venv環境作る前提でチュートリアルも出力されているので、この環境上で作って確認出来たら丸ごとマイコンボードに持ってゆく。持ってゆくと色々あるとは思うものの、、
projet_folder.jpg

windows上でreadme.mdのままではできなかったこと
- requeiremens.txtを使用してのインストールが不可だったので個別にインストール
 (TF_liteのランタイムはOS,Pythonのバージョンを確認して実行する必要があった)
3.6環境を作るのを横着して3.7で実行(Win10は3.8のTFLiteランタイムがない)

(tflite-venv) example> py -3.7 tflite_example.py "mask.png"
Predicted: {'predictions': [{'label': 'Mask', 'confidence': 0.9022133350372314}, {'label': 'UnMask', 'confidence': 0.09778668731451035}]} 

(tflite-venv) example> py -3.7 tflite_example.py "unmask.png"
Predicted: {'predictions': [{'label': 'UnMask', 'confidence': 0.9968219995498657}, {'label': 'Mask', 'confidence': 0.003178034909069538}]}

稼働を確認、これを中心に周辺の処理を構築してゆく
コードが汚いとかログがないとかエラー制御がないとか全部後回し
正常系を確認できたら早々にマイコンボードに入れて遊ぶのを優先。

全体の流れを制御する部分

control.py
import extract_face
import takepic
import judge_mask
import speak_judge
import speak_out
import datetime

dt_now = datetime.datetime.now()
file_name = dt_now.strftime('%Y%m%d%M%S%f')

#1 写真を撮る
ret = takepic.take_pic()
#2 顔画像を切り出し
ret = extract_face.fetch_face_and_info()
#3 マスク判定(lobeで作成したものを呼び出せるようにする)
ret, ret_info = judge_mask.judge_mask_ctrl()
process_control = False
judge_m = ''
if ret is False:
    process_control = False
else:
    judge_m = ret_info['predictions'][0]['label']
    process_control = True
#4 Mask,UnMaskと前回の顔との類似度を見て判定
ret = speak_judge.speak_judge(process_control, judge_m)
#4 判定内容に合わせてファイルを再生
speak_out.speak_out_message(ret)

頑張ってそれぞれ作ってゆく

参考

lobe
azure Detection 全般
azure Detection クイックスタート
tensoflow lite 全般
tensoflow lite ランタイム

0
0
0

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
0
0