Skip to content

Instantly share code, notes, and snippets.

@RogelioCR311
Last active March 4, 2024 17:40
Show Gist options
  • Save RogelioCR311/b218a093437db4fc770395a5d12c13ca to your computer and use it in GitHub Desktop.
Save RogelioCR311/b218a093437db4fc770395a5d12c13ca to your computer and use it in GitHub Desktop.

Sistema de Asistencia mediante Reconocimiento Facial

Descripción

El proyecto consiste en el desarrollo de un sistema de asistencia basado en reconocimiento facial, diseñado para mejorar la seguridad y accesibilidad en diversos entornos. Este sistema utilizará tecnología de vanguardia para identificar y autenticar a individuos mediante el análisis de características faciales únicas, permitiendo un registro y seguimiento preciso de la asistencia de usuarios en diferentes contextos, como empresas, instituciones educativas u otros lugares públicos.

Justificación

La implementación de un sistema de asistencia mediante reconocimiento facial responde a la necesidad de mejorar la seguridad y accesibilidad en entornos donde se requiere un control eficiente de la asistencia de personas. Este sistema ofrecerá numerosos beneficios, incluyendo una mayor precisión en el registro de la asistencia, la reducción de fraudes y suplantaciones de identidad, así como una experiencia más cómoda y conveniente para los usuarios al eliminar la necesidad de utilizar métodos tradicionales de registro de entrada.

Objetivo General

Desarrollar un sistema de asistencia basado en reconocimiento facial que mejore la seguridad y accesibilidad en diferentes entornos.

Opciones para desarrollar el proyecto

Python:

Descripción Python es un lenguaje de programación de alto nivel conocido por su simplicidad y legibilidad. Es ampliamente utilizado en una variedad de aplicaciones, incluyendo el procesamiento de imágenes y el reconocimiento facial.

Ventajas

  • Facilidad de uso: Python es conocido por su sintaxis simple y legible, lo que lo hace ideal para prototipado rápido y desarrollo ágil.
  • Gran cantidad de bibliotecas: Python cuenta con numerosas bibliotecas y frameworks especializados en procesamiento de imágenes y visión por computadora, como OpenCV, Dlib y Face Recognition, lo que facilita el desarrollo de aplicaciones de reconocimiento facial.
  • Comunidad activa: Python tiene una comunidad grande y activa de desarrolladores, lo que significa que es fácil encontrar recursos, tutoriales y soporte en línea.

Desventajas

  • Rendimiento: Python tiende a ser más lento en comparación con lenguajes de programación de más bajo nivel como C++ debido a su naturaleza interpretada.
  • Consumo de memoria: Python puede consumir más memoria que otros lenguajes, lo que puede ser un problema en aplicaciones que requieren un procesamiento intensivo de imágenes.

C++ con OpenCV:

Descripción C++ es un lenguaje de programación de bajo nivel que ofrece un alto rendimiento y control sobre los recursos del sistema. OpenCV es una biblioteca de visión por computadora ampliamente utilizada que proporciona numerosos algoritmos y funciones para el procesamiento de imágenes.

Ventajas

  • Alto rendimiento: C++ es conocido por su eficiencia y rendimiento, lo que lo hace ideal para aplicaciones que requieren un procesamiento rápido de grandes volúmenes de datos de imagen.
  • Control sobre los recursos del sistema: C++ ofrece un control preciso sobre el uso de la memoria y otros recursos del sistema, lo que puede ser beneficioso en aplicaciones de visión por computadora que requieren una gestión cuidadosa de los recursos.
  • Integración con OpenCV: OpenCV está diseñado para ser utilizado con C++ y ofrece una amplia gama de funciones y algoritmos para el procesamiento de imágenes y el reconocimiento facial.

Desventajas

  • Curva de aprendizaje: C++ puede ser más difícil de aprender y utilizar en comparación con Python, especialmente para aquellos que no tienen experiencia previa en programación de bajo nivel.
  • Desarrollo más lento: El desarrollo en C++ puede ser más lento debido a su sintaxis más compleja y a la necesidad de gestionar manualmente la memoria y otros recursos del sistema.

