hernanhgm's picture
Update app.py
abaec85
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()