def entrenarSomnolencia(red): #Se inicializa el dataset ds = SupervisedDataSet(4096,1) """Se crea el dataset, para ello procesamos cada una de las imagenes obteniendo los rostros, luego se le asignan los valores deseados del resultado la red neuronal.""" print "Somnolencia - cara" for i,c in enumerate(os.listdir(os.path.dirname('/home/taberu/Imágenes/img_tesis/somnoliento/'))): try: im = cv2.imread('/home/taberu/Imágenes/img_tesis/somnoliento/'+c) pim = pi.procesarImagen(im) cara = d.deteccionFacial(pim) if cara == None: print "No hay cara" else: print i ds.appendLinked(cara.flatten(),10) except: pass trainer = BackpropTrainer(red, ds) print "Entrenando hasta converger" trainer.trainUntilConvergence() NetworkWriter.writeToFile(red, 'rna_somnolencia.xml')
def entrenarSonoliento(red): #Se inicializa el dataset ds = SupervisedDataSet(4096,1) """Se crea el dataset, para ello procesamos cada una de las imagenes obteniendo los rostros, luego se le asignan los valores deseados del resultado la red neuronal.""" for i,c in enumerate(os.listdir(os.path.dirname(path + '/static/img/sleepy/'))): a = 0 while a < 50: try: a += 1 im3 = cv2.imread(path + '/static/img/sleepy/'+c) procesado = p.procesarImagen(im3) cara = d.deteccionFacial1(procesado) ds.addSample(cara.flatten(),10) except: pass trainer = BackpropTrainer(red, ds) print "Entrenando hasta converger" trainer.trainOnDataset(ds,100) NetworkWriter.writeToFile(red, 'rna_somnolencia.xml') #para entrenar operadores manualmente #red_operador = NetworkReader.readFrom('rna_operador.xml') #entrenarOperador(red_operador) #para entrenar somnolencia manualmente #red_somno = NetworkReader.readFrom('rna_somnolencia.xml') #entrenarSonoliento(red_somno)
def guardarimagen(self, filUpload): mensaje = "" imagenes = [] path = os.path.dirname(__file__) # cherrypy.cherry.session['filUpload'] = filUpload data_name = filUpload.filename upload_path = path + '/static/img/temp/' + filUpload.filename size = 0 all_data = bytearray() while True: data = filUpload.file.read(8192) all_data += data if not data: break size += len(data) #Se guarda la imagen temporalmente saved_file=open(upload_path, 'wb') saved_file.write(all_data) saved_file.close() #Se hace la deteccion para verificar si la foto sirve try: img = cv2.imread(upload_path) procesado = p.procesarImagen(img) d.deteccionFacialImg(data_name,procesado) mensaje = "La foto fue guardada con exito" cv2.imwrite(path + '/static/img/operadores/'+data_name,img) os.remove(upload_path) except: mensaje = "Debe subir una foto clara tipo carnet para poder ser procesada" os.remove(upload_path) for i,c in enumerate(os.listdir(os.path.dirname(path + '/static/img/operadores/'))): imagenes.append(c) tmpl = env.get_template('index.html') return tmpl.render(mensaje=mensaje,imagenes=imagenes)
def run(): """Es la clase principal en el cual se sigue la secuencia del procesamiento""" a = Alarma() """Al inicializar genera un sonido inidicado queel dispositivo esa funcionando sin contratiempos""" a.inicio() #Crear Red Neuronal red1 = rn.crearRN() red2 = rn.crearRN() red3 = rn.crearRN() #Se verifica si el archivo xml que contiene la red neuronal entrenada existe path = os.path.dirname(__file__) if os.path.isfile('rna_somnolencia.xml'): red_somnolencia = NetworkReader.readFrom('rna_somnolencia.xml') else: print "No existe la red neuronal solicitada" if os.path.isfile('rna_atento.xml'): red_atento = NetworkReader.readFrom('rna_atento.xml') else: print "No existe la red neuronal solicitada" if os.path.isfile('rna_operador.xml'): red_operador = NetworkReader.readFrom('rna_operador.xml') else: print "No existe la red neuronal solicitada" #Se la camara con la que se va a trabajar #try: # camara = v.capturarVideo() #except: # print "no camara",sys.exc_info()[0],sys.exc_info()[1] # a.noCamara() camara = cv2.VideoCapture(0) #camara.set(15,8.0) camara.set(cv2.cv.CV_CAP_PROP_BRIGHTNESS, 160) camara.set(cv2.cv.CV_CAP_PROP_EXPOSURE, 20.0) time.sleep(3) while True: Somnolencia = 0.00001 Atencion = 0.00001 Operador = 0.00001 #print "leyendo camara" is_sucessfully_read, img = camara.read() # is_sucessfuly_read retorna falso cuando no puede apturar de la camara if (is_sucessfully_read): cv2.imshow("Camera Feed", img) else: print "No se pudo detectar entrada de video desde %s. Saliendo..." % capture break if cv2.waitKey(1) & 0xFF == ord('q'): break #print "procesando imagen" frame = img # #Procesar imagenes del video improcesada = pi.procesarImagen(frame) cara = d.deteccionFacial(improcesada) try: if not cara: print "No hay operador frente el Monitor" a.ajeno() except ValueError: #print "procesando somno" Somnolencia = rn.estimularRN(red_somnolencia, cara.flatten()) #print "procesando atencion" Atencion = rn.estimularRN(red_atento, cara.flatten()) #print "procesando operador" Operador = rn.estimularRN(red_operador, cara.flatten()) print "Somnolencia: %s Atencion: %s Operador:%s" % (float( Somnolencia[0]), float(Atencion[0]), float(Operador[0])) if float(Operador[0]) < 5: print "Estado de la alarma: Persona no reconocida" a.ajeno() if float(Atencion[0]) < 5: print "Estado de la alarma: Distraido" a.distraido() if float(Somnolencia[0]) < 9.82: print "Estado de la alarma: Somnoliento" a.somnoliento() # try: # Somnolencia = rn.estimularRN(red_somnolencia,cara.flatten()) # Atencion = rn.estimularRN(red_atento,cara.flatten()) # Operador = rn.estimularRN(red_operador,cara.flatten()) # except: # print "Nadie frente el Monitor" # Colocar junto a la linea de arriba para ver codigo de error ,sys.exc_info()[0],sys.exc_info()[1] #time.sleep(2) cv2.destroyAllWindows() camara.release()
def main(): """Es la clase principal en el cual se sigue la secuencia del procesamiento""" a = Alarma() """Al inicializar genera un sonido inidicado queel dispositivo esa funcionando sin contratiempos""" a.inicio() #Crear Red Neuronal red1 = rn.crearRN() red2 = rn.crearRN() #Se verifica si el archivo xml que contiene la red neuronal entrenada existe path = os.path.dirname(__file__) if os.path.isfile(path + '/rna_somnolencia.xml'): red_somnolencia = NetworkReader.readFrom('rna_somnolencia.xml') else: e.entrenarSomnolencia(red1) red_somnolencia = NetworkReader.readFrom('rna_somnolencia.xml') if os.path.isfile(path + '/rna_atento.xml'): red_atento = NetworkReader.readFrom('rna_atento.xml') else: e.entrenarAtento(red2) red_atento = NetworkReader.readFrom('rna_atento.xml') #Se la camara con la que se va a trabajar try: camara = v.capturarVideo() except: a.noCamara() while True: Somnolencia = 0.00001 Atencion = 0.00001 #Obtener Video val, frame = v.obtenerVideo(camara) #Procesar imagenes del video improcesada = pi.procesarImagen(frame) """Se detecta la cara del video, luego se activa las redes neuronales para detectar los estados de somnolencia y atencion en el conductor""" cara = d.deteccionFacial(improcesada) if cara == None: """Si el sistema no encuentra ninguna cara debera generar una notificacion de sonido para avisar que hay algun problema""" #time.sleep(15) #a.deteccionNula() else: Somnolencia = rn.estimularRN(red_somnolencia,cara.flatten()) Atencion = rn.estimularRN(red_atento,cara.flatten()) """Se ingresan los valores obtenidos al bloque difusor el cual generara las alarmas en los casos que convengan.""" estado = a.motorDifuso(Somnolencia,Atencion) print "Estado de la alarma", estado a.alertar(estado)