我目前正在开发一种桌面软件解决方案,该解决方案使用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调用返回一个Dictionary<int, Affdex.Face> faces,该字典是一个key =一个表示面部id的int和一个value = Affdex.Face的字典。

您的代码假定人脸ID始终为0,这是不正确的。

那句话

face = faces[0]


使用key=0在字典中创建一个空节点

相反,您应该遍历Dictionary项

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/

10-12 12:37