Hoy en día la difusión multimedia está muy extendida e integrada en nuestras vidas sin que seamos consciente de ello, el termino stream lo relacionamos con la reproducción de información de audio o video. Esta información puede estar disponible en forma de archivo como puede ser un archivo de video o audio almacenado en el disco de un servidor o bien puede ser una cámara IP a la cual podemos acceder para ver la imagen en tiempo real.

Una de las grandes ventajas del streaming es que la información se muestra en tiempo real, es decir, no es necesario descargar el archivo completo para poder verlo o escucharlo.

Existen varios protocolos para poder hacer streaming, algunos son más avanzados como puede ser RSTP, que da la posibilidad de pausar, la reproducción y otros más simples que no ofrecen ningún control.

En este tutorial, vamos ver como conectarnos a un módulo ESP32-CAM desde Python con la librería OPENCV, mediante Http.

Es necesario que en el IDE que utilices tengas instaladas las tarjetas ESP32, si no las tienes, en el IDE de arduino ves a archivo–> preferencias  y en el gestor de URLs adicionales de tarjetas pega la siguiente dirección:

https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json 

Ahora vamos a Herramientas–> Placa –> Gestor de tarjetas y buscamos ESP32 (expressif) e instalamos la última versión disponible.

Seleccionamos la placa AI Thinker ESP32-CAM (aunque sea el clon de china) y el puerto serie correspondiente, seleccionando esta placa, no es necesario realizar nada más, las particiones ya se configuran solas.

Lo primero que hacemos será cargar en el módulo ESP32-CAM el software de ejemplo para la cámara,  recordar que tenemos que introducir el SSID de nuestra red y el Password.

Este módulo viene sin una interface para poder subir el SW, por lo que para poder subir el SW al módulo necesitaremos un conversor USB a TTL y conectarlo al ESP32-CAM tan y como se ve en la imagen.

Solo nos queda compilar y subir el SW al ESP32-CAM, una vez se ha subido el software, eliminamos el puente entre  D01 y GND y apretamos el botón de Reset. Si lo hemos hecho bien, en modulo se conectará a nuestra red Wifi y por la consola nos indicará la IP asignada y los puertos asignados para Web Server y para el Streaming de video, será el puerto 81.

Necesitamos apuntar la IP y toda la ruta para que desde Python podamos acceder a la cámara, esta ruta debería ser algo:

http://<tu_ip_asignada>:81/stream 

Para verificar que es la url correcta, cópiala  en el navegador y deberías tener acceso directo al video, si no es así, hay algo que no tienes bien.

Es hora de ponernos con Python, para ello hemos de tener instaladas las librerías OpenCV y numpy.

Accederemos a la cámara mediante su dirección IP, para ello abrimos la url y buscamos el inicio y final de la imagen enviada, una vez sabemos la ubicación y la longitud de la imagen, la decodificamos y la mostramos en una ventana.

import cv2
from urllib.request import urlopen
import numpy as np

stream = urlopen('http://192.168.43.6:81/stream')
bytes = bytes()
while True:
    bytes += stream.read(1024)
    a = bytes.find(b'\xff\xd8')
    b = bytes.find(b'\xff\xd9')
    if a != -1 and b != -1:
        jpg = bytes[a:b+2]
        bytes = bytes[b+2:]
        if jpg :
            img = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8), cv2.IMREAD_COLOR)
            cv2.imshow('ESP32 CAM', img)
    if cv2.waitKey(1) &amp; 0xff == ord('q'):
        break
stream.release()
cv2.destroyAllWindows()

En la variable img tenemos la imagen que nos envía el ESP32-CAM, podemos guardar, reenviarla, tratarla, buscar algún objeto, etc…  a partir de aquí es cosa tuya….

Puedes descargar el script para Python 3 desde mi repositorio.


0 commentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *