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はまだ基本的なことしかわからないので触っていきながら理解していくことになる