¿Cómo procesar imágenes en tiempo real y generar un video en tiempo real del resultado?

Tengo un Rasberry Pi con una cámara y estoy transmitiendo un video a mi navegador usando la interfaz web de RPi Cam. Ejecuto un script para leer las imágenes y procesarlas como a continuación. La ejecución del código abre una ventana con la imagen procesada en el momento actual. Cuando cierro la ventana, obtengo una imagen procesada actualizada.

Sin embargo, lo que me gustaría hacer es emitir un video continuo de las imágenes procesadas. ¿Qué enfoque debo tomar para hacer eso?

while True: image = io.imread('http://[ip-address]/cam_pic.php') image_gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY) faces = detect(image_gray) image_with_detected_faces = faces_draw(image, faces) plt.imshow(image_with_detected_faces) plt.show() 

Es posible que desee ver esta pregunta: actualice el cuadro en matplotlib con vista previa en vivo de la cámara que utiliza directamente VideoCapture. Si, en cambio, desea leer las imágenes de http, puede cambiar esto a uno de los siguientes.

Modo interactivo

 import cv2 import matplotlib.pyplot as plt def grab_frame(): image = io.imread('http://[ip-address]/cam_pic.php') image_gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY) faces = detect(image_gray) return faces_draw(image, faces) #create axes ax1 = plt.subplot(111) #create image plot im1 = ax1.imshow(grab_frame()) plt.ion() while True: im1.set_data(grab_frame()) plt.pause(0.2) plt.ioff() # due to infinite loop, this gets never called. plt.show() 

FuncAnimation

 import cv2 import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation def grab_frame(): image = io.imread('http://[ip-address]/cam_pic.php') image_gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY) faces = detect(image_gray) return faces_draw(image, faces) #create axes ax1 = plt.subplot(111) #create axes im1 = ax1.imshow(grab_frame()) def update(i): im1.set_data(grab_frame()) ani = FuncAnimation(plt.gcf(), update, interval=200) plt.show()