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

# はじめに
この記事はTeratailの[Bulemixアドベントカレンダー](https://teratail.com/Bluemix)に参加しています。

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


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

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

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

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

# VisualRecognition
[カタログページ](https://console.ng.bluemix.net/catalog/services/visual-recognition/)より、
> 画像コンテンツに含まれる意味を検出します。 場面、対象物、顔のイメージ、およびその他のコンテンツを分析します。既製のデフォルト・モデルを選択するか、独自のカスタム種別を作成します。 コレクションに含まれる類似のイメージを検出します。 イメージやビデオ・フレームの画像コンテンツを解析し、何が起こっている場面なのかを理解するためのスマート・アプリケーションを作成します。

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

## 使い方
[APIReference](https://www.ibm.com/watson/developercloud/visual-recognition/api/v3/?python#apiexplorer)や、[Demoページ](http://visual-recognition-demo.mybluemix.net/)で大体のことは分かるかと思います。

こんな感じにできるようです↓
##### 入力画像例
![obama.jpg](https://qiita-image-store.s3.amazonaws.com/0/77637/94e2dd2a-1714-3c7f-ca04-026a443f791f.jpeg)

##### 出力例
```json
{
    "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初心者が書きました。
変なところあったら言ってください。

```py
# -*- 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](https://qiita-image-store.s3.amazonaws.com/0/77637/22179e4d-58e2-de7d-a052-bbbc365ea167.jpeg)

## 結果
```json
{
  "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](https://qiita-image-store.s3.amazonaws.com/0/77637/4896936a-a99c-9ab4-20a5-95f13f672350.png)


URL:

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

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


明日は[tokutoku393さん](https://teratail.com/users/tokutoku393)のエントリです。