Verzeichnis-Array generieren
Beschreibung
Wenn Sie nach einer Liste mit den Namen der Verzeichnisse suchen,
die mit dem Verzeichnis sample_directory
Beispiel: 'F:/go/face_scrapper/faces/samples/'
verbunden sind, können Sie den Befehl listdir von die Bibliothek < b>os:
import os # definiciones sample_directory = 'F:/go/face_scrapper/faces/samples/' # obtener arreglo de directorios classes = [] maincls = os.listdir(sample_directory) for cls in maincls: # generar list de archivos file = os.listdir(sample_directory+'/'+cls+'/') # agregar subdirectorios si contienen imagenes if len(file) > 0: classes.append(cls) # mostrar classes print(classes)
Schließt nur Ordner mit Bildern ein.
ID:(13748, 0)
Verzeichnis-Array mit Unterverzeichnissen generieren
Beschreibung
Wenn Sie nach einer Liste mit den Namen der Unterverzeichnisse suchen,
die einem Hauptverzeichnis sample_directory zugeordnet sind
Beispiel: 'F:/go/face_scrapper/faces/samples/'
kann man den Befehl listdir verwenden aus der Bibliothek os:
import os # definitions sample_directory = 'F:/go/face_scrapper/faces/samples/' # get directory array classes = [] maincls = os.listdir(sample_directory) for subcls in maincls: # get subdirectory array clslst = os.listdir(sample_directory+subcls+'/') for cls in clslst: file = os.listdir(sample_directory+subcls+'/'+cls+'/') # add subdirectories to the array if len(file) > 0: classes.append(cls) # show classes print(classes)
ID:(13781, 0)
Prüfen ob es Doppelte gibt im Array
Beschreibung
Um sicherzustellen, dass das Array classes keine Klasse für jeden Typ enthält, müssen alle Elemente auf ihre Eindeutigkeit überprüft werden:
import collections print([item for item, count in collections.Counter(classes).items() if count > 1]) print('number of elements:'+str(len(classes)))
Das Klassenarray darf keine Doubles enthalten.
ID:(13782, 0)
Verzeichnisse für Modell erstellen
Beschreibung
Um die Modelle auszuführen, werden die Verzeichnisse erstellt
- train
- validate
- test
mit den Unterverzeichnissen jedes Bildes derselben Klassifikation abhängig vom Arbeitsverzeichniss the work directory work_directory
Beispiel: 'F:/go/face_scrapper/faces/work/':
import os # define directories work_directory = 'F:/go/face_scrapper/faces/work/' train_path = work_directory+'train/' validate_path = work_directory+'validate/' test_path = work_directory+'test/' # create subdirectories for subcls in classes: # define train directory FOLDER_EXIST = os.path.isdir(train_path+subcls) # check and create if not FOLDER_EXIST: os.mkdir(train_path+subcls) # define validate directory FOLDER_EXIST = os.path.isdir(validate_path+subcls) # check and create if not FOLDER_EXIST: os.mkdir(validate_path+subcls) # define test directory FOLDER_EXIST = os.path.isdir(test_path+subcls) # check and create if not FOLDER_EXIST: os.mkdir(test_path+subcls)
ID:(13749, 0)
Bilder in Verzeichnisse kopieren
Beschreibung
Nachdem die Verzeichnisse generiert wurden, müssen die Bilder in jedes Unterverzeichnis kopiert werden. Dazu müssen Sie die Unterverzeichnisse durchgehen, die vom Sample-Verzeichnis abhängig sind sample_directory
Beispiel 'F:/go/face_scrapper/faces/sample/'
und kopieren Sie sie in die Arbeitsverzeichnisse work_directory
Beispiel 'F:/go/face_scrapper/faces/work/'
in seinen Versionen trainieren (trainieren), validieren (validieren) und testen (testen).
Die zu kopierende Zahl muss die Brüche haben
- 80% train
- 15% validate
- 5% test
import shutil # definitions sample_directory = 'F:/go/face_scrapper/faces/samples/' work_directory = 'F:/go/face_scrapper/faces/work/' train_path = work_directory+'train/' validate_path = work_directory+'validate/' test_path = work_directory+'test/' for subcls in classes: # get subclasses subclslst = os.listdir(sample_directory+subcls) # numbers nlen = len(subclslst) if nlen > 0: nlen1 = round(nlen*0.8) if nlen1 == 0: nlen1 = 1 nlen2 = round(nlen*0.15) if nlen2 == 0: nlen2 = 1 nlen3 = round(nlen*0.05) if nlen3 == 0: nlen3 = 1 if nlen1 + nlen2 + nlen3 > nlen: npos3 = nlen - 1 else: npos3 = nlen1 + nlen2 if nlen1 + nlen2 > nlen: npos1 = nlen - 1 npos2 = nlen else: npos1 = nlen1 npos2 = nlen1 + nlen2 print(cls+','+str(nlen1)+','+str(nlen2)+','+str(nlen3)) # copy files for i in range(0,nlen1): shutil.copyfile(sample_directory+subcls+'/'+subclslst[i],train_path+subcls+'/'+subclslst[i]) for i in range(npos1,npos2): shutil.copyfile(sample_directory+subcls+'/'+subclslst[i],validate_path+subcls+'/'+subclslst[i]) for i in range(npos3,nlen): shutil.copyfile(sample_directory+subcls+'/'+subclslst[i],test_path+subcls+'/'+subclslst[i])
ID:(13750, 0)
Bilder in Verzeichnisse kopieren mit Unterverzeichnisse
Beschreibung
Nachdem die Verzeichnisse generiert wurden, müssen die Bilder in jedes Unterverzeichnis kopiert werden. Dazu müssen Sie die Unterverzeichnisse durchgehen, die vom Sample-Verzeichnis abhängig sind sample_directory
Beispiel 'F:/go/face_scrapper/faces/sample/'
und kopieren Sie sie in die Arbeitsverzeichnisse work_directory
Beispiel 'F:/go/face_scrapper/faces/work/'
in seinen Versionen trainieren (trainieren), validieren (validieren) und testen (testen).
Die zu kopierende Zahl muss die Brüche haben
- 80% train
- 15% validate
- 5% test
import shutil # definitions sample_directory = 'F:/go/face_scrapper/faces/samples/' work_directory = 'F:/go/face_scrapper/faces/work/' train_path = work_directory+'train/' validate_path = work_directory+'validate/' test_path = work_directory+'test/' # get directory array maincls = os.listdir(sample_directory) for subcls in maincls: # get subclasses temp = os.listdir(sample_directory+subcls+'/') for cls in temp: # file list filelst = os.listdir(sample_directory+subcls+'/'+cls+'/') # numbers nlen = len(filelst) if nlen > 0: nlen1 = round(nlen*0.8) if nlen1 == 0: nlen1 = 1 nlen2 = round(nlen*0.15) if nlen2 == 0: nlen2 = 1 nlen3 = round(nlen*0.05) if nlen3 == 0: nlen3 = 1 if nlen1 + nlen2 + nlen3 > nlen: npos3 = nlen - 1 else: npos3 = nlen1 + nlen2 if nlen1 + nlen2 > nlen: npos1 = nlen - 1 npos2 = nlen else: npos1 = nlen1 npos2 = nlen1 + nlen2 print(cls+','+str(nlen1)+','+str(nlen2)+','+str(nlen3)) # copy files for i in range(0,nlen1): shutil.copyfile(sample_directory+subcls+'/'+cls+'/'+filelst[i],train_path+cls+'/'+filelst[i]) for i in range(npos1,npos2): shutil.copyfile(sample_directory+subcls+'/'+cls+'/'+filelst[i],validate_path+cls+'/'+filelst[i]) for i in range(npos3,nlen): shutil.copyfile(sample_directory+subcls+'/'+cls+'/'+filelst[i],test_path+cls+'/'+filelst[i])
ID:(13783, 0)
Bilder für den Lernprozess generieren
Beschreibung
Um das Modell zu trainieren, wird eine Vorverarbeitung durchgeführt, in der
- die Bilder werden auf die definierte Größe skaliert (es wird unabhängig davon skaliert, ob das Originalbild größer, kleiner und / oder nicht quadratisch ist).
- Kontrast wird erhöht indem mit einer anderen Farbpalette gearbeitet wird
import numpy as np import tensorflow as tf from tensorflow import keras from tensorflow.keras.preprocessing.image import ImageDataGenerator # definitions work_directory = 'F:/go/face_scrapper/faces/work/' train_path = work_directory+'train/' validate_path = work_directory+'validate/' test_path = work_directory+'test/' # generate images train_batches = ImageDataGenerator(preprocessing_function=tf.keras.applications.vgg16.preprocess_input).flow_from_directory(directory=train_path, target_size=(224,224), classes=classes, batch_size=10) valid_batches = ImageDataGenerator(preprocessing_function=tf.keras.applications.vgg16.preprocess_input).flow_from_directory(directory=valid_path, target_size=(224,224), classes=classes, batch_size=10) test_batches = ImageDataGenerator(preprocessing_function=tf.keras.applications.vgg16.preprocess_input).flow_from_directory(directory=test_path, target_size=(224,224), classes=classes, batch_size=10, shuffle=False)
Wenn Sie Ihr eigenes Modell trainieren, kann die Größe der Bilder (target_size) einen beliebigen Wert annehmen. Wird jedoch ein vortrainiertes Modell verwendet, muss die Größe an die Bilder des Originalmodells angepasst werden.
ID:(13751, 0)
Dateiformat train, validate und test
Beschreibung
La función ImageDataGenerator genera archivos con el formato dado por:
{'image_data_generator':
'target_size': (224, 224),
'color_mode': 'rgb',
'data_format': 'channels_last',
'image_shape': (224, 224, 3),
'save_to_dir': None,
'save_prefix': '',
'save_format': 'png',
'interpolation': 'nearest',
'split': None,
'subset': None,
'directory': 'F:/go/face_scrapper/faces/work/test/',
'classes': array([ 0, 1, 2, ..., 288, 289]),
'class_mode': 'categorical',
'dtype': 'float32',
'samples': 663,
'num_classes': 290,
'class_indices': {'arraya-andi': 0, 'arraya-marielle': 1, ...,'wagner-mancho': 288, 'wagner-richard': 289},
'filenames': ['arraya-andi
eg087_002_003_603-625-293-375.jpg',
...,
'wagner-richard\\sony-cybershot-20011204-1806002_001_201-163-141-172.jpg'],
'_filepaths': ['F:/go/face_scrapper/faces/work/test/arraya-andi
eg087_002_003_603-625-293-375.jpg',
...,
'F:/go/face_scrapper/faces/work/test/wagner-richard\\sony-cybershot-20011204-1806002_001_201-163-141-172.jpg'],
'n': 663,
'batch_size': 10,
'seed': None,
'shuffle': False,
'batch_index': 4,
'total_batches_seen': 140,
'lock':
'index_array': array([ 0, 1, 2, ..., 661, 662]),
'index_generator':
test_
ID:(13799, 0)