Alcances:

Desarrollo del sistema de reconocimiento facial: El proyecto incluirá el diseño y desarrollo de un sistema de reconocimiento facial funcional y eficiente, capaz de identificar y autenticar a usuarios con alta precisión.

Integración con hardware existente: Se prevé la integración del sistema de reconocimiento facial con el hardware existente en el entorno de implementación, como cámaras de seguridad o dispositivos de control de acceso.

Interfaz de usuario intuitiva: Se desarrollará una interfaz de usuario intuitiva y amigable que permita a los administradores y usuarios finales gestionar y supervisar el sistema de manera efectiva.

Pruebas exhaustivas: Se llevarán a cabo pruebas rigurosas para validar el rendimiento y la precisión del sistema en diferentes condiciones y escenarios, garantizando su funcionalidad y fiabilidad.

Implementación piloto: Se implementará el sistema de asistencia en un entorno piloto seleccionado, donde se evaluará su funcionamiento en condiciones reales y se recopilarán comentarios y sugerencias para realizar ajustes finales.

Limitaciones:

Precisión del reconocimiento facial: Aunque se espera que el sistema sea altamente preciso, es importante tener en cuenta que el reconocimiento facial puede estar sujeto a errores, especialmente en situaciones como cambios en la iluminación, variaciones en la apariencia de los usuarios, oclusión parcial del rostro, entre otros.

Limitaciones de hardware: El rendimiento del sistema puede verse afectado por las limitaciones del hardware existente, como la calidad de las cámaras utilizadas o la capacidad de procesamiento de los dispositivos disponibles.

Privacidad y regulaciones: Es fundamental cumplir con las regulaciones de privacidad y protección de datos al implementar un sistema de reconocimiento facial, lo que puede implicar ciertas limitaciones en términos de almacenamiento y uso de datos biométricos.

Costo y recursos: El desarrollo e implementación de un sistema de reconocimiento facial puede requerir recursos significativos en términos de tiempo, dinero y personal especializado, lo que puede ser una limitación para algunas organizaciones.

Experiencia del usuario: Aunque se desarrollará una interfaz de usuario intuitiva, es posible que algunos usuarios encuentren el sistema de reconocimiento facial menos familiar o conveniente en comparación con métodos tradicionales de registro de asistencia, lo que podría afectar su aceptación y adopción.

Imagen representativa

Gist

1.1.1 Entrevista, Anaisis del sistema y seleccion del Lenguaje de Programacion

Entrevista

Entrevistador: Buen día, Javier. Gracias por tomarte el tiempo para reunirte con nosotros. Para comenzar, ¿podrías contarnos un poco sobre las necesidades específicas de MKR Industries en cuanto a un sistema de asistencia mediante reconocimiento facial?

Javier: ¡Claro! En MKR Industries, estamos buscando implementar un sistema que nos permita registrar la asistencia y la puntualidad de nuestros trabajadores de manera eficiente. Como sabes, nuestra empresa se dedica principalmente a la elaboración de cables ethernet, y necesitamos asegurarnos de que nuestros empleados estén presentes y puntualmente en sus puestos de trabajo para mantener la productividad en nuestros proyectos.

Entrevistador: Entiendo. ¿Cuáles son los principales desafíos o problemas que han experimentado hasta ahora con respecto al registro de asistencia y puntualidad?

Javier: Bueno, actualmente estamos utilizando métodos tradicionales como hojas de asistencia y tarjetas de tiempo, pero hemos notado que estos métodos pueden ser propensos a errores y a veces los empleados pueden registrar la asistencia de otros, lo que no es ideal para nosotros. Además, con la cantidad de empleados que tenemos, el proceso manual se vuelve bastante engorroso y lleva mucho tiempo.

Entrevistador: Entiendo completamente esos desafíos. ¿Hay alguna característica específica que te gustaría ver en este nuevo sistema de reconocimiento facial?

Javier: Nos gustaría que el sistema fuera fácil de usar para nuestros empleados y que fuera capaz de identificar a cada uno de ellos de manera rápida y precisa. También sería útil si pudiéramos obtener informes detallados sobre la asistencia y la puntualidad para poder hacer un seguimiento más efectivo del rendimiento de nuestros empleados.

