2016-12-04 124 views
1

我正在研究使用SJ4000摄像头进行图像处理,通过USB将其连接到Raspberry Pi(运行Raspbian Jessie),以便在Python中使用OpenCV进行图像处理。我已经使用我的摄像头取得了不少成绩,但现在需要将其移植到SJ4000的环境中,但是我陷入了这个障碍。SJ4000 + OpenCV + Raspberry Pi用于图像处理

我用过的代码与这个问题的答案相同:rotated face detection

在笔记本电脑的摄像头上,我获得了相当不错的帧率。当SJ4000通过USB连接到我的笔记本电脑时,我的帧速率也很高。但是,在Raspberry Pi上,当我执行相同的代码时,图像因某种原因而被冻结。然后我需要强制退出显示的视频查看器窗口,因为它只是被冻结。

编辑1:关闭Spyder IDE并重新加载几次,然后执行相同代码,我可以看到一个Feed,但帧速率非常低(每帧2-3秒),并且它会在一段时间后冻结。

编辑2:我已经做了进一步的测试,发现当我包含人脸检测代码时,需要很长时间才能显示提要,因为延迟时间为TEN。当我在没有任何处理的情况下直接转发Feed时,它的响应速度非常快。

我该如何解决这个问题?获得更强大处理器的唯一方法是什么?

感谢您的帮助!

+0

首先尝试没有处理的视频源....顺便说一句你要强制使用什么样的分辨率颜色深度/编码和比特率?我不使用树莓派,但我敢打赌,USB带宽受到CPU(无DMA)的限制。如果饲料运行良好,试着估计剩下多少计算能力....你不能超过它,否则会造成瓶颈导致严重的速度下降和死机。所以如果你有一些fps,那么'T = 1/fps'就是你的时间段。测量它从CPU处理多少时间...所以如果10%,那么你得到的小于90%的'T',并且必须适合... – Spektre

+0

如果你选择了不好的分辨率/编码,那么它甚至可能会花费95% T只是从相机抓取图像...你必须适应带宽内 – Spektre

+0

@Spektre - 我已经尝试过它没有处理,并且馈送非常流畅。有没有办法限制我每秒处理的帧数? –

回答

0

像其他人说的那样,使用HOG/Haar描述符,人脸检测在计算上非常昂贵。您将无法在Raspberry Pi上进行实时人脸检测。在我的Raspberry Pi 3上,我可以在5 fps左右的300x300图像上进行人体检测。

我推荐的是:做运动检测。当检测到动作时,开始脸部检测。

进一步优化可以通过在其自己的线程中运行人脸检测来完成,并且如果在帧中检测到运动,则运动检测馈送由面部检测器分析的帧的FIFO。这样,你的脸部检测器可以异步操作,而不会阻挡捕获视频帧的主线程,并进行运动检测。