coder
update model
8525e66
raw
history blame
10 kB
from core.controllers.pages_controller import Page
from core.controllers.main_process import Generador
class Home(Page):
variables_globales = {
"prompt": "cat,fish,dog",
"img_bytes": None,
"img_src": None,
"settings": {
"model": str("CIDAS/clipseg-rd64-refined"),
"tokenizer": str("CIDAS/clipseg-rd64-refined"),
},
"img_output": None,
"predicciones": None,
"fuentes": [
{"titulo": "Papper",
"url": "https://arxiv.org/abs/2112.10003"},
{"titulo": "Transformers",
"url": "https://huggingface.co/docs/transformers/v4.32.1/en/index"},
{"titulo": "Modelo CIDAS/ClipSeg-rd64-refined",
"url": "https://huggingface.co/CIDAS/clipseg-rd64-refined"},
{"titulo": "Repositorio",
"url": "https://huggingface.co/CIDAS/clipseg-rd64-refined"},
{"titulo": "Material Apoyo",
"url": "https://github.com/NielsRogge/Transformers-Tutorials/blob/master/CLIPSeg/Zero_shot_image_segmentation_with_CLIPSeg.ipynb"},
{"titulo": "IO",
"url": "https://pypi.org/project/io/"},
{"titulo": "PIL",
"url": "https://pypi.org/project/Pillow/"},
{"titulo": "requests",
"url": "https://pypi.org/project/requests/"},
{"titulo": "timm",
"url": "https://pypi.org/project/timm/"},
{"titulo": "matplotlib",
"url": "https://pypi.org/project/matplotlib/"}]
}
archivos_css = ["main",
"home"]
def __init__(self, title=str("Bienvenido"), icon=str("🖼️"), init_page=False):
super().__init__()
if init_page:
self.new_page(title=title,
icon=icon)
self.init_globals(globals=self.variables_globales)
for archivo in self.archivos_css:
self.cargar_css(archivo_css=archivo)
self.about()
def about(self):
self.builder().sidebar.markdown(unsafe_allow_html=False,
help=None,
body="""
## Tema
La segmentación de imágenes es el proceso de dividir una imagen en segmentos o regiones significativas.
Puede ser de diferentes tipos, como la segmentación semántica (asignación de etiquetas de clase a píxeles) o la segmentación basada en contornos (división de una imagen en áreas definidas por bordes).
Esta técnica es ampliamente utilizada en visión por computadora para analizar y comprender imágenes.
## Recursos
""")
for fuente in self.get_global('fuentes'):
self.builder().sidebar.markdown(
unsafe_allow_html=False,
help=None,
body=f"""
* **{fuente.get('titulo')}** - {fuente.get('url')}
"""
)
self.builder().sidebar.markdown(
unsafe_allow_html=False,
help=None,
body="""
###### Es **importante** mencionar que esta **compilación** se encuentra en proceso de **construcción**.
*Si deseas **participar**, eres **bienvenido** de aportar en el repositorio oficial:*
https://github.com/coder160/cuadernos/
""")
def obtener_bytes(self, archivo):
self.set_global(key='img_src',
value=archivo)
def actualizar_modelo_tokenizer(self, modelo, tokenizer):
self.set_global(key='settings',
value={'model': modelo,
'tokenizer': tokenizer})
def procesar_imagen(self, prompt):
proceso = Generador(configuraciones=self.get_global('settings'))
proceso.generar_prediccion(
imagen_bytes=self.imgg.open(
self.get_global('img_src')).convert("RGB"),
new_prompt=prompt
)
self.set_global(key='predicciones', value=proceso.prediccion)
def expander_instrucciones(self, placeholder):
instrucciones = placeholder.expander(expanded=False,
label="Instrucciones")
instrucciones.markdown(unsafe_allow_html=False,
help=None,
body="""
1. **Cargue su Imagen Base**:
Elija cualquiera de las dos opciones para cargar su imagen:
* **Desde su Galería**: cargue la imagen desde la galería de su teléfono o computadora.
* **Desde su Cámara**: cargue la imagen directamente desde la cámara de su teléfono o computadora.
2. **Detectar / Predecir**:
Realice la **detección de objetos** con base a las predicciones realizadas por el **modelo** pre-entrenado seleccionado.
A partir del dataset con el que fue pre-entrenado el modelo, tratará de predecir cuales son los objetos en la imagen cargada.
* **Configuraciones Avanzadas**:
*Elija un modelo y procesador de la lista disponible, o elija uno directamente de la base de modelos disponible en HuggingFace.*
""")
def expander_imagen_base(self, placeholder):
imagen_base = placeholder.container()
imagen_base.markdown(unsafe_allow_html=False,
help=None,
body="""
**Cargue su Imagen Base**:
""")
archivo_expander = imagen_base.expander(expanded=False,
label="Desde su Galería")
_archivo = archivo_expander.file_uploader(label="Galería",
on_change=None,
accept_multiple_files=False,
label_visibility="visible")
if (archivo_expander.button(label="Cargar Archivo", type="secondary", use_container_width=True,
help="Suba un archivo.") and _archivo is not None):
self.obtener_bytes(_archivo)
camara_expander = imagen_base.expander(expanded=False,
label="Desde su Cámara")
_captura = camara_expander.camera_input(label="Cámara",
on_change=None,
label_visibility="visible")
if (camara_expander.button(label="Cargar Captura", type="secondary", use_container_width=True,
help="Tome una fotografía.") and _captura is not None):
self.obtener_bytes(_captura)
def expander_configuraciones(self, placeholder):
configuraciones = placeholder.expander(
expanded=False, label="Configuraciones Avanzadas")
modelo = configuraciones.text_input(
label="MODELO", on_change=None, label_visibility="visible",
value=self.get_global('settings').get('model'))
tokenizer = configuraciones.text_input(
label="TOKENIZER", on_change=None, label_visibility="visible",
value=self.get_global('settings').get('tokenizer'))
if configuraciones.button(label="Configurar", type="secondary", use_container_width=True,
help="Actualice configuraciones"):
self.actualizar_modelo_tokenizer(modelo, tokenizer)
def resultados(self, placeholder):
resultados = placeholder.container()
if self.get_global('img_src', None) is not None:
resultados.image(
image=self.get_global('img_src').getvalue(),
caption="Su resultado",
use_column_width="auto",
channels="RGB",
output_format="auto"
)
if self.get_global('predicciones', None) is not None:
for i, predict in enumerate(self.get_global('predicciones', [])):
resultados.image(
image=predict,
caption=f"Su predicción {i}",
use_column_width="auto",
channels="RGB",
output_format="auto"
)
def agregar_card_base(self, columna):
card_principal = columna.container()
columna_inputs, columna_outputs = card_principal.columns(
[0.3, 0.7], gap="small")
self.expander_instrucciones(columna_inputs)
self.expander_imagen_base(columna_inputs)
self.expander_configuraciones(columna_inputs)
columna_inputs.markdown(unsafe_allow_html=False,
help=None,
body="""
**Introduzca palabras de búsqueda**:
""")
prompt = columna_inputs.text_input(
label="Prompt", on_change=None, label_visibility="visible",
value=self.get_global('prompt'))
if columna_inputs.button(label="Detectar / Predecir", help="Realizar Predicciones",
type="secondary", use_container_width=True):
self.procesar_imagen(prompt)
self.resultados(columna_outputs)
def build(self):
columna_principal = self.get_body().columns(1, gap="small")[0]
self.agregar_card_base(columna_principal)
if __name__ == "__main__":
Home(init_page=True).build()