【发布时间】:2020-04-04 13:02:37
【问题描述】:
我正在使用 OpenCV 检测人脸并将人脸从图像帧中裁剪出来。裁剪后的图像需要通过人脸 API 发送到 Azure 进行人脸识别。
人脸 API 库 (Microsoft.CognitiveServices.Face) 有一个用于 Stream 的 Detect 函数和一个用于 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);
}
}
}
它没有任何作用。
【问题讨论】: