Update handler.py
Browse files- handler.py +18 -4
handler.py
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
import base64
|
2 |
import io
|
3 |
import os
|
4 |
-
from typing import Dict, Any
|
5 |
|
6 |
import torch
|
7 |
from PIL import Image
|
@@ -81,11 +81,14 @@ class EndpointHandler:
|
|
81 |
# --------------------------------------------------
|
82 |
# 3) الدالة الرئيسة
|
83 |
# --------------------------------------------------
|
84 |
-
def __call__(self, data: Any) -> Dict[str,
|
85 |
"""
|
86 |
يدعم:
|
87 |
• Widget (PIL.Image)
|
88 |
• REST (base64 فى data["inputs"] أو data["image"])
|
|
|
|
|
|
|
89 |
"""
|
90 |
img: Image.Image | None = None
|
91 |
|
@@ -99,10 +102,21 @@ class EndpointHandler:
|
|
99 |
img = self._decode_b64(payload)
|
100 |
|
101 |
if img is None:
|
102 |
-
return {"
|
103 |
|
104 |
with torch.no_grad():
|
105 |
logits = self.model(self._img_to_tensor(img))
|
106 |
probs = torch.nn.functional.softmax(logits.squeeze(0), dim=0)
|
107 |
|
108 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
import base64
|
2 |
import io
|
3 |
import os
|
4 |
+
from typing import Dict, Any, List
|
5 |
|
6 |
import torch
|
7 |
from PIL import Image
|
|
|
81 |
# --------------------------------------------------
|
82 |
# 3) الدالة الرئيسة
|
83 |
# --------------------------------------------------
|
84 |
+
def __call__(self, data: Any) -> List[Dict[str, Any]]:
|
85 |
"""
|
86 |
يدعم:
|
87 |
• Widget (PIL.Image)
|
88 |
• REST (base64 فى data["inputs"] أو data["image"])
|
89 |
+
|
90 |
+
يعيد:
|
91 |
+
• مصفوفة من القواميس بتنسيق [{label: string, score: number}, ...]
|
92 |
"""
|
93 |
img: Image.Image | None = None
|
94 |
|
|
|
102 |
img = self._decode_b64(payload)
|
103 |
|
104 |
if img is None:
|
105 |
+
return [{"label": "error", "score": 1.0}]
|
106 |
|
107 |
with torch.no_grad():
|
108 |
logits = self.model(self._img_to_tensor(img))
|
109 |
probs = torch.nn.functional.softmax(logits.squeeze(0), dim=0)
|
110 |
|
111 |
+
# تحويل النتائج إلى التنسيق المطلوب: Array<label: string, score:number>
|
112 |
+
results = []
|
113 |
+
for i, label in enumerate(self.labels):
|
114 |
+
results.append({
|
115 |
+
"label": label,
|
116 |
+
"score": float(probs[i])
|
117 |
+
})
|
118 |
+
|
119 |
+
# ترتيب النتائج تنازلياً حسب درجة الثقة
|
120 |
+
results.sort(key=lambda x: x["score"], reverse=True)
|
121 |
+
|
122 |
+
return results
|