Proyecto parcial
- Curso: Computación Gráfica
- Clase del 2020-1
- Maestría en informática - Mención en ciencias de la computación
El proyecto tiene como objetivo desarrollar una pieza de código capaz de recibir como entrada un video de una calle concurrida en Londres y determinar que personas mostradas en el video cumplen con una normativa de distancia social y cuales no. El video usado se puede encontrar en el siguiente enlace, el cual es material para el desarrollo de algoritmos de detección en imagenes proporcionado por la universidad de Oxford. Por otro lado, tambien se utiliza la información de los puntos que determinan los bounding boxes correspondientes a los cuerpos y cabezas de los transeuntes mostrados en el video anterior. Esta información puede ser encontrada en el siguiente enlace
Finalmente el resultado obtenido es un video compuesto de frames como el mostrado a continuación:
El proyecto cuentas con las siguientes carpetas:
📁 Setup (Ver) .- Contiene los archivos para la configuración inicial del entorno para ejecutar los programas.
📁 Data (Ver) .- En esta carpeta se deben almacenar los archivos para la prueba que son tres:
- El video donde se realizará la inspección (video.avi)
- Dos archivos que tiene la información de los bounding boxes (caminantes.csv y walkers.txt)
📁 Experimentos (Ver) .- Contienen los experimentos hechos en jupyter notebooks donde se va probando cada una de las funciones creadas para el proyecto. Estos experimentos son listados a continuación:
- Experimento 1 (Ver): Visualización del video y marcado de bounding boxes en los frames.
- Experimento 2 (Ver): Determinación de la matriz de transformación de la imagen y muestra de la imagen transformada.
- Experimento 3 (Ver): Se grafican los puntos que representan las cabezas de las personas pero desde una vista denominada ojo de halcon.
- Experimento 4 (Ver): Determinación de infractores. En este experimento se muestran los infractores de color rojo y los que no en color verde. tanto en los frames del video como en la vista de ojo de hálcon.
- Experimento 5:(Ver): En esta experiencia se añaden mejoras como la variación de la distancia permitida y el trazo de rectas de separación.
📁 Resultados (Ver) .- En esta carpeta se almacenan las imagenes que se obtuvieron como resultado de los experimentos.
- Clonar el proyecto, usar:
git clone https://github.com/fararay/DETECTOR_DISTANCIA_SOCIAL.git
- Descargar los archivos del siguiente (Enlace).
- Mover los archivos en la carpeta Data
- Ejecutar el cuaderno (Programa_Final.ipynb)
- Copiar el archivo (Programa_Final_(Colab).ipynb) a Google Drive
- Descargar los archivos de la librería del proyecto (Ya incluido en el cuarderno):
!wget --no-check-certificate 'https://docs.google.com/uc?export=download&id=1rItvY1_aLiPWfaIsGw-50DVFJecp61YT' -O Setup.zip
!unzip Setup.zip
- Instalamos las dependencias del proyecto (Ya incluido en el cuarderno):
# Instalamos las dependencias del proyecto
!pip install -r 'Setup/requirements.txt'
!wget link2
- Descargamos la información del proyecto (Ya incluido en el cuarderno):
#Descargamos y descomprimimos la información
!gdown "https://drive.google.com/uc?export=download&id=1qRoVEXJiATzds95IbnCtJWdbuZ7w7Tzi"
!unzip Data.zip
- Ejecutar el cuaderno
-
División de los frames y trazado de bounding boxes .- Se usa la librería opencv para poder dividir el video en frames y en base a la información del archivo de texto correspondiente se trazan los bounding boxes que envuelven a cada una de las personas en cada frame.
-
Determinación de la transformación .- Realizado en el experimento 2. Se trata de corresponder puntos conocidos de un frame del video original con la forma a la que se quiere llegar finalmente. Este proceso genera una matriz de transformación la cual será usada posteriormente. Se aproxima la distancia en unidades reales en la segunda imagen según el código mostrado a continuación:
#6 lozas de ancho - Aproximamos ancho de 40 cm
#15 Lozas de alto - Aproximamos largo de 40 cm
pix_unit = 1.7 #pixeles por centimetro
#Aproximacion de pixeles de la imagen final según la longitud en centimetros de la imagen base
width_street = 240*pix_unit
height_street = 600*pix_unit
Imagen base
-
Determinación de puntos representativos .- Se usa la información de los puntos correspondientes a bounding boxes para determinar aproximadamente la posición de la cabeza de una persona en el frame original, asi mismo, se utiliza la matriz de transformación para ubicar esos puntos en la imagen resultado (bird-eye).
-
Determinación de puntos buenos y malos .- En base a una distancia de restricción dada se determinan que puntos que representan a las personas cumplen con la restricción y cuales no, para ello se usa la posición de los puntos en la imagen bird-eye y se determina la distancia simple euclidiana entre ellos.
-
Visualización de resultados.- En base a la información de los puntos buenos y malos, se marcan con color rojo aquellos que no cumplen la restricción de distancia en la imagen resultado. Asi mismo, los que si cumplen son mostrados en color verde. El conjunto de puntos buenos y malos tambien determinan el color de los bounding boxes que corresponden a las personas en la imagen original.
La licencia de este proyecto es del tipo GNU General Public License v3.0 (Ver)