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.
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
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
Lecturas de interes
https://www.deustoformacion.com/blog/programacion-diseno-web/que-son-datasets-dataframes-big-data
https://piktochart.com/blog/100-data-sets/
Soy Juan Luis García Corrales, mi nombre de guerra es monolinux. Vivo en Villagrán ,Guanajuato. Cofundador de jungla
ISC orgullosamente LINCE. Apasionado del arte , Crítico de las Películas , Musica y Libros , Escribo en tiempo libres y ♥ Regina
Mi estilo de vida es la programación así que trato de sincronizarlo con mi vida diaria, predicó la filosofía Gnu/Linux para brindar opciones menos capitalistas.
– Viviendo en la armonía del caos