m_shige1979のときどきITブログ

プログラムの勉強をしながら学習したことや経験したことをぼそぼそと書いていきます

Github(変なおっさんの顔でるので気をつけてね)

https://github.com/mshige1979

ibm bluemixでVisualRecognitionを試す

使うのは無料枠のみ

お金かかってもいいけど役に立つかを検証したい

環境

ホスト

mac

開発環境

eclipse
※bluemixの設定などは事前に済ませておく

VisualRecognitionってなに?

画像認識を行うみたい。とりあえず画像を読み込ませて設定したらできるらしい
今回は画像を読み込ませてjavaで実行するみたいなやつ

事前準備

eclipsemavenでプロジェクトを作成してpom.xmlに以下を追加

pom.xml
    <dependency>
      <groupId>com.ibm.watson.developer_cloud</groupId>
      <artifactId>java-sdk</artifactId>
      <version>3.4.0</version>
    </dependency>

※dependenciesの中に追加する

分類キー登録

Java
package com.sample2;

import java.io.File;

import com.ibm.watson.developer_cloud.visual_recognition.v3.*;
import com.ibm.watson.developer_cloud.visual_recognition.v3.model.ClassifierOptions;
import com.ibm.watson.developer_cloud.visual_recognition.v3.model.VisualClassifier;

/**
 * Hello world!
 *
 */
public class App 
{
	// API_KEY
	final private static String API_KEY = "取得するキーを設定する";

    public static void main( String[] args )
    {
    	System.out.println( "VisualRecognition createClassifier start" );
        
        // インスタンス生成
        VisualRecognition service = new VisualRecognition(VisualRecognition.VERSION_DATE_2016_05_20);
        service.setApiKey(API_KEY);
        
        // 分類キーを作成
        ClassifierOptions options = new ClassifierOptions.Builder()
        		.classifierName("sample1")
        		.addClass("type1", new File("./VR/images/type1.zip"))
        		.addClass("type2", new File("./VR/images/type2.zip"))
        		.addClass("type3", new File("./VR/images/type3.zip"))
        		.addClass("type4", new File("./VR/images/type4.zip"))
        		.addClass("type5", new File("./VR/images/type5.zip"))
        		.build();
        VisualClassifier result = service.createClassifier(options).execute();
        
        // 結果を表示
        System.out.println(result);
        
        System.out.println( "VisualRecognition createClassifier end" );
    }
}

VisualRecognition createClassifier start
{
  "classifier_id": "ClassifierのID",
  "name": "sample1",
  "classes": [
    {
      "class": "type4"
    },
    {
      "class": "type3"
    },
    {
      "class": "type2"
    },
    {
      "class": "type1"
    },
    {
      "class": "type5"
    }
  ],
  "owner": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "created": "2016-10-10T05:44:22.400",
  "status": "training"
}
VisualRecognition createClassifier end

Classifierのデータを取得

Java
package com.sample3;

import java.util.concurrent.ExecutionException;
import com.ibm.watson.developer_cloud.http.ServiceCall;
import com.ibm.watson.developer_cloud.visual_recognition.v3.VisualRecognition;
import com.ibm.watson.developer_cloud.visual_recognition.v3.model.VisualClassifier;

/**
 * Hello world!
 *
 */
public class App 
{
	// API_KEY
		final private static String API_KEY = "取得するキーを設定する";

	    public static void main( String[] args ) throws InterruptedException, ExecutionException
	    {
	    	System.out.println( "VisualRecognition getClassifier start" );
	        
	        // インスタンス生成
	        VisualRecognition service = new VisualRecognition(VisualRecognition.VERSION_DATE_2016_05_20);
	        service.setApiKey(API_KEY);
	        
	        // 詳細情報
	        ServiceCall<VisualClassifier> result = service.getClassifier("ClassifierのID");
	        
	        // 結果を表示
	        System.out.println(result.rx().get().toString());
	        
	        System.out.println( "VisualRecognition getClassifier end" );
	    }
}

VisualRecognition getClassifier start
{
  "classifier_id": "ClassifierのID",
  "name": "sample1",
  "classes": [
    {
      "class": "type4"
    },
    {
      "class": "type3"
    },
    {
      "class": "type2"
    },
    {
      "class": "type1"
    },
    {
      "class": "type5"
    }
  ],
  "owner": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "created": "2016-10-10T05:44:22.400",
  "status": "ready"
}
VisualRecognition getClassifier end

画像を与えて分類のスコアを算出

Java
package com.sample;

import java.io.File;
import java.util.Arrays;
import java.util.List;

import com.ibm.watson.developer_cloud.visual_recognition.v3.*;
import com.ibm.watson.developer_cloud.visual_recognition.v3.model.ClassifyImagesOptions;
import com.ibm.watson.developer_cloud.visual_recognition.v3.model.VisualClassification;

/**
 * Hello world!
 *
 */
public class App 
{
	// API_KEY
	final private static String API_KEY = "取得するキーを設定する";
	
    public static void main( String[] args )
    {
        System.out.println( "VisualRecognition classify start" );
        
        // インスタンス生成
        VisualRecognition service = new VisualRecognition(VisualRecognition.VERSION_DATE_2016_05_20);
        service.setApiKey(API_KEY);
        
        // classifierIds用
        List<String> list = Arrays.asList("ClassifierのID");
        
        // スコアを取得
        ClassifyImagesOptions options = new ClassifyImagesOptions.Builder()
        		.classifierIds(list)
        		.threshold(0.0)
        		.images(new File("./VR/images/type1/0100.jpeg"))
        	    .build();
        VisualClassification result = service.classify(options).execute();
        
        // 結果を表示
        System.out.println(result);
        
        System.out.println( "VisualRecognition classify end" );
    }
}

VisualRecognition classify start
{
  "images_processed": 1,
  "images": [
    {
      "classifiers": [
        {
          "classifier_id": "ClassifierのID",
          "name": "sample1",
          "classes": [
            {
              "class": "type1",
              "score": 0.986812
            },
            {
              "class": "type2",
              "score": 0.0412107
            },
            {
              "class": "type3",
              "score": 0.103716
            },
            {
              "class": "type4",
              "score": 0.0636262
            },
            {
              "class": "type5",
              "score": 0.111918
            }
          ]
        }
      ],
      "image": "0100.jpeg"
    }
  ]
}
VisualRecognition classify end

現在登録している分類キーの情報

Java
package com.sample4;

import java.util.List;
import java.util.concurrent.ExecutionException;
import com.ibm.watson.developer_cloud.http.ServiceCall;
import com.ibm.watson.developer_cloud.visual_recognition.v3.VisualRecognition;
import com.ibm.watson.developer_cloud.visual_recognition.v3.model.VisualClassifier;

/**
 * Hello world!
 *
 */
public class App 
{
	// API_KEY
	final private static String API_KEY = "取得するキーを設定する";

	public static void main( String[] args ) throws InterruptedException, ExecutionException
	{
		System.out.println( "VisualRecognition getClassifiers start" );
		        
		// インスタンス生成
		VisualRecognition service = new VisualRecognition(VisualRecognition.VERSION_DATE_2016_05_20);
		service.setApiKey(API_KEY);
		        
		// 詳細情報
		ServiceCall<List<VisualClassifier>> result = service.getClassifiers();
		
		// 結果を表示
		System.out.println(result.rx().get().toString());
		        
		System.out.println( "VisualRecognition getClassifiers end" );
	}
}

VisualRecognition getClassifiers start
[{
  "classifier_id": "ClassifierのID",
  "name": "sample1",
  "classes": [
    {
      "class": "type4"
    },
    {
      "class": "type3"
    },
    {
      "class": "type2"
    },
    {
      "class": "type1"
    },
    {
      "class": "type5"
    }
  ],
  "owner": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "created": "2016-10-10T05:44:22.400",
  "status": "ready"
}]
VisualRecognition getClassifiers end

削除

Java
package com.sample5;

import java.util.concurrent.ExecutionException;
import com.ibm.watson.developer_cloud.http.ServiceCall;
import com.ibm.watson.developer_cloud.visual_recognition.v3.VisualRecognition;

/**
 * Hello world!
 *
 */
