> For the complete documentation index, see [llms.txt](https://docs.augelab.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.augelab.com/spanish/function-blocks/blocks-reference/detections-shapes/detectors/custom-cnn-model.md).

# Custom CNN Model

Este bloque de función te permite cargar un modelo de clasificación de imágenes basado en TensorFlow y ejecutar predicciones sobre imágenes entrantes. Está pensado para usuarios que desean aplicar una red neuronal convolucional entrenada de forma personalizada para clasificar imágenes dentro de un flujo visual.

## 📥 Entradas <a href="#inputs" id="inputs"></a>

`Image Any` La imagen que será clasificada por el modelo cargado.

## 📤 Salidas <a href="#outputs" id="outputs"></a>

`Class Index (Detected)` El índice numérico de la clase predicha.\
`Class Name (Detected)` El nombre legible de la clase (si el modelo proporciona etiquetas de clase).\
`Detection Result (Raw Output)` La salida sin procesar o las puntuaciones que produce el clasificador.

## 🕹️ Controles <a href="#controls" id="controls"></a>

`Load Model` Abre un diálogo de archivos para seleccionar y cargar un archivo de modelo. Los tipos soportados incluyen modelos TensorFlow estándar y modelos TFLite.\
`Classes` Un área de texto que muestra la lista de clases encontrada dentro del modelo cargado (si está disponible).

## 🎨 Características <a href="#features" id="features"></a>

* Importación simple de modelos: carga un modelo entrenado de TensorFlow o TFLite con un solo control.
* Vista previa de etiquetas de clase: el bloque muestra los nombres de clase extraídos del modelo para verificar etiquetas antes de ejecutar.
* Inferencia inmediata: al cargar un modelo, las imágenes entrantes se clasifican y los resultados se envían a las salidas para su uso posterior.
* Salidas para automatización: disponibles tanto el índice numérico como el nombre legible, además de las salidas crudas del modelo para manejo avanzado.

## ⚙️ Funcionamiento <a href="#how-it-works" id="how-it-works"></a>

* Usa el control `Load Model` para importar un archivo de modelo desde el disco.
* Una vez cargado y verificado el modelo, el bloque acepta imágenes a través de la entrada `Image Any`.
* Para cada imagen entrante, el bloque realiza la inferencia y proporciona el `Class Index (Detected)`, el `Class Name (Detected)` opcional y los valores de predicción crudos en las salidas.

## 📝 Instrucciones de uso <a href="#usage" id="usage"></a>

1. Haz clic en el botón `Load Model` y elige tu archivo de modelo. Confirma que la lista de clases aparezca en `Classes` para asegurarte de que el modelo se cargó correctamente.
2. Conecta cualquier fuente de imagen a la entrada `Image Any` (por ejemplo `Camera USB`, `Load Image` o `Stream Reader`).
3. Usa las salidas del bloque para dirigir los resultados de clasificación a bloques de visualización, registro o lógica de decisión.

## 💡 Consejos y trucos <a href="#tips-and-tricks" id="tips-and-tricks"></a>

* Preprocesa las imágenes para que coincidan con el tamaño de entrada esperado por el modelo usando `Image Resizer` o `Image Resize` antes de alimentarlas a este bloque. Esto mejora la consistencia de las predicciones.
* Para ver qué está analizando el modelo, conecta la misma fuente de imagen a `Show Image` para una verificación visual.
* Superpone los resultados de clasificación en las imágenes usando `Write Text On Image` o `Draw Result On Image` para crear salidas visuales fáciles de entender para los operadores.
* Guarda eventos de clasificación con `Image Logger` o exporta resultados numéricos a archivos usando `CSV Export` para análisis posterior.
* Usa `Image ROI Select` o `Image ROI` para recortar áreas relevantes antes de la clasificación si tu modelo espera objetos en una posición fija.
* Combina con `Is None` o `Data Memory` para manejar cuadros faltantes o congelar salidas cuando sea necesario.

## 🛠️ Solución de problemas <a href="#troubleshooting" id="troubleshooting"></a>

* No se muestran clases después de cargar: verifica que el modelo contenga metadatos de etiquetas de clase. Si la lista de clases está vacía, el bloque seguirá emitiendo índices numéricos pero no nombres legibles.
* Modelo no carga: asegúrate de haber seleccionado un archivo de modelo soportado y que la ruta de archivo sea accesible. Si tienes un archivo TFLite o TensorFlow, elige el tipo correspondiente.
* Predicciones inesperadas: confirma que el tamaño de la imagen, los canales de color y el preprocesado coincidan con lo que se usó en el entrenamiento del modelo. Usa `Image Resize`, bloques de conversión de color u otros pasos de preprocesamiento aguas arriba para igualar las condiciones de entrenamiento.
* Inferencia lenta: considera redimensionar las imágenes a un tamaño menor con `Image Resizer` o usar una variante de modelo más ligera antes de desplegar en tiempo real.
