def __main_function__(): # Import some global varialbes global archivoDeVideo global cambiosImportantes cambiosImportantes = False global numeroDeObjetos numeroDeObjetos = 0 shapeUR = (3296,2512) shapeMR = (640,480) shapeLR = (320,240) # Creamos el reporte inicial miReporte = MiReporte(levelLogging=logging.INFO,nombre=__name__) # Se crea por defecto con nombre de la fecha y hora actual miReporte.info('Programa iniciado exitosamente con ingreso de senal video '+archivoDeVideo+entradaReal+' con semaforo '+semaforoSimuladoTexto+str(periodoDeSemaforo) +', corriendo a '+str(mifps)+' Frames por Segundo') # Si no existe el directorio de reporte lo creo if not os.path.exists(directorioDeReporte): os.makedirs(directorioDeReporte) # Is statements if generarArchivosDebug: miReporte.info('Generando Archivos de Debug') else: miReporte.info('Generando infracciones unicamente (No debug video)') # If mostrar Imagenes if mostrarImagen: miReporte.info('Pantalla de muestra de funcionamiento en tiempo real encendida') else: miReporte.info('Pantalla de muestra de funcionamiento en tiempo real apagada') # El directorio de reporte debe crearse al inicio del programa # Variables de control: numeroDeFrame = 0 maximoInfraccionesPorFrame = 20 #colores = np.random.randint(0,100,(maximoInfraccionesPorFrame,3)) # Cargando los parametros de instalacion: # El archivo de video debe tener como minimo 5 caracteres para estar trnajando en modo simulado, de lo contrario estamos trabajando en modo real if len(archivoDeVideo) > 4: archivoParametrosACargar = archivoDeVideo[:-4]+'.npy' else: archivoParametrosACargar = 'datos.npy' parametrosInstalacion = np.load(folderDeInstalacion+'/'+archivoParametrosACargar) miReporte.info('Datos de Instalacion de: '+folderDeInstalacion+'/'+archivoParametrosACargar) poligonoSemaforo = parametrosInstalacion[0] verticesPartida = parametrosInstalacion[1] verticesLlegada = parametrosInstalacion[2] angulo = parametrosInstalacion[3] miReporte.info('Cargado exitosamente parametros de instalacion: '+str(parametrosInstalacion)) # Arrancando camara if len(archivoDeVideo) == 0: # modo real if os.uname()[1] == 'alvarohurtado-305V4A': miCamara = cv2.VideoCapture(1) else: miCamara = cv2.VideoCapture(0) miCamara.set(3,3280) miCamara.set(4,2464) #miCamara.set(3,2592) #miCamara.set(4,1944) miReporte.info('Activada Exitosamente cámara en tiempo real') else: try: miCamara = miCamara = cv2.VideoCapture(directorioDeVideos+'/'+archivoDeVideo) miReporte.info('Archivo de video cargado exitosamente: '+directorioDeVideos+'/'+archivoDeVideo) except Exception as currentException: miReporte.error('No se pudo cargar el video por '+str(currentException)) # Se captura la imagen de flujo inicial y se trabaja con la misma ret, capturaEnAlta = miCamara.read() capturaEnBaja = cv2.resize(capturaEnAlta,(320,240)) # Creación de objetos: miPoliciaReportando = PoliciaInfractor( capturaEnBaja, verticesPartida, verticesLlegada) miGrabadora = GeneradorEvidencia(directorioDeReporte,mifps,guardarRecortados) miFiltro = IRSwitch() miAcetatoInformativo = Acetato() miAcetatoInformativo.colocarPoligono(np.array(poligonoSemaforo)//2) miAcetatoInformativo.colocarPoligono(np.array(verticesPartida)) miAcetatoInformativo.colocarPoligono(np.array(verticesLlegada)) frame_number = 0 tiempoAuxiliar = time.time() periodoDeMuestreo = 1.0/mifps periodoReal = time.time() # Create BGSUBCNT object backgroundsub = BGSUBCNT() # Create Semaphro periodo = 0 semaforo = CreateSemaforo(periodoSemaforo = periodo) periodoReal = time.time() ### HERRAMIENTAS MULTIPROCESSING: imagenes = Queue() procesoDeAcondicionado = Process(name = 'Acondicionado',target = procesoAcondicionado,args = (imagenes,estadoDeEjecucionDePrograma)) procesoDeAcondicionado.start() while True: tiempoAuxiliar = time.time() ret, capturaEnAlta = miCamara.read() print('0 Tiempo de captura: ',time.time()-tiempoAuxiliar) tiempoAuxiliar = time.time() capturaEnBaja = cv2.resize(capturaEnAlta,(320,240)) print('0 Tiempo de Resize: ',time.time()-tiempoAuxiliar) tiempoAuxiliar = time.time() imagenes.put(capturaEnBaja) print('0 Tiempo de Colocado: ',time.time()-tiempoAuxiliar) #print('Put: ',time.time()-tiempoAuxiliar) if mostrarImagen: tiempoAuxiliar = time.time() cv2.imshow('Camara', capturaEnBaja) print('0 Show: ',time.time()-tiempoAuxiliar) print('0 Periodo total: ',time.time()-periodoReal) periodoReal = time.time() frame_number +=1 ch = 0xFF & cv2.waitKey(5) if ch == ord('q'): miReporte.info('ABANDONANDO LA EJECUCION DE PROGRAMA por salida manual') terminarProcesos() break if (frame_number >= topeEjecucion) &(topeEjecucion!=0): miReporte.info('ABANDONANDO LA EJECUCION DE PROGRAMA por indice de auto acabado predeterminado') terminarProcesos() break
def __main_function__(): # Import some global varialbes global archivoDeVideo global cambiosImportantes cambiosImportantes = False global numeroDeObjetos numeroDeObjetos = 0 # Creamos el reporte inicial miReporte = MiReporte( levelLogging=logging.INFO, nombre=__name__ ) # Se crea por defecto con nombre de la fecha y hora actual miReporte.info( 'Programa iniciado exitosamente con ingreso de senal video ' + archivoDeVideo + entradaReal + ' con semaforo ' + semaforoSimuladoTexto + str(periodoDeSemaforo) + ', corriendo a ' + str(mifps) + ' Frames por Segundo') # Si no existe el directorio de reporte lo creo if not os.path.exists(directorioDeReporte): os.makedirs(directorioDeReporte) # Is statements if generarArchivosDebug: miReporte.info('Generando Archivos de Debug') else: miReporte.info('Generando infracciones unicamente (No debug video)') # If mostrar Imagenes if mostrarImagen: miReporte.info( 'Pantalla de muestra de funcionamiento en tiempo real encendida') else: miReporte.info( 'Pantalla de muestra de funcionamiento en tiempo real apagada') # El directorio de reporte debe crearse al inicio del programa # Variables de control: numeroDeFrame = 0 maximoInfraccionesPorFrame = 20 #colores = np.random.randint(0,100,(maximoInfraccionesPorFrame,3)) # Cargando los parametros de instalacion: # El archivo de video debe tener como minimo 5 caracteres para estar trnajando en modo simulado, de lo contrario estamos trabajando en modo real if len(archivoDeVideo) > 4: archivoParametrosACargar = archivoDeVideo[:-4] + '.npy' else: archivoParametrosACargar = 'datos.npy' parametrosInstalacion = np.load(folderDeInstalacion + '/' + archivoParametrosACargar) miReporte.info('Datos de Instalacion de: ' + folderDeInstalacion + '/' + archivoParametrosACargar) poligonoSemaforo = parametrosInstalacion[0] verticesPartida = parametrosInstalacion[1] verticesLlegada = parametrosInstalacion[2] angulo = parametrosInstalacion[3] miReporte.info('Cargado exitosamente parametros de instalacion: ' + str(parametrosInstalacion)) # Arrancando camara if len(archivoDeVideo) == 0: # modo real if os.uname()[1] == 'alvarohurtado-305V4A': miCamara = VideoStream(src=1, resolution=(640, 480), poligono=poligonoSemaforo, debug=saltarFrames, fps=mifps, periodo=periodoDeSemaforo, gamma=gamma).start() time.sleep(1) else: miCamara = VideoStream(src=0, resolution=(3296, 2512), poligono=poligonoSemaforo, debug=saltarFrames, fps=mifps, periodo=periodoDeSemaforo, gamma=gamma).start() #miCamara = VideoStream(src = 0, resolution = (1920,1080),poligono = poligonoSemaforo, debug = saltarFrames,fps = mifps, periodo = periodoDeSemaforo, gamma = gamma).start() #miCamara = VideoStream(src = 0, resolution = (1280,960),poligono = poligonoSemaforo, debug = saltarFrames,fps = mifps, periodo = periodoDeSemaforo, gamma = gamma).start() time.sleep(1) miReporte.info('Activada Exitosamente cámara en tiempo real') else: try: miCamara = VideoStream(src=directorioDeVideos + '/' + archivoDeVideo, resolution=(640, 480), poligono=poligonoSemaforo, debug=saltarFrames, fps=mifps, periodo=periodoDeSemaforo, gamma=gamma).start() time.sleep(1) miReporte.info('Archivo de video cargado exitosamente: ' + directorioDeVideos + '/' + archivoDeVideo) except Exception as currentException: miReporte.error('No se pudo cargar el video por ' + str(currentException)) # Se captura la imagen de flujo inicial y se trabaja con la misma informacion = miCamara.read() # Creación de objetos: miPoliciaReportando = PoliciaInfractor(informacion['frame'], verticesPartida, verticesLlegada) miGrabadora = GeneradorEvidencia(directorioDeReporte, mifps, guardarRecortados) miFiltro = IRSwitch() miAcetatoInformativo = Acetato() miAcetatoInformativo.colocarPoligono(np.array(poligonoSemaforo) // 2) miAcetatoInformativo.colocarPoligono(np.array(verticesPartida)) miAcetatoInformativo.colocarPoligono(np.array(verticesLlegada)) fps = FPS().start() informacionTotal = {} frame_number = 0 tiempoAuxiliar = time.time() periodoDeMuestreo = 1.0 / mifps grupo = [0] while True: # LEEMOS LA CAMARA DE FLUJO # Ways to access to the information # information['frame'] ; numpy array containing the low res frame # information['semaforo'] ; list like [self.senalColor, self.colorLiteral, self.flancoSemaforo, self.totalperiodo] # information['recortados'] ; list like of tuples representing listaderecortados from hd frame [(_numpy arrays_)n+1] # information['rectangulos'] ; list like of tuples representing listaderectangulos and centroids in frame [((x,y,h,w),(p1,p2))n+1] # n+1 ; represent the 1 by 1 correspndencia de los rectangulos encontrados y imagenes recortadas informacion = miCamara.read() # Ways to access # Asign number rfame to the information from miCamara.read() #informacion['index'] = frame_number informacionTotal[frame_number] = informacion.copy( ) #<------ ese .copy() faltaba print('Out: ', informacion['semaforo'][2]) # Si forzamos por entrada o si estamos en verde botamos la información de los rectangulos: if (guardarRecortados == False) | ( informacionTotal[frame_number]['semaforo'][0] == 0): del informacionTotal[frame_number]['recortados'] informacionTotal[frame_number]['recortados'] = {} # Se reporta el periodo del semaforo si es necesario: if informacion['semaforo'][3] != 0: miReporte.info('SEMAFORO EN VERDE, EL PERIODO ES ' + str(informacion['semaforo'][3])) else: pass # Si tengo infracciones pendientes las evoluciono if informacion['semaforo'][ 0] >= 1: # Si estamos en rojo, realizamos una accion if informacion['semaforo'][ 2] == 1: # esto se inicia al principio de este estado miReporte.info('SEMAFORO EN ROJO') miPoliciaReportando.inicializarAgente() del informacionTotal informacionTotal = {} frame_number = 0 else: pass cambiosImportantes = miPoliciaReportando.seguirObjeto( frame_number, informacion) else: pass if informacion['semaforo'][ 0] == 0: # Si estamos en verde realizamos otra accion if informacion['semaforo'][ 2] == -1: # Si estamos en verde y en flanco, primer verde, realizamos algo miReporte.info( 'Infracciones: ' + str(miPoliciaReportando.numeroInfraccionesConfirmadas())) if generarArchivosDebug: miGrabadora.generarReporteInfraccion( informacionTotal, False, miPoliciaReportando.numeroInfraccionesConfirmadas()) if miPoliciaReportando.numeroInfraccionesConfirmadas() > 0: infraccionEnRevision = miPoliciaReportando.popInfraccion() miGrabadora.generarReporteInfraccion(informacionTotal, infraccionEnRevision) else: #Si no hay infracciones a reportar me fijo el estado del filtro: tiempoAhora = datetime.datetime.now( ).hour * 60 + datetime.datetime.now().minute if (tiempoAhora > amaneciendo) & (miFiltro.ultimoEstado != 'Filtro Activado'): miFiltro.colocarFiltroIR() if (tiempoAhora < amaneciendo) & (miFiltro.ultimoEstado != 'Filtro Desactivado'): miFiltro.quitarFiltroIR() pass # Draw frame number into image on top for infraction in miPoliciaReportando.listaDeInfracciones: for puntos in infraction['desplazamiento']: puntosExtraidos = puntos.ravel().reshape( puntos.ravel().shape[0] // 2, 2) for punto in puntosExtraidos: if infraction['estado'] == 'Confirmado': miAcetatoInformativo.colocarPunto(tuple(punto), 0) else: miAcetatoInformativo.colocarPunto(tuple(punto), 1) # Configs and displays for the MASK according to the semaforo #miAcetatoInformativo.agregarTextoEn("I{}".format(miPoliciaReportando.infraccionesConfirmadas), 2) miAcetatoInformativo.colorDeSemaforo(informacion['semaforo'][0]) # Draw the rectangles for rectangulo in informacion['rectangulos']: miAcetatoInformativo.colocarObjetivo(rectangulo[0], rectangulo[2]) if mostrarImagen: #cv2.imshow('Visual', miAcetatoInformativo.aplicarAFrame(informacion['frame'])[120:239,60:360]) cv2.imshow( 'Visual', miAcetatoInformativo.aplicarAFrame(informacion['frame'])) miAcetatoInformativo.inicializar() tiempoEjecucion = time.time() - tiempoAuxiliar #if tiempoEjecucion>periodoDeMuestreo: miReporte.warning('Tiempo Afuera {0:2f}'.format(tiempoEjecucion) + '[s] en frame {}'.format(frame_number)) #sys.stdout.write("\033[F") while time.time() - tiempoAuxiliar < periodoDeMuestreo: True tiempoAuxiliar = time.time() if (cambiosImportantes) | (numeroDeObjetos != len( informacion['rectangulos'])): miReporte.info( 'F{} Sema: '.format(frame_number) + informacion['semaforo'][1] + ' I: ' + str(miPoliciaReportando.numeroInfraccionesConfirmadas()) + '/' + str(miPoliciaReportando.numeroInfraccionesTotales()) + ' Objetos: {}'.format(len(informacion['rectangulos']))) numeroDeObjetos = len(informacion['rectangulos']) porcentajeDeMemoria = psutil.virtual_memory()[2] if porcentajeDeMemoria > 80: miReporte.info('Estado de Memoria: ' + str(porcentajeDeMemoria) + '/100') if porcentajeDeMemoria > 92: frameAOptimizar = min(informacionTotal) miReporte.warning('Alcanzado 92/100 de memoria, borrando frame: ' + str(frameAOptimizar)) del informacionTotal[frameAOptimizar]['recortados'] informacionTotal[frameAOptimizar]['recortados'] = {} if porcentajeDeMemoria > 96: miReporte.warning( 'Alcanzado 96/100 de memoria, borrando todo e inicializando') del informacionTotal informacionTotal = {} frame_number = 0 frame_number += 1 if (frame_number >= topeEjecucion) & (topeEjecucion != 0): miReporte.info( 'ABANDONANDO LA EJECUCION DE PROGRAMA por indice de auto acabado predeterminado' ) break if informacion['semaforo'][0] == -2: miReporte.critical( 'ABANDONANDO LA EJECUCION DE PROGRAMA El semaforo ya no obtuvo señal, necesito recalibrar, abandonando la ejecución del programa' ) break ch = 0xFF & cv2.waitKey(5) if ch == ord('q'): miReporte.info( 'ABANDONANDO LA EJECUCION DE PROGRAMA por salida manual') break if ch == ord('s'): cv2.imwrite( datetime.datetime.now().strftime('%Y-%m-%d_%H:%M:%S') + '.jpg', informacion['frame']) fps.update() # stop the timer and display FPS information fps.stop()
def __main_function__(): # Import some global varialbes global archivoDeVideo global cambiosImportantes cambiosImportantes = False global numeroDeObjetos numeroDeObjetos = 0 shapeUR = (3296, 2512) shapeMR = (640, 480) shapeLR = (320, 240) # Creamos el reporte inicial miReporte = MiReporte( levelLogging=logging.INFO, nombre=__name__ ) # Se crea por defecto con nombre de la fecha y hora actual miReporte.info( 'Programa iniciado exitosamente con ingreso de senal video ' + archivoDeVideo + entradaReal + ' con semaforo ' + semaforoSimuladoTexto + str(periodoDeSemaforo) + ', corriendo a ' + str(mifps) + ' Frames por Segundo') # Si no existe el directorio de reporte lo creo if not os.path.exists(directorioDeReporte): os.makedirs(directorioDeReporte) # Is statements if generarArchivosDebug: miReporte.info('Generando Archivos de Debug') else: miReporte.info('Generando infracciones unicamente (No debug video)') # If mostrar Imagenes if mostrarImagen: miReporte.info( 'Pantalla de muestra de funcionamiento en tiempo real encendida') else: miReporte.info( 'Pantalla de muestra de funcionamiento en tiempo real apagada') # El directorio de reporte debe crearse al inicio del programa # Variables de control: numeroDeFrame = 0 maximoInfraccionesPorFrame = 20 #colores = np.random.randint(0,100,(maximoInfraccionesPorFrame,3)) # Cargando los parametros de instalacion: # El archivo de video debe tener como minimo 5 caracteres para estar trnajando en modo simulado, de lo contrario estamos trabajando en modo real if len(archivoDeVideo) > 4: archivoParametrosACargar = archivoDeVideo[:-4] + '.npy' else: archivoParametrosACargar = 'datos.npy' parametrosInstalacion = np.load(folderDeInstalacion + '/' + archivoParametrosACargar) miReporte.info('Datos de Instalacion de: ' + folderDeInstalacion + '/' + archivoParametrosACargar) poligonoSemaforo = parametrosInstalacion[0] verticesPartida = parametrosInstalacion[1] verticesLlegada = parametrosInstalacion[2] angulo = parametrosInstalacion[3] miReporte.info('Cargado exitosamente parametros de instalacion: ' + str(parametrosInstalacion)) # Arrancando camara if len(archivoDeVideo) == 0: # modo real if os.uname()[1] == 'alvarohurtado-305V4A': miCamara = VideoStream(src=0, resolution=shapeMR, poligono=poligonoSemaforo, debug=saltarFrames, fps=mifps).start() time.sleep(1) elif os.uname()[1] == 'stanlee321-MS-7693': print('Hello stanlee321') miCamara = VideoStream(src=0, resolution=shapeMR, poligono=poligonoSemaforo, debug=saltarFrames, fps=mifps).start() elif os.uname()[1] == 'stanlee321-HP-240-G1-Notebook-PC': print('Hello stanlee321') miCamara = VideoStream(src=0, resolution=shapeMR, poligono=poligonoSemaforo, debug=saltarFrames, fps=mifps).start() else: miCamara = VideoStream(src=0, resolution=shapeUR, poligono=poligonoSemaforo, debug=saltarFrames, fps=mifps).start() miReporte.info('Activada Exitosamente cámara en tiempo real') else: try: miCamara = miCamara = VideoStream(src=directorioDeVideos + '/' + archivoDeVideo, resolution=shapeMR).start() miReporte.info('Archivo de video cargado exitosamente: ' + directorioDeVideos + '/' + archivoDeVideo) except Exception as currentException: miReporte.error('No se pudo cargar el video por ' + str(currentException)) # Se captura la imagen de flujo inicial y se trabaja con la misma data = miCamara.read() capturaEnBaja = data['LRframe'] # Creación de objetos: miPoliciaReportando = PoliciaInfractor(capturaEnBaja, verticesPartida, verticesLlegada) miGrabadora = GeneradorEvidencia(directorioDeReporte, mifps, guardarRecortados) miFiltro = IRSwitch() miAcetatoInformativo = Acetato() miAcetatoInformativo.colocarPoligono(np.array(poligonoSemaforo) // 2) miAcetatoInformativo.colocarPoligono(np.array(verticesPartida)) miAcetatoInformativo.colocarPoligono(np.array(verticesLlegada)) frame_number = 0 tiempoAuxiliar = time.time() periodoDeMuestreo = 1.0 / mifps periodoReal = time.time() # Create BGSUBCNT object backgroundsub = BGSUBCNT() # Create Multiprocessing parameters #pool = ThreadPool(2) #input_q = Queue(5) #output_q = Queue(5) #child_process = Process(target = child_process_detect_objects_with_bg, args=(input_q, output_q)) #child_process.daemon = True #child_process.start() # Create CUT Object if os.uname()[1] == 'stanlee321-MS-7693': cutImage = cutHDImage(shapeHR=shapeMR, shapeLR=shapeLR) else: cutImage = cutHDImage(shapeHR=shapeUR, shapeLR=shapeLR) # Create Semaphro periodo = 0 semaforo = CreateSemaforo(periodoSemaforo=periodo) listaderecortados = list informacion = dict while True: tiempoAuxiliar = time.time() data = miCamara.read() data['index'] = frame_number capturaEnAlta = data['HRframe'] capturaEnBaja = data['LRframe'] capturaSemaforo = data['frame_semaforo'] senalColor, colorLiteral, flancoSemaforo, periodoSemaforo = semaforo.obtenerColorEnSemaforo( capturaSemaforo) #print('Lectura: ',time.time()-tiempoAuxiliar) poligonos_warp = backgroundsub.feedbgsub(capturaEnBaja) #poligonos_warp = pool.starmap(backgroundsub.feedbgsub, capturaEnBaja) # close the pool and wait for the work to finish #pool.close() #pool.join() #print(poligonos_warp) listaderecortados = cutImage(HDframe=capturaEnBaja, matches=poligonos_warp) informacion = {'semaforo': [senalColor, colorLiteral, flancoSemaforo, periodoSemaforo],\ 'frame':capturaEnBaja, 'rectangulos': listaderecortados, 'index': data['index']} """ #print('SEMAPHORO STATES: ', senalColor, colorLiteral, flancoSemaforo, periodoSemaforo) print('Lectura: ',time.time()-tiempoAuxiliar) tiempoAuxiliar = time.time() #informacionTotal[frame_number] = informacion.copy() #<------ ese .copy() faltaba print('Out: ', informacion['semaforo'][2]) # Si forzamos por entrada o si estamos en verde botamos la información de los rectangulos: if (guardarRecortados == False) | (informacion['semaforo'][0]==0): #del informacion['recortados'] #informacionTotal[frame_number]['recortados'] = {} pass # Se reporta el periodo del semaforo si es necesario: if informacion['semaforo'][3] != 0: miReporte.info('SEMAFORO EN VERDE, EL PERIODO ES '+str(informacion['semaforo'][3])) else: pass # Si tengo infracciones pendientes las evoluciono if informacion['semaforo'][0] >= 1 : # Si estamos en rojo, realizamos una accion if informacion['semaforo'][2] == 1: # esto se inicia al principio de este estado miReporte.info('SEMAFORO EN ROJO') miPoliciaReportando.inicializarAgente() #del informacionTotal #informacionTotal = {} frame_number = 0 else: pass cambiosImportantes = miPoliciaReportando.seguirObjeto(informacion['index'], informacion) else: pass if informacion['semaforo'][0] == 0: # Si estamos en verde realizamos otra accion if informacion['semaforo'][2] == -1: # Si estamos en verde y en flanco, primer verde, realizamos algo miReporte.info('Infracciones: ' + str(miPoliciaReportando.numeroInfraccionesConfirmadas())) if generarArchivosDebug: miGrabadora.generarReporteInfraccion(informacionTotal, False,miPoliciaReportando.numeroInfraccionesConfirmadas()) if miPoliciaReportando.numeroInfraccionesConfirmadas() > 0: infraccionEnRevision = miPoliciaReportando.popInfraccion() miGrabadora.generarReporteInfraccion(informacionTotal, infraccionEnRevision) else: #Si no hay infracciones a reportar me fijo el estado del filtro: tiempoAhora = datetime.datetime.now().hour*60 + datetime.datetime.now().minute if (tiempoAhora > amaneciendo) & (miFiltro.ultimoEstado != 'Filtro Activado'): miFiltro.colocarFiltroIR() if (tiempoAhora < amaneciendo) & (miFiltro.ultimoEstado != 'Filtro Desactivado'): miFiltro.quitarFiltroIR() pass # Draw frame number into image on top for infraction in miPoliciaReportando.listaDeInfracciones: for puntos in infraction['desplazamiento']: puntosExtraidos = puntos.ravel().reshape(puntos.ravel().shape[0]//2,2) for punto in puntosExtraidos: if infraction['estado'] == 'Confirmado': miAcetatoInformativo.colocarPunto(tuple(punto),0) else: miAcetatoInformativo.colocarPunto(tuple(punto),1) # Configs and displays for the MASK according to the semaforo #miAcetatoInformativo.agregarTextoEn("I{}".format(miPoliciaReportando.infraccionesConfirmadas), 2) miAcetatoInformativo.colorDeSemaforo(informacion['semaforo'][0]) # Draw the rectangles for rectangulo in informacion['rectangulos']: miAcetatoInformativo.colocarObjetivo(rectangulo[0],rectangulo[2]) if mostrarImagen: #cv2.imshow('Visual', miAcetatoInformativo.aplicarAFrame(informacion['frame'])[120:239,60:360]) cv2.imshow('Visual', miAcetatoInformativo.aplicarAFrame(informacion['frame'])) miAcetatoInformativo.inicializar() tiempoEjecucion = time.time() - tiempoAuxiliar #if tiempoEjecucion>periodoDeMuestreo: miReporte.warning('Tiempo Afuera {0:2f}'.format(tiempoEjecucion)+ '[s] en frame {}'.format(frame_number)) #sys.stdout.write("\033[F") while time.time() - tiempoAuxiliar < periodoDeMuestreo: True tiempoAuxiliar = time.time() if (cambiosImportantes)|(numeroDeObjetos != len(informacion['rectangulos'])): miReporte.info('F{} Sema: '.format(frame_number)+informacion['semaforo'][1]+' I: '+str(miPoliciaReportando.numeroInfraccionesConfirmadas())+'/'+str(miPoliciaReportando.numeroInfraccionesTotales())+' Objetos: {}'.format(len(informacion['rectangulos']))) numeroDeObjetos = len(informacion['rectangulos']) porcentajeDeMemoria = psutil.virtual_memory()[2] if porcentajeDeMemoria > 80: miReporte.info('Estado de Memoria: '+str(porcentajeDeMemoria)+'/100') if porcentajeDeMemoria > 92: frameAOptimizar = min(informacionTotal) miReporte.warning('Alcanzado 92/100 de memoria, borrando frame: '+str(frameAOptimizar)) del informacionTotal[frameAOptimizar]['recortados'] informacionTotal[frameAOptimizar]['recortados'] = {} if porcentajeDeMemoria > 96: miReporte.warning('Alcanzado 96/100 de memoria, borrando todo e inicializando') del informacionTotal informacionTotal = {} frame_number = 0 frame_number += 1 if (frame_number >= topeEjecucion) &(topeEjecucion!=0): miReporte.info('ABANDONANDO LA EJECUCION DE PROGRAMA por indice de auto acabado predeterminado') break if informacion['semaforo'][0] == -2: miReporte.critical('ABANDONANDO LA EJECUCION DE PROGRAMA El semaforo ya no obtuvo señal, necesito recalibrar, abandonando la ejecución del programa') break ch = 0xFF & cv2.waitKey(5) if ch == ord('q'): miReporte.info('ABANDONANDO LA EJECUCION DE PROGRAMA por salida manual') break if ch == ord('s'): cv2.imwrite(datetime.datetime.now().strftime('%Y-%m-%d_%H:%M:%S')+'.jpg',informacion['frame']) fps.update() #if colorLiteral == 'Rojo': #poligonos_warp = backgroundsub.feedbgsub(capturaEnBaja) #poligonos_warp = pool.starmap(backgroundsub.feedbgsub, capturaEnBaja) # close the pool and wait for the work to finish #pool.close() #pool.join() #print(poligonos_warp) #listaderecortados = cutImage(HDframe = capturaEnBaja, matches = poligonos_warp) #if len(listaderecortados) > 0: # for i, image in enumerate(listaderecortados): # cv2.imwrite('imagen_{}_.jpg'.format(i), image) #else: # pass #print('Put: ',time.time()-tiempoAuxiliar) if mostrarImagen: tiempoAuxiliar = time.time() cv2.imshow('Camara', cv2.resize(capturaEnBaja,(640,480))) print('Show: ',time.time()-tiempoAuxiliar) print('Periodo total: ',time.time()-periodoReal) periodoReal = time.time() #tiempoAuxiliar = time.time() #if filaImagenes.qsize() > 10: #miImagen = filaImagenes.get() # print('Borrado elemento en la fila') #print('Get: ',time.time()-tiempoAuxiliar) if frame_number>200: break frame_number +=1 """ ch = 0xFF & cv2.waitKey(5) if ch == ord('q'): miReporte.info( 'ABANDONANDO LA EJECUCION DE PROGRAMA por salida manual') break
def __main_function__(): # Import some global varialbes global archivoDeVideo global cambiosImportantes cambiosImportantes = False global numeroDeObjetos numeroDeObjetos = 0 # Creamos el reporte inicial miReporte = MiReporte( levelLogging=logging.DEBUG, nombre=__name__ ) # Se crea por defecto con nombre de la fecha y hora actual miReporte.info( 'Programa iniciado exitosamente con ingreso de senal video ' + archivoDeVideo + entradaReal + ' con semaforo ' + semaforoSimuladoTexto + str(periodoDeSemaforo) + ', corriendo a ' + str(mifps) + ' Frames por Segundo') # Si no existe el directorio de reporte lo creo if not os.path.exists(directorioDeReporte): os.makedirs(directorioDeReporte) # Is statements if generarArchivosDebug: miReporte.info('Generando Archivos de Debug') else: miReporte.info('Generando infracciones unicamente (No debug video)') # If mostrar Imagenes if mostrarImagen: miReporte.info( 'Pantalla de muestra de funcionamiento en tiempo real encendida') else: miReporte.info( 'Pantalla de muestra de funcionamiento en tiempo real apagada') # El directorio de reporte debe crearse al inicio del programa # Variables de control: numeroDeFrame = 0 maximoInfraccionesPorFrame = 20 #colores = np.random.randint(0,100,(maximoInfraccionesPorFrame,3)) # Cargando los parametros de instalacion: # El archivo de video debe tener como minimo 5 caracteres para estar trnajando en modo simulado, de lo contrario estamos trabajando en modo real if len(archivoDeVideo) > 4: archivoParametrosACargar = archivoDeVideo[:-4] + '.npy' else: archivoParametrosACargar = 'datos.npy' parametrosInstalacion = np.load(folderDeInstalacion + '/' + archivoParametrosACargar) miReporte.info('Datos de Instalacion de: ' + folderDeInstalacion + '/' + archivoParametrosACargar) poligonoSemaforo = parametrosInstalacion[0] verticesPartida = parametrosInstalacion[1] verticesLlegada = parametrosInstalacion[2] angulo = parametrosInstalacion[3] miReporte.info('Cargado exitosamente parametros de instalacion: ' + str(parametrosInstalacion)) # Arrancando camara if len(archivoDeVideo) == 0: # modo real if os.uname()[1] == 'alvarohurtado-305V4A': miCamara = VideoStream(src=1, resolution=(640, 480), poligono=poligonoSemaforo, debug=saltarFrames, fps=mifps, periodo=periodoDeSemaforo, gamma=gamma).start() time.sleep(1) else: miCamara = VideoStream(src=0, resolution=(3296, 2512), poligono=poligonoSemaforo, debug=saltarFrames, fps=mifps, periodo=periodoDeSemaforo, gamma=gamma).start() #miCamara = VideoStream(src = 0, resolution = (1920,1080),poligono = poligonoSemaforo, debug = saltarFrames,fps = mifps, periodo = periodoDeSemaforo, gamma = gamma).start() #miCamara = VideoStream(src = 0, resolution = (1280,960),poligono = poligonoSemaforo, debug = saltarFrames,fps = mifps, periodo = periodoDeSemaforo, gamma = gamma).start() time.sleep(1) miReporte.info('Activada Exitosamente cámara en tiempo real') else: try: miCamara = VideoStream(src=directorioDeVideos + '/' + archivoDeVideo, resolution=(640, 480), poligono=poligonoSemaforo, debug=saltarFrames, fps=mifps, periodo=periodoDeSemaforo, gamma=gamma).start() time.sleep(1) miReporte.info('Archivo de video cargado exitosamente: ' + directorioDeVideos + '/' + archivoDeVideo) except Exception as currentException: miReporte.error('No se pudo cargar el video por ' + str(currentException)) # Se captura la imagen de flujo inicial y se trabaja con la misma informacion = miCamara.read() # Creación de objetos: miPoliciaReportando = PoliciaInfractor(informacion['frame'], verticesPartida, verticesLlegada) miGrabadora = GeneradorEvidencia(directorioDeReporte, mifps, guardarRecortados) miFiltro = IRSwitch() #remocionFondo = matches # List like with arrays if mostrarImagen: visualLabel = VisualLayer() visualLabel.crearMascaraCompleta(size=(240, 320)) visualLabel.crearBarraInformacion(height=240) visualLabel.crearBarraDeProgreso() visualLabel.ponerPoligono(np.array(verticesPartida)) frame_number = 0 fps = FPS().start() informacionTotal = {} frame_number = 0 tiempoAuxiliar = time.time() periodoDeMuestreo = 1.0 / mifps while True: # LEEMOS LA CAMARA DE FLUJO # Ways to access to the information # information['frame'] ; numpy array containing the low res frame # information['semaforo'] ; list like [self.senalColor, self.colorLiteral, self.flancoSemaforo] # information['recortados'] ; list like of tuples representing listaderecortados from hd frame [(_numpy arrays_)n+1] # information['rectangulos'] ; list like of tuples representing listaderectangulos and centroids in frame [((x,y,h,w),(p1,p2))n+1] # n+1 ; represent the 1 by 1 correspndencia de los rectangulos encontrados y imagenes recortadas informacion = miCamara.read() # Ways to access # assing index information to the above infomation # Asign number rfame to the information from miCamara.read() informacion['index'] = frame_number informacionTotal[frame_number] = informacion.copy( ) #<------ ese .copy() faltaba print('Tamanio buffer: ', total_size(informacionTotal), ' en ', len(informacionTotal)) # Si forzamos por entrada o si estamos en verde botamos la información de los rectangulos: if (guardarRecortados == False) | ( informacionTotal[frame_number]['semaforo'][0] == 0): del informacionTotal[frame_number]['recortados'] informacionTotal[frame_number]['recortados'] = {} if frame_number > maximoMemoria: try: informacionTotal[frame_number - maximoMemoria]['recortados'] = [] #miReporte.debug('Released memory') except Exception as e: miReporte.error('No pude liberar por ' + str(e)) # Si tengo infracciones pendientes las evoluciono if informacion['semaforo'][ 0] >= 1: # Si estamos en rojo, realizamos una accion if informacion['semaforo'][ 2] == 1: # esto se inicia al principio de este estado print('Here was something---') #miReporte.info('SEMAFORO EN ROJO') miPoliciaReportando.inicializarAgente() del informacionTotal informacionTotal = {} frame_number = 0 cambiosImportantes = miPoliciaReportando.seguirObjeto( frame_number, informacion) if informacion['semaforo'][ 0] == 0: # Si estamos en verde realizamos otra accion if informacion['semaforo'][ 2] == -1: # Si estamos en verde y en flanco, primer verde, realizamos algo miReporte.info('SEMAFORO EN VERDE') miReporte.info( 'Infracciones: ' + str(miPoliciaReportando.numeroInfraccionesConfirmadas())) if generarArchivosDebug: miGrabadora.generarReporteInfraccion( informacionTotal, False, miPoliciaReportando.numeroInfraccionesConfirmadas()) if miPoliciaReportando.numeroInfraccionesConfirmadas() > 0: infraccionEnRevision = miPoliciaReportando.popInfraccion() miGrabadora.generarReporteInfraccion(informacionTotal, infraccionEnRevision) else: #Si no hay infracciones a reportar me fijo el estado del filtro: tiempoAhora = datetime.datetime.now( ).hour * 60 + datetime.datetime.now().minute if (tiempoAhora > amaneciendo) & (miFiltro.ultimoEstado != 'Filtro Activado'): miFiltro.colocarFiltroIR() if (tiempoAhora < amaneciendo) & (miFiltro.ultimoEstado != 'Filtro Desactivado'): miFiltro.quitarFiltroIR() pass if mostrarImagen: # Draw frame number into image on top cv2.putText( informacion['frame'], datetime.datetime.now().strftime('%A %d %B %Y %I:%M:%S%p'), (4, 236), font, 0.4, (255, 255, 255), 1, cv2.LINE_AA) cv2.putText(informacion['frame'], str(frame_number), (20, 20), font, 0.4, (255, 255, 255), 1, cv2.LINE_AA) visualizacion = informacion['frame'] for infraction in miPoliciaReportando.listaDeInfracciones: for puntos in infraction['desplazamiento']: puntosExtraidos = puntos.ravel().reshape( puntos.ravel().shape[0] // 2, 2) for punto in puntosExtraidos: if infraction['estado'] == 'Confirmado': cv2.circle(visualizacion, tuple(punto), 1, (0, 0, 255), -1) else: cv2.circle(visualizacion, tuple(punto), 1, (255, 0, 0), -1) cv2.polylines(visualizacion, np.array([poligonoSemaforo]) // 2, True, (200, 200, 200)) # Configs and displays for the MASK according to the semaforo visualLabel.agregarTextoEn(informacion['semaforo'][1], 0) visualLabel.agregarTextoEn("F{}".format(frame_number), 1) visualLabel.agregarTextoEn( "I{}".format(miPoliciaReportando.infraccionesConfirmadas), 2) if informacion['semaforo'][0] == 1: visualLabel.establecerColorFondoDe(backgroudColour=(0, 0, 255), numeroDeCaja=0) elif informacion['semaforo'][0] == 0: visualLabel.establecerColorFondoDe(backgroudColour=(0, 255, 0), numeroDeCaja=0) elif informacion['semaforo'][0] == 2: visualLabel.establecerColorFondoDe(backgroudColour=(0, 255, 255), numeroDeCaja=0) else: visualLabel.establecerColorFondoDe(backgroudColour=(0, 0, 0), numeroDeCaja=0) # Draw the rectangles for rectangulo in informacion['rectangulos']: visualLabel.agregarRecangulo((rectangulo[0], rectangulo[1]), rectangulo[2]) visualLabel.establecerMagnitudBarra( magnitude=int(miPoliciaReportando.ultimaVelocidad)) visualizacion = visualLabel.aplicarMascaraActualAFrame( visualizacion) # Show Everything cv2.imshow('Visual', cv2.resize(visualLabel.aplicarTodo(), (620, 480))) tiempoEjecucion = time.time() - tiempoAuxiliar if tiempoEjecucion > periodoDeMuestreo: miReporte.warning('Se sobrepaso el periodo de muestreo a {0:2f}'. format(tiempoEjecucion) + '[s] en frame {}'.format(frame_number)) #sys.stdout.write("\033[F") while time.time() - tiempoAuxiliar < periodoDeMuestreo: True if (cambiosImportantes) | (numeroDeObjetos != len( informacion['rectangulos'])): miReporte.info( 'F{} Sema: '.format(frame_number) + informacion['semaforo'][1] + ' I: ' + str(miPoliciaReportando.numeroInfraccionesConfirmadas()) + '/' + str(miPoliciaReportando.numeroInfraccionesTotales()) + ' Objetos: {}'.format(len(informacion['rectangulos']))) numeroDeObjetos = len(informacion['rectangulos']) tiempoAuxiliar = time.time() frame_number += 1 if (frame_number >= topeEjecucion) & (topeEjecucion != 0): break ch = 0xFF & cv2.waitKey(5) if ch == ord('q'): break if ch == ord('s'): cv2.imwrite( datetime.datetime.now().strftime('%Y-%m-%d_%H:%M:%S') + '.jpg', informacion['frame']) fps.update() # stop the timer and display FPS information fps.stop()
def __main_function__(): # Import some global varialbes global archivoDeVideo global cambiosImportantes cambiosImportantes = False # Creamos el reporte inicial miReporte = MiReporte( levelLogging=logging.INFO, nombre=__name__ ) # Se crea por defecto con nombre de la fecha y hora actual miReporte.info( 'Programa iniciado exitosamente con ingreso de senal video ' + archivoDeVideo + entradaReal + ' con semaforo ' + semaforoSimuladoTexto + str(periodoDeSemaforo) + ', corriendo a ' + str(mifps) + ' Frames por Segundo') # Si no existe el directorio de reporte lo creo if not os.path.exists(directorioDeReporte): os.makedirs(directorioDeReporte) # Is statements if generarArchivosDebug: miReporte.info('Generando Archivos de Debug') else: miReporte.info('Generando infracciones unicamente (No debug video)') # If mostrar Imagenes if mostrarImagen: miReporte.info( 'Pantalla de muestra de funcionamiento en tiempo real encendida') else: miReporte.info( 'Pantalla de muestra de funcionamiento en tiempo real apagada') # El directorio de reporte debe crearse al inicio del programa # Variables de control: numeroDeFrame = 0 maximoInfraccionesPorFrame = 20 #colores = np.random.randint(0,100,(maximoInfraccionesPorFrame,3)) # Cargando los parametros de instalacion: # El archivo de video debe tener como minimo 5 caracteres para estar trnajando en modo simulado, de lo contrario estamos trabajando en modo real if len(archivoDeVideo) > 4: archivoParametrosACargar = archivoDeVideo[:-4] + '.npy' else: archivoParametrosACargar = 'datos.npy' parametrosInstalacion = np.load(folderDeInstalacion + '/' + archivoParametrosACargar) miReporte.info('Datos de Instalacion de: ' + folderDeInstalacion + '/' + archivoParametrosACargar) poligonoSemaforo = parametrosInstalacion[0] verticesPartida = parametrosInstalacion[1] verticesLlegada = parametrosInstalacion[2] indicesSemaforo = obtenerIndicesSemaforo(np.array(poligonoSemaforo)) angulo = parametrosInstalacion[3] poligonoEnAlta = parametrosInstalacion[4] miReporte.info('Cargado exitosamente parametros de instalacion: ' + str(parametrosInstalacion)) # Arrancando camara if len(archivoDeVideo) == 0: conVideoGrabado = False # modo real miCamara = cv2.VideoCapture(0) miCamara.set(3, 640) miCamara.set(4, 480) time.sleep(1) miReporte.info('Activada Exitosamente cámara en tiempo real') else: conVideoGrabado = True try: miCamara = cv2.VideoCapture(directorioDeVideos + '/' + archivoDeVideo) time.sleep(1) miReporte.info('Archivo de video cargado exitosamente: ' + directorioDeVideos + '/' + archivoDeVideo) except Exception as currentException: miReporte.error('No se pudo cargar el video por ' + str(currentException)) # Se captura la imagen de flujo inicial y se trabaja con la misma ret, frameVideo = miCamara.read() frameFlujo = cv2.resize(frameVideo, (320, 240)) # Creación de objetos: miPoliciaReportando = PoliciaInfractor(frameFlujo, verticesPartida, verticesLlegada, True) miPoliciaReportando.establecerRegionInteresAlta(poligonoEnAlta) miGrabadora = GeneradorEvidencia(directorioDeReporte, mifps, False) miFiltro = IRSwitch() miAcetatoInformativo = Acetato() miSemaforo = CreateSemaforo(periodoDeSemaforo) miAcetatoInformativo.colocarPoligono(np.array(poligonoSemaforo) // 2) miAcetatoInformativo.colocarPoligono(np.array(verticesPartida)) miAcetatoInformativo.colocarPoligono(np.array(verticesLlegada)) informacionTotal = {} frame_number = 0 tiempoAuxiliar = time.time() periodoDeMuestreo = 1.0 / mifps grupo = [0] try: while True: # LEEMOS LA CAMARA DE FLUJO if conVideoGrabado: for i in range(videofps // mifps): ret, frameVideo = miCamara.read() else: ret, frameVideo = miCamara.read() pixeles = np.array( [frameVideo[indicesSemaforo[0][1], indicesSemaforo[0][0]]]) #print('IndicesPixel: ',indicesSemaforo[0][0],indicesSemaforo[0][1]) #print('La longitud semaforo: ',len(indicesSemaforo),' inicial ',pixeles.shape) #print('La longitud interna: ',len(indicesSemaforo[0]),' inicial ',pixeles.shape) for indiceSemaforo in indicesSemaforo[1:]: pixeles = np.append( pixeles, [frameVideo[indiceSemaforo[1], indiceSemaforo[0]]], axis=0) #print('>>> ',pixeles.shape,' in ',indiceSemaforo) #cv2.circle(frameVideo, (indiceSemaforo[0],indiceSemaforo[1]), 1, (100,100,100), -1) #print('Pixeles: ',pixeles) wtf = pixeles.reshape((24, 8, 3)) #cv2.imshow('Semaforo', cv2.resize(wtf, (240,320))) #print('La longitud pixels: ',pixeles.shape) senalSemaforo, semaforoLiteral, flanco, periodo = miSemaforo.obtenerColorEnSemaforo( pixeles) frameFlujo = cv2.resize(frameVideo, (320, 240)) if periodo != 0: miReporte.info('SEMAFORO EN VERDE, EL PERIODO ES ' + str(periodo)) else: pass # Si tengo infracciones pendientes las evoluciono cambiosImportantes, ondaFiltrada, frenteAutomovil, flujoTotal = miPoliciaReportando.seguirImagen( frame_number, frameFlujo, colorSemaforo=senalSemaforo) if senalSemaforo >= 1: # Si estamos en rojo, realizamos una accion if flanco == 1: # esto se inicia al principio de este estado miReporte.info('SEMAFORO EN ROJO') del informacionTotal informacionTotal = {} frame_number = 0 else: pass else: pass if senalSemaforo == 0: # Si estamos en verde realizamos otra accion if flanco == -1: # Si estamos en verde y en flanco, primer verde, realizamos algo miReporte.info('Infracciones: ' + str( miPoliciaReportando.numeroInfraccionesConfirmadas())) if generarArchivosDebug: miGrabadora.generarReporteInfraccion( informacionTotal, False, miPoliciaReportando.numeroInfraccionesConfirmadas( )) miPoliciaReportando.purgeInfractions() if miPoliciaReportando.numeroInfraccionesConfirmadas() > 0: infraccionEnRevision = miPoliciaReportando.popInfraccion() miGrabadora.generarReporteInfraccion( informacionTotal, infraccionEnRevision) else: #Si no hay infracciones a reportar me fijo el estado del filtro: tiempoAhora = datetime.datetime.now( ).hour * 60 + datetime.datetime.now().minute if (tiempoAhora > amaneciendo) & (miFiltro.ultimoEstado != 'Filtro Activado'): miFiltro.colocarFiltroIR() if (tiempoAhora < amaneciendo) & (miFiltro.ultimoEstado != 'Filtro Desactivado'): miFiltro.quitarFiltroIR() pass # Draw frame number into image on top for infraction in miPoliciaReportando.listaDeInfracciones: for puntos in infraction['desplazamiento']: puntosExtraidos = puntos.ravel().reshape( puntos.ravel().shape[0] // 2, 2) for punto in puntosExtraidos: if infraction['estado'] == 'Confirmado': miAcetatoInformativo.colocarPunto(tuple(punto), 0) else: miAcetatoInformativo.colocarPunto(tuple(punto), 1) # Configs and displays for the MASK according to the semaforo #miAcetatoInformativo.agregarTextoEn("I{}".format(miPoliciaReportando.infraccionesConfirmadas), 2) miAcetatoInformativo.colorDeSemaforo(senalSemaforo) frameFlujo = miAcetatoInformativo.aplicarAFrame(frameFlujo) if mostrarImagen: #cv2.imshow('Visual', miAcetatoInformativo.aplicarAFrame(frameFlujo)[120:239,60:360]) cv2.imshow('Visual', frameFlujo) informacionTotal[frame_number] = frameFlujo.copy() miAcetatoInformativo.inicializar() tiempoEjecucion = time.time() - tiempoAuxiliar if tiempoEjecucion > periodoDeMuestreo: miReporte.warning( 'Tiempo Afuera {0:2f}'.format(tiempoEjecucion) + '[s] en frame {}'.format(frame_number)) #sys.stdout.write("\033[F") while time.time() - tiempoAuxiliar < periodoDeMuestreo: True tiempoAuxiliar = time.time() if cambiosImportantes: miReporte.info( 'F{} Sema: '.format(frame_number) + semaforoLiteral + ' I: ' + str(miPoliciaReportando.numeroInfraccionesConfirmadas()) + '/' + str(miPoliciaReportando.numeroInfraccionesTotales())) porcentajeDeMemoria = psutil.virtual_memory()[2] if (porcentajeDeMemoria > 80) & (os.uname()[1] == 'raspberrypi'): miReporte.info('Estado de Memoria: ' + str(porcentajeDeMemoria) + '/100') if porcentajeDeMemoria > 96: miReporte.warning( 'Alcanzado 96/100 de memoria, borrando todo e inicializando' ) del informacionTotal informacionTotal = {} frame_number = 0 frame_number += 1 if (frame_number >= topeEjecucion) & (topeEjecucion != 0): miReporte.info( 'ABANDONANDO LA EJECUCION DE PROGRAMA por indice de auto acabado predeterminado' ) miPoliciaReportando.apagarCamara() break if senalSemaforo == -2: miReporte.critical( 'ABANDONANDO LA EJECUCION DE PROGRAMA El semaforo ya no obtuvo señal, necesito recalibrar, abandonando la ejecución del programa' ) break ch = 0xFF & cv2.waitKey(5) if ch == ord('q'): miReporte.info( 'ABANDONANDO LA EJECUCION DE PROGRAMA por salida manual') break if ch == ord('s'): cv2.imwrite( datetime.datetime.now().strftime('%Y-%m-%d_%H:%M:%S') + '.jpg', frameFlujo) except KeyboardInterrupt as e: miReporte.info('Salida forzada') miPoliciaReportando.apagarCamara()