.fb-comments,.fb-comments span,.fb-comments span iframe[style]{min-width:100%!important;width:100%!important}
Fuente: gfycat

 

Descripción general

 
La detección de movimiento con Python es fácil debido a las múltiples bibliotecas de código abierto proporcionadas por Python. lenguaje de programación. La detección de movimiento tiene muchas aplicaciones en el mundo real. Por ejemplo, se puede utilizar para vigilancia en exámenes en línea o con fines de seguridad en tiendas, bancos, etc.

El lenguaje de programación Python es un lenguaje rico en bibliotecas de código abierto que proporciona una gran cantidad de aplicaciones a sus usuarios. usuario y tiene un número de usuarios. Por lo tanto, está creciendo rápidamente en el mercado. La lista de beneficios del lenguaje Python no tiene fin debido a su sintaxis simple, errores fáciles de encontrar y un proceso de depuración rápido que lo hace más fácil de usar.

¿Por qué deberías aprender Python? una representación pictórica:


Fuente: Temas de Scaler
 

Python fue diseñado en 1991 y está desarrollado por Python Software Foundation. Hay muchas versiones de python que se lanzan. De ellos, python2 y python3 son los más famosos. Actualmente, python3 se usa principalmente y los usuarios de python3 están aumentando rápidamente. En este proyecto o script, vamos a utilizar python3.

Según la Física, cuando un objeto está inmóvil y no tiene velocidad, entonces se considera que está en reposo, y todo lo contrario cuando un objeto no está en completo reposo y tiene algo de movimiento o velocidad. en alguna dirección, ya sea izquierda-derecha, adelante-atrás o arriba-abajo, entonces se considera que está en movimiento. En este artículo, intentaremos detectarlo.


Fuente: gtycat
 

La detección de movimiento tiene muchas implementaciones o usos de la vida real en los que puede demostrar su valía, como para la vigilancia de exámenes en línea usando una cámara web (que implementaremos en este artículo), como guardia de seguridad, etc.

En este artículo, intentaremos implementar un script a través del cual detectaremos movimiento usando la Web-Cámara de la computadora de escritorio o portátil. La idea es que tomaremos dos fotogramas de los videos e intentaremos encontrar diferencias entre ellos. Si hay algún tipo de diferencia entre los dos cuadros, entonces está claro que hay algún tipo de movimiento de un objeto frente a la cámara, lo que crea la diferencia.

Antes de comenzar con la implementación del código, veamos algunos de los módulos o bibliotecas que usaremos a través de nuestro código para la detección de movimiento con una cámara web. Como hemos discutido, las bibliotecas juegan un papel importante en la fama de python, veamos qué necesitamos:

OpenCV Pandas 

Las dos bibliotecas mencionadas anteriormente, OpenCV y Pandas, están basadas puramente en python, son gratuitas, y bibliotecas de código abierto y las vamos a usar con la versión Python3 del lenguaje de programación python.

1. OpenCV

OpenCV es una biblioteca de código abierto que se puede usar con muchos lenguajes de programación como C++, Python, etc. Se usa para trabajar en las imágenes y videos y al usarlo o integrarlo con las bibliotecas panda/NumPy de python podemos hacer el mejor uso de las características de OpenCV.

2. Pandas: 

Como hemos comentado,”pandas” es una biblioteca de código abierto de Python y proporciona ricas herramientas integradas para el análisis de datos debido a que es ampliamente utilizado en el flujo de ciencia de datos y análisis de datos. Se nos proporcionan marcos de datos en forma de una estructura de datos en pandas que es útil para manipular y almacenar datos tabulares en una estructura de datos bidimensional.
  
Los dos módulos mencionados anteriormente no están integrados en python y tenemos que instalarlos antes de usarlos. Aparte de esto, hay dos módulos más que vamos a utilizar en nuestro proyecto.

Python DateTime Module  Python Time Module

Ambos módulos están integrados en Python y no es necesario instalarlos. luego. Estos módulos se ocupan de las funciones relacionadas con la fecha y la hora, respectivamente.

