LoginSignup
19
7

More than 5 years have passed since last update.

女の子からLINEIDを聞き出すVisualRecognitionの使い方

Last updated at Posted at 2016-12-02

はじめに

この記事はTeratailのBulemixアドベントカレンダーに参加しています。

ちょうど、pepperくんに接客してもらおうと、Bluemixを調べていたため参戦しました。

今回は、IBMのBluemixにあるVisualRecognitionとpepperくんを用いることで、
女の子からLINEIDを聞き出す方法を紹介します。

概要

では、簡単に女の子からLINEIDを聞き出すフローを示します。

   ペッパーが写真を撮る
        ↓
 写真をVisualRecognitionで解析
        ↓
女の子、かつ18〜27歳であるか判別(ご自身の好みで)
     ↓         ↓
    true       false
     ↓         ↓
ペッパーがLINEIDを聞く  適当に対応

とても分かりやすいですね。

VisualRecognition

カタログページより、

画像コンテンツに含まれる意味を検出します。 場面、対象物、顔のイメージ、およびその他のコンテンツを分析します。既製のデフォルト・モデルを選択するか、独自のカスタム種別を作成します。 コレクションに含まれる類似のイメージを検出します。 イメージやビデオ・フレームの画像コンテンツを解析し、何が起こっている場面なのかを理解するためのスマート・アプリケーションを作成します。

ふんふん、実際どんな感じ?

使い方

APIReferenceや、Demoページで大体のことは分かるかと思います。

こんな感じにできるようです↓

入力画像例

obama.jpg

出力例
{
    "images": [
        {
            "faces": [
                {
                    "age": {
                        "max": 54,
                        "min": 45,
                        "score": 0.372036
                    },
                    "face_location": {
                        "height": 75,
                        "left": 256,
                        "top": 93,
                        "width": 67
                    },
                    "gender": {
                        "gender": "MALE",
                        "score": 0.99593
                    },
                    "identity": {
                        "name": "Barack Obama",
                        "score": 0.989013,
                        "type_hierarchy": "/people/politicians/democrats/barack
obama"
                    }
                }
            ],
            "image": "prez.jpg"
        }
    ],
    "images_processed": 1
}

おぉ!

  • 年齢の最大・最低値
  • 画像内の顔の場所
  • 性別
  • (有名人であれば名前)
  • それぞれの信頼値

が出てきてますね。
人の顔以外だと、物体検出などが行われるようです。

Pythonでリクエスト

pepperはPythonで動くようなので、Python初心者が書きました。
変なところあったら言ってください。

# -*- coding: utf-8 -*-

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

# 適宜書き換え
api_key = ''
image_name = ''

visual_recognition = VisualRecognitionV3('2016-05-20', api_key={api_key})

jsonData = visual_recognition.detect_faces(images_file=open({image_name}))

print(json.dumps(jsonData, indent=2))

faces = jsonData['images'][0]['faces'][0]

gender = faces['gender']['gender']
age_min = faces['age']['min']
age_max = faces['age']['max']

print(gender)
print(str(age_min) + '~' + str(age_max) + '歳')

# pepperにやらせる
if 18 <= age_min and age_max <= 27:
    print('LINE ID教えて?')
else :
    print('やあ、ぼくpepper')

jsonからの取り出しが無理矢理感しかない...

試しに

api_keyとimage_nameに値を入れてみます。

入力画像(嫁)

kanna.jpg

結果

{
  "images": [
    {
      "image": "kanna.jpg",
      "faces": [
        {
          "gender": {
            "gender": "FEMALE",
            "score": 0.880797
          },
          "age": {
            "max": 24,
            "score": 0.502411,
            "min": 18
          },
          "face_location": {
            "width": 140,
            "top": 66,
            "left": 107,
            "height": 160
          }
        }
      ]
    }
  ],
  "images_processed": 1
}

FEMALE
18~24歳
LINE ID教えて

うん、完璧。
あとはpepperくんにやらせるだけ!

pepperにやらせる

長くなってしまう&pepperのバグが直っていない(助けて)ので別の記事で
           
              ごめん
               ∨
pepper500.png

URL:

最後に

TeratailのアドベントカレンダーにBluemixのVisualRecognitionを使い参加させてもらいました。
画像の処理に関して、とても簡単に扱えて正直ビビりました。

pepper×watsonというCMもやっていたので、簡単に連携できるようになってくれたらいいな、と思います。
クリスマスまでに完成させてLINEIDほしい(切実)

明日はtokutoku393さんのエントリです。

19
7
1

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
19
7