我正在阅读针对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()]);
}
答案 0 :(得分:0)
看起来您发布的代码很好。这让我想知道问题是否可能与您作为输入参数传入的InputStream有关。可能是将源读入InputStream后,流的位置就在最后,因此当您从中读取时,没有任何内容被上传到api。
我建议您检查上传的图片数据量:
byte[] data = byteArrayOutputStream.toByteArray();
int length = data.length; // <- what is this value?
在再次读取之前,可能需要将流位置重置为开头。在阅读image
if(image.markSupported())
{
image.reset();
}
顺便说一句,我的java非常生疏,所以可能有更好的代码可供使用,但希望你能得到主旨。