Works by

Ren's blog

@rennnosuke_rk 技術ブログです

【Watson/python】IBM Watson Visual Recognitionを使って、pythonスクリプト上で画像分類を行う

IBM Watson Visual Recognition

IBM Watson Visual Recognitionは、IBMが提供するDeep Learningを利用した画像認識サービスです。

www.ibm.com

IBM Cloud上で利用することができ、APISDK経由で画像データの分類を行うことができます。

今回はpython用Watson Visual Recognitionモジュールを用いて画像分類をやってみます。

Usage

IBM Cloudアカウントの取得

まずはIBM Cloudのアカウントを取得しましょう。
下記記事に取得方法を記載してあります。

rennnosukesann.hatenablog.com

Visual Recognition サービスを作成する

次にIBM Cloud上でVisual Recognitionのサービスを作成します。

IBM Cloudダッシュボード画面にて、画面右上の「リソースの作成」ボタンを押します。

f:id:rennnosukesann:20180701184946p:plain

すると利用できるリソース一覧が表示されるので、一番下の「Watson」の項目一覧にある「Visual Recognition」をクリック。

f:id:rennnosukesann:20180701185216p:plain

遷移先画面の右下にある「作成」ボタンをクリック。

f:id:rennnosukesann:20180701185401p:plain

するとVisual Recognitionサービス詳細画面に移動します。
ここで表示されるAPIキーは後ほどpythonスクリプト上で利用します。

f:id:rennnosukesann:20180701185641p:plain

Watson Visual Recognitinoモジュールをインストール

pipを使い、python用Visual Recognitionモジュールをインストールします。

$ pip install --upgrade "watson-developer-cloud>=1.4.0"

これで準備完了です。

Source

以下にVisual Recognitionを利用した画像分類のスクリプト例を示します。
このスクリプトは、一枚の画像をVisual Recognitionに送信し、
その分類結果をJSON形式で標準出力する簡単なものです。

{API_KEY}にはVisual Recognition サービス作成時に取得したAPIキーを入力してください。

from watson_developer_cloud import VisualRecognitionV3, WatsonApiException


def recognize():
    WVR_VERSION = '2016-05-20'
    WVR_API_KEY = '{API_KEY}'
    FILE_PATH = 'cat.jpg' # 分類対象画像ファイル

    try:
        visual_recognition = VisualRecognitionV3(WVR_VERSION, iam_api_key=WVR_API_KEY)
        with open( FILE_PATH , 'rb') as image:
            # クラス分類:今回はすでに用意された分類器を使用
            results = visual_recognition.classify(images_file=image, classifier_ids=['default'])
        print(results)
    except WatsonApiException as ex:
        print(ex.message)


if __name__ == '__main__':
    recognize()

Demo

試しに、以下の画像を分類してみます。

f:id:rennnosukesann:20180701190447j:plain:w200

すると、以下ようなJSON形式で結果が返されます。
今回は猫の画像を上げたので、「猫」クラスのスコアや「動物」クラスのスコアが高いのがわかります。

{'images': [{'classifiers': [{'classifier_id': 'default', 'name': 'default', 'classes': [{'class': 'cat', 'score': 0.893, 'type_hierarchy': '/animal/mammal/carnivore/feline/cat'}, {'class': 'feline', 'score': 0.905}, {'class': 'carnivore', 'score': 0.905}, {'class': 'mammal', 'score': 0.906}, {'class': 'animal', 'score': 0.953}, {'class': 'tabby cat', 'score': 0.548, 'type_hierarchy': '/animal/mammal/carnivore/feline/cat/domestic cat/tabby cat'}, {'class': 'domestic cat', 'score': 0.713}, {'class': 'kitten', 'score': 0.5, 'type_hierarchy': '/animal/young/kitten'}, {'class': 'young', 'score': 0.508}, {'class': 'ash grey color', 'score': 0.849}, {'class': 'gray color', 'score': 0.571}]}], 'image': '../res/cat.jpg'}], 'images_processed': 1, 'custom_classes': 0}

参考

www.ibm.com

Visual Recognition - API reference | IBM Watson