Sunday, September 22, 2024

13. Añadiendo soporte de cola asincrónica – (parte 1)

Aprendiendo Python Async IO con OpenCV

👋 Hola chicos y bienvenidos a nuestro próximo tutorial en video sobre cómo aprender Python Async IO con OpenCV. En este tutorial, agregaremos soporte de Q síncrono a nuestro proyecto con el llamado patrón productor y consumidor. Comencemos haciendo algunos cambios de código y reestructurando nuestro proyecto para usar una cola asincrónica.

Tabla de contenidos

– Introducción

– ¿Qué es Async IO?

– ¿Qué es OpenCV?

– ¿Qué es una cola?

– ¿Qué es un patrón productor-consumidor?

– Implementando la función productor

– Implementando la función consumidor

– Agregando detección de rostros

– Conclusión

– Recursos

Introducción

Python es un lenguaje de programación popular que se utiliza ampliamente para diversos fines, incluido el desarrollo web, el análisis de datos y el aprendizaje automático. Async IO es una función poderosa de Python que le permite escribir código asincrónico que puede manejar múltiples tareas simultáneamente. OpenCV es una biblioteca popular de visión por computadora que se utiliza para diversas tareas de procesamiento de imágenes y videos. En este tutorial, combinaremos estas dos tecnologías para crear un proyecto que use una cola asincrónica para manejar fotogramas de video.

¿Qué es Async IO?

Async IO es una función de Python que le permite escribir código asincrónico que puede manejar múltiples tareas simultáneamente. Esto se logra mediante el uso de corutinas, que son funciones que se pueden pausar y reanudar en cualquier momento. Async IO es particularmente útil para tareas limitadas por E / S, como la programación de redes y la E / S de archivos.

¿Qué es OpenCV?

OpenCV es una biblioteca popular de visión por computadora que se utiliza para diversas tareas de procesamiento de imágenes y videos. Proporciona una amplia gama de funciones para la manipulación de imágenes y videos, incluida la detección de características y el reconocimiento de objetos.

¿Qué es una cola?

Una cola es una estructura de datos que le permite almacenar y recuperar elementos en un orden de primero en entrar, primero en salir (FIFO). En Python, puede usar el módulo de cola incorporado para crear colas.

¿Qué es un patrón productor-consumidor?

El patrón productor-consumidor es un patrón de diseño que se utiliza para manejar tareas que implican la producción y el consumo de datos. En este patrón, hay dos tipos de tareas: productores y consumidores. Los productores generan datos y los colocan en una estructura de datos compartida, mientras que los consumidores recuperan datos de la estructura de datos compartida y los procesan.

Implementando la función productor

La función productor es responsable de leer los fotogramas de video y colocarlos en la cola. Así es como podemos implementarlo:

“`python

async def produce(queue, captured_object):

while True:

for camera_name, captured in captured_object.items():

async for frame in captured:

await queue.put((camera_name, frame))

await asyncio.sleep(0.01)

“`

En esta función, usamos un bucle for asincrónico para leer fotogramas del objeto de captura de video. Luego colocamos el fotograma en la cola como una tupla que contiene el nombre de la cámara y el fotograma en sí. También usamos una llamada asyncio.sleep para evitar bloquear el bucle de eventos.

Implementando la función consumidor

La función consumidor es responsable de recuperar fotogramas de la cola y procesarlos. Así es como podemos implementarlo:

“`python

async def consume(loop, queue, captured_object):

while True:

if not queue.empty():

camera_name, frame = await queue.get()

timestamp = time.time()

await asyncio.create_task(show_frame(queue, camera_name, frame))

await asyncio.create_task(run_fd_time(loop, queue, camera_name, frame))

else:

await asyncio.sleep(0.01)

“`

En esta función, usamos el método asyncio.Queue.empty para verificar si hay algún fotograma en la cola. Si los hay, recuperamos el fotograma y su nombre de cámara de la cola. Luego creamos dos tareas: una para mostrar el fotograma y otra para ejecutar la detección de rostros en el fotograma. Si la cola está vacía, usamos una llamada asyncio.sleep para evitar bloquear el bucle de eventos.

Agregando detección de rostros

Para agregar detección de rostros a nuestro proyecto, podemos usar la biblioteca OpenCV. Así es como podemos modificar la función run_fd_time para realizar la detección de rostros:

“`python

async def run_fd_time(loop, queue, camera_name, frame):

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

faces = face_cascade.detectMultiScale(gray, 1.3, 5)

for (x, y, w, h) in faces:

cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2)

await asyncio.create_task(show_frame(queue, camera_name, frame))

“`

En esta función, convertimos el fotograma a escala de grises y usamos el método detectMultiScale del objeto face_cascade para detectar rostros en el fotograma. Luego dibujamos rectángulos alrededor de los rostros detectados y mostramos el fotograma.

Conclusión

En este tutorial, aprendimos cómo usar Python Async IO y OpenCV para crear un proyecto que use una cola asincrónica para manejar fotogramas de video. También aprendimos sobre el patrón productor-consumidor y cómo se puede utilizar para manejar tareas que implican la producción y el consumo de datos. Con los conocimientos adquiridos en este tutorial, puede crear sus propios proyectos que usen Async IO y OpenCV para realizar diversas tareas de procesamiento de imágenes y videos.

Recursos

– [Documentación de Python Async IO](https://docs.python.org/3/library/asyncio.html)

– [Documentación de OpenCV](https://docs.opencv.org/)

– [Documentación de la cola de Python](https://docs.python.org/3/library/queue.html)

Preguntas frecuentes

Q: ¿Qué es Async IO?

A: Async IO es una función de Python que le permite escribir código asincrónico que puede manejar múltiples tareas simultáneamente.

Q: ¿Qué es OpenCV?

A: OpenCV es una biblioteca popular de visión por computadora que se utiliza para diversas tareas de procesamiento de imágenes y videos.

Q: ¿Qué es una cola?

A: Una cola es una estructura de datos que le permite almacenar y recuperar elementos en un orden de primero en entrar, primero en salir (FIFO).

Q: ¿Qué es el patrón productor-consumidor?

A: El patrón productor-consumidor es un patrón de diseño que se utiliza para manejar tareas que implican la producción y el consumo de datos.