motion の結果を画像認識(watson IBM bluemix)

これは犬じゃありません

motionで画像取得→wordpress投稿したいが犬以外の変な写真は避けたい
犬かどうかを判別するためにIBM BluemixのVisual Recognitionを活用する。

Visual Recognitionは1日250回の画像判断まで無料でできるので250回以上水を飲まなければ大丈夫。

API登録

BlueMixにアカウント登録

BlueMixのポータルよりアカウント作成

※最初は無料だが30日経過で従量制(クレジット情報の登録必要)となる

VisualRecognitionのAPI作成

  • メニュー→サービス→WATSON→WATSONサービスの作成→VisualRecognition
  • サービス名は適時変更
  • 接続はアンバインドのまま
  • 無料プランを選択
  • 作成されたサービスのサービス資格情報から「APIKEY」を取得

pythonで動かす

環境準備

sudo pip install --upgrade watson-developer-cloud

画像判断スクリプト

#coding: UTF-8

def recognition_image(argdir,argfile,argclass,argscore):

    import json
    import sys
    from os.path import join, dirname
    from watson_developer_cloud import VisualRecognitionV3

    # API Key
    visual_recognition = VisualRecognitionV3('2016-05-20', api_key='hogehogehogehogehoge')

    input_file  = '{path}/{name}'.format(path=argdir,name=argfile)
    output_file = '{path}/recognition/{name}.json'.format(path=dirname(__file__),name=argfile)

    # recognition
    with open(input_file, 'rb') as image_file:
        recognition_result = visual_recognition.classify(images_file=image_file)

    # file output
    with open(output_file,'w') as result_file:
        json.dump(recognition_result, result_file,indent=2)

    recognition_classes = recognition_result['images'][0]['classifiers'][0]['classes']

    # ?
    for i in range(len(recognition_classes)):
        if recognition_classes[i]['class'] == argclass and recognition_classes[i]['score'] > argscore:
            return 1
    return 0

実行結果

別途出力させている入力ファイル.jsonの内容

[argclass:dog][argscore:0.85]で「1」が返ってくる。
※「Welsh corgi」までちゃんと判断できるのはすごい

{
  "images": [
    {
      "image": "/var/motion/picture/20170523113338-10-14.jpg",
      "classifiers": [
        {
          "classes": [
            {
              "score": 0.92,
              "class": "Welsh corgi",
              "type_hierarchy": "/domestic animal/dog/Welsh corgi"
            },
            {
              "score": 0.99,
              "class": "dog"
            },
            {
              "score": 0.99,
              "class": "domestic animal"
            },
            {
              "score": 0.99,
              "class": "animal"
            },
            {
              "score": 0.835,
              "class": "Pembroke Welsh corgi",
              "type_hierarchy": "/domestic animal/dog/Pembroke Welsh corgi"
            },
            {
              "score": 0.833,
              "class": "beige color"
            },
            {
              "score": 0.807,
              "class": "lemon yellow color"
            }
          ],
          "classifier_id": "default",
          "name": "default"
        }
      ]
    }
  ],
  "custom_classes": 0,
  "images_processed": 1
}

今後

犬かどうかの判断にだけ使っている状態。
WATSONに教育させて2匹(「もるつ」「こむぎ」)の判断までできるか?
#画像を集めて選別しないとダメだが