Entrevistador: Por supuesto. Además del reconocimiento facial, ¿hay alguna otra funcionalidad o integración que te gustaría que este sistema tuviera?

Javier: Nos gustaría que el sistema fuera compatible con nuestro sistema de gestión de recursos humanos actual para que podamos integrar fácilmente los datos de asistencia. También sería genial si pudiéramos acceder al sistema desde dispositivos móviles, ya que muchos de nuestros empleados trabajan en diferentes ubicaciones dentro de nuestra planta.

Entrevistador: Entiendo. Bueno, con toda esta información, creo que tenemos una buena comprensión de lo que necesitas. Estaremos trabajando en una solución personalizada que aborde todas estas necesidades. ¿Hay algo más que te gustaría agregar o discutir antes de que avancemos con el desarrollo?

Javier: No, creo que has cubierto todo. Estoy emocionado de ver lo que pueden ofrecernos y cómo esto mejorará nuestra eficiencia en MKR Industries. Muchas gracias por tu tiempo y tu atención a nuestras necesidades.

Entrevistador: ¡El placer es nuestro, Javier! Estamos comprometidos a brindarle una solución que realmente impulse la productividad y la eficiencia en su empresa. Estaremos en contacto pronto con una propuesta inicial.

Resumen Ejecutivo: Entrevista con Javier Hernandez de MKR Industries

Resumen Ejecutivo: Entrevista con Javier Hernandez de MKR Industries

En la entrevista con Javier Hernández, representante de MKR Industries, se exploraron las necesidades específicas de la empresa en cuanto a la implementación de un sistema de asistencia mediante reconocimiento facial. Javier destacó la importancia de garantizar la asistencia y puntualidad de los trabajadores, especialmente en un entorno centrado en la producción de cables Ethernet, donde la eficiencia es fundamental.

Los principales desafíos identificados hasta el momento incluyen la propensión a errores y la falta de eficiencia en los métodos tradicionales de registro de asistencia, como las hojas de asistencia y las tarjetas de tiempo. Estos métodos manuales resultan engorrosos y consumen mucho tiempo, lo que afecta la productividad general de la empresa.

Javier expresó el deseo de que el nuevo sistema de reconocimiento facial sea fácil de usar, capaz de identificar a los empleados de manera rápida y precisa, y que proporcione informes detallados para facilitar el seguimiento del rendimiento. Además, destacó la importancia de la integración con el sistema de gestión de recursos humanos actual y la accesibilidad desde dispositivos móviles, dadas las diversas ubicaciones de trabajo dentro de la planta.

El entrevistador aseguró a Javier que comprender la totalidad de sus necesidades y se comprometió a desarrollar una solución personalizada que abordara cada uno de los requerimientos planteados. Javier expresó su entusiasmo por ver cómo esta solución mejoraría la eficiencia en MKR Industries y agradeció el tiempo y la atención dedicados a sus necesidades.

En conclusión, la entrevista estableció una base sólida para el desarrollo de un sistema de asistencia mediante reconocimiento facial adaptado a las necesidades específicas de MKR Industries, con un enfoque en la eficiencia, la precisión y la integración con los sistemas existentes de la empresa. Se espera que esta solución impulse la productividad y la eficiencia en la empresa, mejorando así su competitividad en el mercado.

Analisis del Sistema

  1. Descripción del Sistema:

El sistema propuesto para MKR Industries consiste en una solución de registro de asistencia y puntualidad basada en reconocimiento facial. Está diseñado para mejorar la eficiencia y precisión del registro de asistencia de los empleados, así como para proporcionar informes detallados sobre la asistencia y la puntualidad.

  1. Objetivos del Sistema:
  • Mejorar la precisión y la fiabilidad del registro de asistencia.
  • Reducir el tiempo y los recursos dedicados al proceso de registro de asistencia.
  • Proporcionar informes detallados sobre la asistencia y la puntualidad para facilitar el seguimiento del rendimiento de los empleados.
  1. Características Clave:
  • Reconocimiento facial preciso y rápido.
  • Interfaz fácil de usar para empleados y administradores.
  1. Beneficios Esperados:
  • Mayor precisión en el registro de asistencia, reduciendo los errores y fraudes.
  • Ahorro de tiempo y recursos al automatizar el proceso de registro.
  • Mejora en la gestión del rendimiento de los empleados mediante informes detallados.

