iOS
Swift
Firebase
MLKit

Firebase ML Kit で不適切画像の検出を試した話

少し遅くなりましたが、Google I/O 2018 で発表された Firebase ML Kit が面白そうだったので触ってみました。今回は不適切な画像の検出を試してみました。結論から言うと、Firebase ML Kit ではまだ出来なかったのですが、せっかくなので備忘録として残しておきたいと思います。

概要

Firebase ML Kit は Google 機械学習の専門知識を Android や iOS アプリに簡単にもたらせる事ができます。現在は主に画像認識機能が提供されています。

機能

利用できるのは下記の機能です

  • テキスト認識
  • 顔検出
  • バーコードスキャン
  • ラベリング
  • ランドマーク認識

これに加え「不適切画像検出」があると最高だったのですが、無いので「ラベリング」機能を使って試してみました。

方法

画像の認識の方法は、端末内のモデルを使う方法と Google のサーバ内のモデルを使う方法が用意されていて、それぞれの利点は下記の通りです。

  • 端末モデル
    • 無料
    • 400種類のラベリング
    • Knowledge Graph entity ID support
  • クラウドモデル
    • 最初の10000ユーザーまで無料
    • 10000種類以上のラベリング
    • Knowledge Graph entity ID support

Knowledge Graph entity ID は Google の Google Knowledge Graph Search API で使われている entity ID の事だと思います。

試してみた

今回は、無料という理由から、端末モデルを使う方法を試してみました。

ゾンビ画像を用意してドキュメントに沿って実装してみると、下記のラベルが得られました。

let labelDetector = Vision.vision().labelDetector()
let image = #imageLiteral(resourceName: "zombie")
let visionImage = VisionImage(image: image)
labelDetector.detect(in: visionImage) { (labels, error) in
    guard error == nil, let labels = labels, !labels.isEmpty else {
        // Error. You should also check the console for error messages.
        // ...
        return
    }

    // Labeled image
    // ...
    for label in labels {
        let labelText = label.label
        let entityId = label.entityID
        let confidence = label.confidence
        print(labelText)
        print(entityId)
        print(confidence)
    }
}
Skin
/m/06z04
0.942024
Hand
/m/0k65p
0.933021
Flesh
/m/02p16m6
0.748568
Beard
/m/015h_t
0.724764
Dog
/m/0bt9lr
0.558683
Event
/m/081pkj
0.53936
Jacket
/m/032b3c
0.531936
Sitting
/m/015c4z
0.525712
Fun
/m/0ds99lh
0.514916
Nail
/m/023j4r
0.502204

終わりに

VisionLabelDetector から取得したラベルから、不適切画像と判断するのは難しそうですが、Google Cloud Vision API を利用すると今回やりたかった事が実現出来るようです(チュートリアル)。今後、ML Kit でも出来るようになることを期待しています!