はじめに
BluemixでWatson API のVisual Recognition を使う by curl のPython版.
構成は下記の通りです.
- サーバ:Bluemix上でVisual Recognitionのサービスをインスタンス化する
- クライアント:コマンドラインから
python
コマンドで学習と判別を行う
基本的には下記チュートリアルを参照しました.
Bluemix アカウントはトライアル版です.Bluemixにログインをした状態からスタートします.
手順
Visual Recognition のサービスを準備する
BluemixでWatson API のVisual Recognition を使う by curlと同一の手順を実行する.
Visual Recognition Python 用SDKをインストールする
ローカルで下記を実行.
pip install watson-developer-cloud
ユーザが用意した画像で学習させる
- ポジティブ画像群を***{positive_images}.zip***で保存する.
- 名称は任意でよい.
- 保存場所はローカルで良い.
- 今回はチュートリアル参考にbeagle.zip,husky.zip,golden-retriever.zip を保存した.
- ネガティブ画像群を***{negative_images}.zip***で保存する.
- 名称は任意でよい.
- 保存場所はローカルで良い.
- 今回はチュートリアル参考にcats.zip を保存した.
- 下記のようなコードで従って学習コマンドを実行する
import json
from os.path import join, dirname
from watson_developer_cloud import VisualRecognitionV3
def main():
visual_recognition = VisualRecognitionV3('2016-05-20', api_key='{api-key}')
print('Start Creating Classifier')
with open(join(dirname(__file__), '{positive_images}.zip'), 'rb') as file1, \
open(join(dirname(__file__), '{negative_images}.zip'), 'rb') as file2:
print(json.dumps(
visual_recognition.create_classifier('{classifier_name}',
{classname}_positive_examples=file1,
negative_examples=file2, indent=2))
print('Finish Creating Classifier')
if __name__ == '__main__':
main()
- 書式
- {positive_images}.zip: ポジティブクラスの画像群を格納したzipファイル.本ソースコードのファイルパスを基点とした相対パスを想定.
-
{classname} にクラス名が入る.
- 各クラスの接尾詞である"_positive_examples"と"_negative_examples"は固定.
- {negative_images}.zip:ネガティブクラスの画像群を格納したzipファイル.
- {classifier_prefix}:分類器名接頭辞
- {api-key}:先に取得したapi-key名
- versionを入れないと動かない.
- 例(チュートリアルを参考)
import json
from os.path import join, dirname
from watson_developer_cloud import VisualRecognitionV3
def main():
visual_recognition = VisualRecognitionV3('2016-05-20', api_key='{api-key}')
print('Start Creating Classifier')
with open(join(dirname(__file__), '../../resources/beagle.zip'), 'rb') as beagle, \
open(join(dirname(__file__), '../../resources/husky.zip'), 'rb') as husky, \
open(join(dirname(__file__), '../../resources/golden-retriever.zip'), 'rb') as golden_retriever, \
open(join(dirname(__file__), '../../resources/cats.zip'), 'rb') as cats:
print(json.dumps(
visual_recognition.create_classifier('dogs',
beagle_positive_examples=beagle,
husky_positive_example=husky,
goldenretriever_positive_examples=golden_retriever,
negative_examples=cats), indent=2))
print('Finish Creating Classifier')
if __name__ == '__main__':
main()
4.結果を確認する.
- 分類器のidや,クラスの種類等学習機に関わるパラメータが出力されたら,学習完了.
{
"classifier_id": "dogs_xxxxxxxxxx",
"name": "dogs",
"owner": "xxxx-xxxxx-xxx-xxxx",
"status": "training",
"created": "2016-xx-xxTxx:xx:xx.xxxZ",
"classes": [
{"class": "husky"},
{"class": "goldenretriever"},
{"class": "beagle"}
]
}
ユーザ学習によるカスタム分類器を利用する
- 下記内容を
myparams.json
として保存する.
-
{ "classifier_ids": ["dogs_xxxxxxxxxx", "default"] }
-
"dogs_xxxxxxxxxx"
は,先の処理で取得した"classifier_id"
と対応させる. -
"default"
は元々Visual Recognitionが持っている分類器のid. - こうして指定することで,複数の分類器の結果を得られる.
-
- 認識させたい画像を用意する.
- 名称は任意でよい.
- 保存場所はローカルで良い.Web上の画像でも良い.
- 今回はチュートリアル参考にbdogs.jpgを保存した.
- 認識させたい画像をカスタム分類器に送信し,学習結果と照合させる.
import json
from os.path import join, dirname
from watson_developer_cloud import VisualRecognitionV3
def main():
visual_recognition = VisualRecognitionV3('2016-05-20', api_key='{api-key}')
print('Start Classifying')
with open(join(dirname(__file__), '{image}.jpg'), 'rb') as file:
print(json.dumps(visual_recognition.classify(
images_file=file, threshold=0.1, classifier_ids=['{classifier_id}', 'default']), indent=2))
print('Finish Classifying')
if __name__ == '__main__':
main()
-
書式
- {image}.jpg: 認識対象の画像ファイル.本ソースコードのファイルパスを基点とした相対パスを想定.
- {classifier_id}:分類器id
- {api-key}:先に取得したapi-key名
-
例(チュートリアルを参考)
import json
from os.path import join, dirname
from watson_developer_cloud import VisualRecognitionV3
def main():
visual_recognition = VisualRecognitionV3('2016-05-20', api_key='{api_key}')
print('Start Classifying')
with open(join(dirname(__file__), '../../resources/dogs.jpg'), 'rb') as dogs:
print(json.dumps(visual_recognition.classify(
images_file=dogs, threshold=0.1, classifier_ids=['dogs_xxxxxxxxxx', 'default']), indent=2))
print('Finish Classifying')
if __name__ == '__main__':
main()
4.結果を確認する.
- 前半は元々Visual Recognitionが持っている分類器("classifier_id": "default")による結果.
- "animal", "mammal", "dog"
- 後半はカスタム分類器("classifier_id": "dogs_xxxxxxxxxx")による結果.
- "goldenretriever"
{
"images": [
{
"classifiers": [
{
"classes": [
{
"class": "animal",
"score": 1.0,
"type_hierarchy": "/animals"
},
{
"class": "mammal",
"score": 1.0,
"type_hierarchy": "/animals/mammal"
},
{
"class": "dog",
"score": 0.880797,
"type_hierarchy": "/animals/pets/dog"
}
],
"classifier_id": "default",
"name": "default"
},
{
"classes": [
{
"class": "goldenretriever",
"score": 0.610501
}
],
"classifier_id": "dogs_xxxxxxxxxx",
"name": "dogs"
}
],
"image": "dogs.jpg"
}
],
"images_processed": 1
}