Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Gestion de Proyectos
Gestion de Proyectos
16/11/2017
INTRODUCCION
Por su naturaleza amigable, este tipo de sistemas siguen siendo atractivos a pesar de
la existencia de otros métodos muy fiables de identificación personal biométricos, como
el análisis de huellas dactilares y el reconocimiento del iris.
En este contexto, una de las tantas aplicaciones que podemos desarrollar con esta
tecnología, es la de control de acceso a sectores de mediana y alta seguridad por la
autenticación de personas mediante el reconocimiento de rostros.
Con este punto de vista, se planifico la implementación el presente sistema con el fin
de servir para controlar el acceso o circulación de personas por despachos, oficinas o
lugares sensibles de la administración pública o empresas privadas. Por ejemplo en las
alcaidías, los visitantes que ingresan a los sectores de alojamiento de los detenidos,
son identificados mediante la impresión de sus huellas dactilares y cotejándolas
individualmente en una hoja de papel por un dactiloscopo, que debe confrontar ambas
huellas, buscar los patrones característicos de las mismas y verificar que sean
idénticos. Este sistema manual sobrecarga al operador humano que debe realizar dicha
operación entre 200 a 400 veces diarias, dependiendo la cantidad de visitantes que
asistan al establecimiento, lo cual produce largas demoras en el ingreso de personas,
inconvenientes en la seguridad por la conglomeración de individuos en un mismo
sector, la posibilidad del error humano ante el cansancio inevitable de la realización de
una tarea repetitiva por un lapso de tiempo tan prolongado, etc.
Usuario: Es la persona que utiliza el sistema, existen tres tipos diferentes, codificados
de la siguiente manera
Alto: El usuario tiene control total del sistema, acceso irrestricto a todas las
funcionalidades del mismo.
Perfil histografico: Son las características identificadoras del rostro del visitante
codificadas en una matriz de valores de punto flotante
ESQUEMA DE LA ARQUITECTURA DEL SISTEMA
PLANIFICACION
Adquisición de imágenes: Se utilizan funciones que trae OpenCV para manejar las
imágenes captadas por una cámara digital.
Tratamiento de la Imagen: Una vez sabemos que hay una cara la recortaremos para
quedarnos con la información que verdaderamente nos interesa, obviando la
información que no nos interesa (el fondo).
TABLA USUARIO:
PASSWORD: STRING
COD_PERFIL: INTEGER
TABLA CONFIG:
COD_PERFIL: INTEGER
TABLA PERFIL:
DESCRIPCION: STRING
TABLA VISITA:
APELLIDO: STRING
NOMBRE: STRING
TELEFONO: STRING
DNI: INTEGER
DOMICILIO: STRING
SEXO: BOOLEAN
NACIMIENTO: DATE
LISTADO DE CLASES Y METODOS:
Calse: MAINWINDOWS
Atributos
Tipo Nombre
DialogBaja* m_DialogBaja;
DialogModifica* m_DialogModifica;
DialogAltaUsuario* m_DialogAltaUsuario;
DialogModUsuario* m_DialogModUsuario;
DialogBajaUsuario* m_DialogBajaUsuario;
Vigilante* m_Vigilante;
QLabel* LblNotificacion;
QString strName;
QString strDriver;
QString strHost;
QString strUserName;
QString strPassword;
QSqlDatabase maestraDB;
int perfil;
Métodos
void getPerfil();
void HabilitarMenu();
void showEvent(QShowEvent* event);
void on_actionSalir_triggered();
void on_actionAcerca_de_triggered();
void on_actionAlta_Visitas_triggered();
void on_actionBaja_Visita_triggered();
void on_actionModificar_Visita_triggered();
void on_actionMostrarCamara_triggered();
void on_actionAgregar_Usuario_triggered();
void on_actionModificar_Usuario_triggered();
void on_actionEliminar_Usuario_triggered();
void on_actionMostrar_Camara_triggered();
Clase: DIALOGALTA
Atributos
Tipo Nombre
QTimer* Reloj;
cv::VideoCapture cv_Camara;
cv::Mat cv_Frame;
QImage ImgOriginal,
QImage ImgFoto;
cv::CascadeClassifier faceDetector;
std::vector<cv::Rect> rect;
int Bandera
int Error
int Foto;
int contador;
std::vector<cv::Mat> ListImagenes;
std::vector<int> ListEtiquetas;
cv::Mat imgProcesar,
cv::Mat imgGuardar;
Métodos
Atributos
Tipo Nombre
QString varHistograma;
short int numLegajo;
bool isBusqueda;
Métodos
void insertarMascara();
void limpiarPantalla();
void limpiarControles();
void iniciarControles();
void setFocus();
void on_BtnSalir_clicked();
void on_BtnLegajo_clicked();
void on_BtnDNI_clicked();
void on_BtnAceptar_clicked();
void on_BtnBorrar_clicked();
void on_BtnBusqueda_clicked();
Clase: DIALOGLOGIN
Atributos
Tipo Nombre
int cantIntentos;
Métodos
Void on_btnCancel_clicked();
void on_btnAceptar_clicked();
void LimpiarControles();
bool isCamposCompletados();
Clase: DIALOGBAJA
Atributos
Tipo Nombre
Int numLegajo;
bool isBusqueda;
Métodos
void limpiarControles();
void setFocus();
void on_BtnSalir_clicked();
void on_BtnLegajo_clicked();
void on_BtnDNI_clicked();
void on_BtnBorrar_clicked();
void on_BtnBusqueda_clicked();
void on_BtnAceptar_clicked();
Clase: DIALOALTAUSUARIO
Métodos
void insertarMascaras();
bool isCamposCompletados();
void limpiarPantalla();
void on_BtnSalir_clicked();
void on_BtnBorrar_clicked();
void on_BtnGrabar_clicked();
Clase: DIALOGMODUSUARIO
Métodos
void LLenarUsuarios();
void LLenarPerfiles();
void CargarDatos(int _codUsuario);
int BuscarIndicePerfil(int codPerfil);
bool isDatosCompletos();
int getCodPerfil(int indice);
Clase: DIALOGBAJAUSUARIO
Métodos
void llenarCombo();
QString getPerfil(int codPerfil);
void on_BtnExit_clicked();
void on_BtnBorrar_clicked();
Clase: DIALOGACERCADE
Métodos
void on_BtnSalir_clicked();
Clase: VIGILANTE
Atributos
Tipo Nombre
QTimer* Reloj;
QTimer* RelojIdentificarRostro;
QTimer* RelojSerial;
cv::VideoCapture cv_Camara;
cv::Mat cv_Frame;
int Bandera _Error;
QImage ImgFoto;
int Bandera_Foto;
cv::CascadeClassifier faceDetector;
cv::Mat imgProcesar;
bool isRostroDetectado;
QVector<TipoVisita*> ListVisitantes;
QImage ImgOriginal;
std::vector<cv::Rect> rect;
Métodos
void procesarFrame();
void identificarRostro();
void ChequearPuerta();
void on_BtnSalir_clicked();
void on_btnAbrirPuerta_clicked();
void iniciarCamara();
void configObjetos();
void cargarBaseDatos();
void mat2Image(const cv::Mat& mat, QImage& destino);
void mostrarRostro(int _legajo);
bool abrirPuerta();
void LimpiarPantalla();
Clase: FORMALTA
Atributos
Tipo Nombre
QTimer* Reloj;
cv::VideoCapture cv_Camara;
cv::Mat cv_Frame;
QImage ImgOriginal;
QMessageBox* Mensaje;
QCVImage* Convertir;
Métodos
void configObjetos();
void iniciarCamara();
void procesarFrame();
void on_BtnCapturaFoto_clicked();
void on_BtnBorrarFoto_clicked();
void on_btnExit_clicked();
Clase: TIPOCONEXION
Atributos
Tipo Nombre
QString strName;
QString strDriver;
QString strHost;
QString strUserName;
QString strPassword;
QSqlDatabase maestraDB;
bool isNotOpen;
Métodos
bool errorConectar();
void Abrir();
QSqlDatabase getBaseDatos();
void Cerrar();
QString lastError();
DIAGRAMAS DE CASO DE USO
void LedTest(){
static unsigned long contador = TIEMPO_ENCENDIDO;
if(contador > 0)
{
contador --;
return;
}
else
{
if(LED_ENCENDIDO)
{
DESACTIVAR_LED;
contador = TIEMPO_APAGADO;
}
else
{
ACTIVAR_LED;
contador = TIEMPO_ENCENDIDO;
}
}
}
void USART_Init( unsigned int ubrr) //inicializa los registro puerto serie
{
/*Set baud rate */
UBRR0H = (unsigned char)(ubrr>>8);
UBRR0L = (unsigned char)ubrr;
/*Enable receiver and transmitter */
UCSR0B = (1<<RXEN0)|(1<<TXEN0);
/* Set frame format: 8data, 2stop bit */
UCSR0C = (0<<USBS0)|(3<<UCSZ00);
}
//----------------------------------------
unsigned char SERIAL_Recibir( void ) //recibe datos del puerto serie
{
if(UCSR0A & (1<<RXC0)) return UDR0;
}
//-------------------------------------------
//---------------------------------------------
char SensorActivado(void)
{
static int contador_auxiliar = 50;
char actual, resultado;
char static anterior;
if(contador_auxiliar > 0){contador_auxiliar--; return 2;}
actual = ENTRADA1;
if (actual > anterior)
resultado = 1;
else
{
if ( actual < anterior) // si Portb pasa de prendido a apagado
resultado = 0;
else
resultado = 2;
}
anterior = actual; // ya que i ha tomado el ultimo valor de portb
contador_auxiliar = 50;
return(resultado);
}
//--------------------------------------------------------------
void pasolapuerta(void)
{
if(SensorActivado() == 1)
{
if(SALIDA1 || SALIDA2){
PARAR_PUERTA;
SERIAL_Enviar('1');
}
}
void loop() {
LedTest();
pasolapuerta();
letra = SERIAL_Recibir();
if(letra == '1') ABRIR_PUERTA;
if(letra == '0') CERRAR_PUERTA;
}
CRONOGRAMA DEL PROYECTO
Fecha de Duración
Nombre de la tarea inicio Fecha final (dias)
Finalizar diseño menu de la pantalla principal 29/4/2017 30/4/2017 1
Diseñar pantalla tarea de control de acceso 29/4/2017 1/5/2017 2
Definir clases a utilizar en la tarea de control de acceso 2/5/2017 4/5/2017 2
Diseñar pantalla de login 5/5/2017 7/5/2017 2
Definir clases a utilizar en la tarea de login 8/5/2017 10/5/2017 2
Diseñar pantalla de alta de usuario 11/5/2017 13/5/2017 2
Definir clases a utilizar en la tarea de alta usuario 14/5/2017 16/5/2017 2
Diseñar pantalla de baja de usuario 17/5/2017 19/5/2017 2
Definir clases a utilizar en la tarea de baja usuario 20/5/2017 22/5/2017 2
Diseñar pantalla de modificacion usuario 23/5/2017 25/5/2017 2
Definir clases a utilizar en la tarea de modificar usuario 26/5/2017 28/5/2017 2
Definir componentes a utilizar protoboard arduino apertura puerta 29/5/2017 31/5/2017 2
Definir clases a utilizar para comunicación con arduino 1/6/2017 3/6/2017 2
Codificar menu de la pantalla principal 4/6/2017 6/6/2017 2
Codificar logica de la tarea de login 7/6/2017 10/6/2017 3
Codificar logica de la tarea control de acceso 11/6/2017 18/6/2017 7
Codificar logica de la tarea alta de usuario 19/6/2017 22/6/2017 3
Codificar logica de la tarea baja de usuario 23/6/2017 26/6/2017 3
Realizar la codificacion de la tarea modificar usuario 27/6/2017 30/6/2017 3
Codificar logica del programa de apertura de la puerta en el pic
3
arduino 1/7/2017 4/7/2017
Codificacion de la logica de comunicación entre el pic Arduino -
5/7/2017 8/7/2017 3
Sistema y viceversa
Agregar a la Base Datos tabla con perfiles de usuario y configuracion
4
de permisos de acceso 9/7/2017 13/7/2017
Realizar testing conexión a la base de datos desde el sistema 14/7/2017 17/7/2017 3
Realizar testing de la tarea de login con DB 18/7/2017 22/7/2017 4
Realizar testing de la tarea control de acceso 23/7/2017 27/7/2017 4
Realizar testing de la tarea de alta de usuario 28/7/2017 1/8/2017 4
Realizar testing de la tarea de baja de usuario 2/8/2017 6/8/2017 4
Realizar testing de la tarea de modificar usuario 7/8/2017 11/8/2017 4
Armar protoboard arduino de apertura puerta 12/8/2017 15/8/2017 3
Realizar testing programa arduino 16/8/2017 20/8/2017 4
Realizar testing comunicación con arduino 21/8/2017 25/8/2017 4