Spaces:
Sleeping
Sleeping
| import os | |
| import glob | |
| import json | |
| import warnings | |
| warnings.filterwarnings("ignore") | |
| import torch | |
| from PIL import Image | |
| import gradio as gr | |
| from datetime import datetime | |
| import models | |
| print(f"Is CUDA available: {torch.cuda.is_available()}") | |
| # print(f"CUDA device: {torch.cuda.get_device_name(torch.cuda.current_device())}") | |
| with open("index_to_species.json", "r") as file: | |
| index_to_species_data = file.read() | |
| index_to_species = json.loads(index_to_species_data) | |
| num_classes = len(list(index_to_species.keys())) | |
| device = torch.device("cuda" if torch.cuda.is_available() else "cpu") | |
| # Load the model | |
| classify_model = models.DinoVisionTransformerClassifier(num_classes) | |
| classify_model = classify_model.to(device) | |
| classify_model.load_state_dict(torch.load("best_dinov2_both_2023-11-21_07-44-35.pth", map_location=torch.device(device))) | |
| classify_model.eval() | |
| k = 5 | |
| def classify(image): | |
| output = classify_model(image)[0] | |
| tops = torch.topk(output, k=k).indices | |
| scores = torch.softmax(output, dim=0)[tops] | |
| result = {index_to_species[str(tops[i].item())].replace("_", " "): round(scores[i].item(), 2) for i in range(len(tops))} | |
| sorted_result = {k: v for k, v in sorted(result.items(), key=lambda item: item[1], reverse=True) if v > 0} | |
| # Get the current time | |
| current_time = datetime.now() | |
| # Format the current time as a string | |
| formatted_time = current_time.strftime("%Y-%m-%d %H:%M:%S") | |
| # Print the formatted time | |
| print(f"{formatted_time} {sorted_result}") | |
| return sorted_result | |
| title = "🐢" | |
| gr.Interface( | |
| fn=classify, | |
| inputs=gr.Image(type="pil", label="Input Image"), | |
| outputs=[gr.JSON()], | |
| title=title, | |
| ).launch() |