Ejemplo de script Python para detectar posibles cuerpos humanos en un vídeo o en una WebCam en tiempo real. La aplicación dibuja un recuadro azul en cada cuerpo detectado en cada frame del vídeo/webcam en tiempo real.
- Requisitos para crear aplicación en Python que detecta cuerpos humanos en un vídeo o en la WebCam en tiempo real.
- Aplicación Python que detecta cuerpos humanos en un vídeo, imagen o en WebCam en tiempo real.
- Aplicación que detecta cuerpos humanos en tiempo real en funcionamiento.
- Descarga del código fuente en Python de la aplicación que detecta cuerpos humanos en tiempo real en una WebCam, vídeo o imagen.
Requisitos para crear aplicación en Python que detecta cuerpos humanos en un vídeo o en la WebCam en tiempo real
Necesitaremos disponer de un IDE (o un editor de texto) y de Python instalado en el equipo. En el siguiente enlace explicamos cómo usar Visual Studio Code para desarrollar aplicaciones Python:
Para el desarrollo de este script Python que detecta cuerpos en un vídeo o en imagen en tiempo real de una WebCam, necesitaremos la siguiente librería: opencv-python (cv2). Podremos instalarla con el siguiente comando:
1 |
pip3 install opencv-python |
Hay que tener en cuenta que este script de ejemplo es una prueba de concepto, que no funciona en todos los casos.
Aplicación Python que detecta cuerpos humanos en un vídeo, imagen o en webcam en tiempo real
A continuación, se expone el código fuente en Python que detecta y marca con un recuadro azul los cuerpos humanos que aparezcan en un vídeo, en una imagen o en la webcam (en tiempo real). El código está comentado explicando las partes más importantes:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
import cv2 from os.path import exists # Escribir texto en frame (imagen) def escribirTexto(imagen, texto, tamaño, grosor, x, y): cv2.putText(imagen, texto, (x, y), cv2.FONT_HERSHEY_PLAIN, tamaño, (0, 255, 0), grosor) # Capturar imágenes a analizar desde WebCam capturarWebCam = False rutaXMLClasificador = r"D:\Mis documentos\ProyectoA\Python\reconocimiento_facial\haarcascade_fullbody.xml" rutaVideo = r"D:\Mis documentos\ProyectoA\Python\reconocimiento_facial\video2.mp4" # Iniciamos el clasificador de cuerpo completo clasificadorCuerpo = cv2.CascadeClassifier(rutaXMLClasificador) if capturarWebCam: # Para capturar vídeo de la webcam del equipo en tiempo real y detectar matrículas capturaVideo = cv2.VideoCapture(0) else: # Si queremos capturar vídeo en fichero del equipo y detectar matrículas if exists(rutaVideo): capturaVideo = cv2.VideoCapture(filename=rutaVideo) else: print("No se ha encontrado el vídeo indicado.") exit() # Obtenemos el número total de frames del vídeo para ponerlo en la pantalla totalFrames = int(capturaVideo.get(cv2.CAP_PROP_FRAME_COUNT)) # Mantenemos la ventana de visualización abierta mientras dure el vídeo cuerpos = 0 while capturaVideo.isOpened(): # Obtenemos y analizamos cada frame del vídeo videoIniciado, imagenCapturada = capturaVideo.read() # Si no hay más frames en el vídeo, salimos del bucle if not videoIniciado: print("No se ha encontrado imagen en la entrada de WebCam o se ha finalizado el fichero.") exit() # para vídeo desde fichero # Obtenemos el frame actual frameActual = int(capturaVideo.get(cv2.CAP_PROP_POS_FRAMES)) # Convertimos a escala de grises frameEscalaGrises = cv2.cvtColor(imagenCapturada, cv2.COLOR_BGR2GRAY) # Detectamos los posibles cuerpos en el frame cuerposDetectados = clasificadorCuerpo.detectMultiScale(frameEscalaGrises, 1.2, 3) # Recorremos los cuerpos detectados en el frame para identificarlos con un recuadro azul for (x, y, w, h) in cuerposDetectados: cuerpos +=1 # Si queremos mostrar un texto en el recuadro de cada cuerpo detectado cv2.rectangle(imagenCapturada, (x, y), (x + w, y + h), (255, 0, 0), 2) escribirTexto (imagenCapturada, f"C{cuerpos}", 0.9, 1, x, y - 10) # Mostramos el frame actual analizado y el total de frames del vídeo escribirTexto(imagenCapturada, f"{frameActual}/{totalFrames}", 1, 2, 10, 30) # Mostramos la ventana con el vídeo y los cuerpos detectados cv2.imshow("ProyectoA - Detector de cuerpos completos", imagenCapturada) # Para cerrar detección y salir (pulsación de tecla "s") if cv2.waitKey(5) & 0xFF == ord('s'): break # Liberamos los recursos capturaVideo.release() cv2.destroyAllWindows() |
Aplicación que detecta cuerpos humanos en tiempo real en funcionamiento
Compilaremos el script Python o lo ejecutaremos desde la línea de comandos. Si hemos dejado la variable capturarWebCam a False, el programa analizará el vídeo indicado en la variable rutaVideo. Si se ha establecido a True la variable capturarWebCam , la aplicación accederá a la webcam del equipo y detectará los posibles cuerpos humanos que vayan apareciendo (en tiempo real):
En el ejemplo de uso de este script, encima del recuadro de cuerpo humano detectado se añadirá un texto con una «C» y un número, que es el número de cuerpos detectados (incremental). Este número se añade a modo de ejemplo de escritura en un frame de un vídeo o imagen de webcam.
Descarga del código fuente en Python de la aplicación que detecta cuerpos humanos en tiempo real en una webcam, vídeo o imagen
A continuación, se muestra el enlace para la descarga del código fuente completo y gratuito, en Python, de la aplicación que detecta cuerpos humanos en tiempo real desde la webcam del equipo o desde un vídeo: