File size: 3,575 Bytes
0e7d51b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12cdc01
0e7d51b
 
 
 
 
 
 
 
bd99180
0e7d51b
 
 
 
12cdc01
0e7d51b
12cdc01
0e7d51b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12cdc01
0e7d51b
 
 
 
 
 
 
12cdc01
0e7d51b
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
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 = (
    "<h2>Aide à l'utilisation</h2>"+
    '<p><ul><li>Veuillez mettre vos nombres avec des "." et non pas des virgules</li>'+
    '<li>Veuillez remplir toutes les cases. Si un champ est manquant sur votre étiquette, veuillez remplir le champ avec la valeur 0</li>'+
    '<li>Si la valeur "sels" n"est pas disponible, veuillez mettre la valeur sodium * 2.5. Cas échéant mettre la valeur 0</li>'+
    "<li>Le score peut mettre jusqu'à 5 secondes pour s'afficher à la première utilisation. Mais en général c'est souvent immédiat.</li>"+
    '<li>Veuillez bien choisir les valeurs pour 100g de produit</li></ul></p>'+
    '<br>'+
    "<h2>Informations supplémentaires</h2>"+
    "<p><ul><li>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</li>"+
    "<li>Notre analyse repose sur l'hypothèse que ces 6 facteurs sont les composantes principales du Nutri-score</li>"+
    "<li>Nous avons entrainé nos modèles sur un échantillon de 350,000 produits</li>"+
    "<li>Quelques chiffres sur le nutri-score: <a href='https://solidarites-sante.gouv.fr/IMG/pdf/nutriscorebilan3ans.pdf'>Lien</a></li></ul></p>"
)

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()