有没有一种方法可以使用标签将图像分类到文件夹中?

时间:2019-11-05 20:24:21

标签: python image k-means

尝试根据输出的标签将我的非监督图像分类到文件夹中。我从一个.jpg图像目录开始,将它们调整为一个新目录,然后将每个图像变成一个串联为1个.csv的线阵列。 .csv将以pandas数据帧的形式读回,并应用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")

0 个答案:

没有答案