ラズベリー パイとカメラを使用して、フィードを 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()