|
import torch |
|
import torchvision |
|
import TractionModel as plup |
|
import gradio as gr |
|
|
|
|
|
def init_model(path): |
|
model = plup.create_model() |
|
model = plup.load_weights(model, path) |
|
model.eval() |
|
return model |
|
|
|
|
|
def inference(image): |
|
image = vanilla_transform(image).to(device).unsqueeze(0) |
|
with torch.no_grad(): |
|
pred = model(image) |
|
res = float(torch.sigmoid(pred[1].to("cpu")).numpy()[0]) |
|
return {'pull-up': res, 'no pull-up': 1 - res} |
|
|
|
|
|
norm_mean = [0.485, 0.456, 0.406] |
|
norm_std = [0.229, 0.224, 0.225] |
|
vanilla_transform = torchvision.transforms.Compose([ |
|
torchvision.transforms.Resize(224), |
|
torchvision.transforms.ToTensor(), |
|
torchvision.transforms.Normalize(norm_mean, norm_std)]) |
|
|
|
model = init_model("model-score0.96-f1_10.9-f1_20.99.pt") |
|
if torch.cuda.is_available(): |
|
device = torch.device("cuda") |
|
else: |
|
device = torch.device("cpu") |
|
model = model.to(device) |
|
|
|
|
|
examples = [['tibo.png'], ['tibo2.png'], ['real_pull_up.png'], ['no_pull_up.png'], ['doge.jpg']] |
|
iface = gr.Interface(inference, live=True, inputs=gr.inputs.Image(source="upload", type='pil'), |
|
outputs=gr.outputs.Label(), |
|
examples=examples, |
|
enable_queue=True) |
|
|
|
iface.test_launch() |
|
if __name__ == "__main__": |
|
iface.launch(share=True, enable_queue=True) |
|
|