Spaces:
Running
on
Zero
Running
on
Zero
Update app.py
Browse files
app.py
CHANGED
@@ -302,7 +302,7 @@ async def detect_multiple_dogs(image):
|
|
302 |
|
303 |
async def predict(image):
|
304 |
if image is None:
|
305 |
-
return "Please upload an image to start.", None
|
306 |
|
307 |
try:
|
308 |
if isinstance(image, np.ndarray):
|
@@ -311,9 +311,11 @@ async def predict(image):
|
|
311 |
dogs = await detect_multiple_dogs(image)
|
312 |
|
313 |
if len(dogs) == 0:
|
314 |
-
return "No dogs detected. Please upload a clear image of a dog.", None
|
315 |
|
316 |
explanations = []
|
|
|
|
|
317 |
annotated_image = image.copy()
|
318 |
draw = ImageDraw.Draw(annotated_image)
|
319 |
try:
|
@@ -336,6 +338,7 @@ async def predict(image):
|
|
336 |
breed = topk_breeds[0]
|
337 |
description = get_dog_description(breed)
|
338 |
explanation = f"**Dog {i}: {breed}**\n\n{format_description(description, breed)}"
|
|
|
339 |
else:
|
340 |
explanation = f"""
|
341 |
**Dog {i}: Detected with moderate confidence. Here are the top 3 possible breeds:**
|
@@ -343,26 +346,22 @@ async def predict(image):
|
|
343 |
1. **{topk_breeds[0]}** ({topk_probs_percent[0]})
|
344 |
2. **{topk_breeds[1]}** ({topk_probs_percent[1]})
|
345 |
3. **{topk_breeds[2]}** ({topk_probs_percent[2]})
|
346 |
-
|
347 |
-
[More about {topk_breeds[0]}](#breed_{i}_1)
|
348 |
-
[More about {topk_breeds[1]}](#breed_{i}_2)
|
349 |
-
[More about {topk_breeds[2]}](#breed_{i}_3)
|
350 |
"""
|
351 |
-
|
352 |
-
|
|
|
|
|
|
|
|
|
353 |
|
354 |
final_explanation = "\n\n---\n\n".join(explanations)
|
355 |
-
|
356 |
-
# 添加隱藏的詳細信息部分
|
357 |
-
for i, (_, _, _) in enumerate(dogs, 1):
|
358 |
-
for j, breed in enumerate(topk_breeds, 1):
|
359 |
-
description = get_dog_description(breed)
|
360 |
-
final_explanation += f"\n\n<div id='breed_{i}_{j}' style='display:none;'>\n\n{format_description(description, breed)}\n\n</div>"
|
361 |
-
|
362 |
-
return final_explanation, annotated_image
|
363 |
|
364 |
except Exception as e:
|
365 |
-
return f"An error occurred: {e}", None
|
|
|
|
|
|
|
366 |
|
367 |
# Gradio 界面設置
|
368 |
with gr.Blocks(css="""
|
@@ -381,8 +380,20 @@ with gr.Blocks(css="""
|
|
381 |
output_image = gr.Image(label="Annotated Image")
|
382 |
|
383 |
output = gr.Markdown(label="Prediction Results")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
384 |
|
385 |
-
|
|
|
|
|
|
|
|
|
386 |
|
387 |
gr.Examples(
|
388 |
examples=['Border_Collie.jpg', 'Golden_Retriever.jpeg', 'Saint_Bernard.jpeg', 'French_Bulldog.jpeg', 'Samoyed.jpg'],
|
|
|
302 |
|
303 |
async def predict(image):
|
304 |
if image is None:
|
305 |
+
return "Please upload an image to start.", None, [], []
|
306 |
|
307 |
try:
|
308 |
if isinstance(image, np.ndarray):
|
|
|
311 |
dogs = await detect_multiple_dogs(image)
|
312 |
|
313 |
if len(dogs) == 0:
|
314 |
+
return "No dogs detected. Please upload a clear image of a dog.", None, [], []
|
315 |
|
316 |
explanations = []
|
317 |
+
buttons = []
|
318 |
+
button_details = []
|
319 |
annotated_image = image.copy()
|
320 |
draw = ImageDraw.Draw(annotated_image)
|
321 |
try:
|
|
|
338 |
breed = topk_breeds[0]
|
339 |
description = get_dog_description(breed)
|
340 |
explanation = f"**Dog {i}: {breed}**\n\n{format_description(description, breed)}"
|
341 |
+
explanations.append(explanation)
|
342 |
else:
|
343 |
explanation = f"""
|
344 |
**Dog {i}: Detected with moderate confidence. Here are the top 3 possible breeds:**
|
|
|
346 |
1. **{topk_breeds[0]}** ({topk_probs_percent[0]})
|
347 |
2. **{topk_breeds[1]}** ({topk_probs_percent[1]})
|
348 |
3. **{topk_breeds[2]}** ({topk_probs_percent[2]})
|
|
|
|
|
|
|
|
|
349 |
"""
|
350 |
+
explanations.append(explanation)
|
351 |
+
for j, breed in enumerate(topk_breeds, 1):
|
352 |
+
button_text = f"More about Dog {i}: {breed}"
|
353 |
+
buttons.append(button_text)
|
354 |
+
description = get_dog_description(breed)
|
355 |
+
button_details.append(format_description(description, breed))
|
356 |
|
357 |
final_explanation = "\n\n---\n\n".join(explanations)
|
358 |
+
return final_explanation, annotated_image, buttons, button_details
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
359 |
|
360 |
except Exception as e:
|
361 |
+
return f"An error occurred: {e}", None, [], []
|
362 |
+
|
363 |
+
def show_breed_details(evt: gr.SelectData, details):
|
364 |
+
return details[evt.index]
|
365 |
|
366 |
# Gradio 界面設置
|
367 |
with gr.Blocks(css="""
|
|
|
380 |
output_image = gr.Image(label="Annotated Image")
|
381 |
|
382 |
output = gr.Markdown(label="Prediction Results")
|
383 |
+
breed_buttons = gr.Radio([], label="Select breed for more details", visible=False)
|
384 |
+
breed_details = gr.Markdown(label="Breed Details")
|
385 |
+
|
386 |
+
input_image.change(
|
387 |
+
predict,
|
388 |
+
inputs=input_image,
|
389 |
+
outputs=[output, output_image, breed_buttons, breed_details]
|
390 |
+
)
|
391 |
|
392 |
+
breed_buttons.select(
|
393 |
+
show_breed_details,
|
394 |
+
inputs=[breed_details],
|
395 |
+
outputs=[breed_details]
|
396 |
+
)
|
397 |
|
398 |
gr.Examples(
|
399 |
examples=['Border_Collie.jpg', 'Golden_Retriever.jpeg', 'Saint_Bernard.jpeg', 'French_Bulldog.jpeg', 'Samoyed.jpg'],
|