0

ラズベリー パイとカメラを使用して、フィードを Web ブラウザーにストリーミングしています。私の Camera クラスは、私の CameraThread クラスを 2 回インスタンス化しようとし (None の場合は試行します)、停止します (picamera が 2 つの異なるオブジェクトによって使用されようとしているため) が、理論的にはこれは発生しないはずです。

Camera クラスの if ステートメント内の一時変数を更新しようとしましたが、変数は更新されませんでした...ここで何が問題なのかわかりません。

私が使用しているコードは次のとおりです。

class CameraThread(threading.Thread):
    current_image = None

    def __init__(self):
        super().__init__()
        self.event = threading.Event()
        self.have_image_event = threading.Event()
        self.start()

    def stop(self):
        self.event.set()
        self.join()

    def run(self):
        try:
            with picamera.PiCamera() as camera:
                camera.resolution = (1296, 730)
                capture_image = io.BytesIO()
                temp1, temp2 = io.BytesIO(), io.BytesIO(),
                default_time = 0.033

                for _ in camera.capture_continuous(capture_image, format='jpeg'):
                    # Truncate the stream to the current position (in case
                    # prior iterations output a longer image)
                    capture_image.truncate()
                    capture_image.seek(0)

                    temp1.seek(0)
                    temp1.write(capture_image.read())
                    capture_image.seek(0)
                    temp1.truncate()
                    temp1.seek(0)

                    self.current_image = temp1
                    self.have_image_event.set()

                    temp1, temp2 = temp2, temp1

                    if self.event.wait(default_time):
                        break
        except Exception as ex:
            import traceback
            traceback.print_exc()

class Camera(tornado.web.RequestHandler):
    camera = None

    def get(self):
        if self.camera is None:
            print(self.camera)
            self.camera = CameraThread()
            self.camera.have_image_event.wait()
        self.set_header('Content-type', 'image/jpeg')
        self.set_header('Content-length',
                        self.camera.current_image.getbuffer().nbytes)
        self.set_header('Cache-Control', 'no-cache')
        self.write(self.camera.current_image.read())
        self.finish()
4

0 に答える 0