适用于Android的Microsoft Face API

时间:2015-08-05 16:59:44

标签: android microsoft-cognitive

我正在阅读针对Android手持设备的Microsoft面部API的入门教程。截至目前,除识别部分外的所有内容均有效。我可以浏览照片。但是,detect方法总是返回null,因此不会绘制红色矩形。如果某人已成功完成本教程,如果您能帮助我,我将不胜感激。这是检测方法:

public Face[] detect(InputStream image, boolean analyzesFaceLandmarks, boolean analyzesAge, boolean analyzesGender, boolean analyzesHeadPose) throws ClientException, IOException {
    Map<String, Object> params = new HashMap<>();

    params.put("analyzesAge", analyzesAge);
    params.put("analyzesGender", analyzesGender);
    params.put("analyzesFaceLandmarks", analyzesFaceLandmarks);
    params.put("analyzesHeadPose", analyzesHeadPose);

    String path = ServiceHost + "/detections";
    String uri = WebServiceRequest.getUrl(path, params);

    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    int bytesRead;
    byte[] bytes = new byte[1024];
    while ((bytesRead = image.read(bytes)) > 0) {
        byteArrayOutputStream.write(bytes, 0, bytesRead);
    }
    byte[] data = byteArrayOutputStream.toByteArray();
    params.clear();
    params.put("data", data);

    String json = this.restCall.request(uri, "POST", params, "application/octet-stream");
    Type listType = new TypeToken<List<Face>>() {
    }.getType();
    List<Face> faces = this.gson.fromJson(json, listType);

    return faces.toArray(new Face[faces.size()]);
}

1 个答案:

答案 0 :(得分:0)

看起来您发布的代码很好。这让我想知道问题是否可能与您作为输入参数传入的InputStream有关。可能是将源读入InputStream后,流的位置就在最后,因此当您从中读取时,没有任何内容被上传到api。

我建议您检查上传的图片数据量:

byte[] data = byteArrayOutputStream.toByteArray();
int length = data.length; // <- what is this value?

在再次读取之前,可能需要将流位置重置为开头。在阅读image

之前,可能需要这样的内容
if(image.markSupported())
{
    image.reset();
}
顺便说一句,我的java非常生疏,所以可能有更好的代码可供使用,但希望你能得到主旨。