Elección de los leng. de programación y otros recursos.

Lenguaje de Programación: Python

Python es un lenguaje de programación versátil, de alto nivel y fácil de aprender. Su sintaxis simple y legible lo convierte en una excelente opción para el desarrollo de aplicaciones de reconocimiento facial. Además, Python cuenta con numerosas bibliotecas y frameworks especializados en visión por computadora y reconocimiento facial, como OpenCV y dlib, lo que facilita la implementación de esta funcionalidad en el sistema.

Bibliotecas y Frameworks:

OpenCV (Open Source Computer Vision Library): Esta biblioteca es ampliamente utilizada para el procesamiento de imágenes y visión por computadora en Python. Proporciona una variedad de herramientas y algoritmos para el reconocimiento facial, detección de rostros y extracción de características.

dlib: Otra biblioteca popular que se utiliza para tareas de visión por computadora y aprendizaje automático. Ofrece implementaciones eficientes de algoritmos de reconocimiento facial y detección de puntos clave faciales.

Facial Recognition: Una biblioteca de Python especializada en reconocimiento facial. Proporciona una API simple para entrenar modelos de reconocimiento facial y reconocer caras en imágenes o flujos de video en tiempo real.

1.2 Listar los patrones de diseño de su sistema, use GTP para detectar las clases.

Patrones de diseño aplicables al proyecto

Patrón de Diseño Singleton:

Este patrón garantiza que una clase tenga solo una instancia y proporciona un punto de acceso global a esa instancia. Podría ser útil para garantizar que solo exista una instancia del Reconocedor Facial en tu sistema.

Singleton

Patrón de Diseño Factory Method:

Este patrón define una interfaz para crear un objeto, pero permite a las subclases modificar el tipo de objeto que se crea. Podría ser útil para crear instancias de diferentes tipos de algoritmos de reconocimiento facial en función de ciertas condiciones o configuraciones.

factory method

Patrón de Diseño Strategy:

Este patrón define una familia de algoritmos, encapsula cada uno de ellos y los hace intercambiables. Podría ser útil para definir diferentes estrategias de detección y reconocimiento facial y permitir que el sistema las seleccione dinámicamente en tiempo de ejecución.

Stratergy

Patrón de Diseño Observer:

Este patrón define una relación uno a muchos entre objetos, de modo que cuando un objeto cambia de estado, todos sus dependientes son notificados y actualizados automáticamente. Podría ser útil para notificar a otros componentes del sistema cuando se registra una nueva persona o se realiza un reconocimiento facial exitoso.

Observer

Patrón de Diseño MVC (Modelo-Vista-Controlador):

Este patrón separa la lógica de la aplicación en tres componentes principales: el modelo (que representa los datos y la lógica de la aplicación), la vista (que muestra la interfaz de usuario) y el controlador (que maneja las interacciones del usuario). Podría ser útil para organizar la estructura de tu sistema de manera clara y modular.

MVC

1.4 Analisis y cronografia del sistema

1. Definición de Requisitos

Identificación de Necesidades:

  • Comprender las necesidades del cliente para mejorar la eficiencia y precisión del registro de asistencia de los empleados.

Funcionalidades Específicas:

  • Implementar un sistema de registro de asistencia y puntualidad basado en reconocimiento facial.
  • Ofrecer informes detallados sobre la asistencia y la puntualidad para facilitar el seguimiento del rendimiento.

Requisitos de Rendimiento, Usabilidad y Seguridad:

  • Garantizar un reconocimiento facial preciso y rápido.
  • Diseñar una interfaz fácil de usar tanto para empleados como para administradores.

2. Análisis y Diseño del Sistema

