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)