File size: 3,057 Bytes
dab4f35
 
 
 
 
cbb44d4
 
dab4f35
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
abaec85
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
from joblib import load
import numpy as np

def scaler_model_selector():
    file_model = 'classifier.joblib'
    file_scaler = 'scaler.joblib'
    model = load(file_model) 
    scaler = load(file_scaler)
    
    return model, scaler


def calculate_means(L_izda, L_dcha, DV_izda, DV_dcha):
    """
    Calcula la media entre "izda L" y "dcha L" 
    Calcula la media entre "izda DV" y "dcha DV"
    """
    L_media = np.nanmean([L_izda, L_dcha])
    DV_media = np.nanmean([DV_izda, DV_dcha])
    return L_media, DV_media

def process_inputs(measured_values):
    '''
    En la aplicaci贸n se introducen de esta manera:
    'L izda'
    'L dcha'
    'DV izda'
    'DV dcha'
    'antebrazo'
    'long pico'
    'alto pico'
    'longitud total'
    'longitud cabeza'
    
    Mientras que los datos han de entrar al classificador en este orden:
    long cabeza  
    longitud total  
    L_media  
    alto pico  
    DV_media  
    antebrazo  
    long pico
    

    Parameters
    ----------
    measured_values : iterable
        valores introducidos por la aplicacion.

    Returns
    -------
    processed_data : numpy array
        array con los datos ordenados y con forma (1,7) 
        para ser leidos por el clasificador

    '''
    L_izda, L_dcha, DV_izda, DV_dcha, \
    antebrazo, long_pico, alto_pico,  \
    long_total, long_cabeza= measured_values
    
    L_media, DV_media = calculate_means(L_izda, L_dcha, DV_izda, DV_dcha)
    processed_data = [long_cabeza,
                      long_total,
                      L_media,
                      alto_pico,
                      DV_media,
                      antebrazo,
                      long_pico]
    
    processed_data = np.array([processed_data]).reshape(1, -1)
    return processed_data

def classifier(data, model, scaler):
    data_scaled = scaler.transform(data)
    pred = model.predict(data_scaled)
    
    label = ['hembra', 'macho']
    sexo = label[pred[0]]
        
    return sexo


def complete_classification(*measured_values):
    model, scaler = scaler_model_selector()
    data = process_inputs(measured_values)
    sexo = classifier(data, model, scaler)
    
    return sexo

title = "Clasificador del sexo de buitre negro"
description = """
Esta aplicaci贸n se ha creado para clasificar el sexo de los buitres negros completamente desarrolladas. 
El modelo de clasificaci贸n se ha entrenado con 43 machos y 33 hembras condiguiendo una precisi贸n del 92%


"""
demo = gr.Interface(
    fn=complete_classification,
    inputs=[gr.Number(label = 'L izda (mm)'),
            gr.Number(label = 'L dcha (mm)'),
            gr.Number(label = 'DV izda (mm)'),
            gr.Number(label = 'DV dcha (mm)'),
            gr.Number(label = 'antebrazo (cm)'),
            gr.Number(label = 'long pico (mm)'),
            gr.Number(label = 'alto pico (mm)'),
            gr.Number(label = 'longitud total (cm)'),
            gr.Number(label = 'longitud cabeza (mm)')],
    outputs="text",
    title=title,
    description=description
)
demo.launch()