import gradio as gr
import pickle
import pandas as pd
from utils import *
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import sklearn
with open('./model.pickle', 'rb') as model_file:
pipeline = pickle.load(model_file)
def image_score(score):
if score == 'a':
return mpimg.imread('./images/Nutriscore_A.png')
if score == 'b':
return mpimg.imread('./images/Nutriscore_B.png')
if score == 'c':
return mpimg.imread('./images/Nutriscore_C.png')
if score == 'd':
return mpimg.imread('./images/Nutriscore_D.png')
if score == 'e':
return mpimg.imread('./images/Nutriscore_E.png')
def greet(energy, saturated_fats, sugars, fibres, proteins, salt):
"""
This is our main predict function
"""
data_file = pd.DataFrame(columns={
'energy-kcal_100g',
'saturated-fat_100g',
'sugars_100g',
'fiber_100g',
'proteins_100g',
'salt_100g'
})
data_file = data_file.append({
'energy-kcal_100g':float(energy),
'saturated-fat_100g':float(saturated_fats),
'sugars_100g':float(sugars),
'fiber_100g':float(fibres),
'proteins_100g':float(proteins),
'salt_100g':float(salt)
},ignore_index=True)
nutrigrade = pipeline.predict(data_file)
return image_score(nutrigrade[0])
description = (
"Cette inferface vous donne la possibilité de calculer une estimation "\
"du nutri-score du produit de votre choix. Pour cela, vous devez vous munir des valeurs\n"\
"nutritionnelles du produit, qui se trouvent très souvent sur l'arrière du packaging."
)
article = (
"
Aide à l'utilisation
"+
'- Veuillez mettre vos nombres avec des "." et non pas des virgules
'+
'- Veuillez remplir toutes les cases. Si un champ est manquant sur votre étiquette, veuillez remplir le champ avec la valeur 0
'+
'- Si la valeur "sels" n"est pas disponible, veuillez mettre la valeur sodium * 2.5. Cas échéant mettre la valeur 0
'+
"- Le score peut mettre jusqu'à 5 secondes pour s'afficher à la première utilisation. Mais en général c'est souvent immédiat.
"+
'- Veuillez bien choisir les valeurs pour 100g de produit
'+
'
'+
"Informations supplémentaires
"+
"- Notre algorithme se base sur les quantités d'energie, d'acide gras saturés, de sucres, de fibre, de protéines et de sels pour estimer le nutriscore
"+
"- Notre analyse repose sur l'hypothèse que ces 6 facteurs sont les composantes principales du Nutri-score
"+
"- Nous avons entrainé nos modèles sur un échantillon de 350,000 produits
"+
"- Quelques chiffres sur le nutri-score: Lien
"
)
energy_kcal_100g = gr.inputs.Number(
label = 'Energy per 100g (in kcal)'
)
saturated_fats = gr.inputs.Number(
label = 'Saturated fats per 100g (in g)'
)
sugars = gr.inputs.Number(
label = 'Sugars per 100g (in g)'
)
fibres = gr.inputs.Number(
label = 'Fibres per 100g (in g)'
)
proteins = gr.inputs.Number(
label = 'Proteins per 100g (in g)'
)
salt = gr.inputs.Number(
label = 'Salt per 100g (in g) (Note: Salt = Sodium * 2.5)'
)
image = gr.outputs.Image(
label = 'Le Nutri-score estimé est:'
)
iface = gr.Interface(
fn=greet,
inputs=[energy_kcal_100g,saturated_fats,sugars,fibres,proteins,salt],
outputs=image,
article = article,
title = 'Estimation de Nutri-score (Beta)',
description = description,
allow_flagging='never',
theme='default'
)
iface.launch()