USB网络摄像头在树莓派上拍照太慢

我正在使用fswebcam通过在树莓派上运行的node-red exec块来捕获图像。 捕获图像所需的时间为3+秒。

fswebcam -r 1280x720 image.jpg

我使用OpenCV进行了相同的尝试,结果稍好一些但相似。

from cv2 import *
cam = VideoCapture(1)
s,img = cam.read()
if s:
    imwrite("/home/pi/pythontest/tt.jpg",img) #save image
    cam.release()

我猜想USB相机初始化和拍摄照片会花费一些时间,这会大大增加时间。有什么办法可以保持相机初始化? 还有其他解决方法可以改善此问题吗?

zhangwei805 回答:USB网络摄像头在树莓派上拍照太慢

尝试配置您的代码(例如,使用cProfile),以确保问题不在python解释器启动时间或imwrite中。 如果问题在于相机初始化,那么我想唯一的选择就是编写一个守护程序,该守护程序将使相机保持在线状态,并根据您的请求为您提供图像

,

可能还有其他方法,但是一种方法是在需要更快响应的期间连续运行相机。不过,您将需要考虑一些事项:

  • 用于捕获图像的带宽
  • 戴上SD卡
  • 在捕获过程中访问不完整的图像。

我将让您确定要使用的分辨率所需的USB带宽。


关于第二个问题– SD卡磨损–我建议您捕获到/tmp并通过成为root并在{ {1}}:

/etc/fstab

然后重新启动。这样,数据永远不会靠近SD卡。


关于第三个-仍捕获不完整的图像-您可以利用tmpfs /tmp tmpfs defaults,noatime,nosuid 0 0 的{​​{1}}选项来解决此问题。基本上,您捕获到一个文件,然后将其捕获,然后使用--exec将文件重命名为fswebcam,然后在应用程序中使用它。

--exec

这依赖于以下事实:至少在Unix下,重命名文件不会影响打开该文件的任何进程,并且重命名是原子的。因此,您的应用程序将始终获得整个新文件或整个旧文件,而永远不会获得一半的文件。

我的相机产生大约160kB的图像,所以我在一个紧紧的循环中测试了文件大小,尽可能快地读取文件,并且仅在文件大小远远小于正常大小时才通知我,即被截断了:

/tmp/latest.jpg
本文链接:https://www.f2er.com/3098109.html

大家都在问