Spaces:
Runtime error
Runtime error
| import os | |
| import random | |
| import pandas as pd | |
| from pathlib import Path | |
| from flask import jsonify | |
| list_class = ['Diamond','Oblong','Oval','Round','Square','Triangle'] | |
| # public_url = "https://yamanaka1.pagekite.me" | |
| class GetLoadData: | |
| def get_training_file_counts(): | |
| path = "./static/dataset/Face Shape" | |
| training_file_counts = [] | |
| # Loop melalui folder Training | |
| for sub_folder in ["Diamond", "Oblong", "Oval", "Round", "Square", "Triangle"]: | |
| # Tentukan path ke folder sub_folder dalam folder Training | |
| sub_path = os.path.join(path, "Training", sub_folder) | |
| # Gunakan fungsi listdir untuk membaca semua file dalam folder sub_folder | |
| num_files = len([f for f in os.listdir(sub_path) if os.path.isfile(os.path.join(sub_path, f))]) | |
| # Tambahkan jumlah file ke dalam array training_file_counts | |
| training_file_counts.append(num_files) | |
| total_file = sum(training_file_counts) | |
| training_file_counts.append(total_file) | |
| # Return hasil dalam bentuk JSON | |
| return jsonify(training_file_counts) | |
| def get_testing_file_counts(): | |
| path = "./static/dataset/Face Shape" | |
| testing_file_counts = [] | |
| # Loop melalui folder Testing | |
| for sub_folder in ["Diamond", "Oblong", "Oval", "Round", "Square", "Triangle"]: | |
| # Tentukan path ke folder sub_folder dalam folder Testing | |
| sub_path = os.path.join(path, "Testing", sub_folder) | |
| # Gunakan fungsi listdir untuk membaca semua file dalam folder sub_folder | |
| num_files = len([f for f in os.listdir(sub_path) if os.path.isfile(os.path.join(sub_path, f))]) | |
| # Tambahkan jumlah file ke dalam array testing_file_counts | |
| testing_file_counts.append(num_files) | |
| total_file = sum(testing_file_counts) | |
| testing_file_counts.append(total_file) | |
| # Return hasil dalam bentuk JSON | |
| return jsonify(testing_file_counts) | |
| def folder_maker(preprocessing_name): | |
| folder_path = f'./static/dataset/{preprocessing_name}' | |
| training_path = f'./static/dataset/{preprocessing_name}/Training' | |
| testing_path = f'./static/dataset/{preprocessing_name}/Testing' | |
| # Membuat folder dataset/Landmark Face Shape jika belum ada | |
| if not os.path.exists(folder_path): | |
| os.makedirs(folder_path) | |
| # Membuat folder dataset/Landmark Face Shape/Training jika belum ada | |
| if not os.path.exists(training_path): | |
| os.makedirs(training_path) | |
| for i in range(0, len(list_class)): | |
| os.mkdir(f'{training_path}/{list_class[i]}') | |
| # Membuat folder dataset/Landmark Face Shape/Testing jika belum ada | |
| if not os.path.exists(testing_path): | |
| os.makedirs(testing_path) | |
| for i in range(0, len(list_class)): | |
| os.mkdir(f'{testing_path}/{list_class[i]}') | |
| def load_image_data(image_dir): | |
| # Get file paths for all images in the directory | |
| jpeg = list(image_dir.glob(r'**/*.jpeg')) | |
| JPG = list(image_dir.glob(r'**/*.JPG')) | |
| jpg = list(image_dir.glob(r'**/*.jpg')) | |
| PNG = list(image_dir.glob(r'**/*.PNG')) | |
| png = list(image_dir.glob(r'**/*.png')) | |
| filepaths_ori = jpeg + JPG + jpg + PNG + png | |
| # Get labels for each image | |
| labels = list(map(lambda x: os.path.split(os.path.split(x)[0])[1], filepaths_ori)) | |
| # Convert filepaths and labels to Pandas series | |
| filepaths_ori = pd.Series(filepaths_ori, name='Filepath').astype(str) | |
| labels = pd.Series(labels, name='Label') | |
| return filepaths_ori, labels | |
| def get_random_images(tahap, public_url): | |
| root_path = f'./static/dataset/{tahap}/Training/' | |
| num_images = 1 | |
| random_images = [] | |
| folder_count = 1 | |
| # Iterasi melalui folder di dalam folder "training" | |
| for folder_name in os.listdir(root_path): | |
| folder_path = os.path.join(root_path, folder_name) | |
| print(folder_path) | |
| # Jika folder_name bukan folder, skip | |
| if not os.path.isdir(folder_path): | |
| continue | |
| # Mengambil daftar file di dalam folder dan mengacaknya | |
| file_names = os.listdir(folder_path) | |
| random.shuffle(file_names) | |
| # Memilih 1 file pertama setelah diacak | |
| for i in range(len(file_names)): | |
| if i < num_images: | |
| url = f'{public_url}/static/dataset/{tahap}/Training/{folder_name}' | |
| print(url) | |
| random_images.append(os.path.join(url, file_names[i])) | |
| print(random_images) | |
| # Hentikan loop setelah mengambil 5 gambar dari folder ke-5 | |
| if folder_count == 5: | |
| break | |
| folder_count += 1 | |
| # Mengirimkan daftar file acak sebagai respons ke Flutter | |
| print(random_images) | |
| return random_images | |
| def load_image_dataset(train_dataset_path, test_dataset_path): | |
| list_data_path = [train_dataset_path, test_dataset_path] | |
| # Get filepaths and labels | |
| image_dir_train = Path(list_data_path[0]) | |
| filepaths_train, labels_train = GetLoadData.load_image_data(image_dir_train) | |
| # Concatenate filepaths and labels | |
| train_image_df = pd.concat([filepaths_train, labels_train], axis=1) | |
| # Get filepaths and labels | |
| image_dir_test = Path(list_data_path[1]) | |
| filepaths_test, labels_test = GetLoadData.load_image_data(image_dir_test) | |
| # Concatenate filepaths and labels | |
| test_image_df = pd.concat([filepaths_test, labels_test], axis=1) | |
| # Return filepaths and labels | |
| return train_image_df, test_image_df | |