少し遅くなりましたが、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 でも出来るようになることを期待しています!