ibm bluemixでVisualRecognitionを試す
使うのは無料枠のみ
お金かかってもいいけど役に立つかを検証したい
VisualRecognitionってなに?
画像認識を行うみたい。とりあえず画像を読み込ませて設定したらできるらしい
今回は画像を読み込ませてjavaで実行するみたいなやつ
事前準備
eclipseでmavenでプロジェクトを作成して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を試した
分類器作成
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で使えるかわからないけどちょっとずつ調べていく