import gradio as gr
import torch
import open_clip
import joblib
def predict(input_image):
if input_image is None:
return "No image submitted..."
device = torch.device("cpu")
# when running on GPUs:
# device = torch.device("cuda")
model, _, preprocess = open_clip.create_model_and_transforms('ViT-L-14', pretrained='openai', device=device)
image = preprocess(input_image).unsqueeze(0).to(device)
with torch.amp.autocast(device_type=device.type):
with torch.no_grad():
image_features = model.encode_image(image)
image_features /= image_features.norm(dim=-1, keepdim=True)
embedding = image_features[0].cpu().float().numpy()
model = joblib.load('model.pkl')
result = model.predict([embedding])
return "Map" if result == 1 else "No map"
demo = gr.Interface(fn=predict,
inputs=gr.Image(label="Input image", type="pil"),
outputs="text",
title="MapPool model",
description="The model predicts whether an image is a map or not. It takes about 30 seconds since it runs on a CPU (it is much faster on a GPU). Although the validation accuracy of the model is 98.5%, some outputs may not be correct. In this case, feel free to contact me.",
article="More information: MapPool - Bubbling up an extremely large corpus of maps for AI
Keywords: map identification, map recognition, map classification")
demo.launch()