Пример #1
0
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
Пример #2
0
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()
Пример #3
0
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
Пример #4
0
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()
Пример #5
0
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()