
Watson API 「VisualRecognition」をPythonで使ってみよう
こんにちは。
AI coordinatorの清水秀樹です。
Watson API「VisualRecognition」を使って、読み込んだ画像が何の画像なのか分析できるGUIを作成してみましょう。

実際に以下の画像を見込んでみたところ、
分析結果は以下の通りになりました。

おおよそペンと認識しているようです。
JSON結果は以下の通り。
{
    "images": [
        {
            "image": "C:/Users/shimimin/Desktop/images.jpg",
            "classifiers": [
                {
                    "classes": [
                        {
                            "score": 0.916,
                            "class": "writing implement"
                        },
                        {
                            "score": 0.787,
                            "class": "fountain pen"
                        },
                        {
                            "score": 0.859,
                            "class": "pen"
                        },
                        {
                            "score": 0.53,
                            "class": "pen nib"
                        },
                        {
                            "score": 0.902,
                            "class": "sanguine (red) color"
                        }
                    ],
                    "classifier_id": "default",
                    "name": "default"
                }
            ]
        }
    ],
    "custom_classes": 0,
    "images_processed": 1
}
VisualRecognitionは機械学習が可能ですが、予め準備されているデフォルトの状態でも画像認識精度は高そうですね。
準備するもの
Bluemixにログイン後にWatson API「VisualRecognition」を作成し、サービス資格情報からAPIキーを取得してください。
Pythonの開発環境準備は以下の記事を参考にしてください。
Pepper用Python 2.7 SDK(WIN)セットアップ方法
Pepper用Python 2.7 SDK(MAC)セットアップ方法
ソースコード
# -*- coding: utf-8 -*-
import json
from Tkinter import*
import tkMessageBox
import tkFileDialog
from os.path import join, dirname
from watson_developer_cloud import VisualRecognitionV3
class VR_file_in():
    def __init__(self):
        #ウインドウ定義
        root = Tk()
        root.option_add('*font', 'FixedSys 18')
        root.option_add('*Button.background', 'green')
        root.geometry("700x200")
        root.title(u"Visual Recognition")
        #アプリ名表示------------
        Label(text=u'Visual Recognition',font=(u'MS ゴシック', 24)).place(x=25,y=10)
        #CSVファイル入力ボタン--------------------
        Button(root,text = "画像入力",command=self.file_in_btn).place(x=350,y=12)
        Label(text="分析結果1").place(x=25,y=100)
        self.answer1 = Entry(width=50)
        self.answer1.place(x=130,y=100)
        Label(text="分析結果2").place(x=25,y=130)
        self.answer2 = Entry(width=50)
        self.answer2.place(x=130,y=130)
        Label(text="分析結果3").place(x=25,y=160)
        self.answer3 = Entry(width=50)
        self.answer3.place(x=130,y=160)
        root.mainloop()
    def file_in_btn(self):
        #ファイルの指定 askopenfilename 一つのファイルを選択する。
        fTyp=[('画像ファイル','*.jpg')]
        iDir='C:\Users\shimimin\Desktop'
        filename=tkFileDialog.askopenfilename(filetypes=fTyp,initialdir=iDir)
        #Visual Recognitionへの投入
        visual_recognition = VisualRecognitionV3('2016-05-20',
        api_key='サービス資格情報のAPIキーを指定してください')
        with open(join(dirname(__file__), filename), 'rb') as image_file:
            r = visual_recognition.classify(images_file=image_file)
        print json.dumps(r, indent=4)
        #print r['images'][0]['classifiers'][0]['classes'][0]['class']
        self.answer1.delete(0,END)
        self.answer1.insert(0,r['images'][0]['classifiers'][0]['classes'][0]['class'])
        self.answer2.delete(0,END)
        self.answer2.insert(0,r['images'][0]['classifiers'][0]['classes'][1]['class'])
        self.answer3.delete(0,END)
        self.answer3.insert(0,r['images'][0]['classifiers'][0]['classes'][2]['class'])
VR_file_in()
ソースコードはこちらからダウンロードできます。 → Visual Recognition.zip
GUIなんて要らないから、とりあえず動かしてみたいという方は以下のソースを参考にしてみてください。
こちらのソースはrequests.postで結果を取得するソースとなっています。
# -*- coding: utf-8 -*-
import json
from os.path import join, dirname
import requests
#Visual Recognitionへの投入
url = 'https://gateway-a.watsonplatform.net/visual-recognition/api/v3/classify'
payload = {'api_key': 'サービス資格情報のAPIキー', 'version':'2016-05-20'}
with open(join(dirname(__file__), "ファイルのパス"), 'rb') as images:
    r = requests.post(url, images, params = payload,)
    res = json.loads(r.text)
    print r.text
    print res['images'][0]['classifiers'][0]['classes'][0]['class']
    print res['images'][0]['classifiers'][0]['classes'][1]['class']
    print res['images'][0]['classifiers'][0]['classes'][2]['class']
ソースコードのダウンロードはこちらから → VR.zip
是非試してみてください。
それではまた。






LEAVE A REPLY