Watsonで画像認識してみる


Watson Studioを使う

Watson Studioインスタンスの作成


→とりあえず、全部デフォルトで作成

Projectの作成

COS(Cloud Object Storage)の作成

画像を保存するストレージのインスタンスを作成する。

Projectの設定

ProjectにCOSを割り当てたので、Projectを設定していく。

Visual Recognitionのインスタンス作成

Notebookの作成


→セルにPythonのコードを書いて、一行ごとに実行する。

Watson SDKのインストール


!pip install --upgrade watson-developer-cloud


→最初はスペルミスでエラーになった。


from watson_developer_cloud import VisualRecognitionV3

学習する画像データを用意する。

割愛。(Googleさんで集めた)
Zipで固めておく

データのアップロード


ドラッグアンドドロップだとうまくできなかったので、browseから選択
犬と猫の画像をCOSにアップロード

COSからNotebookへのダウンロード

コードの挿入


※一番下のセルにカーソルを選択しておかないと、変なところにコードが入ってエラーになる。


・以下のimportより上は自動で挿入される。import以下を追記する。
・犬と猫2回やる。
・credentials_4 の数字は自動で挿入されるコードに合わせる。

# @hidden_cell
# The following code contains the credentials for a file in your IBM Cloud Object Storage.
# You might want to remove those credentials before you share your notebook.
credentials_4 = {
    'IAM_SERVICE_ID': 'iam-ServiceId-bea9af74-fa78-4594-8fa2-ba59cb7e1b2f',
    'IBM_API_KEY_ID': 'GNhhYxQDCvTOX-54uyhotkXArreYxDW2qd8CMXRySrna',
    'ENDPOINT': 'https://s3-api.us-geo.objectstorage.service.networklayer.com',
    'IBM_AUTH_ENDPOINT': 'https://iam.ng.bluemix.net/oidc/token',
    'BUCKET': 'sampleprojext-donotdelete-pr-v0hn5ybs9xbmyt',
    'FILE': 'cats.zip'
}
import ibm_boto3
from ibm_botocore.client import Config
cos = ibm_boto3.resource('s3',
                        ibm_api_key_id = credentials_4['IBM_API_KEY_ID'],
                        ibm_service_instance_id = credentials_4['IAM_SERVICE_ID'],
                        ibm_auth_endpoint = credentials_4['IBM_AUTH_ENDPOINT'],
                        config = Config(signature_version = 'oauth'),
                        endpoint_url = credentials_4['ENDPOINT']
                        )
cos.meta.client.download_file(credentials_4['BUCKET'],'cats.zip', 'cats.zip')

カスタムモデルの作成


API KeyはVisual RecognitionのインスタンスのAPI Key

from watson_developer_cloud import VisualRecognitionV3
visual_recognition = VisualRecognitionV3(
    '2019-09-22', iam_apikey='qwhCa2CXgPwq-ZTNnBgwZUTCQ8b61kv6ct3RUPHTt4qL')

classifier = visual_recognition.create_classifier('dogcat',
                                                 dog_positive_examples=dogs,
                                                 cat_positive_examples=cats,).get_result()
print(classifier)

トレーニング状況の確認

print(visual_recognition.get_classifier('dogcat_547431064').get_result())
{'classifier_id': 'dogcat_547431064', 'name': 'dogcat', 'status': 'training', 'owner': '6e4c9e3c-6cc3-4517-81ae-fbde24a96894', 'created': '2019-09-22T14:20:56.998Z', 'updated': '2019-09-22T14:20:56.998Z', 'classes': [{'class': 'cat'}, {'class': 'dog'}], 'core_ml_enabled': True}

→status がtrainingからreadyになればOK

画像認識確認

import json
result = visual_recognition.classify(
    url='https://www.petmd.com/sites/default/files/what-does-it-mean-when-cat-wags-tail.jpg',
    classifier_id=['dogcat_547431064'],
    threshold='0.2').get_result()
print(result)

{'images': [{'classifiers': [{'classifier_id': 'default', 'name': 'default', 'classes': [{'class': 'tabby cat', 'score': 0.86, 'type_hierarchy': '/animal/mammal/carnivore/feline/cat/domestic cat/tabby cat'}, {'class': 'domestic cat', 'score': 0.882}, {'class': 'cat', 'score': 0.948}, {'class': 'feline', 'score': 0.954}, {'class': 'carnivore', 'score': 0.954}, {'class': 'mammal', 'score': 0.954}, {'class': 'animal', 'score': 0.955}, {'class': 'gray color', 'score': 0.928}, {'class': 'ash grey color', 'score': 0.726}]}], 'source_url': 'https://www.petmd.com/sites/default/files/what-does-it-mean-when-cat-wags-tail.jpg', 'resolved_url': 'https://www.petmd.com/sites/default/files/what-does-it-mean-when-cat-wags-tail.jpg'}], 'images_processed': 1, 'custom_classes': 0}

→いかにも猫な画像を指定して、確認スコアは0.948でした。
 それ以外にも色とかも識別している。

まとめ

・多少Pythonを書く必要があるが、簡単に画像認識を確認することができた。
・アプリとかとの連携も試してみたい。そのうち・・