last63

CNN

Jul 23rd, 2024
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.64 KB | None | 0 0
  1. >>>>>>>>>>>>>>>>>>>>>>>>>>>> PERTAMA
  2. # Install library yang diperlukan
  3. !pip install tensorflow opencv-python
  4.  
  5. # Import library yang diperlukan
  6. import tensorflow as tf
  7. from tensorflow.keras.models import Sequential
  8. from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
  9. import cv2
  10. import numpy as np
  11. import os
  12. from sklearn.model_selection import train_test_split
  13. from sklearn.preprocessing import LabelBinarizer
  14. from matplotlib import pyplot as plt
  15. from google.colab import drive
  16.  
  17. # Mount Google Drive
  18. drive.mount('/content/drive')
  19.  
  20. # Fungsi untuk memuat gambar dan label dari Google Drive
  21. def load_data(data_dir):
  22. images = []
  23. labels = []
  24. for label in os.listdir(data_dir):
  25. class_dir = os.path.join(data_dir, label)
  26. if os.path.isdir(class_dir): # Memeriksa apakah ini direktori
  27. for img_name in os.listdir(class_dir):
  28. img_path = os.path.join(class_dir, img_name)
  29. image = cv2.imread(img_path) # Membaca gambar
  30. image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # Mengonversi BGR ke RGB
  31. image = cv2.resize(image, (64, 64)) # Mengubah ukuran gambar menjadi 64x64 piksel
  32. images.append(image) # Menambahkan gambar ke daftar
  33. labels.append(label) # Menambahkan label ke daftar
  34. return np.array(images), np.array(labels) # Mengembalikan array gambar dan label
  35.  
  36. # Fungsi untuk mengekstraksi warna kulit dari gambar
  37. def extract_skin(image):
  38. # Mengonversi gambar ke ruang warna YCrCb
  39. ycrcb = cv2.cvtColor(image, cv2.COLOR_RGB2YCrCb)
  40. # Mendefinisikan rentang warna kulit di YCrCb
  41. lower = np.array([0, 133, 77], dtype=np.uint8)
  42. upper = np.array([255, 173, 127], dtype=np.uint8)
  43. # Membuat mask
  44. mask = cv2.inRange(ycrcb, lower, upper)
  45. # Menerapkan mask ke gambar asli
  46. skin = cv2.bitwise_and(image, image, mask=mask)
  47. return skin
  48.  
  49. # Memuat data dari Google Drive
  50. data_dir = '/content/drive/MyDrive/SIBI_data'
  51. images, labels = load_data(data_dir) # Memanggil fungsi untuk memuat gambar dan label
  52.  
  53. # Menerapkan ekstraksi warna kulit ke semua gambar
  54. skin_images = np.array([extract_skin(image) for image in images])
  55.  
  56. # Praprocessing: normalisasi nilai piksel
  57. images = images / 255.0 # Normalisasi nilai piksel gambar asli ke rentang [0, 1]
  58. skin_images = skin_images / 255.0 # Normalisasi nilai piksel gambar hasil ekstraksi warna kulit ke rentang [0, 1]
  59.  
  60. # Encode label
  61. lb = LabelBinarizer()
  62. labels = lb.fit_transform(labels) # Mengonversi label ke one-hot encoding
  63.  
  64. # Membagi data menjadi set pelatihan dan pengujian
  65. X_train, X_test, y_train, y_test = train_test_split(images, labels, test_size=0.2, random_state=42) # Membagi data asli
  66. 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
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
  77. >>>>>>>>>>>>>>>>>>>>>>>>>>>> KEDUA
  78. # Fungsi untuk membangun model CNN
  79. def build_model():
  80. model = Sequential([
  81. Conv2D(32, (3, 3), activation='relu', input_shape=(64, 64, 3)), # Lapisan konvolusi pertama
  82. MaxPooling2D((2, 2)), # Lapisan max pooling pertama
  83. Conv2D(64, (3, 3), activation='relu'), # Lapisan konvolusi kedua
  84. MaxPooling2D((2, 2)), # Lapisan max pooling kedua
  85. Conv2D(128, (3, 3), activation='relu'), # Lapisan konvolusi ketiga
  86. MaxPooling2D((2, 2)), # Lapisan max pooling ketiga
  87. Flatten(), # Lapisan flatten
  88. Dense(128, activation='relu'), # Lapisan fully connected
  89. Dense(len(lb.classes_), activation='softmax') # Lapisan output dengan aktivasi softmax
  90. ])
  91. model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) # Compile model
  92. return model
  93.  
  94. # Melatih dan mengevaluasi model pada gambar asli
  95. model_original = build_model()
  96. history_original = model_original.fit(X_train, y_train, epochs=20, validation_data=(X_test, y_test)) # Melatih model
  97. loss_original, accuracy_original = model_original.evaluate(X_test, y_test) # Mengevaluasi model pada set pengujian
  98.  
  99. # Melatih dan mengevaluasi model pada gambar hasil ekstraksi warna kulit
  100. model_skin = build_model()
  101. history_skin = model_skin.fit(X_train_skin, y_train_skin, epochs=20, validation_data=(X_test_skin, y_test_skin)) # Melatih model
  102. loss_skin, accuracy_skin = model_skin.evaluate(X_test_skin, y_test_skin) # Mengevaluasi model pada set pengujian
  103.  
  104. # Mencetak akurasi
  105. print(f"Akurasi pada Gambar Asli: {accuracy_original * 100:.2f}%")
  106. print(f"Akurasi pada Gambar Hasil Ekstraksi Warna Kulit: {accuracy_skin * 100:.2f}%")
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117. >>>>>>>>>>>>>>>>>>>>>>>>>>>> KETIGA
  118. # Plot sejarah pelatihan untuk gambar asli
  119. plt.plot(history_original.history['accuracy'], label='Akurasi Pelatihan Gambar Asli')
  120. plt.plot(history_original.history['val_accuracy'], label='Akurasi Validasi Gambar Asli')
  121.  
  122. # Plot sejarah pelatihan untuk gambar hasil ekstraksi warna kulit
  123. plt.plot(history_skin.history['accuracy'], label='Akurasi Pelatihan Gambar Ekstraksi Warna Kulit')
  124. plt.plot(history_skin.history['val_accuracy'], label='Akurasi Validasi Gambar Ekstraksi Warna Kulit')
  125.  
  126. # Menambahkan detail plot
  127. plt.xlabel('Epoch')
  128. plt.ylabel('Akurasi')
  129. plt.ylim([0, 1])
  130. plt.title('Perbandingan Akurasi Pelatihan dan Validasi')
  131. plt.legend(loc='lower right')
  132. plt.grid(True)
  133. plt.show()
  134.  
  135.  
  136.  
  137.  
  138.  
  139.  
  140.  
  141.  
  142.  
  143.  
  144. >>>>>>>>>>>>>>>>>>>>>>>>>>>> KEEMPAT
  145. # Menampilkan beberapa gambar asli, proses, dan hasil ekstraksi warna kulit dari huruf A-Z
  146. def show_images(original, processed, skin, labels):
  147. unique_labels = sorted(set(lb.inverse_transform(labels))) # Get unique labels from the original label encoder
  148. for label in unique_labels:
  149. label_indices = [i for i, l in enumerate(lb.inverse_transform(labels)) if l == label]
  150. plt.figure(figsize=(10, 5))
  151. plt.suptitle(f'Label: {label}', fontsize=16)
  152. for i, idx in enumerate(label_indices[:5]): # Menampilkan 5 gambar sebagai contoh
  153. # Gambar asli
  154. plt.subplot(3, 5, i + 1)
  155. plt.imshow(original[idx])
  156. plt.title("Asli")
  157. plt.axis('off')
  158.  
  159. # Gambar proses
  160. plt.subplot(3, 5, i + 6)
  161. plt.imshow(processed[idx])
  162. plt.title("Proses")
  163. plt.axis('off')
  164.  
  165. # Gambar hasil ekstraksi warna kulit
  166. plt.subplot(3, 5, i + 11)
  167. plt.imshow(skin[idx])
  168. plt.title("Hasil Ekstraksi")
  169. plt.axis('off')
  170.  
  171. plt.tight_layout(rect=[0, 0, 1, 0.96])
  172. plt.show()
  173.  
  174. # Menampilkan gambar dari setiap label
  175. show_images(images, skin_images, skin_images, labels)
Add Comment
Please, Sign In to add comment