Hasta ahora hemos visto las bibliotecas que vamos a usar en nuestro código, comencemos su implementación con la idea de que el video es solo una combinación de muchas imágenes estáticas o marcos y todos estos marcos combinados crean un video:
 
 

Importación de las bibliotecas requeridas

En esta sección, importaremos todas las bibliotecas, como pandas y panda. Luego importamos la función cv2, time y DateTime del módulo DateTime.

# Importación de las bibliotecas de Pandas  import pandas as panda  # Importación de las bibliotecas de OpenCV  import cv2  # Importación del módulo de tiempo  import time  # Importación de la función datetime del módulo datetime  from datetime import datetime 

Inicializar nuestras variables de datos

En esta sección, inicializamos algunas de nuestras variables que usaremos más adelante en el código. Definimos el estado inicial como”Ninguno”y almacenaremos el movimiento rastreado en otra variable motionTrackList.

Definimos una lista’motionTime’para almacenar el momento en que se detectó el movimiento e inicializamos la lista de marcos de datos usando el módulo de panda.

# Asignar nuestro estado inicial en forma de variable initialState como Ninguno para fotogramas iniciales  initialState=Ninguno  # Lista de todas las pistas cuando se detecta movimiento en los fotogramas  motionTrackList=[ Ninguno, Ninguno ]  # Una nueva lista’time’para almacenar la hora en que se detectó movimiento motionTime=[]  # Inicializar la variable DataFrame’dataFrame’usando las bibliotecas de pandas panda con la columna inicial y final  dataFrame=panda.DataFrame(columns=[“Inicial”,”Final”])  

Proceso principal de captura

En esta sección realizaremos nuestros principales pasos de detección de movimiento. Entendámoslos en pasos:

Primero, comenzaremos a capturar video usando el módulo cv2 y lo almacenaremos en la variable de video. Luego usaremos un ciclo while infinito para capturar cada cuadro del video. Usaremos el método read() para leer cada cuadro y almacenarlos en las respectivas variables. Definimos un movimiento variable y lo inicializamos a cero. Creamos dos variables más grayImage y grayFrame usando las funciones cv2 cvtColor y GaussianBlur para encontrar los cambios en el movimiento. Si nuestro estado inicial es Ninguno, asignamos el marco gris actual a estado inicial y, de lo contrario, detenemos el siguiente proceso utilizando la palabra clave’continuar’. En la siguiente sección, calculamos la diferencia entre los marcos inicial y en escala de grises que creamos en la iteración actual. Luego, resaltaremos los cambios entre los fotogramas inicial y actual utilizando las funciones de umbral y dilatación de cv2. Encontraremos los contornos del objeto en movimiento en la imagen o marco actual e indicaremos el objeto en movimiento creando un límite verde alrededor de él usando la función de rectángulo. Después de esto, agregaremos nuestra motionTrackList agregando el elemento detectado actual. Hemos mostrado todos los marcos como la escala de grises y los marcos originales, etc., utilizando el método imshow. Además, creamos una clave usando el método witkey() del módulo cv2 para finalizar el proceso, y podemos finalizar nuestro proceso usando la tecla’m’. # iniciando la cámara web para capturar el video usando el módulo cv2  video=cv2.VideoCapture(0)  # usando un ciclo infinito para capturar los cuadros del video mientras es Verdadero:    # leyendo cada imagen o cuadro del video usando la función de lectura   check, cur_frame=video.read()      # Definición de la variable’movimiento’igual a cero como marco inicial   var_motion=0      # A partir de imágenes en color creando un marco gris   gray_image=cv2.cvtColor(cur_frame, cv2.COLOR_BGR2GRAY)      # Para encontrar los cambios creando un GaussianBlur a partir del gris scale image    gray_frame=cv2.GaussianBlur(gray_image, (21, 21), 0)      # Para la primera iteración que verifica la condición  # asignaremos grayFrame a initalState if is none    if initialState is None:        initialState=gray_frame        continuar          # Cálculo de la diferencia entre marco estático o inicial y gris que creamos    differ_frame=cv2.absdiff(initialState, gray_frame)      # el cambio entre el fondo estático o inicial y el marco gris actual son resaltado     thresh_frame=cv2.threshold(differ_frame, 30, 255, cv2.THRESH_BINARY)[1]    thresh_frame=cv2.dilate(thresh_frame, None, iterations=2)      # Para que el objeto en movimiento en el marco encuentre los contornos   cont,_=cv2.FindConTours (Thresh_Frame.Copy (), CV2.retr_External, CV2.chain_approx_simple) para cur in cont: if cv2.conTourArea (cur) <10000: continuar var_motion=1 (cur_x, cur_y, cur_w, cur_h)=cv2.boundingrect ( cur)    # para crear un rectángulo de color verde alrededor del objeto en movimiento  cv2.rectangle(cur_frame, cur_y), (cur_x + cur_y cur_h), (0, 255, 0), 3)  marco agregando el estado movimiento motiontracklist.append(var_motion)  motiontracklist =motionTrackList[-2:]  la hora inicio if motiontracklist[-1] ==1 and motiontracklist[-2] ==0:  motiontime.append(datetime.now())  adición finalización si mot iontracklist[-1] ==0 y escala grises que muestra imagen capturada cv2.imshow("la gris es se a continuación:", marco_gris)  mostrar diferencia entre cuadro estático inicial actual cv2.imshow("diferencia estático  actual:", marco_diferente)  pantalla negro imágenes blanco video  cv2.imshow("el umbral creado desde cámara web pc o computadora portátil es:", thresh_frame)  través contorno cv2.imshow("desde portátil, esto ejemplo color:", cur_frame)  creando una clave esperar  wait_key =cv2.waitKey(1)  con ayuda tecla'm'finaliza todo proceso nuestro sistema agregar valor variable lista tiempo cuando algo está moviendo pantalla  break 

