gpt4 book ai didi

c# - 为什么 OnImageResults 监听器在面孔丢失时继续将面孔附加到集合中,而不是在开始时重新插入?

转载 作者:行者123 更新时间:2023-11-30 23:29:20 25 4
gpt4 key购买 nike

我目前正在开发一种桌面软件解决方案,该解决方案使用 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.
“System.Collections.Generic.KeyNotFoundException”类型的第一次机会异常发生在 mscorlib.dll
中。

有更好的方法吗?在 Listener 周围创建一个包装器并确保如果有一张脸,它总是在开头是否明智?

这是我的第一个问题,所以如果我遗漏了问题中的任何内容,请告诉我。谢谢

最佳答案

onImageResults调用返回 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# - 为什么 OnImageResults 监听器在面孔丢失时继续将面孔附加到集合中,而不是在开始时重新插入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35522203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com