IBM 视觉识别:创建分类器
IBM Visual Recognition: Create Classifier
我已经根据 IBM 的预配置分类器对图像进行了分类。
现在我尝试创建然后使用我自己的分类器(称为“圣诞老人”)来识别圣诞老人的图像:
VisualRecognition service = new VisualRecognition(VisualRecognition.VERSION_DATE_2016_05_19);
service.setApiKey("***************");
File santa = new File("src/images/Santa.zip");
File notSanta = new File("src/images/NotSanta.zip");
CreateClassifierOptions classifierOptions = new CreateClassifierOptions.Builder()
.classifierName("Santa").addClass("Santa", santa).negativeExamples(notSanta).build();
VisualClassifier santaClassifier = service.createClassifier(classifierOptions).execute();
List<String> classifierIds = new ArrayList<String>();
classifierIds.add(santaClassifier.getId());
ClassifyImagesOptions classifyOptionsSanta = new ClassifyImagesOptions.Builder()
.classifierIds(classifierIds)
.images(new File ("src/images/lilSanta.png")).build();
VisualClassification resultSanta = service.classify(classifyOptionsSanta).execute();
System.out.println(resultSanta);
但后来我得到了这个答案:
{
"images_processed": 0,
"images": [
{
"classifiers": [],
"image": "lilSanta.png"
}
]
}
为什么答案中处理的图像为零且没有分类器?
我做错了什么?
编辑
我现在使用 Curl 创建分类器并等待它完全训练。然后我记下了 Classifier-ID,现在我可以轻松地使用 Java 了。我现在也用了50张图片。感谢您的帮助!
images_processed
为零,因为该服务不会向您收取使用自定义分类器的费用。该参数旨在用作计算 API 调用将花费多少的方法。
您的代码看起来没问题。我做了一些小改动并降低了阈值(默认为0.5
):
VisualRecognition service = new VisualRecognition(VisualRecognition.VERSION_DATE_2016_05_19);
service.setApiKey("***************");
CreateClassifierOptions classifierOptions = new CreateClassifierOptions.Builder()
.classifierName("Santa")
.addClass("Santa", new File("src/images/Santa.zip"))
.negativeExamples(new File("src/images/NotSanta.zip"))
.build();
VisualClassifier santaClassifier = service.createClassifier(classifierOptions).execute();
ClassifyImagesOptions classifyOptionsSanta = new ClassifyImagesOptions.Builder()
.classifierIds(santaClassifier.getId())
.images(new File ("src/images/lilSanta.png"))
.threshold(0.0)
.build();
VisualClassification resultSanta = service.classify(classifyOptionsSanta).execute();
System.out.println(resultSanta);
确保您要发送 50 张圣诞老人和非圣诞老人的图片。
我发现当我使用 mac 创建 zip 时,我得到了一些额外的 __MACOX
文件。使用 unzip
检查 zip 文件
unzip -l <zip-file>
我现在使用 Curl 创建分类器并等待它完全训练。然后我记下了 Classifier-ID,现在我可以轻松地使用 Java 了。我现在也用了50张图片。感谢您的帮助!
我已经根据 IBM 的预配置分类器对图像进行了分类。
现在我尝试创建然后使用我自己的分类器(称为“圣诞老人”)来识别圣诞老人的图像:
VisualRecognition service = new VisualRecognition(VisualRecognition.VERSION_DATE_2016_05_19);
service.setApiKey("***************");
File santa = new File("src/images/Santa.zip");
File notSanta = new File("src/images/NotSanta.zip");
CreateClassifierOptions classifierOptions = new CreateClassifierOptions.Builder()
.classifierName("Santa").addClass("Santa", santa).negativeExamples(notSanta).build();
VisualClassifier santaClassifier = service.createClassifier(classifierOptions).execute();
List<String> classifierIds = new ArrayList<String>();
classifierIds.add(santaClassifier.getId());
ClassifyImagesOptions classifyOptionsSanta = new ClassifyImagesOptions.Builder()
.classifierIds(classifierIds)
.images(new File ("src/images/lilSanta.png")).build();
VisualClassification resultSanta = service.classify(classifyOptionsSanta).execute();
System.out.println(resultSanta);
但后来我得到了这个答案:
{
"images_processed": 0,
"images": [
{
"classifiers": [],
"image": "lilSanta.png"
}
]
}
为什么答案中处理的图像为零且没有分类器? 我做错了什么?
编辑
我现在使用 Curl 创建分类器并等待它完全训练。然后我记下了 Classifier-ID,现在我可以轻松地使用 Java 了。我现在也用了50张图片。感谢您的帮助!
images_processed
为零,因为该服务不会向您收取使用自定义分类器的费用。该参数旨在用作计算 API 调用将花费多少的方法。
您的代码看起来没问题。我做了一些小改动并降低了阈值(默认为0.5
):
VisualRecognition service = new VisualRecognition(VisualRecognition.VERSION_DATE_2016_05_19);
service.setApiKey("***************");
CreateClassifierOptions classifierOptions = new CreateClassifierOptions.Builder()
.classifierName("Santa")
.addClass("Santa", new File("src/images/Santa.zip"))
.negativeExamples(new File("src/images/NotSanta.zip"))
.build();
VisualClassifier santaClassifier = service.createClassifier(classifierOptions).execute();
ClassifyImagesOptions classifyOptionsSanta = new ClassifyImagesOptions.Builder()
.classifierIds(santaClassifier.getId())
.images(new File ("src/images/lilSanta.png"))
.threshold(0.0)
.build();
VisualClassification resultSanta = service.classify(classifyOptionsSanta).execute();
System.out.println(resultSanta);
确保您要发送 50 张圣诞老人和非圣诞老人的图片。
我发现当我使用 mac 创建 zip 时,我得到了一些额外的 __MACOX
文件。使用 unzip
unzip -l <zip-file>
我现在使用 Curl 创建分类器并等待它完全训练。然后我记下了 Classifier-ID,现在我可以轻松地使用 Java 了。我现在也用了50张图片。感谢您的帮助!