Попытка сортировать мои неконтролируемые изображения в папки на основе выводимой метки. Я начинаю с каталога изображений .jpg, изменяю их размер в новый каталог, затем делаю каждое изображение в виде одного массива, объединенного в 1 .csv. .Csv считывается обратно как pandas dataframe и применяет KMeans, чтобы увидеть, есть ли у меня какая-либо кластеризация. Я пытался создать папки назначения, где, если папка не существует, она будет создана. Сначала я подумал написать оператор if-else, но понял, что когда я попаду в оператор if, метки уже находятся в массиве, я подумал, что смогу связать имя файла с меткой, как оно было сгенерировано, но не смогработай. Я также понял, что имя файла больше не связано с массивом изображений после того, как оно было преобразовано в .csv.
MY_DIRECTORY = "\\test\\"
OUT_DIRECTORY = "\\testresize\\"
for filename in glob.glob(MY_DIRECTORY+"*.jpg"):
# select the desired resolution
size = 200, 200
file_parts = os.path.splitext(filename)
outfile = file_parts[0] + '_200x200' + file_parts[1]
outfile = os.path.basename(outfile)
print(outfile)
img = Image.open(filename)
img = img.resize(size, Image.ANTIALIAS)
img.save(OUT_DIRECTORY + outfile, 'jpeg')
for img in os.listdir(OUT_DIRECTORY):
img_array = cv2.imread(os.path.join(OUT_DIRECTORY,img), cv2.IMREAD_GRAYSCALE)
img_array = (img_array.flatten())
img_array = img_array.reshape(-1, 1).T
img_array = img_array/255.0
print(img_array)
open('\\test.csv', 'ab') as f:
np.savetxt(f, img_array, delimiter = ',')
dest_fold_0 = '\\Sorted\\Label_0'
dest_fold_1 = '\\Sorted\\Label_1'
dest_fold_2 = '\\Sorted\\Label_2'
combined_array = pd.read_csv('\\test.csv', header = None, low_memory = False, error_bad_lines = False)
model = KMeans(algorithm = 'auto', copy_x = True, init = 'k-means++', max_iter = 300,
n_clusters = 2, n_init = 10, n_jobs = 1, precompute_distances = 'auto',
random_state = 1, tol = 0.0001, verbose = 0)
model.fit(combined_array)
labels = model.predict(combined_array)
if labels == 0:
if not os.path.exists(dest_fold_0):
os.mkdir(dest_fold_0)
img.save(dest_fold_0 + outfile, 'jpeg')
elif labels == 1:
if not os.path.exists(dest_fold_1):
os.mkdir(dest_fold_1)
img.save(dest_fold_1 + outfile, 'jpeg')
elif labels == 2:
if not os.path.exists(dest_fold_2):
os.mkdir(dest_fold_2)
img.save(dest_fold_2 + outfile, 'jpeg')
else:
pass
print(labels)
print(model.inertia_) pd.DataFrame(labels).to_csv("C:\\Users\\rzara\\Desktop\\ProcessofUnsupervisedLearning\\labels.csv")