我正在使用OpenCV来检测人脸并将其裁剪出图像帧。裁剪的图像需要通过Face API发送到Azure以进行面部识别。
Face API库(Microsoft.CognitiveServices.Face
)具有用于Stream的检测功能和用于URL的检测功能。我之所以选择Stream,是因为我不想先上传图片(性能)。
我的代码的以下部分在检测到一张(或多张)面孔时运行。检测到的FaceImage是Mat。我正在尝试将此Mat转换为Stream,以便可以将其发送到Azure。
我完全没有任何错误,但是一旦到达byte[] imageByte
,应用程序就会停止工作。添加断点后,我注意到它显示的imageStream流为:
stream.readtimeout引发了一个类型异常 'system.invalidoperationexception'”。
所以我假设它以某种方式无法读取Stream,但是我不明白为什么。我检查了byte [] imageByte,它确实有一个值(不是null),所以该部分似乎可以正常工作。
{
try
{
Console.WriteLine(faceRect.ToString());
var detectedFaceImage = new Mat(frame, faceRect);
byte[] imageByte = detectedFaceImage.ToBytes();
Stream imageStream = new MemoryStream(imageByte);
await GetFaceId(imageStream);
}
catch(Exception e)
{
Console.WriteLine(e);
throw e;
}
}
System.Threading.Thread.Sleep(5000);
Console.WriteLine(faces);
}
}
}
它什么也没做。
答案 0 :(得分:0)
如果您在IDE中检出CLR异常,我想您会看到一条更详细的异常消息。我知道这很明显,但是传入的字节数组:)确实有误。也许imageStream.Position = 0;
可以解决此问题,但我不确定。我需要更详细的异常消息。