last63

colabs

Aug 6th, 2024
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.68 KB | None | 0 0
  1. import os # Untuk operasi sistem seperti mengakses direktori
  2. import cv2 # OpenCV untuk pemrosesan gambar
  3. import numpy as np # Numpy untuk operasi array
  4. import matplotlib.pyplot as plt # Matplotlib untuk visualisasi
  5. import seaborn as sns # Seaborn untuk visualisasi grafik yang lebih menarik
  6. from sklearn import svm # SVM dari Scikit-Learn untuk klasifikasi
  7. from sklearn.metrics import classification_report, accuracy_score, confusion_matrix # Untuk evaluasi model
  8. from sklearn.model_selection import train_test_split # Untuk membagi data menjadi set pelatihan dan pengujian
  9. from sklearn.preprocessing import LabelEncoder # Untuk encoding label
  10.  
  11. # Fungsi untuk memuat data gambar
  12. def load_data(data_dir):
  13. labels = [] # Untuk menyimpan label
  14. images = [] # Untuk menyimpan gambar
  15. file_counts = {} # Untuk menyimpan jumlah file yang cocok per label
  16. for label in os.listdir(data_dir): # Iterasi melalui setiap folder (A-Z)
  17. label_dir = os.path.join(data_dir, label) # Path ke folder label
  18. if os.path.isdir(label_dir): # Memastikan bahwa itu adalah direktori
  19. count = 0 # Menghitung file dalam setiap folder
  20. for file in os.listdir(label_dir): # Iterasi melalui setiap file dalam folder
  21. file_path = os.path.join(label_dir, file) # Path ke file gambar
  22. image = cv2.imread(file_path, cv2.IMREAD_COLOR) # Membaca gambar dalam warna
  23. if image is not None: # Memastikan gambar berhasil dimuat
  24. image = cv2.resize(image, (128, 128)) # Mengubah ukuran gambar menjadi 128x128 piksel
  25. images.append(image) # Menyimpan gambar
  26. labels.append(label) # Menyimpan label
  27. count += 1 # Menambah jumlah file yang cocok
  28. file_counts[label] = count # Menyimpan jumlah file yang cocok untuk setiap label
  29. return np.array(images), np.array(labels), file_counts # Mengembalikan gambar, label, dan jumlah file
  30.  
  31. # Fungsi untuk menampilkan gambar asli dan hasil pengolahan citra
  32. def plot_comparison(images, processed_images, labels, num_samples=5):
  33. unique_labels = np.unique(labels) # Mendapatkan label unik
  34. for label in unique_labels: # Iterasi melalui setiap label unik
  35. indices = np.where(labels == label)[0][:num_samples] # Mendapatkan beberapa sampel untuk setiap label
  36. if len(indices) > 0:
  37. plt.figure(figsize=(15, 5)) # Ukuran plot
  38. for i, idx in enumerate(indices):
  39. # Menampilkan gambar asli
  40. plt.subplot(2, num_samples, i + 1)
  41. plt.imshow(cv2.cvtColor(images[idx], cv2.COLOR_BGR2RGB))
  42. plt.title(f"Original {label}")
  43. plt.axis('off')
  44.  
  45. # Menampilkan gambar hasil pengolahan
  46. plt.subplot(2, num_samples, i + 1 + num_samples)
  47. plt.imshow(processed_images[idx], cmap='gray')
  48. plt.title(f"Processed {label}")
  49. plt.axis('off')
  50. plt.show() # Menampilkan plot
  51.  
  52. # Fungsi untuk memproses gambar menggunakan GLCM
  53. def process_images_glcm(images):
  54. processed_images = [] # Untuk menyimpan gambar hasil pengolahan
  55. features = [] # Untuk menyimpan fitur yang diekstrak
  56. for image in images:
  57. gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # Konversi gambar ke skala abu-abu
  58. glcm = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8)).apply(gray_image) # Menerapkan CLAHE untuk meningkatkan kontras
  59. processed_images.append(glcm) # Menyimpan gambar hasil pengolahan
  60. stats = cv2.calcHist([glcm], [0], None, [256], [0, 256]) # Menghitung histogram dari gambar hasil pengolahan
  61. features.append(stats.flatten()) # Menyimpan fitur yang diekstrak
  62. return np.array(processed_images), np.array(features) # Mengembalikan gambar hasil pengolahan dan fitur
  63.  
  64. # Memuat data
  65. data_dir = '/content/drive/My Drive/SIBI_data' # Ubah ini sesuai dengan direktori data Anda
  66. images, labels, file_counts = load_data(data_dir) # Memuat gambar, label, dan jumlah file yang cocok
  67.  
  68. # Memproses gambar menggunakan GLCM
  69. processed_images, features = process_images_glcm(images) # Memproses gambar dan mengekstrak fitur
  70.  
  71. # Encode label
  72. le = LabelEncoder() # Inisialisasi encoder
  73. encoded_labels = le.fit_transform(labels) # Encode label menjadi numerik
  74.  
  75. # Membagi data
  76. X_train, X_test, y_train, y_test = train_test_split(features, encoded_labels, test_size=0.2, random_state=42) # Membagi data
  77.  
  78. # Melatih model SVM
  79. clf = svm.SVC(kernel='linear') # Inisialisasi model SVM dengan kernel linear
  80. clf.fit(X_train, y_train) # Melatih model
  81.  
  82. # Memprediksi
  83. y_pred = clf.predict(X_test) # Memprediksi data uji
  84.  
  85. # Mencetak Classification Report
  86. print("Classification Report:")
  87. print(classification_report(y_test, y_pred, target_names=le.classes_, zero_division=0)) # Mencetak laporan klasifikasi
  88.  
  89. # Mencetak Akurasi
  90. print("Akurasi:", accuracy_score(y_test, y_pred)) # Mencetak akurasi model
  91.  
  92. # Mencetak jumlah file yang cocok untuk setiap folder
  93. print("Jumlah file/data yang cocok untuk setiap folder:")
  94. for label, count in file_counts.items(): # Iterasi melalui setiap label dan jumlah file yang cocok
  95. print(f"{label}: {count} file") # Mencetak label dan jumlah file yang cocok
  96.  
  97. # Menampilkan Confusion Matrix
  98. def plot_confusion_matrix(y_true, y_pred):
  99. cm = confusion_matrix(y_true, y_pred) # Membuat confusion matrix
  100. plt.figure(figsize=(10, 7)) # Ukuran plot
  101. sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=le.classes_, yticklabels=le.classes_) # Membuat heatmap
  102. plt.xlabel('Predicted') # Label sumbu x
  103. plt.ylabel('Actual') # Label sumbu y
  104. plt.title('Confusion Matrix') # Judul plot
  105. plt.show() # Menampilkan plot
  106.  
  107. plot_confusion_matrix(y_test, y_pred) # Menampilkan confusion matrix
  108.  
  109. # Menampilkan beberapa gambar asli dan hasil pengolahan citra
  110. plot_comparison(images, processed_images, labels, num_samples=5) # Menampilkan perbandingan gambar asli dan hasil pengolahan
  111.  
  112. # Menghitung akurasi per folder
  113. folder_accuracies = {}
  114. for label in np.unique(y_test):
  115. indices = np.where(y_test == label)
  116. folder_accuracy = accuracy_score(y_test[indices], y_pred[indices])
  117. folder_accuracies[le.inverse_transform([label])[0]] = folder_accuracy
  118.  
  119.  
  120. # Menampilkan akurasi per folder dalam bentuk grafik
  121. plt.figure(figsize=(10, 6))
  122. plt.bar(folder_accuracies.keys(), folder_accuracies.values())
  123. plt.xlabel('Folder')
  124. plt.ylabel('Akurasi')
  125. plt.title('Akurasi per Folder')
  126. plt.xticks(rotation=90)
  127. plt.show()
  128.  
  129. # Menampilkan akurasi keseluruhan
  130. overall_accuracy = accuracy_score(y_test, y_pred)
  131. print("Akurasi Keseluruhan:", overall_accuracy)
Tags: tes
Add Comment
Please, Sign In to add comment