有没有办法在 camera.close() 之后重新打开 picamera?

Is there a way to re-open picamera after camera.close()?

我有一个功能需要在开始时关闭相机并在结束时重新打开它。我知道要关闭它我会这样做:

import picamera
camera = picamera.PiCamera()
camera.close()

如何重新打开它?

也许您可以创建一个新的相机实例。 (这可能是最简单的解决方案)

camera = picamera.PiCamera()

或者,您可以尝试设计您的功能以保持相机打开,然后在程序结束时将其关闭。其中可以使用with语句自动实现:

with picamera.PiCamera() as camera:
    ...do something...

但是恐怕picamera的API不允许重新打开相机。您也可以尝试使用 "private" 方法 "hack" 进入 picamera。 当您查看关闭代码时,您会看到:

    for port in list(self._encoders):
        self.stop_recording(splitter_port=port)
    assert not self.recording
    for overlay in list(self._overlays):
        self.remove_overlay(overlay)
    if self._preview:
        self._preview.close()
        self._preview = None
    if self._splitter:
        self._splitter.close()
        self._splitter = None
    if self._camera:
        self._camera.close()
        self._camera = None
    exc, self._camera_exception = self._camera_exception, None
    if exc:
        raise exc

但这需要重新打开其他几个对象,例如 _preview、_splitter 和 _camera(它们甚至被设置为 None)。这可能很难做到,不稳定且版本之间不兼容。所以,不要那样做。

也许试试这个

camera = PiCamera()
camera.start_preview()
sleep(5)
camera.capture("object.jpeg")
camera.stop_preview()
camera.close()