pawpularity / app.py
blanar's picture
Update app.py
7381a80
Raw
History Blame Contribute Delete
2.65 kB
import streamlit as st
import PIL
import sys
import zipfile
from fastai import *
import numpy as np
import pandas as pd
import os
import timm
from timm import create_model
from fastai.vision.all import *
import torchvision.transforms as T
torch.device('cpu')
def seed_everything(seed):
random.seed(seed)
os.environ['PYTHONHASHSEED'] = str(seed)
np.random.seed(seed)
torch.manual_seed(seed)
torch.backends.cudnn.deterministic = True
seed_everything(42)
test = {
'Id': ['2022-12-21 00.49.46.jpg', '2022-12-21 00.49.46.jpg'],
'Eyes': [0.3, 0.2],
}
train_df = pd.DataFrame(test)
print(train_df)
dls = DataBlock(blocks=(ImageBlock, CategoryBlock),
get_x=ColReader('Id'),
get_y=ColReader('Eyes'),
splitter=RandomSplitter(0.2),
item_tfms=Resize(224),
batch_tfms=setup_aug_tfms([Brightness(), Contrast(), Hue(), Saturation(), Flip(size=224)]),
)
paw_dls = dls.dataloaders(train_df, batch_size=8, seed=12, device='cpu')
test = paw_dls.test_dl(train_df)
learn = cnn_learner(paw_dls, models.resnet50, pretrained=False, metrics=error_rate)
learn.to('cpu')
catanddog = learn.load('dog')
st.title("PawPularity Score")
file_name = st.file_uploader("Upload a photo of your pet a get an estimate how popular it is gonna be!", type=["jpg", "jpeg"])
my_bar = st.progress(0, text="PawScore")
if file_name is not None:
col1, col2 = st.columns(2)
image = Image.open(file_name)
print(image)
img_fastai = np.array(image)
col1.image(image, use_column_width=True)
pred = catanddog.predict(img_fastai)[1]
print(pred)
def metric_rmse(input,target):
return 100*torch.sqrt(F.mse_loss(F.sigmoid(input.flatten()), target))
model = create_model('swin_large_patch4_window7_224', pretrained=False, num_classes=1)
learn = Learner(paw_dls, model, loss_func = BCEWithLogitsLossFlat(), metrics=metric_rmse)
# learner = learner.load(f'/kaggle/input/puredog/pure-dog-{fold}')
if pred == 0:
learn.load('pure-dog-5')
pred = learn.predict(image)
col2.header("Score for this doggo:")
col2.subheader(f"{ round(float(pred[2]) * 100, 1)}%")
my_bar.progress(round(float(pred[2]) * 100), text="PawScore")
if pred == 1:
learn.load(f'pure-cat-0')
pred = learn.predict(image)
print(pred)
print("Score for this catto:", min(int(pred[2] * 100 + 35), 100))
col2.header("Score for this catto:")
col2.subheader(f"{ round(float(pred[2]) * 100, 1)}%")
my_bar.progress(round(float(pred[2]) * 100), text="PawScore")