【问题标题】:Taking multiple snapshots at the same time in Python on RPi在 RPi 上的 Python 中同时拍摄多个快照
【发布时间】:2014-02-22 09:19:04
【问题描述】:

我目前正在尝试让 Raspberry Pi 使用 2 个网络摄像头同时拍摄 2 张​​照片。 设置很简单: 1 个 RPi 模块 B, 1 个有源 USB 集线器, 2 个类似的网络摄像头 (Microsoft Lifecam)。

我完全有能力使用任何一个网络摄像头拍摄快照,但不能同时使用两者。我尝试了多线程和多处理但没有运气。如果我在镜头前做简单的动作(比如用手指数秒),两张图片会显示不同的手指数。

这里是多处理试用代码:

from multiprocessing import Process
import os
import pygame, sys, time, math, socket
from pygame.locals import *
import pygame.camera


pygame.init()
pygame.mouse.set_visible(False)
# init camera
pygame.camera.init()
_imgres = (800,600)
_cam = []
_cam.append(pygame.camera.Camera('/dev/video0',_imgres, 'RGB'))
_cam.append(pygame.camera.Camera('/dev/video1',_imgres, 'RGB')) 

def snap(name,camID):
    info('function snap ' + str(camID))
    _cam[camID].start()
    time.sleep(2)
    _image = _cam[camID].get_image()
    _cam[camID].stop()
    pygame.image.save(_image, "image" + str(camID) + ".bmp")
    print 'snap done ', name

if __name__ == '__main__':
    p1 = Process(target=snap, args=('cam 0',0))
    p2 = Process(target=snap, args=('cam 1',1))
    p1.start()
    p2.start()
    p1.join()
    p2.join()

多线程试用代码类似。 我做错了什么?

感谢任何帮助。

编辑: 我已经尝试过 Jan Meisel 的想法,即从第三个脚本开始 2 个相同的脚本。它更好,但还不够——见图片。

还有其他想法吗? 谢谢

编辑2: 我检查了线程之间的时间,并更改了一些编码。现在我正在使用线程事件来实际拍摄照片,而两个线程都处于活动状态并等待该信号。计时器 1 给了我从 0 到 1ms 的两个“开始拍照”之间的差异。计时器 2 在两个“完成”之间给了我 160 到 230 毫秒的时间。我能够将曝光时间设置为 250 毫秒,计时器 2 读取... 260 毫秒。我想这回答了我的问题:确实,从相机中检索字节是一个实时过程,不能拆分(感谢@duck 提出这个建议);延迟或多或少取决于曝光时间(或相机“捕获”的时间量)。 感谢@jan 的思考。我想我的下一次尝试将是双核......

【问题讨论】:

  • 我不确定,但我认为 raspbeery pi 不是多核处理器,因此它一次只能处理 1 个网络摄像头。此外,由于拍照是一个实时过程,因此处理器可能在拍照时专用于它,因此可以线程化保存部分。这就是为什么他们是滞后的。

标签: python multithreading raspberry-pi photo


【解决方案1】:

试试这个:

为 webcam1 制作一个 python 脚本。 为 webcam2 制作另一个 python 脚本。 制作第三个脚本,在单独的线程中启动其他脚本。

如果这不起作用,则它是一般的 pygame 问题。在 PygameMailingList 上询问您的问题。

也许,Pie 无法同时处理摄像头。

【讨论】:

  • 好的,我们需要找出导致延迟的原因。做一个计时器并检查thread1启动和thread2启动之间的延迟。如果两者之间的时间很短(
  • 如果是处理器问题引起的。尝试超频您的 Rasp! 1000兆赫应该是可能的!之后再次检查延迟。
猜你喜欢
  • 1970-01-01
  • 2013-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-04
  • 2014-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多