Terminando el código

Después de cerrar el ciclo agregaremos nuestros datos del dataFrame y las listas de motionTime en el archivo CSV y finalmente apague el video.

# Por fin estamos agregando el tiempo de movimiento o var_motion dentro del cuadro de datos para un rango de entrada (0, len(motionTime), 2):    dataFrame=dataFrame.append (“Inicial”: tiempo[a],”Final”: tiempoMovimiento[a + 1], ignore_index=True)    # Para grabar todos los movimientos, creando un archivo CSV  dataFrame.to_csv(“EachMovement.csv”)  # Liberando el video video.release()  # Ahora, cerrando o destruyendo todas las ventanas abiertas con la ayuda de openCV  cv2.destroyAllWindows()

Hemos creado el código; ahora analicemos nuevamente el proceso en breve.

Primero, capturamos un video usando la cámara web de nuestro dispositivo, luego tomamos el cuadro inicial del video de entrada como referencia y verificamos los siguientes cuadros de vez en cuando. Si se encontraba un marco diferente al primero, había movimiento. Eso estará marcado en el rectángulo verde.

Hemos visto el código en diferentes secciones. Ahora, combinémoslo: 

# Importación de las bibliotecas de Pandas  import pandas as panda  # Importación de las bibliotecas de OpenCV  import cv2  # Importación del módulo de tiempo  import time  # Importación de la función datetime del módulo datetime  from datetime import datetime # Asignación de nuestra inicial Estado en forma de variable initialState como Ninguno para fotogramas iniciales  initialState=Ninguno  # Lista de todas las pistas cuando se detecta movimiento en los fotogramas  motionTrackList=[Ninguno, Ninguno]  # Una nueva lista de’tiempo’para almacenar el tiempo cuando movimiento detectado  motionTime=[]  # Inicializando la variable de DataFrame’dataFrame’usando las bibliotecas de pandas panda con la columna inicial y final  dataFrame=panda.DataFrame(columns=[“Inicial”,”Final”]) # iniciando la cámara web para capturar el video usando cv2 module  video=cv2.VideoCapture(0)  # usar bucle infinito para capturar los fotogramas del video mientras que True:    # Leer cada imagen o fotograma del video usando la función de lectura   check, cur_frame=video.read() # Definiendo la variable’movimiento’igual a cero como marco inicial   var_motion=0      # A partir de imágenes en color creando un marco gris   gray_image=cv2.cvtColor(cur_frame, cv2.COLOR_BGR2GRAY)      # Para encontrar los cambios creando un GaussianBlur a partir de la imagen en escala de grises    gray_frame=cv2.GaussianBlur(gray_image, (21, 21), 0)      # Para la primera iteración que verifica la condición   # asignaremos grayFrame a initalState si no hay ninguno    if initialState es None:        initialState=gray_frame        continue          # Cálculo de la diferencia entre estático o inicial y marco gris que creamos    differ_frame=cv2.absdiff(initialState, gray_frame)      # se resalta el cambio entre el fondo estático o inicial y el marco gris actual     thresh_frame=cv2.threshold(differ_frame, 30, 255, cv2.THRESH_BINARY)[1]    thresh_frame=cv2.dilate(thresh_frame, None, iterations=2)      # Para que el objeto en movimiento en el marco encuentre los contornos   cont,_=cv2.findContours(thresh_frame.copy (), Cv2.rcretr_external, cv2.chain_approx_simple) para cur in cont: if cv2.conTourarea (cur) <10000: continuar var_motion (cur_x, cur_y, cur_w, cur_h)=cv2.boundingrect (cur) # para crear un rectángulo de color verde alrededor del objeto en movimiento    cv2.rectangle(cur_frame, cur_y), (cur_x + cur_y cur_h), (0, 255, 0), 3)  desde el cuadro agregando estado movimiento motiontracklist. append(var_motion)  motiontracklist =motionTrackList[-2:]  adición la hora inicio if motiontracklist[-1] ==1 and motiontracklist[-2] ==0:  motiontime.append(datetime.now())  finalización escala grises que muestra imagen capturada cv2.imshow("la marco gris se a continuación:", marco_gris)  mostrar las diferencias diferencia entre estático inicial y actual cv2.imshow("diferencia actual:", differ_frame)  pantalla imágenes blanco negro video  cv2.imshow("umbral creado cámara web pc o computadora portátil es:", thresh_frame)  través contorno cv2.imshow("desde portátil, este es ejemplo color:", cur_frame) una clave esperar  wait_key =cv2.waitKey(1)  con ayuda tecla'm'finaliza todo proceso nuestro sistema agregar valor variable motiontime lista cuando algo mueve pantalla  break por fin estamos tiempo dentro datos  in range(0, len( motiontime), 2):  dataframe =dataFrame.append("Inicial": t ime[a],"final": motiontime[a 1], ignore_index =True)  grabar todos los movimientos, archivo csv  dataframe.to_csv("eachmovement.csv")  liberar video video.release() ahora, cerrar destruir todas ventanas abiertas opencv  cv2.destroyallwindows()

 
Los resultados obtenidos después de ejecutar el código anterior serían similares a los que se pueden ver a continuación.


 

