Rifatsyq/Computer_Vision
0
1import streamlit as st
2import os
3import cv2
4import matplotlib.pyplot as plt
5import tensorflow as tf
6
7def run():
8
9 # Set path ke folder dataset
10 data_dir = 'dataset/dataset/train'
11
12 # Title
13 st.title('Computer Vision-Based Vehicle Recognition')
14
15 # sub header
16 st.subheader('1. Exploratory Data Analyst (EDA)')
17
18 # EDA pertama
19 st.write('### A. Berapa jumlah data dari setiap kelas di data test?')
20
21 # Ambil daftar kelas (subfolder)
22 classes = sorted(os.listdir(data_dir))
23
24 # Hitung jumlah gambar per kelas
25 class_counts = {cls: len(os.listdir(os.path.join(data_dir, cls))) for cls in classes}
26
27 # Plot pakai matplotlib
28 fig, ax = plt.subplots()
29 ax.bar(class_counts.keys(), class_counts.values(), color='skyblue')
30 ax.set_title("Distribusi Jumlah Gambar per Kelas")
31 ax.set_xlabel("Kelas")
32 ax.set_ylabel("Jumlah Gambar")
33 ax.grid(axis='y', linestyle='--', alpha=0.5)
34
35 # Tampilkan plot di Streamlit
36 st.pyplot(fig)
37
38 # conclusion 1 EDA
39 st.write('Dari bar barchart diatas kita bisa melihat bahwa terdapat perbedaan jumlah data dari setiap kelas di data test, tetapi menurut saya perbedaan ini masih tergolong tidak ektrim sehingga tidak akan terlalu berpengaruh dengan model kita nanti')
40
41 #Membuat garis pemisah
42 st.markdown("---")
43
44 # EDA kedua
45 st.write('### B. Apakah bentuk yang dimiliki setiap kelas unik/berbeda satu sama lain?')
46
47 # Membuat fungsi untuk edge detection
48 def show_edge_examples(data_dir, classes, n_images=3):
49 fig, axs = plt.subplots(len(classes), n_images, figsize=(n_images * 3, len(classes) * 3))
50
51 for i, cls in enumerate(classes):
52 cls_path = os.path.join(data_dir, cls)
53 img_files = os.listdir(cls_path)[:n_images]
54
55 for j, img_file in enumerate(img_files):
56 img_path = os.path.join(cls_path, img_file)
57 img = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)
58
59 if img is None:
60 continue # skip jika gagal load gambar
61
62 img = cv2.resize(img, (224, 224))
63 edges = cv2.Canny(img, 100, 200)
64
65 axs[i, j].imshow(edges, cmap='gray')
66 axs[i, j].axis('off')
67 if j == 0:
68 axs[i, j].set_ylabel(cls, fontsize=14)
69
70 plt.suptitle("Edge Detection untuk Setiap Kelas", fontsize=16)
71 plt.tight_layout()
72 st.pyplot(fig)
73
74 # menampilkan hasil EDA kedua
75 show_edge_examples(data_dir, classes, n_images=3)
76
77 # conclusion EDA 2
78 st.write('Dari hasil sillhoutte diatas kita bisa melihat perbedaan bentuk yang dimiliki oleh setiap kelas berbeda satu sama lain, hal ini akan membantu model membedakan setiap kelas. Dan masing-masing kelas juga memiliki angle yang berbeda sehingga meningkatkan variasi data yang kita miliki untuk nantinya dipelajari oleh model yang akan kita buat')
79
80if __name__ == '__main__':
81 run()