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
예제 #2
0
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