public class App 
{
	// API_KEY
	final private static String API_KEY = "取得するキーを設定する";

	public static void main( String[] args ) throws InterruptedException, ExecutionException
	{
		System.out.println( "VisualRecognition deleteClassifier start" );
		        
		// インスタンス生成
		VisualRecognition service = new VisualRecognition(VisualRecognition.VERSION_DATE_2016_05_20);
		service.setApiKey(API_KEY);
		        
		// 詳細情報
		service.deleteClassifier("ClassifierのID");
		        
		System.out.println( "VisualRecognition deleteClassifier end" );
	}
}

所感

基本的なものだけ触ってみた、リファレンスと同期がどれていない感じなので必要なパラメータがよくわからないので手探りになりそう。
Javaはまだ基本的なことしかわからないので触っていきながら理解していくことになる

watsonのNatural Language Classifierを試した

環境

ホスト

mac

開発環境

eclipse

準備

mavenを使えるようにしておく
ibm bluemixを登録しておく

分類器作成

Java
package com.nlc.sample1;

import java.io.File;

import com.ibm.watson.developer_cloud.natural_language_classifier.v1.NaturalLanguageClassifier;
import com.ibm.watson.developer_cloud.natural_language_classifier.v1.model.Classifier;

/**
 * Hello world!
 *
 */
public class App 
{
	
	final private static String UserName = "資格情報のユーザー名";
	final private static String Password = "資格情報のパスワード";
	
    public static void main( String[] args )
    {
        System.out.println( "Natural Language Classifier createClassifier start" );
        
        // インスタンス生成
        NaturalLanguageClassifier service = new NaturalLanguageClassifier();
        service.setUsernameAndPassword(UserName, Password);
        
        // 分類キー作成
        Classifier classifier = service.createClassifier("My Classifier", "ja", 
        		new File("./nlc/training02.csv")).execute();
        
        // 結果表示
        System.out.println(classifier);
        
        System.out.println( "Natural Language Classifier createClassifier end" );
    }
}

Natural Language Classifier createClassifier start
{
  "classifier_id": "分類器のID",
  "language": "ja",
  "name": "My Classifier",
  "status": "Training",
  "created": "2016-10-10T10:49:02.767",
  "status_description": "The classifier instance is in its training phase, not yet ready to accept classify requests",
  "url": "https://gateway.watsonplatform.net/natural-language-classifier/api/v1/classifiers/分類器のID"
}
Natural Language Classifier createClassifier end

分類器作成確認

Java
package com.nlc.sample2;

import com.ibm.watson.developer_cloud.natural_language_classifier.v1.NaturalLanguageClassifier;
import com.ibm.watson.developer_cloud.natural_language_classifier.v1.model.Classifier;

/**
 * Hello world!
 *
 */
public class App 
{
	
	final private static String UserName = "資格情報のユーザー名";
	final private static String Password = "資格情報のパスワード";
	
    public static void main( String[] args )
    {
        System.out.println( "Natural Language Classifier getClassifier start" );
        
        // インスタンス生成
        NaturalLanguageClassifier service = new NaturalLanguageClassifier();
        service.setUsernameAndPassword(UserName, Password);
        
        // 分類キーより取得
        Classifier classifier = service.getClassifier("分類器のID").execute();
        
        // 結果表示
        System.out.println(classifier);
        
        System.out.println( "Natural Language Classifier getClassifier end" );
    }
}

Natural Language Classifier getClassifier start
{
  "classifier_id": "分類器のID",
  "language": "ja",
  "name": "My Classifier",
  "status": "Available",
  "created": "2016-10-10T10:49:02.767",
  "status_description": "The classifier instance is now available and is ready to take classifier requests.",
  "url": "https://gateway.watsonplatform.net/natural-language-classifier/api/v1/classifiers/分類器のID"
}
Natural Language Classifier getClassifier end

分類処理

Java
package com.nlc.sample3;

import com.ibm.watson.developer_cloud.natural_language_classifier.v1.NaturalLanguageClassifier;
import com.ibm.watson.developer_cloud.natural_language_classifier.v1.model.Classification;

/**
 * Hello world!
 *
 */
