Laboratorio de visión por computador: píxeles, umbrales y recuento de objetos en JupyterLab

Este laboratorio da a cada alumno un JupyterLab propio, con las bibliotecas de imagen de Python ya instaladas: Pillow para abrir y cambiar imágenes, NumPy para los números y scikit-image para los bordes, el etiquetado y la búsqueda de un patrón. La carpeta de trabajo contiene cinco imágenes que dibuja el propio laboratorio, monedas, formas, una carretera, un escaneo de página y una rampa de grises, un cuaderno de partida y scripts cortos, una idea cada uno.

No es un laboratorio de ataque. Ninguna copia tiene salida a internet ni a otros alumnos, así que no se puede descargar nada en ella ni nada de lo que hay dentro puede llegar a otra persona. Enseña las ideas que hay debajo de la visión por computador con píxeles sencillos, sin redes neuronales, y no tiene OpenCV.

Qué aprende el alumnado

Que una imagen es una cuadrícula de números: su tamaño, su modo y el valor de píxeles sueltos. Después, pasar del color al gris y contar cuántos píxeles caen en cada franja, elegir un umbral para separar lo oscuro de lo claro y ver que un nivel separa nueve monedas de un fondo con ruido y otro no, desenfocar un escaneo de página para calmar sus motas, encontrar bordes, contar objetos por etiquetado, cambiar el tamaño y recortar viendo lo que cuesta en tamaño de archivo, y encontrar un trozo de imagen dentro de la imagen por búsqueda de patrones. Sirve para introducciones a la visión por computador, al procesamiento de imágenes y a las matemáticas aplicadas; comprueba la redacción exacta en la unidad de tu propio organismo certificador, aquí no se cita ninguna.

Ejecútalo en tu navegador

El laboratorio inicia un solo servicio, jupyter, que dibuja las imágenes y escribe el cuaderno y los scripts cortos en su carpeta de trabajo, y está listo en unos segundos, dentro de los 512 MB que puede tener un servicio. JupyterLab no pide ningún token, porque la puerta de la plataforma ya sabe quién lo abre. El terminal junto al laboratorio no tiene Python propio: llega al del laboratorio con docker exec jupyter, seguido del comando que se ejecuta dentro. Cada script imprime lo mismo cada vez y guarda una imagen cuando ayuda, que el alumno abre en JupyterLab.

  1. Abre la página Contenedor. Abre «Crear» en la barra y elige «Ejecutar un contenedor». Cualquiera puede abrir la página, y el laboratorio de Git y el de SQL se inician sin cuenta. Todos los demás laboratorios necesitan una cuenta gratuita: crea una, inicia sesión y pulsa «Iniciar».
  2. Busca el laboratorio. La tarjeta «Laboratorios de ejemplo» lista todos los ejemplos. Busca JupyterLab: visión por computador con Pillow y scikit-image.
  3. Pulsa «Iniciar». «Iniciar» lo ejecuta tal cual, con una sola pulsación. «Editar el archivo primero» abre el archivo compose para que lo cambies antes de iniciarlo.
  4. Ábrelo. En la página del laboratorio, la barra del laboratorio tiene un enlace llamado JupyterLab: púlsalo para abrir JupyterLab en tu navegador, abre la carpeta images y haz doble clic en start.ipynb. Después pulsa «Abrir terminal» y escribe docker exec jupyter python3 steps/count.py para contar las monedas: responde 9 objetos, las nueve monedas que dibujó el laboratorio, en tres tamaños.

Qué pedir que entreguen

Un cuaderno propio sobre una de las imágenes que responda a una pregunta que hayan elegido, por ejemplo cuántos píxeles superan un umbral y por qué eligieron ese nivel, cuánto reduce un desenfoque las motas del escaneo de página, o si un solo umbral funciona en todo el escaneo de página con luz desigual, descargado desde JupyterLab con File, Download. Después una o dos frases, con sus propias palabras, sobre lo que encontraron y lo que comprobaron a simple vista. Nada se corrige automáticamente: la frase muestra si se entendió. Para un trabajo más sólido, pide la máscara dibujada junto a la imagen y un recuento comparado con el número que se ve.

