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