python потоков для камеры Raspberry Pi - PullRequest
0 голосов
/ 26 апреля 2020

У меня есть вопрос о потоке в python.

У меня есть 3 приложения, для которых я хочу получить доступ к одному и тому же ресурсу (камере). Я хотел бы запустить камеру для потоковой передачи кадров, а затем каждый из этих процессов принимает кадры по мере необходимости и с разным разрешением (или я могу масштабировать изображения позже, если это неэффективно). Я могу заставить каждое из этих трех приложений работать независимо, но не нашел способа успешно их обработать. Все три были изучены от других, и я благодарен за их совместное использование. Кредиты ниже.

Приложение 1 передает поток видео на веб-сервер.

with picamera.PiCamera(resolution='640x480', framerate=16) as camera:    
    output = StreamingOutput()
    camera.start_recording(output, format='mjpeg')
    try:
        address = ('', 8000)
        server = StreamingServer(address, StreamingHandler)
        server.serve_forever()
    finally:
        camera.stop_recording()

Приложение 2 часто захватывает в память небольшие кадры для обнаружения движения, а затем, если выполняются определенные условия, изображение отображается сохранено на диск. В этом случае я хочу получить кадры с низким разрешением для ускорения анализа и сохранения их только в памяти. Что касается сохранения, меня интересует захват файла с более высоким разрешением для диска

def captureTestImage(settings, width, height):
    command = "raspistill %s -w %s -h %s -t 200 -e bmp -n -o -" % (settings, width, height)
    imageData = io.BytesIO()
    imageData.write(subprocess.check_output(command, shell=True))
    imageData.seek(0)
    im = Image.open(imageData)
    buffer = im.load()
    imageData.close()
    return im, buffer
while True:
    motionState = P3picam.motion()
    if motionState:
        with picamera.PiCamera() as camera:
            camera.resolution = (1920,1080)  
            camera.capture(picPath + picName)

Приложение 3 захватывает кадры из видеопотока, а затем использует openCV для них.

vs = VideoStream(src=0).start()
time.sleep(2.0)
while True:
    frame = vs.read()
    frame = imutils.resize(frame, width=500)
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 

Приложение 1 кредит: http://picamera.readthedocs.io/en/latest/recipes2.html#web потоковое Приложение 2 кредита: http://pastebin.com/raw.php?i=yH7JHz9w Приложение 3 кредита: https://www.pyimagesearch.com/2018/06/25/raspberry-pi-face-recognition/

...