DawnC commited on
Commit
cb2b5ac
โ€ข
1 Parent(s): 1fabe7c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +17 -19
app.py CHANGED
@@ -153,8 +153,8 @@ def format_description(description, breed):
153
 
154
  return formatted_description
155
 
156
- async def predict_single_dog(image):
157
- return await asyncio.to_thread(_predict_single_dog, image)
158
 
159
  # def _predict_single_dog(image):
160
  # image_tensor = preprocess_image(image)
@@ -182,14 +182,16 @@ async def predict_single_dog(image):
182
 
183
 
184
  async def predict_single_dog(image):
185
- image_tensor = preprocess(image).unsqueeze(0)
186
  with torch.no_grad():
187
  output = model(image_tensor)
188
- probabilities = torch.nn.functional.softmax(output[0], dim=0)
189
- top3_prob, top3_catid = torch.topk(probabilities, 3)
190
- top3_breeds = [dog_breeds[idx.item()] for idx in top3_catid]
191
- top3_probs = [f"{prob.item()*100:.2f}%" for prob in top3_prob]
192
- return top3_prob[0].item(), top3_breeds, top3_probs
 
 
193
 
194
  async def detect_multiple_dogs(image, conf_threshold=0.3, iou_threshold=0.45):
195
  results = model_yolo(image, conf=conf_threshold, iou=iou_threshold)[0]
@@ -402,7 +404,7 @@ async def process_single_dog(image):
402
 
403
  async def predict(image):
404
  if image is None:
405
- return "Please upload an image to start.", None, [], gr.update(visible=False), None
406
 
407
  try:
408
  if isinstance(image, np.ndarray):
@@ -460,13 +462,12 @@ async def predict(image):
460
  "is_multi_dog": len(dogs) > 1,
461
  "dogs_info": explanations
462
  }
463
- return final_explanation, annotated_image, gr.update(visible=False), initial_state
464
 
465
  except Exception as e:
466
- error_msg = f"An error occurred: {str(e)}"
467
  print(error_msg)
468
- return error_msg, None, gr.update(visible=False), None
469
-
470
 
471
  def show_details(choice, previous_output, initial_state):
472
  if not choice:
@@ -483,7 +484,7 @@ def show_details(choice, previous_output, initial_state):
483
  return formatted_description, gr.update(visible=True), initial_state
484
  except Exception as e:
485
  error_msg = f"An error occurred while showing details: {e}"
486
- logger.error(error_msg)
487
  return error_msg, gr.update(visible=True), initial_state
488
 
489
  def go_back(state):
@@ -495,7 +496,6 @@ def go_back(state):
495
  gr.update(visible=False),
496
  state
497
  )
498
-
499
 
500
  with gr.Blocks() as iface:
501
  gr.HTML("<h1 style='text-align: center;'>๐Ÿถ Dog Breed Classifier ๐Ÿ”</h1>")
@@ -530,7 +530,7 @@ with gr.Blocks() as iface:
530
  inputs=[initial_state],
531
  outputs=[output, output_image, breed_buttons, back_button, initial_state]
532
  )
533
-
534
  gr.Examples(
535
  examples=['Border_Collie.jpg', 'Golden_Retriever.jpeg', 'Saint_Bernard.jpeg', 'French_Bulldog.jpeg', 'Samoyed.jpg'],
536
  inputs=input_image
@@ -539,6 +539,4 @@ with gr.Blocks() as iface:
539
  gr.HTML('For more details on this project and other work, feel free to visit my GitHub <a href="https://github.com/Eric-Chung-0511/Learning-Record/tree/main/Data%20Science%20Projects/Dog_Breed_Classifier">Dog Breed Classifier</a>')
540
 
541
  if __name__ == "__main__":
542
- iface.launch()
543
-
544
-
 
153
 
154
  return formatted_description
155
 
156
+ # async def predict_single_dog(image):
157
+ # return await asyncio.to_thread(_predict_single_dog, image)
158
 
159
  # def _predict_single_dog(image):
160
  # image_tensor = preprocess_image(image)
 
182
 
183
 
184
  async def predict_single_dog(image):
185
+ image_tensor = preprocess_image(image)
186
  with torch.no_grad():
187
  output = model(image_tensor)
188
+ logits = output[0] if isinstance(output, tuple) else output
189
+ probabilities = F.softmax(logits, dim=1)
190
+ topk_probs, topk_indices = torch.topk(probabilities, k=3)
191
+ top1_prob = topk_probs[0][0].item()
192
+ topk_breeds = [dog_breeds[idx.item()] for idx in topk_indices[0]]
193
+ topk_probs_percent = [f"{prob.item() * 100:.2f}%" for prob in topk_probs[0]]
194
+ return top1_prob, topk_breeds, topk_probs_percent
195
 
196
  async def detect_multiple_dogs(image, conf_threshold=0.3, iou_threshold=0.45):
197
  results = model_yolo(image, conf=conf_threshold, iou=iou_threshold)[0]
 
404
 
405
  async def predict(image):
406
  if image is None:
407
+ return "Please upload an image to start.", None, gr.update(visible=False, choices=[]), None
408
 
409
  try:
410
  if isinstance(image, np.ndarray):
 
462
  "is_multi_dog": len(dogs) > 1,
463
  "dogs_info": explanations
464
  }
465
+ return final_explanation, annotated_image, gr.update(visible=False, choices=[]), initial_state
466
 
467
  except Exception as e:
468
+ error_msg = f"An error occurred: {str(e)}\n\nTraceback:\n{traceback.format_exc()}"
469
  print(error_msg)
470
+ return error_msg, None, gr.update(visible=False, choices=[]), None
 
471
 
472
  def show_details(choice, previous_output, initial_state):
473
  if not choice:
 
484
  return formatted_description, gr.update(visible=True), initial_state
485
  except Exception as e:
486
  error_msg = f"An error occurred while showing details: {e}"
487
+ print(error_msg)
488
  return error_msg, gr.update(visible=True), initial_state
489
 
490
  def go_back(state):
 
496
  gr.update(visible=False),
497
  state
498
  )
 
499
 
500
  with gr.Blocks() as iface:
501
  gr.HTML("<h1 style='text-align: center;'>๐Ÿถ Dog Breed Classifier ๐Ÿ”</h1>")
 
530
  inputs=[initial_state],
531
  outputs=[output, output_image, breed_buttons, back_button, initial_state]
532
  )
533
+
534
  gr.Examples(
535
  examples=['Border_Collie.jpg', 'Golden_Retriever.jpeg', 'Saint_Bernard.jpeg', 'French_Bulldog.jpeg', 'Samoyed.jpg'],
536
  inputs=input_image
 
539
  gr.HTML('For more details on this project and other work, feel free to visit my GitHub <a href="https://github.com/Eric-Chung-0511/Learning-Record/tree/main/Data%20Science%20Projects/Dog_Breed_Classifier">Dog Breed Classifier</a>')
540
 
541
  if __name__ == "__main__":
542
+ iface.launch()