public class App 
{
	
	final private static String UserName = "資格情報のユーザー名";
	final private static String Password = "資格情報のパスワード";
	
    public static void main( String[] args )
    {
        System.out.println( "Natural Language Classifier classify start" );
        
        // インスタンス生成
        NaturalLanguageClassifier service = new NaturalLanguageClassifier();
        service.setUsernameAndPassword(UserName, Password);
        
        // 分類処理
        Classification classification = service.classify("分類器のID",
        		  "レトリバー").execute();
        
        // 結果表示
        System.out.println(classification);
        
        System.out.println( "Natural Language Classifier classify end" );
    }
}

Natural Language Classifier classify start
{
  "classes": [
    {
      "confidence": 0.9134736500854426,
      "class_name": "dog9"
    },
    {
      "confidence": 0.02781542678029993,
      "class_name": "dog2"
    },
    {
      "confidence": 0.016548178008526607,
      "class_name": "dog1"
    },
    {
      "confidence": 0.012186275707481627,
      "class_name": "dog3"
    },
    {
      "confidence": 0.006295053604774933,
      "class_name": "dog6"
    },
    {
      "confidence": 0.006138443595939543,
      "class_name": "dog5"
    },
    {
      "confidence": 0.005814188944908609,
      "class_name": "dog8"
    },
    {
      "confidence": 0.004186655385592137,
      "class_name": "dog7"
    },
    {
      "confidence": 0.004046516438248506,
      "class_name": "dog4"
    },
    {
      "confidence": 0.00349561144878548,
      "class_name": "dog10"
    }
  ],
  "classifier_id": "分類器のID",
  "text": "レトリバー",
  "top_class": "dog9",
  "url": "https://gateway.watsonplatform.net/natural-language-classifier/api/v1/classifiers/分類器のID"
}
Natural Language Classifier classify end

分類一覧取得

Java
package com.nlc.sample4;

import com.ibm.watson.developer_cloud.natural_language_classifier.v1.NaturalLanguageClassifier;
import com.ibm.watson.developer_cloud.natural_language_classifier.v1.model.Classifiers;

/**
 * Hello world!
 *
 */
public class App 
{
	
	final private static String UserName = "資格情報のユーザー名";
	final private static String Password = "資格情報のパスワード";
	
    public static void main( String[] args )
    {
        System.out.println( "Natural Language Classifier getClassifiers start" );
        
        // インスタンス生成
        NaturalLanguageClassifier service = new NaturalLanguageClassifier();
        service.setUsernameAndPassword(UserName, Password);
        
        // 一覧を取得
        Classifiers classifiers = service.getClassifiers().execute();
        
        // 結果表示
        System.out.println(classifiers);
        
        System.out.println( "Natural Language Classifier getClassifiers end" );
    }
}

Natural Language Classifier getClassifiers start
{
  "classifiers": [
    {
      "classifier_id": "分類器のID",
      "language": "ja",
      "name": "My Classifier",
      "created": "2016-10-10T10:49:02.767",
      "url": "https://gateway.watsonplatform.net/natural-language-classifier/api/v1/classifiers/分類器のID"
    }
  ]
}
Natural Language Classifier getClassifiers end

分類器削除

Java
package com.nlc.sample5;

import com.ibm.watson.developer_cloud.natural_language_classifier.v1.NaturalLanguageClassifier;
import com.ibm.watson.developer_cloud.natural_language_classifier.v1.model.Classifiers;

/**
 * Hello world!
 *
 */
public class App 
{
	
	final private static String UserName = "資格情報のユーザー名";
	final private static String Password = "資格情報のパスワード";
	
    public static void main( String[] args )
    {
        System.out.println( "Natural Language Classifier deleteClassifier start" );
        
        // インスタンス生成
        NaturalLanguageClassifier service = new NaturalLanguageClassifier();
        service.setUsernameAndPassword(UserName, Password);
        
        // 分類器を削除
        service.deleteClassifier("分類器のID").execute();
        
        System.out.println( "Natural Language Classifier deleteClassifier end" );
    }
}

とりあえずこんな感じ
watsonで使えるかわからないけどちょっとずつ調べていく