最近,我一直在使用树莓派相机OpenCV和Python进行一个项目,以实时计算经过特定区域的人数,因为对于我来说,使用此方法比处理录制的视频更容易。
所有代码都可以正常工作,但是我一直在计算它的计数部分问题,
1-如果某个对象停留在参考线中,它将继续增加计数;
2-有时取决于对象的速度,它会被多次计数;
我不是python专家,并且可能缺少英文单词来寻找适当的解决方案,因此我认为也许有人可以告诉我在这里解决该问题的更好方法。为了说明,这是一个gif示例:
即使看起来好像有多个参考框越过该线,它也仅在一个参考框越过线以及对象停留在线时发生。
这是检查对象是否越线的代码:
if (TestaInterseccaoEntrada(CoordenadaYCentroContorno,CoordenadaYLinhaEntrada,CoordenadaYLinhaSaida)):
ContadorEntradas += 1
if (TestaInterseccaoSaida(CoordenadaYCentroContorno,CoordenadaYLinhaEntrada,CoordenadaYLinhaSaida)):
ContadorSaidas += 1
我考虑过在循环上使用time.sleep(x)进行某种延迟,但这显然不能解决,而且看起来很糟糕= D。
如果需要的话,我可以将其余代码发布在这里,但这是在这里,以使此处的内容保持整洁:Code Paste
不要介意任何错误的语法或错误,部分内容不是我的,而部分内容看起来很糟糕! XD
谢谢。
答案 0 :(得分:1)
很酷的项目!如果不跟踪它们,计算通过每一行的边界框的数量是一个很大的挑战。如果您想算一下它们是双向的,那就更糟了。
由于这种困难,通常人们倾向于跟踪对象,然后查看轨迹以确定对象是否通过了线路。
此链接可以帮助您了解不同之处。它还提供了代码进行检测(但是您已经使该部分工作了)和跟踪(您将需要) https://www.pyimagesearch.com/2018/08/13/opencv-people-counter/
最简单的跟踪方法是将具有最高iou的框链接起来。可以在这里找到一个简单易行的实现:
https://github.com/bochinski/iou-tracker
祝你好运!