Spaces:
Sleeping
Sleeping
| import gradio as gr, numpy as np, json, tensorflow as tf | |
| from tensorflow.keras.applications.mobilenet_v2 import preprocess_input | |
| import os | |
| # Load model - try local first, then HF Hub | |
| MODEL_PATH = "corrosion_classifier.keras" | |
| CLASSES_PATH = "classes.json" | |
| M = tf.keras.models.load_model(MODEL_PATH, compile=False) | |
| CLASSES = json.load(open(CLASSES_PATH)) | |
| SZ = M.input_shape[1] | |
| def predict(img): | |
| if img is None: | |
| return {}, "Unggah foto permukaan logam." | |
| x = tf.image.resize(tf.cast(img, tf.float32), [SZ, SZ])[None] | |
| p = M.predict(x, verbose=0)[0] | |
| conf = {CLASSES[i]: float(p[i]) for i in range(len(CLASSES))} | |
| top = CLASSES[int(p.argmax())] | |
| note = "Triase/pra-skrining - BUKAN pengganti NDT." | |
| return conf, f"Prediksi: {top} - {note}" | |
| demo = gr.Interface( | |
| fn=predict, | |
| inputs=gr.Image(type="numpy", label="Foto permukaan"), | |
| outputs=[ | |
| gr.Label(num_top_classes=3, label="Klasifikasi korosi"), | |
| gr.Textbox(label="Catatan") | |
| ], | |
| title="FerroScan — Klasifikasi Korosi", | |
| description="MobileNetV2 + Transfer Learning. Triase visual, bukan pengganti NDT.", | |
| examples=[] | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch() | |