coder160's picture
livedemo
e8e0c14
raw
history blame
5.39 kB
from core.controllers.pages_controller import Page
from core.controllers.main_process import Generador
class Live_Demo(Page):
variables_globales = {
"img_bytes": None,
"img_src": None,
"settings": {
"model": str("google/vit-base-patch16-224"),
"tokenizer": str("google/vit-base-patch16-224"),
},
"img_output": None,
"predicciones": None,
}
archivos_css = ["main",
"live_demo"]
def __init__(self, title=str("Live-Demo"), icon=str("🖼️"), init_page=False):
super().__init__()
if init_page:
self.new_page(title=title, icon=icon)
self.new_body(True)
self.init_globals(globals=self.variables_globales)
for archivo in self.archivos_css:
self.cargar_css(archivo_css=archivo)
def obtener_bytes(self, archivo):
self.set_global(key='img_src', value=archivo)
self.set_global(key='img_bytes', value=archivo.getvalue())
def actualizar_modelo_tokenizer(self, modelo, tokenizer):
_settings = {'model': modelo,
'tokenizer': tokenizer}
self.set_global(key='settings', value=_settings)
def procesar_imagen(self):
proceso = Generador(configuraciones=self.get_global('settings'))
proceso.generar_prediccion(imagen_bytes=self.imgg.open(self.get_global('img_src')).convert("RGB"))
self.set_global(key='img_output', value=self.get_global('img_bytes'))
self.set_global(key='predicciones', value=proceso.prediccion)
def archivo_expander(self, section):
archivo_expander = section.expander(
expanded=False,
label="Desde su galería"
)
_archivo = archivo_expander.file_uploader(
label="GALERIA",
accept_multiple_files=False,
label_visibility="visible"
)
if (archivo_expander.button(label="Cargar Archivo", help="Suba un archivo.",
type="secondary", use_container_width=True) and _archivo is not None):
self.obtener_bytes(_archivo)
def camara_expander(self, section):
camara_expander = section.expander(
expanded=False,
label="Desde su cámara"
)
_captura = camara_expander.camera_input(
label="CAMARA",
label_visibility="visible"
)
if (camara_expander.button(label="Cargar Captura", help="Tome una fotografía.",
type="secondary", use_container_width=True) and _captura is not None):
self.obtener_bytes(_captura)
def preview_expander(self, section):
preview = section.expander(
expanded=True,
label="Todo listo"
)
if self.get_global('img_bytes', None) is not None:
preview.image(
image=self.get_global('img_bytes'),
caption="Su imagen",
use_column_width="auto",
channels="RGB",
output_format="auto"
)
if preview.button(label="LAUNCH", help="Procesar imagen",
type="secondary", use_container_width=True):
self.procesar_imagen()
def config_expander(self, section):
modelo = section.text_input(
label="MODELO",
value=self.get_global('settings').get('model'),
key=None,
help=None,
on_change=None,
disabled=False,
label_visibility="visible"
)
tokenizer = section.text_input(
label="TOKENIZER",
value=self.get_global('settings').get('tokenizer'),
key=None,
help=None,
on_change=None,
disabled=False,
label_visibility="visible"
)
if section.button(label="Configurar", help="Actualice configuraciones",
type="secondary", use_container_width=True):
self.actualizar_modelo_tokenizer(modelo, tokenizer)
def agregar_card_inputs(self, columna):
card_inputs = columna.container()
source_tab, config_tab = card_inputs.tabs(
["Imagen", "Configuraciones"]
)
self.archivo_expander(source_tab)
self.camara_expander(source_tab)
self.config_expander(config_tab)
self.preview_expander(card_inputs)
def agregar_card_outputs(self, columna):
card_teoria = columna.container()
result_tab, process_tab = card_teoria.tabs(
["Resultado", "Proceso"]
)
if self.get_global('img_output', None) is not None:
result_tab.image(
image=self.get_global('img_output'),
caption="Su resultado",
use_column_width="auto",
channels="RGB",
output_format="auto"
)
if self.get_global('predicciones', None) is not None:
result_tab.success(body=self.get_global('predicciones'), icon=None)
def build(self):
# secciones
columna_inputs, columna_outputs = self.get_body().columns(2, gap="small")
self.agregar_card_inputs(columna_inputs)
self.agregar_card_outputs(columna_outputs)
if __name__ == "__main__":
Live_Demo(init_page=True).build()