背景
前回からの続きです
何をする?
この後色々難儀なことが出てくると思いつつ、まずは前回の設定を目指す
どうやって作ろう
同じく前回確認した内容をもとにもう少し具体化
- マイコンボード上にカメラ、音声出力、ネットワーク機能を搭載
- Lobeで作成したモデルの実行環境を構築
大まかな処理は以下のイメージ
- カメラで定期的に写真を撮る
- 写真の中から顔を切り切り出す(Azure Detection)
- マスクをしているか判定(Lobe)
- マスクをしている場合は称賛のコメント発声
- マスクをしていない場合は前回判定時の顔を同一であるか判定(Azure 顔検証)
- 同じ人である場合はマスク着用を強く強くお勧め
- 違う人であればマスク着用を強くお勧め
- 前回保存画像を削除し、今回撮影画像を保存
- 繰り返し
まずは処理部分を開発する
lobeからtensorflow liteで出力
ボタンを押すだけ。
難しいところを優しくGUIで包んでくれて、外の世界にもオープンマインド。
すごい世界になったものだ、、
ローカルで一式開発する
サンプルはpython3.6が前提。venv環境作る前提でチュートリアルも出力されているので、この環境上で作って確認出来たら丸ごとマイコンボードに持ってゆく。持ってゆくと色々あるとは思うものの、、
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 ランタイム