from fastai import * from fastcore.all import * from fastai.vision.all import * import pandas as pd import re import gradio as gr def get_x(data_set): return Path(data_set['image_path']) def get_y(data_set): return data_set['bf_est'] def new_splitter(df): # Get the unique values in the 'id' column unique_ids = df['id'].unique() # Shuffle the unique values np.random.seed(42) np.random.shuffle(unique_ids) # Calculate the number of unique values to be included in the first dataframe num_unique_in_test = int(np.ceil(len(unique_ids) * 0.8)) # Get the first 'num_unique_in_df1' unique values test_ids = unique_ids[:num_unique_in_test] # Get the rows of the original dataframe that contain the 'df1_ids' test = df.index[df['id'].isin(test_ids)].tolist() # Get the rest of the rows from the original dataframe valid = df.index[~df['id'].isin(test_ids)].tolist() return test, valid title = "Body Fat Predictor" description = "A Body Fat Predictor trained on the subreddit \"guessmybf\". \ For best preformence upload a front facing photo. \n The Range button allows \ you to adjust the range of the predicted body fat percentage. \ Choosing a higher range results in a less specific prediction but a more ecurate estimate, \ while a lower range provides a less precise estimate. \n The Examples section \ provides visual examples of different body fat percentages and how they appear \ on an individual's body. It is important to note that two individuals can have \ the same body fat percentage but look different due to differences in body composition \ (such as muscle mass)." learner = load_learner("bf_model.pkl") # def predict_bf(img): # return round(float(learner.predict(img)[1]),2) def predict_bf(img, range=0): if range not in [0,1,2,3,4]: range = 1 prediction = math.floor(float(learner.predict(img)[1])) if range ==0: return f"{str(prediction)}%" else: return f"{str(round(prediction) - range)}-{str(round(prediction) + range)}%" examples=[ ['./exp/6-8.jpg', '6-8%'], ['./exp/7-9.jpg', '7-9%'], ['./exp/9-11.jpg', '9-11%'], ['./exp/9-11v2.jpg', '9-11%'], ['./exp/10-12.jpg', '10-12%'], ['./exp/10-12v2.jpg', '10-12%'], ['./exp/11-13.jpg', '11-13%'], ['./exp/13-15.jpg', '13-15%'], ['./exp/13-15v2.jpg', '13-15%'], ['./exp/15-17.jpg', '15-17%'], ['./exp/15-17v2.jpg', '15-17%'], ['./exp/15-17v3.jpg', '15-17%'], ['./exp/17-19.jpg', '17-19%'], ['./exp/19-20.jpg', '19-20%'], ['./exp/19-20v2.jpg', '19-20%'], ['./exp/21-23.jpg', '21-23%'], ['./exp/22-24.jpg', '22-24%'], ['./exp/23-25.jpg', '23-25%'], ['./exp/24-26.jpg', '24-26%'] ] image = gr.Image(shape=(192,192)) intf = gr.Interface(fn =predict_bf, inputs = [image, gr.Radio([0,1,2,3,4])], outputs = gr.outputs.Textbox(), title = title, description = description, examples=examples) intf.launch(inline=True, share=False)