ETIQUETADO DE ÁREAS DE INTERÉS CON PYTHON

Si solo escucharas la voz de Ava, creerías que es humana. La verdadera prueba está en saber que es un robot y ver si aún crees que tiene conciencia.

– Nathan, Ex-Machine

Seguimos en la continua lucha por conseguir un entrenamiento para un aprendizaje de una red neuronal, lo cual hasta el momento se me ha hecho un poco complicado entender, pero ahí vamos con un poco de prueba y error. Y entre esos errores que me tope esta el escoger bien mi datasets positivos y es que algunos artículos leídos por la red encontre métodos algo extraños los cuales no me funcionaron. En fin el unico procedimiento que me permito dar un entrenamiento troglodita fue el etiquetado de área de interés

Bases

Red neuronal

Es un modelo simplificado que emula el modo en que el cerebro humano procesa la información: Funciona simultaneando un número elevado de unidades de procesamiento interconectadas que parecen versiones abstractas de neuronas.

Data Sets

Es un conjunto de datos que corresponde a los contenidos de una única tabla de base de datos o una única matriz en donde se representa una variable en particular o un conjunto de datos en particular.

Región de area de interes

También conocido por su abreviación (ROI), son muestras dentro de un conjunto de datos identificación para un propósito en particular y literalmente se puede tomar como una selección poligonal

Teniendo en cuenta todo esto se preguntaran por ahí y esto con que fin o propósito me sirve?. Pues para entrenar una red neuronal con clasificación supervisada. La cual consiste en tener datos de entradas y salidas para que esta pueda decir autónomamente ante una x situación.

Dataset listo para ser etiquetado

Y en el articulo anterior mostramos un script en el cual te descargabas imagenes de una pagina de internet. Quiero leer esto . Pues bien una vez que las tenemos en vuestros discos duros vamos a etiquetar el objeto de interés (ROI). Y para esto vamos hacer una pequeña actualización de script que encontré por ahí en internet el cual no funcionaba para python3 y todas las librerías actualizadas al día de hoy.

Código

Yo como programador, necesito generar pruebas positivas para poder entrenar una red neuronal. Estos etiquetados de pruebas deben ser lo mas apegado a la realidad

import cv2
import sys
import glob

debug = 1
obj_list = []
obj_count = 0
click_count = 0
x1 = 0
y1 = 0
h = 0
w = 0
key = None
frame = None


def obj_marker(event,x,y,flags,param):
    global click_count
    global debug
    global obj_list
    global obj_count
    global x1
    global y1
    global w
    global h
    global frame
    if event == cv2.EVENT_LBUTTONDOWN:
        click_count += 1
        if click_count % 2 == 1:
            x1 = x
            y1 = y
        else:
            w = abs(x1 - x)
            h = abs(y1 - y)
            obj_count += 1
            if x1 > x:
                x1 = x
            if y1 > y:
                y1 = y
            obj_list.append('%d %d %d %d ' % (x1,y1,w,h))
            if debug > 0:
                print(obj_list)
            cv2.rectangle(frame,(x1,y1),(x1+w,y1+h),(255,0,0),5)
            cv2.imshow('Marcador de positivos',frame)

if len(sys.argv) != 3:
    print ('Parametros incorrectos : python marker_image.py ruta  archivo_salida.txt')
else:
    if debug > 0:
        print('Argumentos correctos')
        print('La ruta es : %s' % sys.argv[1])
        print('El archivo de salida es : %s' % sys.argv[2])
        print('Haga clic en los bordes que desea marcar como objeto')
        print('Tecla [q] para salir')
        print('Tecla [c] para cancelar marcas')
        print('Tecla [n] para cargar la siguiente imagen')
    #obetiendo la lista de jpg o png
    list = glob.glob('%s/*.jpg' % sys.argv[1])
    if debug > 0:
    #creando la ventana de opencv
        cv2.namedWindow('Marcador de positivos',cv2.WINDOW_AUTOSIZE)
        cv2.setMouseCallback('Marcador de positivos',obj_marker)
    #creacion de archivo
    file_name = open(sys.argv[2],"w")
    #ciclo para que no se cierre el programa
    for i in list:
        frame = cv2.imread(i)                                                   
        cv2.imshow('Marcador de positivos',frame)                                              
        obj_count = 0                                                           
        key = cv2.waitKey(0)                                                    
        while((key & 0xFF != ord('q')) and (key & 0xFF != ord('n'))):           
            key = cv2.waitKey(0)                                                
            if(key & 0xFF == ord('c')):                                         
                obj_count = 0                                                   
                obj_list = []
                frame = cv2.imread(i)                                          
                cv2.imshow('Marcador de positivos',frame)                                       
        if(key & 0xFF == ord('q')):                                             
            break                                                               
        elif(key & 0xFF == ord('n')):                                           
            if(obj_count > 0):                                                  
                str1 = '%s %d ' % (i,obj_count)                                 
                file_name.write(str1)
                for j in obj_list:
                    file_name.write(j)
                file_name.write('\n')
                obj_count = 0
                obj_list = []
    file_name.close()                                                         
cv2.destroyAllWindows()

Uso

python marker_image.py ruta_de_tus_imagenes  archivo_salida.txt
---------------------{ Menu de opciones }-----------------------
#Presionar la Tecla [q] para salir
#Presionar la Tecla [c] para cancelar lo marcado
#Preionar la Tecla [n] para cargar la siguiente imagen
Generador de areas de interes

Notas

  • Se necesita tener instalado OpenCV.
  • En esta instrucción list = glob.glob(‘%s/*.jpg’ % sys.argv[1]), si ustedes tienen .gif o .png u otros, Poner solo *.jpg’ , la extensión conrrespondiente.
  • En esta instrucción file_name = open(sys.argv[2],”w”), crea un archivo nuevo. Si ustedes quieren que reescriban en un archivo antes creado solo poner r+, open(sys.argv[2],”w”, en vez de w

Bueno este script al igual que los otros que he mostrado. Son prototipos espero crear una programa mas en forma para poder hacer esto mas automáticos y poderlos subir a Github. Si mas por el momento me despido sin antes decirle a ustedes lectores y únicos amigos . FELIZ NAVIDAD Y PROSPERO AÑO NUEVO

Idea sobre el proceso

Lecturas de interes

https://www.ibm.com/support/knowledgecenter/es/SS3RA7_sub/modeler_mainhelp_client_ddita/components/neuralnet/neuralnet_model.html

https://www.deustoformacion.com/blog/programacion-diseno-web/que-son-datasets-dataframes-big-data

https://piktochart.com/blog/100-data-sets/

https://docs.opencv.org/

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *