Wilsonnnnn30 commited on
Commit
b23590e
·
verified ·
1 Parent(s): 242754f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +130 -128
app.py CHANGED
@@ -1,128 +1,130 @@
1
- import gradio as gr
2
- import tensorflow as tf
3
- import numpy as np
4
- from PIL import Image
5
- import json
6
- import os
7
-
8
- try:
9
- model = tf.keras.models.load_model(
10
- "model_Final.keras",
11
- custom_objects={
12
- "preprocess_input": tf.keras.applications.resnet50.preprocess_input
13
- }
14
- )
15
- with open('labels.json', 'r') as f:
16
- class_label = json.load(f)
17
- except Exception as e:
18
- print(f"Error loading model/labels: {e}")
19
- class_label = ["plastic", "paper", "metal", "organic", "trash"]
20
-
21
- deskripsi_sampah = {
22
- "E-waste": {
23
- "deskripsi": "Sampah elektronik berbahaya. Jangan buang di tempat sampah biasa. Bawa ke drop box e-waste.",
24
- "tong_warna": "Merah (B3)",
25
- "dapat_didaur_ulang": "Ya, melalui fasilitas khusus B3",
26
- "dampak_jika_tidak_diolah": "Pelepasan zat beracun (merkuri, timbal, kadmium) ke tanah dan air. Zat ini mencemari rantai makanan dan sangat berbahaya bagi kesehatan manusia. (Referensi: UNEP/Basel Convention)"
27
- },
28
- "Glass": {
29
- "deskripsi": "Kaca bisa didaur ulang tanpa batas. Pastikan tidak pecah saat dibuang agar aman bagi petugas.",
30
- "tong_warna": "Kuning (Anorganik)",
31
- "dapat_didaur_ulang": "Ya",
32
- "dampak_jika_tidak_diolah": "Tidak terurai (inert) dan memenuhi TPA. Pecahan kaca dapat melukai hewan dan petugas, serta berpotensi menyebabkan kebakaran karena efek lensa. (Referensi: Ilmu Lingkungan Material)"
33
- },
34
- "Organic Waste": {
35
- "deskripsi": "Sampah organik (sisa makanan/daun). Bagus untuk dijadikan kompos.",
36
- "tong_warna": "Hijau (Organik)",
37
- "dapat_didaur_ulang": "Ya (Diolah menjadi kompos)",
38
- "dampak_jika_tidak_diolah": "Dalam TPA, penguraian anaerobik menghasilkan gas **metana ($CH_4$)**, yaitu gas rumah kaca yang 25 kali lebih kuat dari karbon dioksida ($CO_2$) dalam memerangkap panas. (Referensi: IPCC/Lembaga Penelitian Lingkungan)"
39
- },
40
- "Textiles": {
41
- "deskripsi": "Limbah tekstil seperti baju bekas. Bisa disumbangkan atau didaur ulang menjadi kain lap.",
42
- "tong_warna": "Kuning (Anorganik)",
43
- "dapat_didaur_ulang": "Ya (Didaur ulang/Digunakan kembali)",
44
- "dampak_jika_tidak_diolah": "Membutuhkan lahan TPA yang besar. Tekstil modern melepaskan **serat mikroplastik** saat terurai di lingkungan dan membutuhkan waktu puluhan hingga ratusan tahun. (Referensi: Studi Limbah Tekstil/Microplastic Research)"
45
- },
46
- "cardboard": {
47
- "deskripsi": "Kardus/Karton. Lipat hingga pipih sebelum dibuang untuk menghemat ruang. Bisa didaur ulang menjadi kertas.",
48
- "tong_warna": "Biru (Kertas)",
49
- "dapat_didaur_ulang": "Ya",
50
- "dampak_jika_tidak_diolah": "Memenuhi TPA dan penguraiannya di TPA juga dapat menghasilkan metana jika basah. Daur ulang kardus menghemat energi dan mengurangi penebangan pohon. (Referensi: WWF/Pusat Daur Ulang Kertas)"
51
- },
52
- "metal": {
53
- "deskripsi": "Logam/Kaleng. Cuci bersih sisa makanan sebelum dibuang ke tempat daur ulang.",
54
- "tong_warna": "Kuning (Anorganik)",
55
- "dapat_didaur_ulang": "Ya",
56
- "dampak_jika_tidak_diolah": "Logam membutuhkan waktu ratusan tahun untuk terurai. Logam yang berkarat dapat mencemari air tanah dan memerlukan ekstraksi sumber daya alam (penambangan) yang intensif energi. (Referensi: US Geological Survey/Ilmu Material)"
57
- },
58
- "paper": {
59
- "deskripsi": "Kertas. Pastikan kering dan tidak berminyak agar bisa didaur ulang.",
60
- "tong_warna": "Biru (Kertas)",
61
- "dapat_didaur_ulang": "Ya",
62
- "dampak_jika_tidak_diolah": "Menyumbang volume besar di TPA. Kegagalan mendaur ulang berarti peningkatan permintaan kayu dan energi untuk memproduksi kertas baru. (Referensi: Studi Konservasi Energi dan Sumber Daya Alam)"
63
- },
64
- "plastic": {
65
- "deskripsi": "Plastik butuh waktu lama terurai. Pisahkan botol dan gelas plastik untuk didaur ulang.",
66
- "tong_warna": "Kuning (Anorganik)",
67
- "dapat_didaur_ulang": "Ya",
68
- "dampak_jika_tidak_diolah": "Membutuhkan ratusan hingga ribuan tahun untuk terurai, mencemari lautan, dan terpecah menjadi **mikroplastik** yang masuk ke rantai makanan dan ekosistem. (Referensi: Jurnal Ilmu Kelautan/Plastics Pollution Coalition)"
69
- },
70
- "shoes": {
71
- "deskripsi": "Sepatu bekas. Jika masih layak pakai, sebaiknya didonasikan.",
72
- "tong_warna": "Kuning (Anorganik)",
73
- "dapat_didaur_ulang": "Ya (Digunakan kembali/Daur ulang terbatas)",
74
- "dampak_jika_tidak_diolah": "Terbuat dari material campuran kompleks (karet, kulit, plastik, busa) yang hampir mustahil terurai secara alami, sehingga menumpuk di TPA. (Referensi: Analisis Material Limbah Kompleks)"
75
- },
76
- "trash": {
77
- "deskripsi": "Sampah residu atau lainnya yang sulit didaur ulang. Buang ke tempat sampah umum.",
78
- "tong_warna": "Abu-abu (Residu)",
79
- "dapat_didaur_ulang": "Tidak",
80
- "dampak_jika_tidak_diolah": "Menyebabkan penumpukan di TPA, memerlukan lahan yang terus bertambah, dan menjadi sumber bau tidak sedap, serta lindi (air sampah) yang mencemari lingkungan. (Referensi: Pedoman Pengelolaan TPA)"
81
- }
82
- }
83
-
84
- def predict_input(img):
85
- img = img.resize((224, 224))
86
- img = np.array(img)
87
- img = np.expand_dims(img, axis=0)
88
- img = tf.keras.applications.resnet50.preprocess_input(img)
89
-
90
- pred = model.predict(img)[0]
91
- idx = np.argmax(pred)
92
- hasil_label = class_label[idx]
93
-
94
- info = deskripsi_sampah.get(hasil_label)
95
-
96
- if info:
97
- deskripsi_markdown = f"""
98
- ### Hasil Deteksi: **{hasil_label}**
99
-
100
- * **📄 Deskripsi:** {info['deskripsi']}
101
- * **🗑️ Buang Pada Tong Sampah:** {info['tong_warna']}
102
- * **♻️ Dapat Didaur Ulang:** {info['dapat_didaur_ulang']}
103
-
104
- ---
105
- #### ⚠️ Dampak Jika Tidak Diolah:
106
- {info['dampak_jika_tidak_diolah']}
107
- """
108
- else:
109
- deskripsi_markdown = f"### {hasil_label}\ninformasi detail untuk kategori ini belum tersedia."
110
-
111
- return {class_label[i]: float(pred[i]) for i in range(len(class_label))}, deskripsi_markdown
112
-
113
-
114
-
115
- demo = gr.Interface(
116
- fn=predict_input,
117
- inputs=gr.Image(type="pil"),
118
- outputs=[
119
- gr.Label(num_top_classes=3, label="Prediksi Kategori"),
120
- gr.Markdown(label="Saran Pengolahan")
121
- ],
122
- title="Klasifikasi Sampah & Saran Pengolahan",
123
- description="Unggah foto sampah untuk mengetahui jenisnya dan cara mengolahnya",
124
- )
125
-
126
- if __name__ == "__main__":
127
- port = int(os.environ.get("PORT", 8000))
128
- demo.launch(server_name="0.0.0.0", server_port=port)
 
 
 
1
+ import gradio as gr
2
+ import tensorflow as tf
3
+ import numpy as np
4
+ from PIL import Image
5
+ import json
6
+ import os
7
+
8
+ try:
9
+ model = tf.keras.models.load_model(
10
+ "model_Final.keras",
11
+ custom_objects={
12
+ "preprocess_input": tf.keras.applications.resnet50.preprocess_input
13
+ }
14
+ )
15
+ with open('labels.json', 'r') as f:
16
+ class_label = json.load(f)
17
+ except Exception as e:
18
+ print(f"Error loading model/labels: {e}")
19
+ class_label = ["plastic", "paper", "metal", "organic", "trash"]
20
+
21
+ deskripsi_sampah = {
22
+ "E-waste": {
23
+ "deskripsi": "Sampah elektronik berbahaya. Jangan buang di tempat sampah biasa. Bawa ke drop box e-waste.",
24
+ "tong_warna": "Merah (B3)",
25
+ "dapat_didaur_ulang": "Ya, melalui fasilitas khusus B3",
26
+ "dampak_jika_tidak_diolah": "Pelepasan zat beracun (merkuri, timbal, kadmium) ke tanah dan air. Zat ini mencemari rantai makanan dan sangat berbahaya bagi kesehatan manusia. (Referensi: UNEP/Basel Convention)"
27
+ },
28
+ "Glass": {
29
+ "deskripsi": "Kaca bisa didaur ulang tanpa batas. Pastikan tidak pecah saat dibuang agar aman bagi petugas.",
30
+ "tong_warna": "Kuning (Anorganik)",
31
+ "dapat_didaur_ulang": "Ya",
32
+ "dampak_jika_tidak_diolah": "Tidak terurai (inert) dan memenuhi TPA. Pecahan kaca dapat melukai hewan dan petugas, serta berpotensi menyebabkan kebakaran karena efek lensa. (Referensi: Ilmu Lingkungan Material)"
33
+ },
34
+ "Organic Waste": {
35
+ "deskripsi": "Sampah organik (sisa makanan/daun). Bagus untuk dijadikan kompos.",
36
+ "tong_warna": "Hijau (Organik)",
37
+ "dapat_didaur_ulang": "Ya (Diolah menjadi kompos)",
38
+ "dampak_jika_tidak_diolah": "Dalam TPA, penguraian anaerobik menghasilkan gas **metana ($CH_4$)**, yaitu gas rumah kaca yang 25 kali lebih kuat dari karbon dioksida ($CO_2$) dalam memerangkap panas. (Referensi: IPCC/Lembaga Penelitian Lingkungan)"
39
+ },
40
+ "Textiles": {
41
+ "deskripsi": "Limbah tekstil seperti baju bekas. Bisa disumbangkan atau didaur ulang menjadi kain lap.",
42
+ "tong_warna": "Kuning (Anorganik)",
43
+ "dapat_didaur_ulang": "Ya (Didaur ulang/Digunakan kembali)",
44
+ "dampak_jika_tidak_diolah": "Membutuhkan lahan TPA yang besar. Tekstil modern melepaskan **serat mikroplastik** saat terurai di lingkungan dan membutuhkan waktu puluhan hingga ratusan tahun. (Referensi: Studi Limbah Tekstil/Microplastic Research)"
45
+ },
46
+ "cardboard": {
47
+ "deskripsi": "Kardus/Karton. Lipat hingga pipih sebelum dibuang untuk menghemat ruang. Bisa didaur ulang menjadi kertas.",
48
+ "tong_warna": "Biru (Kertas)",
49
+ "dapat_didaur_ulang": "Ya",
50
+ "dampak_jika_tidak_diolah": "Memenuhi TPA dan penguraiannya di TPA juga dapat menghasilkan metana jika basah. Daur ulang kardus menghemat energi dan mengurangi penebangan pohon. (Referensi: WWF/Pusat Daur Ulang Kertas)"
51
+ },
52
+ "metal": {
53
+ "deskripsi": "Logam/Kaleng. Cuci bersih sisa makanan sebelum dibuang ke tempat daur ulang.",
54
+ "tong_warna": "Kuning (Anorganik)",
55
+ "dapat_didaur_ulang": "Ya",
56
+ "dampak_jika_tidak_diolah": "Logam membutuhkan waktu ratusan tahun untuk terurai. Logam yang berkarat dapat mencemari air tanah dan memerlukan ekstraksi sumber daya alam (penambangan) yang intensif energi. (Referensi: US Geological Survey/Ilmu Material)"
57
+ },
58
+ "paper": {
59
+ "deskripsi": "Kertas. Pastikan kering dan tidak berminyak agar bisa didaur ulang.",
60
+ "tong_warna": "Biru (Kertas)",
61
+ "dapat_didaur_ulang": "Ya",
62
+ "dampak_jika_tidak_diolah": "Menyumbang volume besar di TPA. Kegagalan mendaur ulang berarti peningkatan permintaan kayu dan energi untuk memproduksi kertas baru. (Referensi: Studi Konservasi Energi dan Sumber Daya Alam)"
63
+ },
64
+ "plastic": {
65
+ "deskripsi": "Plastik butuh waktu lama terurai. Pisahkan botol dan gelas plastik untuk didaur ulang.",
66
+ "tong_warna": "Kuning (Anorganik)",
67
+ "dapat_didaur_ulang": "Ya",
68
+ "dampak_jika_tidak_diolah": "Membutuhkan ratusan hingga ribuan tahun untuk terurai, mencemari lautan, dan terpecah menjadi **mikroplastik** yang masuk ke rantai makanan dan ekosistem. (Referensi: Jurnal Ilmu Kelautan/Plastics Pollution Coalition)"
69
+ },
70
+ "shoes": {
71
+ "deskripsi": "Sepatu bekas. Jika masih layak pakai, sebaiknya didonasikan.",
72
+ "tong_warna": "Kuning (Anorganik)",
73
+ "dapat_didaur_ulang": "Ya (Digunakan kembali/Daur ulang terbatas)",
74
+ "dampak_jika_tidak_diolah": "Terbuat dari material campuran kompleks (karet, kulit, plastik, busa) yang hampir mustahil terurai secara alami, sehingga menumpuk di TPA. (Referensi: Analisis Material Limbah Kompleks)"
75
+ },
76
+ "trash": {
77
+ "deskripsi": "Sampah residu atau lainnya yang sulit didaur ulang. Buang ke tempat sampah umum.",
78
+ "tong_warna": "Abu-abu (Residu)",
79
+ "dapat_didaur_ulang": "Tidak",
80
+ "dampak_jika_tidak_diolah": "Menyebabkan penumpukan di TPA, memerlukan lahan yang terus bertambah, dan menjadi sumber bau tidak sedap, serta lindi (air sampah) yang mencemari lingkungan. (Referensi: Pedoman Pengelolaan TPA)"
81
+ }
82
+ }
83
+
84
+ def predict_input(img):
85
+ img = img.resize((224, 224))
86
+ img = np.array(img)
87
+ img = np.expand_dims(img, axis=0)
88
+ img = tf.keras.applications.resnet50.preprocess_input(img)
89
+
90
+ pred = model.predict(img)[0]
91
+ idx = np.argmax(pred)
92
+ hasil_label = class_label[idx]
93
+
94
+ info = deskripsi_sampah.get(hasil_label)
95
+
96
+ if info:
97
+ deskripsi_markdown = f"""
98
+ ### Hasil Deteksi: **{hasil_label}**
99
+
100
+ * **📄 Deskripsi:** {info['deskripsi']}
101
+ * **🗑️ Buang Pada Tong Sampah:** {info['tong_warna']}
102
+ * **♻️ Dapat Didaur Ulang:** {info['dapat_didaur_ulang']}
103
+
104
+ ---
105
+ #### ⚠️ Dampak Jika Tidak Diolah:
106
+ {info['dampak_jika_tidak_diolah']}
107
+ """
108
+ else:
109
+ deskripsi_markdown = f"### {hasil_label}\ninformasi detail untuk kategori ini belum tersedia."
110
+
111
+ return {class_label[i]: float(pred[i]) for i in range(len(class_label))}, deskripsi_markdown
112
+
113
+
114
+
115
+ demo = gr.Interface(
116
+ fn=predict_input,
117
+ inputs=gr.Image(type="pil"),
118
+ outputs=[
119
+ gr.Label(num_top_classes=3, label="Prediksi Kategori"),
120
+ gr.Markdown(label="Saran Pengolahan")
121
+ ],
122
+ title="Klasifikasi Sampah & Saran Pengolahan",
123
+ description="Unggah foto sampah untuk mengetahui jenisnya dan cara mengolahnya",
124
+ )
125
+
126
+ # if __name__ == "__main__":
127
+ # port = int(os.environ.get("PORT", 8000))
128
+ # demo.launch(server_name="0.0.0.0", server_port=port)
129
+
130
+ demo.launch()