Syahhh01 commited on
Commit
fc5730c
·
verified ·
1 Parent(s): e0496db

Upload 3 files

Browse files
Files changed (4) hide show
  1. .gitattributes +1 -0
  2. app.py +87 -0
  3. model_stunting.safetensor +3 -0
  4. requirements.txt +5 -0
.gitattributes CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ model_stunting.safetensor filter=lfs diff=lfs merge=lfs -text
app.py ADDED
@@ -0,0 +1,87 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import torch
3
+ from torchvision import transforms
4
+ from safetensors.torch import load_file
5
+ from PIL import Image
6
+ import os
7
+
8
+ # -------------------------------
9
+ # 1. Load model PyTorch dari .safetensors
10
+ # -------------------------------
11
+ device = "cuda" if torch.cuda.is_available() else "cpu"
12
+
13
+ # Load state dict dari safetensors
14
+ state_dict = load_file("model_stunting.safetensors")
15
+
16
+ # Misalkan model kamu adalah CNN custom
17
+ class Dense121(nn.Module):
18
+ def __init__(self, num_classes, pretrained=True):
19
+ super(Dense121, self).__init__()
20
+ if pretrained:
21
+ try:
22
+ weights = models.DenseNet121_Weights.IMAGENET1K_V1
23
+ self.dense121 = models.densenet121(weights=weights)
24
+ except:
25
+ self.dense121 = models.densenet121(pretrained=True)
26
+ else:
27
+ self.dense121 = models.densenet121(pretrained=False)
28
+
29
+ # classifier DenseNet bukan list, jadi langsung akses in_features
30
+ in_features = self.dense121.classifier.in_features
31
+ self.dense121.classifier = nn.Linear(in_features, num_classes)
32
+
33
+ def forward(self, x):
34
+ return self.dense121(x)
35
+
36
+
37
+ model = Dense121()
38
+ model.load_state_dict(state_dict)
39
+ model.to(device)
40
+ model.eval()
41
+
42
+ # -------------------------------
43
+ # 2. Transformasi gambar input
44
+ # -------------------------------
45
+ transform = transforms.Compose([
46
+ transforms.Resize((224, 224)), # Sesuaikan ukuran input model
47
+ transforms.ToTensor(),
48
+ transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), # ImageNet norm
49
+ ])
50
+
51
+ # -------------------------------
52
+ # 3. Fungsi prediksi
53
+ # -------------------------------
54
+ def predict(image: Image.Image):
55
+ img_tensor = transform(image).unsqueeze(0).to(device) # (1, 3, 224, 224)
56
+
57
+ with torch.no_grad():
58
+ logits = model(img_tensor)
59
+ probs = torch.softmax(logits, dim=1)
60
+ pred_class = torch.argmax(probs, dim=1).item()
61
+ confidence = probs[0][pred_class].item()
62
+
63
+ label_map = {0: "Tidak Stunting", 1: "Stunting"}
64
+ result_label = label_map[pred_class]
65
+
66
+ return {
67
+ "prediction": result_label,
68
+ "confidence": round(confidence, 4)
69
+ }
70
+
71
+ # -------------------------------
72
+ # 4. Interface Gradio
73
+ # -------------------------------
74
+ iface = gr.Interface(
75
+ fn=predict,
76
+ inputs=gr.Image(type="pil", label="Upload Gambar Anak"),
77
+ outputs=gr.JSON(label="Hasil Prediksi"),
78
+ title="Prediksi Stunting dari Foto",
79
+ description="Upload foto anak untuk mendeteksi risiko stunting menggunakan model CNN.",
80
+ examples=[["example.jpg"]] # opsional
81
+ )
82
+
83
+ # -------------------------------
84
+ # 5. Launch
85
+ # -------------------------------
86
+ if __name__ == "__main__":
87
+ iface.launch(server_name="0.0.0.0", server_port=7860, share=True)
model_stunting.safetensor ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b9d67c85264cfcfe3049b7e4559cf7dae718ff13fa39238331c856a90b7d3273
3
+ size 28248920
requirements.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ gradio
2
+ torch
3
+ torchvision
4
+ safetensors
5
+ Pillow