Spaces:
Sleeping
Sleeping
File size: 8,711 Bytes
5cf41d0 ace06e3 4e570c9 cc3562b 6d1143c 4e570c9 2ca1b49 ace06e3 4e570c9 ace06e3 ebf42ac ace06e3 4e570c9 ace06e3 ebf42ac ace06e3 4e570c9 ace06e3 ebf42ac ace06e3 4e570c9 ace06e3 4e570c9 ace06e3 4e570c9 ace06e3 ebf42ac ace06e3 4e570c9 ace06e3 ebf42ac ace06e3 4e570c9 ace06e3 4e570c9 ebf42ac |
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 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 |
import gradio as gr
from huggingface_hub import InferenceClient
import os
from transformers import pipeline
import numpy as np
from model import SAMPLING_RATE, FEATURE_EXTRACTOR
token = os.getenv("HF_TOKEN")
# modelo = "mixed-data"
modelo = "cry-detector"
pipe = pipeline(
"audio-classification",
model=f"A-POR-LOS-8000/distilhubert-finetuned-{modelo}",
use_auth_token=token
)
client = InferenceClient("meta-llama/Meta-Llama-3-8B-Instruct", token=token)
# client = InferenceClient("mistralai/Mistral-Nemo-Instruct-2407", token=token)
def respond(
message,
history: list[tuple[str, str]],
system_message,
max_tokens,
temperature,
top_p,
):
messages = [{"role": "system", "content": system_message}]
for val in history:
if val[0]:
messages.append({"role": "user", "content": val[0]})
if val[1]:
messages.append({"role": "assistant", "content": val[1]})
messages.append({"role": "user", "content": message})
response = ""
for message in client.chat_completion(
messages,
max_tokens=max_tokens,
stream=True,
temperature=temperature,
top_p=top_p,
):
token = message.choices[0].delta.content
response += token
yield response
my_theme = gr.themes.Soft(
primary_hue="emerald",
secondary_hue="green",
neutral_hue="slate",
text_size="sm",
spacing_size="sm",
font=[gr.themes.GoogleFont('Nunito'), 'ui-sans-serif', 'system-ui', 'sans-serif'],
font_mono=[gr.themes.GoogleFont('Nunito'), 'ui-monospace', 'Consolas', 'monospace'],
).set(
body_background_fill='*neutral_50',
body_text_color='*neutral_600',
body_text_size='*text_sm',
embed_radius='*radius_md',
shadow_drop='*shadow_spread',
shadow_spread='*button_shadow_active'
)
def mostrar_pagina_1():
return gr.update(visible=False), gr.update(visible=True)
def mostrar_pagina_2():
return gr.update(visible=False), gr.update(visible=True)
def redirigir_a_pantalla_inicial():
return gr.update(visible=True), gr.update(visible=False)
def transcribe(audio):
_, y = audio
y = y.astype(np.float32) # con torch.float32 da error
y /= np.max(np.abs(y))
results = pipe({"sampling_rate": SAMPLING_RATE, "raw": y})
top_result = results[0] # Get the top result (most likely classification)
label = top_result["label"] # Extract the label from the top result
return label
with gr.Blocks(theme=my_theme) as demo:
with gr.Column(visible=True, elem_id="pantalla-inicial") as pantalla_inicial:
gr.HTML(
"""
<style>
@import url('https://fonts.googleapis.com/css2?family=Lobster&display=swap');
@import url('https://fonts.googleapis.com/css2?family=Roboto&display=swap');
h1 {
font-family: 'Lobster', cursive;
font-size: 5em !important;
text-align: center;
margin: 0;
}
.gr-button {
background-color: #4CAF50 !important;
color: white !important;
border: none;
padding: 15px 32px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 16px;
margin: 4px 2px;
cursor: pointer;
border-radius: 12px;
}
.gr-button:hover {
background-color: #45a049;
}
h2 {
font-family: 'Lobster', cursive;
font-size: 3em !important;
text-align: center;
margin: 0;
}
p.slogan, h4, p, h3 {
font-family: 'Roboto', sans-serif;
text-align: center;
}
</style>
<h1>Iremia</h1>
<h4 style='text-align: center; font-size: 1.5em'>Tu aliado para el bienestar de tu bebé</h4>
"""
)
gr.Markdown(
"<h4 style='text-align: left; font-size: 1.5em;'>¿Qué es Iremia?</h4>"
)
gr.Markdown(
"<p style='text-align: left'>Iremia es un proyecto llevado a cabo por un grupo de estudiantes interesados en el desarrollo de modelos de inteligencia artificial, enfocados específicamente en casos de uso relevantes para ayudar a cuidar a los más pequeños de la casa.</p>"
)
gr.Markdown(
"<h4 style='text-align: left; font-size: 1.5em;'>Nuestra misión</h4>"
)
gr.Markdown(
"<p style='text-align: left'>Sabemos que la paternidad puede suponer un gran desafío. Nuestra misión es brindarles a todos los padres unas herramientas de última tecnología que los ayuden a navegar esos primeros meses de vida tan cruciales en el desarrollo de sus pequeños.</p>"
)
gr.Markdown(
"<h4 style='text-align: left; font-size: 1.5em;'>¿Qué ofrece Iremia?</h4>"
)
gr.Markdown(
"<p style='text-align: left'>Iremia ofrece dos funcionalidades muy interesantes:</p>"
)
gr.Markdown(
"<p style='text-align: left'>Predictor: Con nuestro modelo de inteligencia artificial, somos capaces de predecir por qué tu hijo de menos de 2 años está llorando. Además, tendrás acceso a un asistente personal para consultar cualquier duda que tengas sobre el cuidado de tu pequeño.</p>"
)
gr.Markdown(
"<p style='text-align: left'>Monitor: Nuestro monitor no es como otros que hay en el mercado, ya que es capaz de reconocer si un sonido es un llanto del bebé o no, y si está llorando, predice automáticamente la causa, lo cual te brindará la tranquilidad de saber siempre qué pasa con tu pequeño y te ahorrará tiempo y muchas horas de sueño.</p>"
)
with gr.Row():
with gr.Column():
gr.Markdown("<h2>Predictor</h2>")
boton_pagina_1 = gr.Button("Prueba el predictor")
gr.Markdown("<p>Descubre por qué llora tu bebé y resuelve dudas sobre su cuidado con nuestro Iremia assistant</p>")
with gr.Column():
gr.Markdown("<h2>Monitor</h2>")
boton_pagina_2 = gr.Button("Prueba el monitor")
gr.Markdown("<p>Un monitor inteligente que detecta si tu hijo está llorando y te indica el motivo antes de que puedas levantarte del sofá</p>")
with gr.Column(visible=False) as pagina_1:
with gr.Row():
with gr.Column():
gr.Markdown("<h2>Predictor</h2>")
audio_input = gr.Audio(
min_length=1.0,
# max_length=10.0,
format="wav",
# type="numpy",
label="Baby recorder"
),
classify_btn = gr.Button("¿Por qué llora?")
classification_output = gr.Textbox(label="Tu bebé llora por:")
classify_btn.click(transcribe, inputs=audio_input, outputs=classification_output)
with gr.Column():
gr.Markdown("<h2>Assistant</h2>")
system_message = "You are a Chatbot specialized in baby health and care."
max_tokens = 512
temperature = 0.7
top_p = 0.95
chatbot = gr.ChatInterface(
respond,
additional_inputs=[
gr.State(value=system_message),
gr.State(value=max_tokens),
gr.State(value=temperature),
gr.State(value=top_p)
],
)
gr.Markdown("Este chatbot no sustituye a un profesional de la salud. Ante cualquier preocupación o duda, consulta con tu pediatra.")
boton_volver_inicio_1 = gr.Button("Volver a la pantalla inicial")
boton_volver_inicio_1.click(redirigir_a_pantalla_inicial, inputs=None, outputs=[pantalla_inicial, pagina_1])
with gr.Column(visible=False) as pagina_2:
gr.Markdown("<h2>Monitor</h2>")
gr.Markdown("Contenido de la Página 2")
boton_volver_inicio_2 = gr.Button("Volver a la pantalla inicial")
boton_volver_inicio_2.click(redirigir_a_pantalla_inicial, inputs=None, outputs=[pantalla_inicial, pagina_2])
boton_pagina_1.click(mostrar_pagina_1, inputs=None, outputs=[pantalla_inicial, pagina_1])
boton_pagina_2.click(mostrar_pagina_2, inputs=None, outputs=[pantalla_inicial, pagina_2])
demo.launch()
|