Spaces:
Sleeping
Sleeping
import gradio as gr | |
import PIL.Image | |
import pandas as pd | |
import numpy as np | |
import boto3 | |
from io import BytesIO, StringIO | |
from fastai.vision.all import * | |
def get_x(r): return r['Image Path'] | |
def get_y(r): return r['Survived'] | |
def ProjectReportSplitter(df): | |
valid_pct = 0.2 | |
unique_reports = df['Project Report'].unique() | |
valid_reports = np.random.choice(unique_reports, int(len(unique_reports) * valid_pct), replace=False) | |
valid_idx = df.index[df['Project Report'].isin(valid_reports)].tolist() | |
train_idx = df.index[~df.index.isin(valid_idx)].tolist() | |
return train_idx, valid_idx | |
# Use a function to resolve path | |
def get_x_transformed(r): return open_image_from_s3(get_x(r)) | |
dblock = DataBlock( | |
blocks=(ImageBlock(cls=PILImage), CategoryBlock), | |
splitter=ProjectReportSplitter, | |
get_x=get_x_transformed, | |
get_y=get_y, | |
item_tfms=Resize(460, method='pad', pad_mode='zeros'), | |
batch_tfms=aug_transforms(mult=2, do_flip=True, max_rotate=20, max_zoom=1.1, max_warp=0.2) | |
) | |
# Load your model | |
learn = load_learner("templateClassifierDATAhalfEPOCHoneVISION.pkl") | |
# Print the vocabulary of the model | |
print("Model Vocabulary:", learn.dls.vocab) | |
labels = learn.dls.vocab | |
def predict(img): | |
img = PILImage.create(img) | |
pred,pred_idx,probs = learn.predict(img) | |
return {labels[i]: float(probs[i]) for i in range(len(labels))} | |
# def predict(img): | |
# img = PILImage.create(img) | |
# pred, pred_idx, probs = learn.predict(img) | |
# results = {labels[i]: float(probs[i]) for i in range(len(labels))} | |
# # Adjust results to highlight when 'Survived' meets the 75% threshold | |
# if results['Survived'] >= 0.75: | |
# results['Survived'] = 1.0 # Indicating high confidence of survival | |
# else: | |
# results['Survived'] = 0.0 # Indicating it did not meet the threshold | |
# return results | |
# def predict(img): | |
# img = PILImage.create(img) | |
# pred, pred_idx, probs = learn.predict(img) | |
# results = {labels[i]: float(probs[i]) for i in range(len(labels))} | |
# # Adjusting to display survival status based on the threshold | |
# survival_status = 'Survived' if results['Survived'] >= 0.75 else 'Not Survived' | |
# results['Survival Status'] = survival_status | |
# return results | |
# Gradio interface setup | |
title = "Photo Culling AI" | |
description = "Upload your photo to check if it survives culling." | |
article = "This interface uses a model trained to predict whether a photo is relevant for a project report." | |
gr.Interface(fn=predict, inputs=gr.Image(), outputs=gr.Label(num_top_classes=2), title=title, description=description, article=article).launch(share=True,show_error=True) | |
# import gradio as gr | |
# import PIL.Image | |
# import pandas as pd | |
# import boto3 | |
# from io import BytesIO, StringIO | |
# from fastai.vision.all import * | |
# def get_x(r): return r['Image Path'] | |
# def get_y(r): return r['Survived'] | |
# def ProjectReportSplitter(df): | |
# valid_pct = 0.2 | |
# unique_reports = df['Project Report'].unique() | |
# valid_reports = np.random.choice(unique_reports, int(len(unique_reports) * valid_pct), replace=False) | |
# valid_idx = df.index[df['Project Report'].isin(valid_reports)].tolist() | |
# train_idx = df.index[~df.index.isin(valid_idx)].tolist() | |
# return train_idx, valid_idx | |
# # Use a function to resolve path | |
# def get_x_transformed(r): return open_image_from_s3(get_x(r)) | |
# dblock = DataBlock( | |
# blocks=(ImageBlock(cls=PILImage), CategoryBlock), | |
# splitter=ProjectReportSplitter, | |
# get_x=get_x_transformed, | |
# get_y=get_y, | |
# item_tfms=Resize(460, method='pad', pad_mode='zeros'), | |
# batch_tfms=aug_transforms(mult=2, do_flip=True, max_rotate=20, max_zoom=1.1, max_warp=0.2) | |
# ) | |
# # Load your model | |
# learn = load_learner("templateClassifierDATAhalfEPOCHoneVISION.pkl") | |
# # Print the vocabulary of the model | |
# print("Model Vocabulary:", learn.dls.vocab) | |
# # Update prediction function to directly read from S3 | |
# def predict(img_path): | |
# pred, pred_idx, probs = learn.predict(img_path) | |
# return {learn.dls.vocab[i]: float(probs[i]) for i in range(len(probs))} | |
# # Gradio interface setup | |
# title = "Photo Culling AI" | |
# description = "Upload your photo to check if it survives culling." | |
# article = "This interface uses a model trained to predict whether a photo is relevant for a project report." | |
# gr.Interface(fn=predict, inputs=gr.Image(), outputs=gr.Label(num_top_classes=2), title=title, description=description, article=article).launch(share=True) | |