De «qué es un píxel» a «sistema desplegado que factura». 85 nodos en 12 etapas, y 57 de ellos con el número real medido al construirlo — no «ONNX es más rápido en CPU», sino «35 FPS contra 13».
Antes de las redes: qué es una imagen para un computador y por qué el espacio de color cambia lo que puedes medir.
Una imagen es un array (alto, ancho, 3) de enteros 0-255 en orden BGR.
Por qué: Todo lo demás son operaciones sobre esa matriz. OpenCV usa BGR y no RGB: invertir los canales por descuido cambia los colores y arruina cualquier medida.
HSV separa el TONO (H) de la iluminación (V). BGR los mezcla.
Por qué: Una excavadora a pleno sol y otra en sombra comparten el mismo H, pero sus valores BGR no se parecen en nada. Sin este cambio de espacio no se puede detectar 'amarillo' de forma robusta.
📏 Medido: OpenCV usa H de 0 a 179, no 0 a 359. El amarillo de maquinaria cae en H 18-36.
Deslizar un kernel pequeño sobre la imagen multiplicando y sumando.
Por qué: Es la operación única sobre la que se construye TODA la visión moderna. Si no la ves aplicada píxel a píxel, las CNN son magia.
Abrir una cámara, fijar resolución y formato de compresión.
Por qué: El códec es lo que decide si tienes 16 FPS o 1 FPS, y no es evidente.
📏 Medido: Hay que fijar MJPG ANTES que la resolución o no surte efecto. Sin MJPG, dos webcams a 720p dejan una en 1,0 FPS y el desfase en 888 ms (inservible).
Métrica de solape entre dos cajas: intersección dividida por unión.
Por qué: Es la herramienta que responde '¿estas dos cajas hablan del mismo objeto?'. Se usa en NMS, en tracking, en fusión de detectores y en las métricas.
Media exponencial móvil para que una señal ruidosa deje de temblar.
Por qué: La pose y las cajas tiemblan cuadro a cuadro. Sin suavizar, cualquier umbral se dispara decenas de veces por segundo.
📏 Medido: Con alfa 0,45 la EMA recorta ~5° los picos de un ángulo. Por eso el umbral de rodilla en el lab de remo está en 145° y no en 150°.
distancia = (ancho de escena × focal) / ancho del sensor.
Por qué: Decide si tu cámara cabe en la sala. Es la diferencia entre comprar el lente correcto y comprar dos veces.
📏 Medido: Sensor 1/2.9" = 5,02×3,75 mm. Con lente de 8 mm a 3 m capturas 1,88 m de ancho; una palada de remo necesita 2,5-3 m. El M12 de 6 mm da 2,5 m: era el correcto.
Qué hay dentro de la caja: de un kernel de 3×3 a un backbone que extrae 256 mapas de características.
Suma ponderada de entradas más sesgo, pasada por una no linealidad.
Por qué: Sin la no linealidad, apilar capas da lo mismo que una sola capa: toda la potencia de la profundidad viene de ahí.
Muchos kernels aprendidos en paralelo; cada uno produce un mapa.
Por qué: Las primeras capas aprenden bordes; las profundas, partes de objetos. Verlo con tus propias imágenes es lo que hace que deje de ser abstracto.
Bajar la resolución conservando lo importante.
Por qué: Es lo que permite que una red vea contexto grande sin explotar en cómputo, y explica de dónde salen las tres escalas de YOLO.
Extraer características → mezclar escalas → predecir.
Por qué: Es la anatomía común a casi todos los detectores. Entenderla te deja leer cualquier paper nuevo sin empezar de cero.
Cuánta imagen original ve una neurona profunda.
Por qué: Explica por qué los objetos pequeños se detectan en la escala fina y los grandes en la gruesa, y por qué una placa lejana simplemente no se lee.
En lugar de kernels locales, atención global entre parches.
Por qué: Es la familia de RT-DETR y de los modelos de vocabulario abierto. Cambia el compromiso: más precisión, más coste, sin NMS.
📏 Medido: RT-DETR-L: 23-30 FPS y 9 detecciones donde yolo11n hace 60-79 FPS y 5. No hay 'mejor modelo': hay frontera de Pareto.
Del tensor de salida a la caja que ves en pantalla. Los cuatro pasos que todo el mundo usa y casi nadie sabe explicar.
You Only Look Once: predecir todas las cajas de una vez, sin propuestas previas.
Por qué: Es lo que lo hace viable en tiempo real. Los detectores de dos etapas son más precisos y no sirven para vídeo en vivo.
8400 posiciones candidatas × (4 coordenadas + 80 clases).
Por qué: Sin entender de dónde salen los 8400 no puedes depurar una exportación a ONNX ni escribir el postproceso a mano en el navegador.
📏 Medido: 8400 = 80² + 40² + 20² : las tres escalas de la cabeza sobre una entrada de 640.
Cada candidato trae una puntuación; por debajo del umbral se descarta.
Por qué: Es la perilla que decide entre perder objetos y llenarte de basura. No hay valor universal: depende de qué te cuesta más, el falso positivo o el negativo.
De varias cajas solapadas sobre el mismo objeto, quedarse con la mejor.
Por qué: Sin NMS cada objeto sale con 20 cajas encima. Y su umbral de IoU es la causa típica de que dos objetos juntos se fusionen en uno.
Tres generaciones de cómo se propone una caja.
Por qué: Explica por qué RT-DETR no necesita NMS y por qué su latencia es más estable.
La misma arquitectura escalada en anchura y profundidad.
Por qué: La intuición dice 'usa el más grande que aguante tu GPU'. A veces es gratis subir de tamaño, y saber cuándo requiere medir, no suponer.
📏 Medido: En este equipo /remo_feed (yolo11s-pose), /pose_feed (11n) y /video_feed dan los MISMOS ~15 FPS: el cuello de botella es la WEBCAM, no el modelo. Usar el modelo 's' sale gratis.
Cómo leer lo que devuelve Ultralytics: xyxy, conf, cls, id, masks, keypoints.
Por qué: Es la API con la que trabajas todos los días. Y esconde trampas: los IDs de tracking pueden ser None en el primer cuadro.
Detección, clasificación, segmentación, pose, tracking y vocabulario abierto. Cada una con su laboratorio.
Cajas y clases sobre 80 categorías de COCO.
Por qué: Es la base de casi todo producto de visión.
📏 Medido: GPU en frío ~82 ms por inferencia; caliente ~10 ms → ~32 FPS reales.
Una etiqueta para la imagen entera, sin cajas.
Por qué: Es la tarea más barata de entrenar con datos propios: no hace falta etiquetar cajas, solo meter fotos en carpetas.
Máscara por píxel en vez de caja.
Por qué: Cuando necesitas el área real y no un rectángulo: superficie de una lesión, recorte limpio de un objeto, medida de ocupación.
Esqueleto humano en el formato COCO.
Por qué: Es la puerta a medir MOVIMIENTO: ángulos articulares, fases de un gesto, técnica.
Mantener la identidad del mismo objeto entre cuadros.
Por qué: Sin ID no hay historia; sin historia no hay conteo, ni permanencia, ni votación de placa. Es el cimiento de cualquier medida temporal.
📏 Medido: Requiere el paquete `lap`. Los IDs pueden faltar en el primer cuadro. Y solo sigue lo que detecta COCO: lo que aporta otro detector llega SIN ID.
Geometría sobre las cajas: dentro/fuera, y cruce con dirección.
Por qué: Es el 80 % de los productos vendibles de visión: aforo, entradas, salidas.
Pose entrenada sobre el dataset hand-keypoints.
Por qué: Interfaces sin contacto y lenguaje de señas. MediaPipe sería el camino corto pero no funciona en Python 3.13.
📏 Medido: Dataset de 26.768 imágenes, 369 MB. El entrenamiento de 12 épocas (~1 h) quedó INTERRUMPIDO: `modelos/hand_pose.pt` no existe todavía.
EasyOCR sobre el recorte de una detección.
Por qué: Convierte 'hay un camión' en 'entró el camión ABC123'. Es lo que hace facturable un sistema de acceso.
📏 Medido: Restringir el alfabeto (allowlist) es la mejora barata más grande que existe. Y hay que limitar la escala: ampliar ×3 fijo revienta con 'Unable to allocate 26 MiB'.
Bloques ya hechos: heatmap, blur, contador, región, velocidad, zona, cola, vision eye, gym.
Por qué: Ahorra semanas cuando el caso encaja. Y cuando no encaja, verlas te dice cómo se estructura la solución que sí necesitas.
Cuando el modelo preentrenado no conoce tu problema. Datos, transfer learning, métricas y las trampas de Windows.
Fotos por carpeta de clase, con variedad de luz, ángulo y fondo.
Por qué: La calidad del dataset domina el resultado mucho más que la arquitectura. Un dataset grabado en un solo sitio da un modelo que solo funciona ahí.
Partir de pesos preentrenados y reajustar sobre tus clases.
Por qué: Con 50 fotos por clase obtienes algo usable; desde cero necesitarías miles. Es lo que hace viable un modelo propio en una tarde.
📏 Medido: CRÍTICO en Windows: usar `workers=0` en model.train() o el DataLoader se cuelga.
Un detector propone cajas, SAM las convierte en máscaras y sale un dataset de segmentación.
Por qué: Etiquetar máscaras a mano es lo más caro de la visión. Esto lo convierte en revisión.
📏 Medido: `auto_annotate` NO acepta FastSAM como sam_model: hay que usar mobile_sam o sam_b.
Qué mide cada una y por qué una sola nunca basta.
Por qué: En medicina el recall (no perder un enfermo) pesa más que la precisión; en un control de acceso al revés. La métrica se elige por el coste del error.
El modelo memoriza el entrenamiento y empeora en datos nuevos.
Por qué: La curva de validación es la única señal honesta. Sin partición de validación no sabes nada de tu modelo.
Pipeline completo captura → entrena → controla, con anti-rebote.
Por qué: Es el ejemplo de que un problema aparentemente difícil (leer la mano) se resuelve con la herramienta más simple que funcione.
📏 Medido: Anti-rebote de 4 cuadros estables + 1 disparo por gesto. `modelos/clasificador_gestos.pt` falta: hay que re-entrenar.
Detectar lo que el modelo nunca entrenó, describiéndolo con palabras. Y las trampas que trae esa magia.
Un codificador que pone frases e imágenes en el mismo espacio vectorial.
Por qué: Es el mecanismo detrás de todo el vocabulario abierto. Sin CLIP no hay YOLO-World ni YOLOE.
📏 Medido: Ultralytics lo busca en WEIGHTS_DIR/clip, NO en ~/.cache/clip. Y el antivirus bloquea la descarga: hay que bajarlo con `curl --ssl-no-revoke`.
Le pasas una lista de términos y detecta esas clases sin entrenar nada.
Por qué: Resuelve en horas lo que un detector propio tarda semanas. Es la técnica que hizo posible el laboratorio vehicular.
📏 Medido: GOTCHA: `model.to('cuda:0')` ANTES de `set_classes`, o revienta con 'tensors on cuda:0 and cpu'. Y `r.names` es dict tras el primer set_classes y LISTA tras el segundo.
Los términos compiten entre sí: añadir uno puede empeorar los demás.
Por qué: Es el hallazgo más contraintuitivo de todo el curso, y no está en ningún tutorial.
📏 Medido: Con `mobile crane` en la lista, dos excavadoras salen clasificadas GRÚA (0,37 y 0,26). Sin él: `excavator` 0,50. Y un BUS urbano sale como 'mula' con 0,94 — más confianza que la excavadora real.
El vocabulario abierto puntúa cuál de TUS términos encaja mejor, no si alguno encaja.
Por qué: Es la trampa conceptual central de la técnica. Una confianza de 0,94 sobre una etiqueta absurda no es un fallo del modelo: es que no le diste la opción correcta.
Segmentación sin clases: separa todo lo que hay, sin saber qué es.
Por qué: Útil para auto-etiquetado y para medir áreas cuando no necesitas nombre.
📏 Medido: FastSAM-s en vivo ~16 FPS.
Une vocabulario abierto y segmentación: la máscara de cualquier objeto que nombres.
Por qué: Es el estado del arte de 'ver cualquier cosa' en tiempo real.
📏 Medido: `get_text_pe` descarga mobileclip_blt.ts (~600 MB) y el antivirus lo corta (Curl 35). Hay que bajarlo con resume y dejar copia en el CWD.
Dos ramas en paralelo (COCO + vocabulario abierto) unidas por IoU y un puntaje.
Por qué: Ningún modelo solo cubre el problema. Saber COMBINARLOS es lo que separa una demo de un producto.
📏 Medido: En cascada detectó 0 de 4 máquinas; en paralelo, 4 de 4 sin falsos positivos. El error era que si COCO no da caja, una cascada no tiene qué filtrar.
Lo que ningún tutorial cuenta y es donde se pierden los días: GPU, VRAM, ancho de banda USB, cámaras y memoria.
venv con versiones fijadas y una GPU que de verdad se usa.
Por qué: El 'me funciona en mi máquina' empieza aquí.
📏 Medido: Python 3.13.13 (NO 3.14: PyTorch no lo soporta). torch 2.6.0+cu124, Ultralytics 8.4.92, OpenCV 5.0.
La primera inferencia paga la carga de pesos y la compilación de kernels.
Por qué: Si mides el rendimiento con el primer cuadro, tus números son basura.
📏 Medido: En frío ~82 ms; caliente ~10 ms. Cargar YOLO+World+EasyOCR: 12 s el primer cuadro. RTX 3060 Laptop = 6 GB de VRAM: tres modelos entran justos.
No siempre falla la GPU: a menudo falla la RAM.
Por qué: Los errores no dicen la verdad. 'CUDA out of memory' puede ser presión de RAM del sistema, y aparece de forma intermitente.
📏 Medido: Con Chrome ocupando ~2,5 GB y 3 GB libres de 15,7: falla `Unable to allocate 2.64 MiB`. Hay que cerrar Chrome antes de correr algo pesado.
Varias cámaras en el mismo controlador comparten el bus y se estrangulan.
Por qué: Es el fallo que más tiempo cuesta diagnosticar porque parece un problema de software.
📏 Medido: Sin MJPG, dos webcams a 720p: una a 1,0 FPS y 888 ms de desfase. Con MJPG a 640×480: 16 FPS y 36 ms. Barrido completo en el informe 2.0.
Obturador global, GenICam, trigger por hardware, mono vs color.
Por qué: Una webcam vale para validar y no para certificar. Y la ficha técnica esconde las decisiones que importan.
📏 Medido: Innomaker IMX296: 1456×1088 @60 fps, obturador global, mono, $286,99. REGLA: no contar puertos de una tarjeta PCIe, buscar cuántos CHIPS controladores declara.
Las limitaciones físicas que no aparecen en ninguna especificación.
Por qué: Un cable fuera de norma degrada de forma INTERMITENTE, que es el peor modo de fallo: se diagnostica mal porque parece software.
📏 Medido: USB 3.0 pasivo garantiza ~3 m: un cable de 5 m está fuera de especificación. Salidas: montar a ≤3 m (gratis) o fibra activa.
Fuente configurable: índice USB o URL RTSP/HTTP.
Por qué: En instalaciones reales la cámara ya existe y es IP. Pero muchas domésticas son cloud-only y no dan stream local.
📏 Medido: La VTA+ KRONY 3 del usuario es Tuya/Smart Life: sin RTSP local. Vía Tuya IoT Cloud sigue dando [1106] permission deny. Pendiente confirmar el data center.
Avast intercepta el TLS y rompe las descargas de pesos.
Por qué: Se manifiesta como errores de red incomprensibles en mitad de un entrenamiento.
📏 Medido: Parche global `ssl._create_default_https_context = _create_unverified_context` SOLO en local. Y `openssl s_client` desde el PC muestra 'Avast Web Shield' como emisor: hay que verificar los certificados DESDE el servidor.
Del .pt de desarrollo al modelo que corre en un navegador, en una CPU o en el borde.
Convertir el modelo a un formato que corra sin PyTorch.
Por qué: Es la diferencia entre un prototipo y algo instalable. Y cada formato tiene su destino.
📏 Medido: onnx y torchscript se exportan en este entorno; TensorRT/CoreML/TFLite exigen el SDK del destino. Salidas: yolo11n.onnx 10,7 MB.
Medir el mismo modelo en tres escenarios antes de decidir.
Por qué: Las ganancias prometidas y las medidas no coinciden, y solo las medidas sirven para dimensionar hardware.
📏 Medido: RTX 3060: .pt@GPU ~90 FPS · .pt@CPU ~13 FPS · .onnx@CPU ~35 FPS. ONNX es 2,2-2,6× más rápido que PyTorch EN CPU. En GPU la ventaja se diluye.
onnxruntime-web ejecutando el modelo en la GPU del cliente.
Por qué: Resuelve un problema de negocio real: el servidor no tiene GPU ni cámara, y el vídeo nunca sale del equipo del usuario (privacidad por diseño).
📏 Medido: `ort.min.js` NO trae backend WebGPU → hay que usar `ort.webgpu.min.js`. Con el bundle normal cae a WASM 1 hilo = 2,6 FPS (inservible). Con WebGPU: 16 FPS, igual que el nativo con CUDA.
Cabeceras necesarias para que WASM use varios hilos en el navegador.
Por qué: Sin ellas te quedas en un hilo y el rendimiento es inservible. Y obligan a servir onnxruntime en local, no desde CDN.
📏 Medido: COOP `same-origin` + COEP `require-corp`, puestas en Flask Y en el `location /static/` de nginx (que no pasa por Flask).
El modelo caro corre cada N cuadros; entre medias se reutiliza su resultado.
Por qué: Es cómo se mete un modelo lento en tiempo real sin perder lo que aporta.
📏 Medido: Rama B consultada en el 10 % de los cuadros (23 de 226) manteniendo 14,7 FPS. En vídeo es correcto: una excavadora no aparece y desaparece en 300 ms.
Ante un fallo de recursos, apagar la parte cara y seguir sirviendo.
Por qué: Un control de acceso que se cae por falta de VRAM es peor que uno que detecta menos.
📏 Medido: Al agotar la GPU: se libera caché, se apaga la rama B, se reintenta una vez, y el operador lo ve en el diagnóstico con la cámara aún funcionando.
Pasar de 'detecto' a 'mido con error conocido'. Es donde un proyecto se vuelve certificable.
Tres keypoints definen un ángulo; suavizado y con signo cuando hace falta.
Por qué: Es la medida básica de cualquier análisis de movimiento.
Un ángulo 2D depende del punto de vista.
Por qué: Si dos cámaras dan valores distintos del mismo ángulo, ninguna es la verdad. Sin 3D no puedes poner una tolerancia.
📏 Medido: El MISMO ángulo medido en 2D desde dos cámaras dio 123,6° y 131,0°: 7,4° de discrepancia. En 3D hay un único valor con 0,66° de error.
Intrínsecos, extrínsecos y triangulación de puntos.
Por qué: Es el único camino a medidas en milímetros. Y la calibración ES el experimento: sin ella el 3D es matemática sin anclaje.
📏 Medido: Validado con cámaras sintéticas: calibración 0,16 px, estéreo 0,18 px, longitudes con 2,0-4,9 mm de error (criterio <5 mm). PERO `datos/calibracion/` está VACÍA: nunca se calibró con tablero real.
Validar que el resultado es anatómica o físicamente plausible.
Por qué: Un sistema de medida sin control de cordura reporta números imposibles con total seguridad.
📏 Medido: `verificar_escala()` exige fémur 350-520 mm y tibia 330-480 mm. Si no cuadra, la calibración está mal.
Confirmar extremos retroactivamente en vez de disparar por cruce de umbral.
Por qué: Disparar en el umbral sesga tiempos y ángulos, y el error es sistemático: no se ve como ruido, se ve como un resultado creíble y falso.
📏 Medido: El cruce de umbral daba ratio 0,97 donde el valor real era 2,0. Se arregla rastreando min/max y fechando el evento en el instante del extremo real.
Reglas que descartan lo que no puede ser un evento real.
Por qué: LA LECCIÓN CENTRAL DEL CURSO: un detector de eventos SIEMPRE encuentra eventos.
📏 Medido: Sin filtros, una persona sentada al computador generó 78 PALADAS FANTASMA en un minuto. Con filtros: amplitud ≥40°, drive 0,3-4 s, ciclo 1-10 s.
Generar la entrada con la respuesta conocida y comprobar la salida.
Por qué: Un vídeo real no trae etiqueta. Sin banco sintético no puedes saber si tu medida es correcta, solo si es plausible.
📏 Medido: Remero paramétrico con 6 casos (técnica correcta = 100 pts, sentado sin remar = 0 fantasmas). Y una excavadora real desplazada sobre un fondo para el lab vehicular.
Web, roles, base de datos, informes firmados, despliegue y el marco legal. Donde el 90 % de los proyectos se queda.
Un stream multipart que el navegador consume como imagen.
Por qué: Es la forma más simple de poner visión en una interfaz sin WebRTC.
📏 Medido: Flask con `threaded=True` es imprescindible: el stream ocupa un hilo entero mientras dura y sin eso la interfaz se congela.
Contador de espectadores, lock y apertura defensiva.
Por qué: Dos pestañas abiertas sobre el mismo stream cerraban la cámara al salir la primera.
📏 Medido: `retener()`/`soltar()` con contador `viewers`, y try/except en `abrir()` para evitar 'Unknown C++ exception' al reiniciar streams.
Un solo método decide todos los permisos del sistema.
Por qué: Permitir que la autorización se disperse por las vistas es cómo se filtran datos. En un punto se audita de un vistazo y se prueba con un test.
📏 Medido: `Usuario.puede(accion)` con 4 roles. La matriz completa se verifica en test_rutas: 9 combinaciones rol×ruta.
Guardar la versión del modelo, la explicación y el hash del informe.
Por qué: Sin esto no puedes defender un resultado seis meses después, ni distinguir un cambio de modelo de un cambio de realidad.
📏 Medido: `modelo_version` + `porque` legible + `Reporte.hash_sha256`. Y la lectura original NUNCA se sobrescribe: la corrección va a un campo aparte.
ReportLab más matplotlib en backend Agg.
Por qué: El PDF es el entregable que el cliente enseña. Un PDF descuadrado destruye la credibilidad de un sistema que funciona bien.
📏 Medido: 3 reglas aprendidas a golpes: `leading` explícito o el título se solapa; NO fijar ancho y alto a ojo (leer el tamaño real y derivar); KeepTogether para que el encabezado no quede huérfano. NO WeasyPrint: exige GTK en Windows.
Script idempotente que sube, instala, arranca y publica con HTTPS.
Por qué: El despliegue a mano es donde se pierden los sitios que ya funcionaban.
📏 Medido: TRAMPA REAL: certbot MODIFICA el mismo .conf que generas, así que regenerarlo BORRA el bloque 443 y tumba el HTTPS. Fix: si el conf ya tiene ssl_certificate, se conserva intacto.
Secure, HttpOnly, SameSite, ProxyFix y una clave de sesión persistente.
Por qué: Exponer a internet lo que funcionaba en localhost abre agujeros que no existían.
📏 Medido: Flask-Login NO usa las claves SESSION_COOKIE_*: hay que fijar aparte REMEMBER_COOKIE_SECURE/HTTPONLY/SAMESITE/DURATION o la cookie de 'recordarme' viaja sin Secure y con un año de vida.
Detectar en runtime si el equipo tiene cámara y GPU, y degradar la interfaz.
Por qué: El mismo código corre en la estación del laboratorio y en un VPS pelado. Suponerlo rompe el despliegue.
📏 Medido: RowLab en el VPS usa 183 MB de RAM porque NO instala torch: dos requirements distintos (laboratorio vs servidor), y opencv-python-HEADLESS o no arranca sin libGL.
Consentimiento, retención limitada y aviso de privacidad.
Por qué: Una placa es dato personal indirecto y una foto puede capturar rostros. En Colombia lo rige la Ley 1581/2012, y no es opcional.
📏 Medido: Consentimiento OBLIGATORIO para registrar; fotos purgadas a 30 días conservando el registro numérico; el informe se titula 'evaluación' y no 'certificado' mientras los umbrales no estén validados.
Que lo medido en el laboratorio llegue al servidor de gestión.
Por qué: Hoy cada instalación tiene su propia base de datos y los datos están partidos. Es la misma deuda en RowLab y en GETS Acceso.
📏 Medido: RowLab local: 12 sesiones y 103 paladas. RowLab en el VPS: 2 mediciones. Dos universos separados.
Tres verticales completos. Aquí se ve que el modelo es el 20 % del problema y el dominio el 80 %.
Comparar un detector COCO contra FastSAM sobre radiografías reales.
Por qué: Demuestra de la forma más brutal que 'el modelo solo reconoce lo que se le enseñó': YOLO dice 'person', 'cat', 'bed' sobre una radiografía de tórax.
📏 Medido: 5 muestras reales de dominio público. Enseña sensibilidad vs especificidad y por qué se vende triaje y asistencia, NO diagnóstico (INVIMA/FDA).
Medir la técnica de remada: 3 ángulos, fases, ritmo, secuencia y 5 errores clásicos.
Por qué: Es el proyecto más profundo del curso: de pose 2D a triangulación 3D, con producto desplegado y datos reales de uso.
📏 Medido: 12 sesiones y 103 paladas registradas. Tasa de aceptación 12,8 % (103 válidas de 805 ciclos): los filtros funcionan, pero hay que instrumentar QUÉ filtro rechaza.
Autos, camiones, mulas, grúas y maquinaria amarilla + lectura de placa + entradas/salidas.
Por qué: Enseña a FUSIONAR detectores, que es la habilidad que separa demo de producto.
📏 Medido: 4 de 4 máquinas detectadas y 0 falsos positivos. Subtipo correcto solo 3 de 4. 16,9 FPS en el panel.
OCR de matrícula NIC/IMO con validación de la norma DIMAR 0692-2021.
Por qué: Primer proyecto donde la VALIDACIÓN por reglas arregla al OCR. El dígito verificador del IMO es calculable: se puede rechazar una lectura imposible.
📏 Medido: Leyó AAA23E98F329-3 con 0,98 de confianza en GPU, 31 FPS. Tablas de material y propulsión declaradas PARCIALES (lo honesto).
Leucocoria y glaucoma para una clínica real.
Por qué: Uso interno con marco médico-legal explícito.
Aplicar el método a un dominio nuevo: agro, retail, seguridad industrial, logística.
Por qué: El método ya está probado tres veces. Lo que falta es elegir dónde hay cliente.
Convertir capacidad técnica en algo que alguien pague. La parte que casi ningún curso de visión toca.
Mapear cada técnica aprendida a un producto y a quién lo compra.
Por qué: Sin este paso acumulas demos. Con él, cada clase nueva es una línea de negocio potencial.
Setup + suscripción, y la calculadora de MRR/ARR.
Por qué: El precio decide el producto, no al revés.
El sistema recomienda y registra; el humano decide y firma.
Por qué: Es a la vez lo legalmente defendible y lo comercialmente vendible. Y es lo que permite desplegar antes de tener validación estadística.
📏 Medido: GETS Acceso NO abre la talanquera: muestra semáforo y registra. RowLab emite 'informe de evaluación', no 'certificado'.
Umbrales sin validar contra población real, y marco legal.
Por qué: Puedes tener 87 pruebas en verde y un producto que no se puede vender.
📏 Medido: RowLab: faltan 30-50 atletas y entrenadores para validar los umbrales. GETS Acceso: ninguna placa colombiana real ha pasado por el sistema.
MICOVI RowLab en producción y GETS Acceso listo para desplegar.
Por qué: La prueba de que el método llega hasta el final.
📏 Medido: rowlab.micovisport.com con HTTPS, 4 roles, PDF trazable y uso real del cliente. 26 sitios en el mismo VPS sin tocarlos.
Llevar RowLab y GETS Acceso al sitio de la empresa.
Por qué: GETS vende 'IA y chatbots' de forma genérica mientras tiene visión por computador desplegada y funcionando. Es el activo comercial más fuerte y está invisible.
Cada nodo tiene detrás una clase con teoría, informe técnico y código comentado que puedes ejecutar.