为什么 OnImageResults 侦听器在面孔丢失时继续将面孔附加到集合中,而不是在开始时重新插入?
Why does the OnImageResults listener keep appending faces to the collection when a face is lost instead of reinserting at the beginning?
我目前正在开发一个桌面软件解决方案,该解决方案使用 C# WPF 中的套接字使用实时通信将数据从客户端传输到服务器。客户端和服务器定义在同一个应用程序中,但角色是根据用户类型决定的(学生是客户端,老师是服务器)
我正在使用Affdex 3.0 SDK采集学生的面部表情数据,然后将其发送到服务器。
我的问题是,第一次启动CameraDetector并跟踪第一张人脸时,一切正常,但是一旦人脸丢失然后重新进入要跟踪的图像,新检测到的人脸附加到集合而不是在开头重新插入并触发 key not found exception
。我考虑过遍历集合,直到找到一张有效的脸,但这不是一个理想的解决方案。
public void onImageResults(Dictionary<int, Affdex.Face> faces, Affdex.Frame image)
{
Affdex.Face face;
if (faces.Count() >= 1)
{
try
{
face = faces[0];
UpdateExpressionsDials(face);
}
catch(Exception e)
{
Console.WriteLine("face failed " + e.Message.ToString());
}
}
}
这失败了 face failed The given key was not present in the dictionary.
A first chance exception of type 'System.Collections.Generic.KeyNotFoundException' occurred in mscorlib.dll
。
有更好的方法吗?在 Listener 周围创建一个包装器并确保如果有一张脸,它总是在开头是否明智?
这是我的第一个问题,所以如果我遗漏了问题中的任何内容,请告诉我。谢谢
onImageResults
调用returns一个Dictionary<int, Affdex.Face> faces
这是一个字典,一个键=一个代表人脸id的int和一个值=Affdex.Face.
您的代码假定面部 ID 将始终为 0,这是不正确的。
那句话
face = faces[0]
使用 key=0
在字典中创建一个空节点
相反,您应该遍历字典项目
foreach (KeyValuePair<int, Affdex.Face> pair in Faces)
{
Affdex.Face face = pair.Value;
UpdateExpressionsDials(face);
}
或者,如果你只知道字典最多只有一个条目,那就是将要检测的人脸数设置为1。那么,你可以直接使用Collection.First().Value
我目前正在开发一个桌面软件解决方案,该解决方案使用 C# WPF 中的套接字使用实时通信将数据从客户端传输到服务器。客户端和服务器定义在同一个应用程序中,但角色是根据用户类型决定的(学生是客户端,老师是服务器)
我正在使用Affdex 3.0 SDK采集学生的面部表情数据,然后将其发送到服务器。
我的问题是,第一次启动CameraDetector并跟踪第一张人脸时,一切正常,但是一旦人脸丢失然后重新进入要跟踪的图像,新检测到的人脸附加到集合而不是在开头重新插入并触发 key not found exception
。我考虑过遍历集合,直到找到一张有效的脸,但这不是一个理想的解决方案。
public void onImageResults(Dictionary<int, Affdex.Face> faces, Affdex.Frame image)
{
Affdex.Face face;
if (faces.Count() >= 1)
{
try
{
face = faces[0];
UpdateExpressionsDials(face);
}
catch(Exception e)
{
Console.WriteLine("face failed " + e.Message.ToString());
}
}
}
这失败了 face failed The given key was not present in the dictionary.
A first chance exception of type 'System.Collections.Generic.KeyNotFoundException' occurred in mscorlib.dll
。
有更好的方法吗?在 Listener 周围创建一个包装器并确保如果有一张脸,它总是在开头是否明智?
这是我的第一个问题,所以如果我遗漏了问题中的任何内容,请告诉我。谢谢
onImageResults
调用returns一个Dictionary<int, Affdex.Face> faces
这是一个字典,一个键=一个代表人脸id的int和一个值=Affdex.Face.
您的代码假定面部 ID 将始终为 0,这是不正确的。
那句话
face = faces[0]
使用 key=0
相反,您应该遍历字典项目
foreach (KeyValuePair<int, Affdex.Face> pair in Faces)
{
Affdex.Face face = pair.Value;
UpdateExpressionsDials(face);
}
或者,如果你只知道字典最多只有一个条目,那就是将要检测的人脸数设置为1。那么,你可以直接使用Collection.First().Value