algonote

機械学習とか

画像認識で現金の出品を検知する(Google vs Amazon)

例えばあなたが自作フィギュアのマーケットプレース figcari の社員だとします。 figcariは3Dプリンターの発展により絶賛急成長中ですが、最近になって規約違反の現金の出品が目立つようになりました。あなたの仕事は現在手作業でやっている仕分けを画像認識によって自動化することです。CEOからは問題の早期解決を要望されています。

、、、というわけで、Google Cloud Vision APIAmazon Rekognitionでお札(1万円)をどこまで認識できるかやっていました。

使ったデータ

iPhoneのカメラで1万円札を撮影しました。

  • パターン1: 一万円札単品 
  • パターン2:一万円札x2
  • パターン3 : 一万円札を折って形状をわかりにくくしたもの。
  • パターン4: 魚のオブジェ(M社出品画像)

やり方

Google Cloud Vision APIデモページから、Amazon Rekognitionは下記ブログを参考にS3上のファイルに対してCLIから実行しています。

dev.classmethod.jp

以下が結果です。

Google Cloud Vision API

まずはCloud Vision API

  • パターン1: 一万円札単品  f:id:hiromichinomata:20170720070225p:plain
  • パターン2:一万円札x2 f:id:hiromichinomata:20170720070237p:plain
  • パターン3 : 一万円札を追って形状をわかりにくくしたもの。 f:id:hiromichinomata:20170720070246p:plain
  • パターン4: 魚のオブジェ f:id:hiromichinomata:20170720070256p:plain

魚のオブジェ以外は90%以上の精度でお金だと認識できました。

Amazon Rekgnition

次にAmazon Rekgnition。

  • パターン1: 一万円札単品 
{
    "Labels": [
        {
            "Confidence": 98.69969177246094, 
            "Name": "People"
        }, 
        {
            "Confidence": 98.69972229003906, 
            "Name": "Person"
        }, 
        {
            "Confidence": 98.61846923828125, 
            "Name": "Human"
        }, 
        {
            "Confidence": 80.97723388671875, 
            "Name": "Dollar"
        }, 
        {
            "Confidence": 80.97723388671875, 
            "Name": "Money"
        }
    ]
}
  • パターン2:一万円札x2
{
    "Labels": [
        {
            "Confidence": 98.39552307128906, 
            "Name": "Money"
        }, 
        {
            "Confidence": 98.37335968017578, 
            "Name": "People"
        }, 
        {
            "Confidence": 98.3734130859375, 
            "Name": "Person"
        }, 
        {
            "Confidence": 98.23640441894531, 
            "Name": "Human"
        }, 
        {
            "Confidence": 65.38355255126953, 
            "Name": "Dollar"
        }
    ]
}
  • パターン3 : 一万円札を折って形状をわかりにくくしたもの。
{
    "Labels": [
        {
            "Confidence": 90.52339172363281, 
            "Name": "Dollar"
        }, 
        {
            "Confidence": 90.52339172363281, 
            "Name": "Money"
        }
    ]
}
  • パターン4: 魚のオブジェ、上位結果のみを表示
{
    "Labels": [
        {
            "Confidence": 98.29066467285156, 
            "Name": "People"
        }, 
        {
            "Confidence": 98.29073333740234, 
            "Name": "Person"
        }, 
        {
            "Confidence": 98.13846588134766, 
            "Name": "Human"
        }, 
        {
            "Confidence": 96.34490203857422, 
            "Name": "Brochure"
        }, 
        {
            "Confidence": 96.34490203857422, 
            "Name": "Flyer"
        }, 
        {
            "Confidence": 96.34490203857422, 
            "Name": "Paper"
        }, 
        {
            "Confidence": 96.34490203857422, 
            "Name": "Poster"
        }, 
        {
            "Confidence": 60.264060974121094, 
            "Name": "Collage"
        }
    ], 
    "OrientationCorrection": "ROTATE_0"
}

こちらも同じく魚のオブジェ以外は認識できていますが、お札単品の精度が8割とCloud Visionより低くなっています。

感想、考察

  • お札を折った画像まで認識できるのは意外でした。(折り方が雑で矩形だったから?)
  • Rekognitionの単一紙幣で認識精度が下がるのは謎ですが、精度8割あれば十分な気もします。
  • 価格的には1 million unitsの際にCloud Visionが$1.5/1000に対し、Rekognitionが$1.0/1000なのでほぼトントン。

Future Work

問題を顔画像の分類として、類似度を計算、諭吉かどうか識別