DawnC commited on
Commit
a2da3d5
·
1 Parent(s): 3823152

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +53 -12
app.py CHANGED
@@ -263,32 +263,74 @@ async def predict(image):
263
  draw = ImageDraw.Draw(annotated_image)
264
  font = ImageFont.load_default()
265
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
266
  dogs_info = ""
267
- buttons_html = ""
268
 
269
  for i, (cropped_image, detection_confidence, box) in enumerate(dogs):
 
 
 
270
  top1_prob, topk_breeds, topk_probs_percent = await predict_single_dog(cropped_image)
271
  color = color_list[i % len(color_list)]
272
  draw.rectangle(box, outline=color, width=3)
273
  draw.text((box[0] + 5, box[1] + 5), f"Dog {i+1}", fill=color, font=font)
274
-
275
  combined_confidence = detection_confidence * top1_prob
276
  dogs_info += f'<div class="dog-info" style="border-left: 5px solid {color}; margin-bottom: 20px; padding: 15px;">'
277
  dogs_info += f'<h2>Dog {i+1}</h2>'
278
-
279
  if top1_prob >= 0.45:
280
  breed = topk_breeds[0]
281
  description = get_dog_description(breed)
282
  dogs_info += format_description_html(description, breed)
283
-
284
  elif combined_confidence >= 0.15:
285
  dogs_info += f"<p>Top 3 possible breeds:</p><ul>"
286
  for j, (breed, prob) in enumerate(zip(topk_breeds[:3], topk_probs_percent[:3])):
287
- #dogs_info += f"<li><strong>{breed}</strong> ({prob} confidence)</li>"
288
- prob = float(prob.replace('%', '')) # new
289
- dogs_info += f"<li><strong>{breed}</strong> ({prob:.2f}% confidence)</li>" # new
290
  dogs_info += "</ul>"
291
- buttons_html = '<div class="breed-buttons">' #new
 
 
292
  for breed in topk_breeds[:3]:
293
  button_id = f"Dog {i+1}: More about {breed}"
294
  buttons_html += f'<button class="breed-button" onclick="handle_button_click(\'{button_id}\')">{breed}</button>'
@@ -297,10 +339,9 @@ async def predict(image):
297
  else:
298
  dogs_info += "<p>The image is unclear or the breed is not in the dataset. Please upload a clearer image.</p>"
299
 
300
- dogs_info += '</div>'
301
-
302
- dogs_info += buttons_html
303
-
304
 
305
  html_output = f"""
306
  <style>
 
263
  draw = ImageDraw.Draw(annotated_image)
264
  font = ImageFont.load_default()
265
 
266
+ # dogs_info = ""
267
+ # buttons_html = ""
268
+
269
+ # for i, (cropped_image, detection_confidence, box) in enumerate(dogs):
270
+ # top1_prob, topk_breeds, topk_probs_percent = await predict_single_dog(cropped_image)
271
+ # color = color_list[i % len(color_list)]
272
+ # draw.rectangle(box, outline=color, width=3)
273
+ # draw.text((box[0] + 5, box[1] + 5), f"Dog {i+1}", fill=color, font=font)
274
+
275
+ # combined_confidence = detection_confidence * top1_prob
276
+ # dogs_info += f'<div class="dog-info" style="border-left: 5px solid {color}; margin-bottom: 20px; padding: 15px;">'
277
+ # dogs_info += f'<h2>Dog {i+1}</h2>'
278
+
279
+ # if top1_prob >= 0.45:
280
+ # breed = topk_breeds[0]
281
+ # description = get_dog_description(breed)
282
+ # dogs_info += format_description_html(description, breed)
283
+
284
+ # elif combined_confidence >= 0.15:
285
+ # dogs_info += f"<p>Top 3 possible breeds:</p><ul>"
286
+ # for j, (breed, prob) in enumerate(zip(topk_breeds[:3], topk_probs_percent[:3])):
287
+ # #dogs_info += f"<li><strong>{breed}</strong> ({prob} confidence)</li>"
288
+ # prob = float(prob.replace('%', '')) # new
289
+ # dogs_info += f"<li><strong>{breed}</strong> ({prob:.2f}% confidence)</li>" # new
290
+ # dogs_info += "</ul>"
291
+ # buttons_html = '<div class="breed-buttons">' #new
292
+ # for breed in topk_breeds[:3]:
293
+ # button_id = f"Dog {i+1}: More about {breed}"
294
+ # buttons_html += f'<button class="breed-button" onclick="handle_button_click(\'{button_id}\')">{breed}</button>'
295
+ # buttons.append(button_id)
296
+ # buttons_html += '</div>'
297
+ # else:
298
+ # dogs_info += "<p>The image is unclear or the breed is not in the dataset. Please upload a clearer image.</p>"
299
+
300
+ # dogs_info += '</div>'
301
+
302
+ # dogs_info += buttons_html
303
+
304
+
305
  dogs_info = ""
 
306
 
307
  for i, (cropped_image, detection_confidence, box) in enumerate(dogs):
308
+ # 每次迭代重新初始化 buttons_html,避免累積過去的資訊
309
+ buttons_html = ""
310
+
311
  top1_prob, topk_breeds, topk_probs_percent = await predict_single_dog(cropped_image)
312
  color = color_list[i % len(color_list)]
313
  draw.rectangle(box, outline=color, width=3)
314
  draw.text((box[0] + 5, box[1] + 5), f"Dog {i+1}", fill=color, font=font)
315
+
316
  combined_confidence = detection_confidence * top1_prob
317
  dogs_info += f'<div class="dog-info" style="border-left: 5px solid {color}; margin-bottom: 20px; padding: 15px;">'
318
  dogs_info += f'<h2>Dog {i+1}</h2>'
319
+
320
  if top1_prob >= 0.45:
321
  breed = topk_breeds[0]
322
  description = get_dog_description(breed)
323
  dogs_info += format_description_html(description, breed)
324
+
325
  elif combined_confidence >= 0.15:
326
  dogs_info += f"<p>Top 3 possible breeds:</p><ul>"
327
  for j, (breed, prob) in enumerate(zip(topk_breeds[:3], topk_probs_percent[:3])):
328
+ # 確保這裡只附加列表,不會顯示連在一起的品種名稱
329
+ dogs_info += f"<li><strong>{breed}</strong> ({float(prob.replace('%', '')):.2f}% confidence)</li>"
 
330
  dogs_info += "</ul>"
331
+
332
+ # 每隻狗的按鈕生成部分
333
+ buttons_html = '<div class="breed-buttons">'
334
  for breed in topk_breeds[:3]:
335
  button_id = f"Dog {i+1}: More about {breed}"
336
  buttons_html += f'<button class="breed-button" onclick="handle_button_click(\'{button_id}\')">{breed}</button>'
 
339
  else:
340
  dogs_info += "<p>The image is unclear or the breed is not in the dataset. Please upload a clearer image.</p>"
341
 
342
+ dogs_info += buttons_html # 確保按鈕與該狗的資訊一起顯示
343
+ dogs_info += '</div>' # 關閉該隻狗的資訊區塊
344
+
 
345
 
346
  html_output = f"""
347
  <style>