Python和覆盆子picamera对象计数,计数多次

时间:2019-02-05 17:26:37

标签: python opencv raspberry-pi raspberry-pi3

最近,我一直在使用树莓派相机OpenCV和Python进行一个项目,以实时计算经过特定区域的人数,因为对于我来说,使用此方法比处理录制的视频更容易。

所有代码都可以正常工作,但是我一直在计算它的计数部分问题,

1-如果某个对象停留在参考线中,它将继续增加计数;

2-有时取决于对象的速度,它会被多次计数;

我不是python专家,并且可能缺少英文单词来寻找适当的解决方案,因此我认为也许有人可以告诉我在这里解决该问题的更好方法。为了说明,这是一个gif示例:

enter image description here

即使看起来好像有多个参考框越过该线,它也仅在一个参考框越过线以及对象停留在线时发生。

这是检查对象是否越线的代码:

if (TestaInterseccaoEntrada(CoordenadaYCentroContorno,CoordenadaYLinhaEntrada,CoordenadaYLinhaSaida)):
    ContadorEntradas += 1

if (TestaInterseccaoSaida(CoordenadaYCentroContorno,CoordenadaYLinhaEntrada,CoordenadaYLinhaSaida)):  
    ContadorSaidas += 1

我考虑过在循环上使用time.sleep(x)进行某种延迟,但这显然不能解决,而且看起来很糟糕= D。

如果需要的话,我可以将其余代码发布在这里,但这是在这里,以使此处的内容保持整洁:Code Paste

不要介意任何错误的语法或错误,部分内容不是我的,而部分内容看起来很糟糕! XD

谢谢。

1 个答案:

答案 0 :(得分:1)

很酷的项目!如果不跟踪它们,计算通过每一行的边界框的数量是一个很大的挑战。如果您想算一下它们是双向的,那就更糟了。

由于这种困难,通常人们倾向于跟踪对象,然后查看轨迹以确定对象是否通过了线路。

此链接可以帮助您了解不同之处。它还提供了代码进行检测(但是您已经使该部分工作了)和跟踪(您将需要) https://www.pyimagesearch.com/2018/08/13/opencv-people-counter/

最简单的跟踪方法是将具有最高iou的框链接起来。可以在这里找到一个简单易行的实现:

https://github.com/bochinski/iou-tracker

祝你好运!