Aquí, podemos ver que el movimiento del hombre en el video tiene sido rastreado Por lo tanto, la salida se puede ver en consecuencia.

Sin embargo, en este código, el seguimiento se haría con la ayuda de cuadros rectangulares alrededor de objetos en movimiento, similar a lo que se puede ver a continuación. Una cosa interesante a tener en cuenta aquí es que el video es una grabación de una cámara de seguridad en la que se ha realizado la detección.


  El lenguaje de programación Python es un lenguaje rico en bibliotecas de código abierto que proporciona una serie de aplicaciones a su usuario. Cuando un objeto está inmóvil y no tiene velocidad, se considera que está en reposo, y justo al contrario, cuando un objeto no está en reposo absoluto, se considera que está en movimiento. OpenCV es una biblioteca de código abierto que se puede usar con muchos lenguajes de programación y, al integrarla con las bibliotecas panda/NumPy de Python, podemos aprovechar al máximo las características de OpenCV. La idea principal es que cada video es solo una combinación de muchas imágenes estáticas llamadas marcos, y se usa una diferencia entre los marcos para la detección

 
 
Vaishnavi Amira Yada es una escritora de contenido técnico. Tiene conocimientos de Python, Java, DSA, C, etc. Se encontró escribiendo y le encantó.
 

Califica esta publicación

¡Compartir es solidario!

Categories: IT Info