Una lección básica en este laboratorio

Computer Vision Basics es una pequeña lección que se practica en este laboratorio. En ella el alumno lista las imágenes, lee un píxel, pasa una imagen a gris, prueba tres umbrales, desenfoca un escaneo con ruido, cuenta las monedas por etiquetado y después abre el mismo trabajo en el cuaderno de partida.

Es pequeña a propósito: muestra a un docente qué es una lección que se practica en un laboratorio, y el laboratorio hace el resto. Cópiala en un módulo tuyo para cambiarla.

El código en GitHub

El archivo compose no tiene Dockerfile: ejecuta una sola imagen pública estándar, la scipy-notebook de los Jupyter Docker Stacks, fijada a una etiqueta con fecha, con su propia cuenta sin privilegios y 512 MB de memoria. La imagen tiene licencia BSD-3-Clause y no la distribuimos nosotros. El archivo dibuja cada imagen a partir de una semilla fija al iniciarse, así que todas las copias tienen los mismos números y no se descarga nada. Los límites son honestos: las imágenes son pequeñas e inventadas, no hay cámara ni fotografía, no hay GPU, no se puede instalar nada desde internet y los métodos son los clásicos, no una red neuronal. Al detener el laboratorio no se conserva nada, así que el alumno descarga antes su cuaderno.

Asignarlo como trabajo

Indica en la tarea qué hay que entregar.

  1. Crea el laboratorio. En tu módulo añade una tarea y elige la tarjeta «Laboratorio de contenedores», y después «En un repositorio de GitHub». Indica https://github.com/mitsurutech/lab-computer-vision con la rama main. El archivo compose es el predeterminado, compose.yaml. Haz un fork del repositorio antes si quieres modificarlo, por ejemplo para dibujar otras imágenes.
  2. Publica y pruébalo. «Publicar» fija el commit que te mostraron, así que un cambio posterior en el repositorio no altera un laboratorio que ya has asignado. Inicia primero tu propia copia.
  3. Asígnalo. Asígnalo como cualquier tarea, con una fecha de entrega si quieres, e indica en la tarea qué hacer y qué entregar.
  4. Califica lo entregado. Abre la copia de un alumno y el trabajo que ha entregado, califícalo y devuélvelo con un motivo si necesita más.

Prueba este laboratorio, y lo que cuesta

Con una cuenta personal gratuita puedes seguir las lecciones básicas de este laboratorio, con crédito gratuito suficiente cada mes para seguir la mayoría de las lecciones y sin tarjeta. Para una clase, un centro tiene gratis sus primeros 365 días, hasta 50 alumnos, y después paga por alumno y año, con todos los laboratorios incluidos y el profesorado gratis.

Preguntas frecuentes

¿Por qué no hay token ni contraseña que escribir?
A la página web de un laboratorio solo se llega por la puerta de la plataforma, que ya sabe quién eres y solo deja pasar a ti y al profesorado de tu módulo. Por eso JupyterLab arranca sin token. No lo ejecutes así en una máquina a la que pueda llegar otra gente.
¿Por qué el terminal usa docker exec jupyter?
El terminal del laboratorio tiene curl, psql y algunos clientes más, pero no Python. docker exec jupyter ejecuta una orden dentro del contenedor del laboratorio, que tiene Python y todas las bibliotecas. JupyterLab también tiene un terminal propio, en File, New, Terminal.
¿Pueden los alumnos usar sus propias fotografías?
Un alumno puede subir una imagen a JupyterLab desde su ordenador y los mismos scripts la abren, pero el laboratorio no descarga nada y la copia no llega a internet. Los números de esta página valen para las imágenes que dibuja el laboratorio. Para cambiarlas, haz un fork del repositorio, cambia cómo las dibuja el archivo compose y fija el fork como laboratorio.