def main(): start = time.time() ''' Initialize default parameters ''' param_obj = par.Parameter_obj() path_obj = par.Path_obj() ''' Loop through all maps defined in the input dataset folder ''' for f in listdir(path_obj.datasetInputFolder): if isfile(join(path_obj.datasetInputFolder, f)): if f[-6:] == ".world": # valid world file worldFilePath = join(path_obj.datasetInputFolder, f) param_obj.imageScale, path_obj.inputFileName = parseWorldFile( worldFilePath) path_obj.actualOutputFolder = join(path_obj.parentOutputFolder, f[:-6]) path_obj.outputFileName = join(path_obj.actualOutputFolder, f[:-6]) + ".xml" if not exists(path_obj.actualOutputFolder): makedirs(path_obj.actualOutputFolder) path_obj.metricMap = join(path_obj.datasetInputFolder, path_obj.inputFileName) print path_obj.metricMap print len(path_obj.metricMap) extractLayout(param_obj, path_obj) fine = time.time() elapsed = fine - start print "Computation lasted %f seconds" % elapsed
def main(): start = time.time() print ''' PROBLEMI NOTI \n 1] LE LINEE OBLIQUE NON VANNO;\n 2] NON CLASSIFICA LE CELLE ESTERNE CHE STANNO DENTRO IL CONVEX HULL, CHE QUINDI VENGONO CONSIDERATE COME STANZE;\n OK 3] ACCURACY NON FUNZIONA;\n 4] QUANDO VENGONO RAGGRUPPATI TRA DI LORO I CLUSTER COLLINEARI, QUESTO VIENE FATTO A CASCATA. QUESTO FINISCE PER ALLINEARE ASSIEME MURA MOLTO DISTANTI;\n 5] IL SISTEMA E' MOLTO SENSIBILE ALLA SCALA. BISOGNEREBBE INGRANDIRE TUTTE LE IMMAGINI FACENDO UN RESCALING E RISOLVERE QUESTO PROBLEMA. \n [4-5] FANNO SI CHE I CORRIDOI PICCOLI VENGANO CONSIDERATI COME UNA RETTA UNICA\n 6] BISOGNEREBBE FILTRARE LE SUPERFICI TROPPO PICCOLE CHE VENGONO CREATE TRA DEI CLUSTER;\n 7] LE IMMAGINI DI STAGE SONO TROPPO PICCOLE; VANNO RIPRESE PIU GRANDI \n >> LANCIARE IN BATCH SU ALIENWARE\n >> RENDERE CODICE PARALLELO\n 8] MANCANO 30 DATASET DA FARE CON STAGE\n 9] OGNI TANTO NON FUNZIONA IL GET CONTORNO PERCHE SBORDA ALL'INTERNO\n >> PROVARE CON SCAN BORDO (SU IMMAGINE COPIA)\n >> PROVARE A SETTARE IL PARAMETRO O A MODIFICARE IL METODO DI SCAN BORDO\n >> CERCARE SOLUZIONI ALTERNATIVE (ES IDENTIFICARE LE CELLE ESTERNE)\n OK 10] VANNO TARATI MEGLIO I PARAMETRI PER IL CLUSTERING\n >> I PARAMETRI DE CLUSTERING SONO OK; OGNI TANTO FA OVERSEGMENTAZIONE.\n >>> EVENTUALMENTE SE SI VEDE CHE OVERSEGMENTAZIONE SONO UN PROBLEMA CAMBIARE CLUSTERING O MERGE CELLE\n 11] LE LINEE DELLA CANNY E HOUGH TALVOLTA SONO TROPPO GROSSE \n >> IN REALTA SEMBRA ESSERE OK; PROVARE CON MAPPE PIU GRANDI E VEDERE SE CAMBIA. 12] BISOGNEREBBE AUMENTARE LA SEGMENTAZIONE CON UN VORONOI OK 13] STAMPA L'IMMAGINE DELLA MAPPA AD UNA SCALA DIVERSA RISPETTO A QUELLA VERA.\n OK 14] RISTAMPARE SCHOOL_GT IN GRANDE CHE PER ORA E' STAMPATO IN PICCOLO (800x600)\n OK VEDI 10] 15] NOI NON CALCOLIAMO LA DIFFUSION DEL METODO DI MURA; PER ALCUNI VERSI E' UN BENE PER ALTRI NO\n OK VEDI 4] 16] NON FACCIAMO IL CLUSTERING DEI SEGMENTI IN MANIERA CORRETTA; DOVREMMO SOLO FARE MEANSHIFT\n 17] LA FASE DEI SEGMENTI VA COMPLETAMENTE RIFATTA; MEANSHIFT NON FUNZIONA COSI'; I SEGMENTI HANNO UN SACCO DI "==" CHE VANNO TOLTI; SPATIAL CLUSTRING VA CAMBIATO;\n 18] OGNI TANTO IL GRAFO TOPOLOGICO CONNETTE STANZE CHE SONO ADIACENTI MA NON CONNESSE. VA RIVISTA LA PARTE DI MEDIALAXIS;\n 19] PROVARE A USARE L'IMMAGINE CON IL CONTORNO RICALCATO SOLO PER FARE GETCONTOUR E NON NEGLI ALTRI STEP.\n 20] TOGLIERE THRESHOLD + CANNY -> USARE SOLO CANNY.\n 21] TOGLIERE LE CELLE INTERNE CHE SONO BUCHI.\n >> USARE VORONOI PER CONTROLLARE LA CONNETTIVITA.\n >> USARE THRESHOLD SU SFONDO \n >> COMBINARE I DUE METODI\n 22] RIMUOVERE LE STANZE ERRATE:\n >> STANZE "ESTERNE" INTERNE VANNO TOLTE IN BASE ALLE CELLE ESTERNE\n >> RIMUOVERE STANZE CON FORME STUPIDE (ES PARETI LUNGHE STRETTE), BISOGNA DECIDERE SE ELIMINARLE O INGLOBARLE IN UN ALTRA STANZA\n 23] RISOLVERE TUTTI I WARNING.\n da chiedere: guardare il metodo clustering_dbscan_celle(...) in layout la riga af = DBSCAN(eps, min_samples, metric="precomputed").fit(X) non dovrebbe essere cosi? af = DBSCAN(eps= eps, min_samples = min_samples, metric="precomputed").fit(X) ''' print ''' FUNZIONAMENTO:\n SELEZIONARE SU QUALI DATASETs FARE ESPERIMENTI (variabile DATASETs -riga165- da COMMENTARE / DECOMMENTARE)\n SPOSTARE LE CARTELLE CON I NOMI DEI DATASET CREATI DALL'ESPERIMENTO PRECEDENTE IN UNA SOTTO-CARTELLA (SE TROVA UNA CARTELLA CON LO STESSO NOME NON CARICA LA MAPPA)\n SETTARE I PARAMERI \n ESEGUIRE\n OGNI TANTO IL METODO CRASHA IN FASE DI VALUTAZIONE DI ACCURATEZZA. NEL CASO, RILANCIARLO\n SPOSTARE TUTTI I RISULTATI IN UNA CARTELLA IN RESULTS CON UN NOME SIGNIFICATIVO DEL TEST FATTO\n SALVARE IL MAIN DENTRO QUELLA CARTELLA\n ''' #-------------------PARAMETRI------------------------------------------------------- #carico parametri di default parametri_obj = par.Parameter_obj() #carico path di default path_obj = par.Path_obj() #----------------------------------------------------------------------------------- makeFolders(path_obj.OUTFOLDERS, path_obj.DATASETs) skip_performed = True #----------------------------------------------------------------------------------- #creo la cartella di log con il time stamp our_time = str(dt.datetime.now())[:-10].replace(' ', '@') #get current time SAVE_FOLDER = os.path.join('./log', our_time) if not os.path.exists(SAVE_FOLDER): os.mkdir(SAVE_FOLDER) SAVE_LOGFILE = SAVE_FOLDER + '/log.txt' #------------------------------------------------------------------------------------ with open(SAVE_LOGFILE, 'w+') as LOGFILE: print "AZIONE", par.AZIONE print >> LOGFILE, "AZIONE", par.AZIONE shutil.copy('./minibatch.py', SAVE_FOLDER + '/minibatch.py') #copio il file del main shutil.copy('./parameters.py', SAVE_FOLDER + '/parameters.py') #copio il file dei parametri if par.AZIONE == "batch": if par.LOADMAIN == False: print >> LOGFILE, "SONO IN MODALITA' START MAIN" else: print >> LOGFILE, "SONO IN MODALITA' LOAD MAIN" print >> LOGFILE, "-----------------------------------------------------------" for DATASET in path_obj.DATASETs: print >> LOGFILE, "PARSO IL DATASET", DATASET global_results = [] print 'INIZIO DATASET ', DATASET for metricMap in glob.glob(path_obj.INFOLDERS + 'IMGs/' + DATASET + '/*.png'): print >> LOGFILE, "---parso la mappa: ", metricMap print 'INIZIO A PARSARE ', metricMap path_obj.metricMap = metricMap map_name = metricMap.split('/')[-1][:-4] #print map_name SAVE_FOLDER = path_obj.OUTFOLDERS + DATASET + '/' + map_name SAVE_PICKLE = path_obj.OUTFOLDERS + DATASET + '_pickle/' + map_name.split( '.')[0] if par.LOADMAIN == False: if not os.path.exists(SAVE_FOLDER): os.mkdir(SAVE_FOLDER) os.mkdir(SAVE_PICKLE) else: # evito di rifare test che ho gia fatto if skip_performed: print 'GIA FATTO; PASSO AL SUCCESSIVO' continue #print SAVE_FOLDER path_obj.filepath = SAVE_FOLDER + '/' path_obj.filepath_pickle_layout = SAVE_PICKLE + '/' + 'Layout.pkl' path_obj.filepath_pickle_grafoTopologico = SAVE_PICKLE + '/' + 'GrafoTopologico.pkl' add_name = '' if DATASET == 'SCHOOL' else '' path_obj.nome_gt = path_obj.INFOLDERS + 'XMLs/' + DATASET + '/' + map_name + add_name + '.xml' #--------------------new parametri----------------------------------- #setto i parametri differenti(ogni dataset ha parametri differenti) parametri_obj.minLateralSeparation = 7 if ( DATASET == 'SCHOOL' or DATASET == 'PARZIALI' or DATASET == 'SCHOOL_grandi') else 15 #parametri_obj.cv2thresh = 150 if DATASET == 'SCHOOL' else 200 parametri_obj.cv2thresh = 150 if ( DATASET == 'SCHOOL' or DATASET == 'PARZIALI' or DATASET == 'SCHOOL_grandi') else 200 parametri_obj.flip_dataset = True if DATASET == 'SURVEY' else False #-------------------------------------------------------------------- #-------------------ESECUZIONE--------------------------------------- if par.LOADMAIN == False: print "start main" results = start_main(parametri_obj, path_obj) global_results.append(results) #calcolo accuracy finale dell'intero dataset if metricMap == glob.glob(path_obj.INFOLDERS + 'IMGs/' + DATASET + '/*.png')[-1]: accuracy_bc_medio = [] accuracy_bc_in_pixels = [] accuracy_fc_medio = [] accuracy_fc_in_pixels = [] for i in global_results: accuracy_bc_medio.append(i[0]) accuracy_fc_medio.append(i[2]) accuracy_bc_in_pixels.append(i[4]) accuracy_fc_in_pixels.append(i[5]) filepath = path_obj.OUTFOLDERS + DATASET + '/' print filepath f = open(filepath + 'accuracy.txt', 'a') #f.write(filepath) f.write('accuracy_bc = ' + str(np.mean(accuracy_bc_medio)) + '\n') f.write('accuracy_bc_pixels = ' + str(np.mean(accuracy_bc_in_pixels)) + '\n') f.write('accuracy_fc = ' + str(np.mean(accuracy_fc_medio)) + '\n') f.write('accuracy_fc_pixels = ' + str(np.mean(accuracy_fc_in_pixels)) + '\n\n') f.close() LOGFILE.flush() elif par.LOADMAIN == True: print "load main" print >> LOGFILE, "---parso la mappa: ", path_obj.metricMap load_main(path_obj.filepath_pickle_layout, path_obj.filepath_pickle_grafoTopologico, path_obj.filepath + "parametri.xml") LOGFILE.flush() else: continue break LOGFILE.flush() elif par.AZIONE == 'mappa_singola': #-------------------ESECUZIONE singola mappa---------------------------------- if par.LOADMAIN == False: print "start main" print >> LOGFILE, "SONO IN MODALITA' START MAIN" print >> LOGFILE, "---parso la mappa: ", path_obj.metricMap start_main(parametri_obj, path_obj) LOGFILE.flush() else: print "load main" print >> LOGFILE, "SONO IN MODALITA' LOAD MAIN" print >> LOGFILE, "---parso la mappa: ", path_obj.metricMap load_main(path_obj.filepath_pickle_layout, path_obj.filepath_pickle_grafoTopologico, path_obj.filepath + "parametri.xml") LOGFILE.flush() #-------------------TEMPO IMPIEGATO------------------------------------------------- fine = time.time() elapsed = fine - start print "la computazione ha impiegato %f secondi" % elapsed