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