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和raspberry picamera对象计数,多次计数_Python_Opencv_Raspberry Pi_Raspberry Pi3 - Fatal编程技术网

Python和raspberry picamera对象计数,多次计数

Python和raspberry picamera对象计数,多次计数,python,opencv,raspberry-pi,raspberry-pi3,Python,Opencv,Raspberry Pi,Raspberry Pi3,最近,我一直在做一个项目,使用raspberry pi摄像头OpenCV和Python对经过特定区域的人进行实时计数,因为对于我来说,使用它比处理录制的视频更容易 总体而言,代码可以正常工作,但我在计算部分遇到了一个问题,即: 1-如果一个对象停留在参考线内,它会不断增加计数 2-有时,根据物体的速度,它被计数多次 我不是python方面的专家,可能缺少英语单词来寻找合适的解决方案,所以我想也许有人可以告诉我,在这里解决这个问题最好的方法是什么。为了进行说明,这里是一个gif示例: 即使很难,

最近,我一直在做一个项目,使用raspberry pi摄像头OpenCV和Python对经过特定区域的人进行实时计数,因为对于我来说,使用它比处理录制的视频更容易

总体而言,代码可以正常工作,但我在计算部分遇到了一个问题,即:

1-如果一个对象停留在参考线内,它会不断增加计数

2-有时,根据物体的速度,它被计数多次

我不是python方面的专家,可能缺少英语单词来寻找合适的解决方案,所以我想也许有人可以告诉我,在这里解决这个问题最好的方法是什么。为了进行说明,这里是一个gif示例:

即使很难,看起来有多个参照框穿过这条线,当只有一个参照框穿过它时,以及当对象停留在这条线上时,都会发生这种情况

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

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

if (TestaInterseccaoSaida(CoordenadaYCentroContorno,CoordenadaYLinhaEntrada,CoordenadaYLinhaSaida)):  
    ContadorSaidas += 1
我曾想过在循环中使用某种时间延迟。sleep(x),但这显然不能解决它,而且看起来很糟糕=D

如果需要,我可以在这里发布其余的代码,但它在这里,以保持这里的整洁:

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


提前感谢。

很酷的项目!如果不跟踪每一行,那么计算通过每一行的边界框的数量是一个相当大的挑战。如果你想把他们都算进去,那就更糟了

由于这一困难,人们通常更喜欢跟踪物体,然后观察其轨迹,以确定物体是否通过这条线

此链接可以帮助您了解差异。它还提供代码来执行检测(但您已经让该部分工作)和跟踪(您将需要)

其次,最简单的跟踪方法是将具有最高iou的框链接起来。可以在以下位置找到一个良好且简单的实现:


祝你好运

还没有检查代码,但是否可以为每执行一帧添加1?您可能需要区分对象是否停留在此区域中。例如,如果现在有一个对象,而最后一帧没有对象,则只添加1。我明白你的意思,但如果我比较,对象是否在最后一帧,因为程序以20-30fps的速度运行,检查最后1帧可能不会给我相同的结果?在尝试之前先想一想,希望我能理解。我不确定我是否理解正确。很难读。如果我没弄错的话,你会担心我的计划。实现得很好,这大约需要3行代码,您可以很容易地对其进行测试。您只需在if语句(对象检测器)中检查一帧前检测到的对象。如果是这样,就不要算在内。仅当一个样本之前未识别出任何对象时才进行计数。问题可能是在某些帧中未检测到任何内容(尽管存在对象,但存在延迟)。您可以检查最后五帧。我假设在30帧的情况下,5帧内没有物体通过。谢谢你,维克多!github上的这个项目真是太棒了,信息量太大了。我已经坐在这里读了一个小时了哈哈哈!而且,这个项目已经基于阿德里安的作品,但我错过了那一页。。。这肯定会帮助我更好地在这里编写代码。再次感谢你,我一定会把结果发回来。关于边界框,事实上它只是用来标记形状,计数是由它中心的黑点通过线条来完成的。如果这就是你的意思,当然,我可能误解了这一部分。