Android 使用Microsoft Computer Vision API未返回任何说明或标记
我想用微软的computer vision API制作一个android应用程序,我想做的是捕获一个图像并返回描述该图像的标签或标题。我的问题是,它确实返回了错误的json数据。以下是我到目前为止所做的 在AnalyzeActivity.java下处理方法Android 使用Microsoft Computer Vision API未返回任何说明或标记,android,computer-vision,microsoft-cognitive,Android,Computer Vision,Microsoft Cognitive,我想用微软的computer vision API制作一个android应用程序,我想做的是捕获一个图像并返回描述该图像的标签或标题。我的问题是,它确实返回了错误的json数据。以下是我到目前为止所做的 在AnalyzeActivity.java下处理方法 private String process() throws VisionServiceException, IOException { Gson gson = new Gson(); String[] features
private String process() throws VisionServiceException, IOException {
Gson gson = new Gson();
String[] features = {"ImageType", "Color", "Faces", "Adult", "Categories"};
String[] details = {};
ByteArrayOutputStream output = new ByteArrayOutputStream();
bitmapPicture.compress(Bitmap.CompressFormat.JPEG, 100, output);
ByteArrayInputStream inputStream = new ByteArrayInputStream(output.toByteArray());
AnalysisResult v = this.client.analyzeImage(inputStream, features, details);
String result = gson.toJson(v);
Log.d("result", result);
return result;
}
AnalyzeActivity下的onPostExecute方法
@Override
protected void onPostExecute(String data) {
super.onPostExecute(data);
mEditText.setText("");
if (e != null) {
mEditText.setText("Error: " + e.getMessage());
this.e = null;
} else {
Gson gson = new Gson();
AnalysisResult result = gson.fromJson(data, AnalysisResult.class);
mEditText.append("Definition: ");
mEditText.append("Image format: " + result.metadata.format + "\n");
mEditText.append("Image width: " + result.metadata.width + ", height:" + result.metadata.height + "\n");
for (Category category: result.categories) {
mEditText.append("Category: " + category.name + ", score: " + category.score + "\n");
}
for (Caption caption: result.description.captions) {
mEditText.append("Caption: " + caption.text + ", confidence: " + caption.confidence + "\n");
}
mEditText.append("\n");
for (String tag: result.description.tags) {
mEditText.append("Tag: " + tag + "\n");
}
mEditText.append("\n");
}
}
这是来自logcat的错误消息
致命异常:主流程:myapp.capstone.com.lumineux,PID:1693
java.lang.NullPointerException:尝试从字段读取 'java.util.List com.microsoft.projectoxford.vision.contract.Description.captions“在 空对象引用
在 myapp.capstone.com.lumineux.AnalyzeActivity$doRequest.onPostExecute(AnalyzeActivity.java:152) 在 myapp.capstone.com.lumineux.AnalyzeActivity$doRequest.onPostExecute(AnalyzeActivity.java:91) 位于android.os.AsyncTask.finish(AsyncTask.java:636) 在android.os.AsyncTask.access$500(AsyncTask.java:177) 在 android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:653) 位于android.os.Handler.dispatchMessage(Handler.java:102) 位于android.os.Looper.loop(Looper.java:135) 在android.app.ActivityThread.main(ActivityThread.java:5254)上
在java.lang.reflect.Method.invoke(本机方法)
在java.lang.reflect.Method.invoke(Method.java:372)
atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:902) 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697)
提前感谢。除非您要求,否则您的回复将不包含标题。您有两个选择: (1) 调用
/analyze?visualFeatures=Description
端点。在您的示例中,您可以通过将一行更改为以下内容来实现这一点:
String[] features = {"Description"};
(2) 调用/description
端点。对于讨论中的SDK,您将调用而不是AnalyzeActivity。换句话说,你会称之为:
AnalysisResult v = this.client.describe(inputStream, 1);
第二种方法更简单,也可以让您有机会获得多个候选句子(通过更改第二个参数)。如果您需要描述之外的其他功能,例如面
可能的重复,则第一种方法更方便