Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- >>>>>>>>>>>>>>>>>>>>>>>>>>>> PERTAMA
- # Install library yang diperlukan
- !pip install tensorflow opencv-python
- # Import library yang diperlukan
- import tensorflow as tf
- from tensorflow.keras.models import Sequential
- from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
- import cv2
- import numpy as np
- import os
- from sklearn.model_selection import train_test_split
- from sklearn.preprocessing import LabelBinarizer
- from matplotlib import pyplot as plt
- from google.colab import drive
- # Mount Google Drive
- drive.mount('/content/drive')
- # Fungsi untuk memuat gambar dan label dari Google Drive
- def load_data(data_dir):
- images = []
- labels = []
- for label in os.listdir(data_dir):
- class_dir = os.path.join(data_dir, label)
- if os.path.isdir(class_dir): # Memeriksa apakah ini direktori
- for img_name in os.listdir(class_dir):
- img_path = os.path.join(class_dir, img_name)
- image = cv2.imread(img_path) # Membaca gambar
- image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # Mengonversi BGR ke RGB
- image = cv2.resize(image, (64, 64)) # Mengubah ukuran gambar menjadi 64x64 piksel
- images.append(image) # Menambahkan gambar ke daftar
- labels.append(label) # Menambahkan label ke daftar
- return np.array(images), np.array(labels) # Mengembalikan array gambar dan label
- # Fungsi untuk mengekstraksi warna kulit dari gambar
- def extract_skin(image):
- # Mengonversi gambar ke ruang warna YCrCb
- ycrcb = cv2.cvtColor(image, cv2.COLOR_RGB2YCrCb)
- # Mendefinisikan rentang warna kulit di YCrCb
- lower = np.array([0, 133, 77], dtype=np.uint8)
- upper = np.array([255, 173, 127], dtype=np.uint8)
- # Membuat mask
- mask = cv2.inRange(ycrcb, lower, upper)
- # Menerapkan mask ke gambar asli
- skin = cv2.bitwise_and(image, image, mask=mask)
- return skin
- # Memuat data dari Google Drive
- data_dir = '/content/drive/MyDrive/SIBI_data'
- images, labels = load_data(data_dir) # Memanggil fungsi untuk memuat gambar dan label
- # Menerapkan ekstraksi warna kulit ke semua gambar
- skin_images = np.array([extract_skin(image) for image in images])
- # Praprocessing: normalisasi nilai piksel
- images = images / 255.0 # Normalisasi nilai piksel gambar asli ke rentang [0, 1]
- skin_images = skin_images / 255.0 # Normalisasi nilai piksel gambar hasil ekstraksi warna kulit ke rentang [0, 1]
- # Encode label
- lb = LabelBinarizer()
- labels = lb.fit_transform(labels) # Mengonversi label ke one-hot encoding
- # Membagi data menjadi set pelatihan dan pengujian
- X_train, X_test, y_train, y_test = train_test_split(images, labels, test_size=0.2, random_state=42) # Membagi data asli
- X_train_skin, X_test_skin, y_train_skin, y_test_skin = train_test_split(skin_images, labels, test_size=0.2, random_state=42) # Membagi data hasil ekstraksi warna kulit
- >>>>>>>>>>>>>>>>>>>>>>>>>>>> KEDUA
- # Fungsi untuk membangun model CNN
- def build_model():
- model = Sequential([
- Conv2D(32, (3, 3), activation='relu', input_shape=(64, 64, 3)), # Lapisan konvolusi pertama
- MaxPooling2D((2, 2)), # Lapisan max pooling pertama
- Conv2D(64, (3, 3), activation='relu'), # Lapisan konvolusi kedua
- MaxPooling2D((2, 2)), # Lapisan max pooling kedua
- Conv2D(128, (3, 3), activation='relu'), # Lapisan konvolusi ketiga
- MaxPooling2D((2, 2)), # Lapisan max pooling ketiga
- Flatten(), # Lapisan flatten
- Dense(128, activation='relu'), # Lapisan fully connected
- Dense(len(lb.classes_), activation='softmax') # Lapisan output dengan aktivasi softmax
- ])
- model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) # Compile model
- return model
- # Melatih dan mengevaluasi model pada gambar asli
- model_original = build_model()
- history_original = model_original.fit(X_train, y_train, epochs=20, validation_data=(X_test, y_test)) # Melatih model
- loss_original, accuracy_original = model_original.evaluate(X_test, y_test) # Mengevaluasi model pada set pengujian
- # Melatih dan mengevaluasi model pada gambar hasil ekstraksi warna kulit
- model_skin = build_model()
- history_skin = model_skin.fit(X_train_skin, y_train_skin, epochs=20, validation_data=(X_test_skin, y_test_skin)) # Melatih model
- loss_skin, accuracy_skin = model_skin.evaluate(X_test_skin, y_test_skin) # Mengevaluasi model pada set pengujian
- # Mencetak akurasi
- print(f"Akurasi pada Gambar Asli: {accuracy_original * 100:.2f}%")
- print(f"Akurasi pada Gambar Hasil Ekstraksi Warna Kulit: {accuracy_skin * 100:.2f}%")
- >>>>>>>>>>>>>>>>>>>>>>>>>>>> KETIGA
- # Plot sejarah pelatihan untuk gambar asli
- plt.plot(history_original.history['accuracy'], label='Akurasi Pelatihan Gambar Asli')
- plt.plot(history_original.history['val_accuracy'], label='Akurasi Validasi Gambar Asli')
- # Plot sejarah pelatihan untuk gambar hasil ekstraksi warna kulit
- plt.plot(history_skin.history['accuracy'], label='Akurasi Pelatihan Gambar Ekstraksi Warna Kulit')
- plt.plot(history_skin.history['val_accuracy'], label='Akurasi Validasi Gambar Ekstraksi Warna Kulit')
- # Menambahkan detail plot
- plt.xlabel('Epoch')
- plt.ylabel('Akurasi')
- plt.ylim([0, 1])
- plt.title('Perbandingan Akurasi Pelatihan dan Validasi')
- plt.legend(loc='lower right')
- plt.grid(True)
- plt.show()
- >>>>>>>>>>>>>>>>>>>>>>>>>>>> KEEMPAT
- # Menampilkan beberapa gambar asli, proses, dan hasil ekstraksi warna kulit dari huruf A-Z
- def show_images(original, processed, skin, labels):
- unique_labels = sorted(set(lb.inverse_transform(labels))) # Get unique labels from the original label encoder
- for label in unique_labels:
- label_indices = [i for i, l in enumerate(lb.inverse_transform(labels)) if l == label]
- plt.figure(figsize=(10, 5))
- plt.suptitle(f'Label: {label}', fontsize=16)
- for i, idx in enumerate(label_indices[:5]): # Menampilkan 5 gambar sebagai contoh
- # Gambar asli
- plt.subplot(3, 5, i + 1)
- plt.imshow(original[idx])
- plt.title("Asli")
- plt.axis('off')
- # Gambar proses
- plt.subplot(3, 5, i + 6)
- plt.imshow(processed[idx])
- plt.title("Proses")
- plt.axis('off')
- # Gambar hasil ekstraksi warna kulit
- plt.subplot(3, 5, i + 11)
- plt.imshow(skin[idx])
- plt.title("Hasil Ekstraksi")
- plt.axis('off')
- plt.tight_layout(rect=[0, 0, 1, 0.96])
- plt.show()
- # Menampilkan gambar dari setiap label
- show_images(images, skin_images, skin_images, labels)
Add Comment
Please, Sign In to add comment