SicheateR99 commited on
Commit
4a3e528
·
1 Parent(s): 19e432f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +55 -11
app.py CHANGED
@@ -87,27 +87,71 @@ def get_model():
87
  @app.post("/classify/")
88
  def classify_items(request: ItemRequest):
89
  try:
90
- raw_items = request.items_text
91
 
92
- if not raw_items.strip():
93
- return {"success": True, "category_id": None, "category_name": "Tidak Terdeteksi"}
 
 
 
 
 
 
94
 
95
  m, e = get_model()
96
 
97
- # Inference
98
- input_data = tf.constant([raw_items], dtype=tf.string)
99
- hasil_prediksi = m.predict(input_data, verbose=0)
100
 
101
- category_id = int(np.argmax(hasil_prediksi[0]))
102
- category_name = e.inverse_transform([category_id])[0]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
103
 
104
  return {
105
  "success": True,
106
- "class_id": category_id,
107
- "category_name": category_name
 
108
  }
109
 
110
  except Exception as err:
111
  import traceback
112
  print(f"Error AI Klasifikasi: {traceback.format_exc()}")
113
- return {"success": False, "error": str(err), "category_id": None, "category_name": None}
 
 
 
 
87
  @app.post("/classify/")
88
  def classify_items(request: ItemRequest):
89
  try:
90
+ items_list = request.items
91
 
92
+ # Jika array kosong
93
+ if not items_list:
94
+ return {
95
+ "success": True,
96
+ "class_id": None,
97
+ "category_name": "Tidak Terdeteksi",
98
+ "confidence": 0.0
99
+ }
100
 
101
  m, e = get_model()
102
 
103
+ # Dictionary untuk melacak hasil
104
+ category_counts = {}
105
+ max_confidences = {}
106
 
107
+ # Prediksi satu per satu
108
+ for item in items_list:
109
+ if not item.strip():
110
+ continue
111
+
112
+ input_data = tf.constant([item], dtype=tf.string)
113
+ hasil_prediksi = m.predict(input_data, verbose=0)
114
+
115
+ cat_id = int(np.argmax(hasil_prediksi[0]))
116
+ conf = float(np.max(hasil_prediksi[0]))
117
+
118
+ # Hitung frekuensi kategori
119
+ if cat_id in category_counts:
120
+ category_counts[cat_id] += 1
121
+ else:
122
+ category_counts[cat_id] = 1
123
+
124
+ # Simpan confidence tertinggi untuk kategori
125
+ if cat_id not in max_confidences or conf > max_confidences[cat_id]:
126
+ max_confidences[cat_id] = conf
127
+
128
+ # Jika semua item string kosong
129
+ if not category_counts:
130
+ return {
131
+ "success": True,
132
+ "class_id": None,
133
+ "category_name": "Tidak Terdeteksi",
134
+ "confidence": 0.0
135
+ }
136
+
137
+ # Candidate Kategori terbanyak
138
+ best_cat_id = max(category_counts, key=category_counts.get)
139
+ best_cat_name = e.inverse_transform([best_cat_id])[0]
140
+
141
+ # Ambil confidence tertinggi dari hasil candidate
142
+ best_confidence = max_confidences[best_cat_id]
143
 
144
  return {
145
  "success": True,
146
+ "class_id": best_cat_id,
147
+ "category_name": best_cat_name,
148
+ "confidence": round(best_confidence * 100, 2)
149
  }
150
 
151
  except Exception as err:
152
  import traceback
153
  print(f"Error AI Klasifikasi: {traceback.format_exc()}")
154
+ return {
155
+ "success": False, "error": str(err), "class_id": None, "category_name": None,
156
+ "confidence": 0.0
157
+ }