我使用Windows构建器创建了一个程序,使用IBM Watson服务创建自定义分类器,一切正常,但是我使用文本fie中的分类器ID对图像进行分类存在问题。
当我将自定义分类器ID放在代码中时,它可以正常工作,但是当我尝试从TextField中获取该ID时,它将无法工作。
这是按钮动作事件中的代码。变量String id
完全输出parameters
方法中的内容但是它将id(cats_599303326)替换为TextField中的id但是当我将id
作为参数放在{ {1}}方法,程序无法成功运行。
另一方面,如果我评论所有内容并输出parameters
字符串,请将其复制并粘贴到id
方法中,它运行正常。
当我将变量parameters
传递给?
id
将变量VisualRecognition service = new VisualRecognition(
VisualRecognition.VERSION_DATE_2016_05_20
);
service.setEndPoint("https://gateway-a.watsonplatform.net/visual-recognition/api");
service.setApiKey("{api-key}");
File imagesStream = new File(textField.getText());
ClassifyOptions classifyOptions = null;
String id = String.format("\"{\\\"classifier_ids\\\": [\\\"%s\\\"]}\"", textField_1.getText());
System.out.println(id);
try {
classifyOptions = new ClassifyOptions.Builder()
.imagesFile(imagesStream)
.imagesFilename("Image ")
.parameters("{\"classifier_ids\": [\"cats_599303326\"]}") //inside the parameters method, the goal is to replace cats_599303326 with an id given from a textfield
.build();
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
ClassifiedImages result = service.classify(classifyOptions).execute();
System.out.println(result);
作为参数放在id
方法中的错误日志,如前所述,如果我只打印parameters
字符串,请将其复制并粘贴为id
方法程序中的参数将成功运行但如果我将其作为变量将不会运行:
parameters
答案 0 :(得分:0)
此错误表示服务无法解析您的JSON参数对象。我怀疑你在从文本字段中获取值时错过了引号或者没有将classifier_ids作为数组提交,但是如果没有更多的代码就无法告诉你如何做到这一点。
答案 1 :(得分:0)
如果stackoverflow家伙终身禁止我,然后来我家谋杀我,我会完全理解!!解决方案很简单,令人尴尬的是我没有想到它。基本上我创建的字符串有额外的引号。解决方案是:
String id = String.format("{\"classifier_ids\": [\"%s\"]}", textField_1.getText());