Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何通过人脸检测获得准确的人数?_Python_Opencv - Fatal编程技术网

Python 如何通过人脸检测获得准确的人数?

Python 如何通过人脸检测获得准确的人数?,python,opencv,Python,Opencv,我正在使用opencv获取视频流中的总人数。问题是,我的代码只捕获帧中的人数,而没有考虑流中的所有帧。我考虑从视频或网络摄像头中提取所有检测到的人脸,然后进行比较。我的问题是,如何通过比较提取的人脸来获得准确的人数?或者是否有其他方法来获取总计数 这是一个检测人脸并给出性别和计数的函数(但仅适用于该帧) 尝试对每个帧的所有面进行散列。然后将每个散列存储在一个集合中,并获取其大小以查找视频提要中的面数。如果我理解您的问题,简而言之,您的问题可以分为以下几部分: 0-检测:对于每个帧,检测零个或多个

我正在使用opencv获取视频流中的总人数。问题是,我的代码只捕获帧中的人数,而没有考虑流中的所有帧。我考虑从视频或网络摄像头中提取所有检测到的人脸,然后进行比较。我的问题是,如何通过比较提取的人脸来获得准确的人数?或者是否有其他方法来获取总计数

这是一个检测人脸并给出性别和计数的函数(但仅适用于该帧)


尝试对每个帧的所有面进行散列。然后将每个散列存储在一个集合中,并获取其大小以查找视频提要中的面数。

如果我理解您的问题,简而言之,您的问题可以分为以下几部分:

0-检测:对于每个帧,检测零个或多个面。此步骤的输出是一系列“事件”。每个事件都是一个面和在图像中检测到该面的区域的坐标:

evts = {{face0, (x0,y0,w0,h0)}, {face1, (x1,y1,w1,h1)}, ..., {faceN, (xN,yN,wN,hN)}} 
对于N+1个检测到的面

1-识别:此步骤的目标是为上一步骤中检测到的每个事件(面部/区域)提供ID。因此,对于EVT中的每个面或: I.该面是一个“新面”,因此,将生成一个新ID并将其分配给该面 二,。该面与前一帧中检测到的面相同,因此应为该面指定前一个相同的ID。此步骤的输出是已分配ID的集合:

ids = {id0, id1, id2, ..., idM}
2-计数:重复步骤1和2直到最后一帧。ids集合的大小是视频流中不同面的计数

真正的问题

真正的问题是:如何确定帧X中的事件(本例中的面)是否与帧Y中的“相同”面?是的,这是关键问题。在您的情况下,您应该混合使用以下方法:

  • 执行人脸识别(人脸识别与人脸检测不同)。幸运的是,过去几年在这个领域有很多改进,您可以或多或少地在代码中使用或类似的API来满足您的需求。不要浪费你的时间去尝试人脸识别(它们是在2001年推出的,对于今天的实际需要可能没有那么精确)
  • 考虑空间和时间局部性原则,并最大限度地提高在相邻区域中为连续帧找到相同人脸的可能性
考虑到姿态变化、光照和遮挡等问题,利用先前检测到的人脸位置来识别当前人脸比人脸识别算法更具鲁棒性。这取决于您的视频和场景

要实现此问题的稳健解决方案,有几个操作问题:

  • 不同姿势的同一张脸
  • 不同比例的脸
  • 遮挡(始终是一个问题)
  • 实时性要求
以及所有与简历相关的挑战。因此,做好处理误报/漏报率的准备

小贴士:

  • 针对多个不同的视频尝试您的解决方案,以避免过度拟合
  • 如果在视频中,人脸正在移动,则可能会很有用

我写了很多。希望我真的理解了您的问题。

我们知道您正在使用python和opencv,因为您将问题标记为python和opencv。无需在您的问题中提出这一点。如果人脸识别用于此目的,则每个测试人员的人脸必须已存储在数据库中,以便其识别,这将是不好的,因为测试没有意义。这就像记忆
ids = {id0, id1, id2, ..., idM}