Diseño Arquitectónico: Para el diseño arquitectónico, hemos optado por la arquitectura monolítica. En este enfoque, el sistema se divide en funcionalidades específicas dentro de un único código base. Esta decisión se basa en su simplicidad y facilidad de implementación, lo que nos permitirá desarrollar y mantener el sistema de manera eficiente.

3. Selección de Patrones de Diseño

El patron de diseño seleccionado sera el MVC (Model-View-Controller)

Modelo: Representa los datos y la lógica subyacente de la aplicación. En tu caso, el modelo podría incluir la lógica del reconocimiento facial, como la detección de rostros, la extracción de características y el reconocimiento de personas.

Vista: Es responsable de mostrar la interfaz de usuario y de interactuar con el usuario. En este caso, utilizarías Tkinter para construir la interfaz de usuario de escritorio que permita a los usuarios interactuar con el sistema de reconocimiento facial.

Controlador: Actúa como un intermediario entre el modelo y la vista. Gestiona las entradas del usuario desde la vista, actualiza el modelo según sea necesario y actualiza la vista para reflejar los cambios en el modelo.

4. Planificación de la Implementación

Funcionalidades prioritarias:

Las principales funcionalidades del son 2 que van de la mano:

  • Que el sistema sea capaz de detectar un rostro en la cámara
  • Que sea capaz de detectar de quien es ese rostro

Esos 2 puntos son fundamentales para el buen funcionamiento del sistema

Cronograma:

Semana 1 (11 de marzo - 17 de marzo): Diseño del Sistema

  • Elaboración de diagramas UML (casos de uso, clases, secuencia).
  • Diseño arquitectónico del sistema y selección de tecnologías.

Semana 2 (18 de marzo - 24 de marzo): Configuración del Entorno de Desarrollo

  • Instalación y configuración de herramientas de desarrollo.
  • Configuración de repositorios de control de versiones.

Semana 3-6 (25 de marzo - 21 de abril): Desarrollo y Pruebas

  • Implementación de funcionalidades principales.
  • Integración de componentes y realización de pruebas unitarias.

Semana 7-8 (22 de abril - 5 de mayo): Desarrollo de Interfaz de Usuario y Depuración

  • Diseño e implementación de la interfaz de usuario.
  • Pruebas de integración y depuración de errores.

Semana 9 (6 de mayo - 12 de mayo): Optimización y Mejoras

  • Optimización del rendimiento del sistema.
  • Implementación de mejoras basadas en retroalimentación recibida durante las pruebas.

Semana 10 (13 de mayo - 24 de mayo): Documentación, Preparación para Entrega y Entrega Final

  • Elaboración de documentación técnica y de usuario.
  • Preparación de materiales de formación y manuales de usuario.
  • Entrega final del proyecto y evaluación del producto.

5. Entorno de Desarrollo

Para configurar nuestro entorno de desarrollo, hemos elegido utilizar Visual Studio Code debido a su versatilidad y facilidad de uso. Después, emplearemos la librería de Python venv para establecer entornos virtuales, lo que nos permitirá mantener nuestro proyecto aislado y organizado, evitando conflictos con otras aplicaciones.

En cuanto a la base de datos, hemos optado por PostgreSQL por su robustez y capacidad para manejar grandes volúmenes de datos. Esta elección garantiza un almacenamiento eficiente y seguro para nuestro proyecto de reconocimiento facial.

6. Prototipado y Pruebas Tempranas

Para validar el diseño del sistema de reconocimiento facial, se llevará a cabo un proceso de prototipado y pruebas tempranas. Esto nos permitirá detectar posibles problemas antes de avanzar en la implementación completa.

  1. Prototipado: Construiremos un prototipo inicial del sistema con funcionalidades básicas para evaluar su usabilidad y efectividad.

  2. Pruebas Tempranas: Realizaremos pruebas con usuarios representativos para identificar problemas y áreas de mejora en la precisión del reconocimiento facial y la interfaz de usuario.

  3. Evaluación de Resultados: Analizaremos los resultados para corregir cualquier problema y asegurarnos de que el diseño final cumpla con los estándares de calidad y las necesidades de los usuarios finales.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment