Julien Ajdenbaum
added genomic risks
1471ce5
raw
history blame
2.99 kB
import gradio as gr
import math
import numpy as np
import os
import matplotlib.pyplot as plt
import random
from skimage import io as skio
def evolution_plot(current_age):
n = 10000
maxi = 100
x = np.linspace(0, maxi, 10000)
max_state = 7
final_state = 5
y = 1 / (1 + np.exp(-(x / 8) + 5))
y = (y - np.min(y)) / (np.max(y - np.min(y))) * (final_state - 1) + 1
plt.title("Hair Loss Evolution Prediction")
plt.xlabel("Age")
plt.ylabel("Nordwood State")
plt.ylim(1, max_state)
actual = np.where(x < int(current_age))[0][-1]
plt.plot(x[:actual], y[:actual])
plt.plot(x[actual:], y[actual:], '--')
im_save_path = f'tmp/{random.randint(0, 10000)}.png'
plt.savefig(im_save_path)
plt.clf()
plot = skio.imread(im_save_path)
return plot
def pad(arr):
arr = list(map(str, arr))
max_len = 0
for i in arr:
if len(i)>max_len:
max_len = len(i)
for i in range(len(arr)):
for j in range(max_len-len(arr[i])):
arr[i] = arr[i] + " "
return arr
def predict(file, age, parent, gp):
product = ['Computer', 'Monitor ', 'Laptop ', 'Printer ', 'Tablet ']
quantity = pad(np.array([320, 450, 300, 120, 280]) / 500)
min_normal = pad(np.array([250, 200, 210, 100, 250]) / 500)
max_normal = pad(np.array([400, 300, 450, 150, 300]) / 500)
variants = ["Y2TTB9", "9KKGH7", "ML0JH9"]
risks = ['Seborrheic eczema', 'Folliculitis', "Pityriasis amiantacea"]
percents = ['30', "30", '9']
geneticRisks = ""
for variant, risk, percent in zip(variants, risks, percents):
geneticRisks += f"Variant {variant} detected, risk of {risk} is {percent} higher.\n"
useful_products = ("Hydrating Shampoo : https://www.headandshoulders.fr/fr-fr/\n"
"Light Hat : https://www.amazon.com/light-therapy-hat/s?k=light+therapy+hat")
return skio.imread("results.png"), 'Dermatitis\nDryness\nDandruff', geneticRisks, evolution_plot(age), useful_products
# GUI
title = 'Hair loss prediction'
description = 'Metagenomics Scalp Analysis for Hair Loss Prediction'
# examples = [[f'examples/{name}', 3] for name in sorted(os.listdir('examples'))]
iface = gr.Interface(
fn=predict,
inputs=[
gr.File(value="tmp/metagenome.txt", type='file', label='Scalp sample'),
gr.Textbox(label='Age'),
gr.CheckboxGroup(choices=["Yes", "No", "Do not know"], label="Has the father experienced hair loss ?"),
gr.CheckboxGroup(choices=["0", "1", "2", "Do not know"], label="How many grand-parents have experienced hair loss ?")
],
outputs=[
gr.Image(label='Scalp Metagenomics Analysis Results'),
gr.Text(label='Current issues :'),
gr.Text(label='Genetic Risks :'),
gr.Image(label='Future Evolution'),
gr.Text(label='Useful Care Products')
],
allow_flagging='never',
cache_examples=False,
title=title,
description=description
)
iface.launch()