Android 使用Microsoft Computer Vision API未返回任何说明或标记

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

我想用微软的computer vision API制作一个android应用程序,我想做的是捕获一个图像并返回描述该图像的标签或标题。我的问题是,它确实返回了错误的json数据。以下是我到目前为止所做的

在AnalyzeActivity.java下处理方法

 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);
第二种方法更简单,也可以让您有机会获得多个候选句子(通过更改第二个参数)。如果您需要描述之外的其他功能,例如

可能的重复,则第一种方法更方便