LoginSignup
3
5

More than 3 years have passed since last update.

iPhoneとAIでマスクしている人を判別する

Posted at

現在コロナウィルスが猛威を奮っております。ITパワーで何かできないものでしょうか。

開発環境

  • XCode iOS Swift
  • Vision Framework
    iOSで顔の検出ができます。
  • CoreML Framework
    iOSで学習モデルを扱います。
  • Turi Create
    MACで学習モデルを作成します。

画像判別のまとめ

機械学習にはモデルが必要です。Inception v3という公開モデルには1000個のカテゴリーが入っています。マウスであったり、コンピューターキーボードであったり、PCモニターの前に座った人をバーバーと判別したりします。
結果は、全てのカテゴリーを足して100になるように出ます。ABCDEの5つある場合、A80、B10、C10、D0、E0、のように「強いて言えばどれか」という結果になります。
なので、特定のモノを判別させたければ、違うモノを判別する必要があります。

顔検出と顔判別は以前の記事にあります。
iPhoneで顔認識 - Qiita

学習モデルの作成

今回はマスクするしないの2つだけです。結果はMask80%、None20%のようになります。MaskフォルダとNoneフォルダに顔写真をいっぱい入れて、pythonを実行して学習モデルを作成します。

model.py
import turicreate as tc
import os

data = tc.image_analysis.load_images('train', with_path=True, recursive=True)
data['label'] = data['path'].apply(lambda path: os.path.basename(os.path.dirname(path)))
data.save('Chicken.sframe')

train_data, test_data = data.random_split(0.9)
model = tc.image_classifier.create(train_data, target='label', max_iterations=100)

predictions = model.predict(test_data)
metrics = model.evaluate(test_data)
print('metrics=' + str(metrics['accuracy']))

model.save('Chicken.model')
model.export_coreml('Chicken.mlmodel')

実験

  1. マスクは顔検出できず(ちっきしょー)
    元々のアプリは顔検出 → 画像切り抜き → 顔の判別です。使えなくて残念です。

  2. 全画面を判別するよう修正しました。
    日本人限定、女性限定、正面限定、白マスク限定(試行錯誤しました)
    一応下のサンプルはフリー素材使っています。

  3. 結果
    マスク判定が99なのがおかしいです。不明なものはすべてマスクになっている模様。作業の途中で悟りました。もっと他にいい方法があるはず。

ソース

動かすにはmodelを作成する必要があります。
https://github.com/koji4104/VisionCoreML

まとめ

iPhoneで画像の機械学習を行うアプリは、いろいろ作り直して今回で3つ目です。判別しやすい画像や、トレーニング画像の集め方など、少しづつコツが掴めたと思います。
今回あまりうまくいきませんでしたけど、仮にマスクの判別がうまくいったとして、それからどうするかも課題です。アプリ側で一般的なCMSと連携できる機能があればいいかなと思います。

3
5
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
3
5