Ir al contenido

La información de la cámara

Las cámara son sensores especializados, ya que cuentan con millones de elementos sensibles a la luz y los colores. En visión artificial normalmente se reduce la resolución de la cámara para poder procesar más imágenes por segundo.

  • Un stream o transmisión de video en 10801080 tiene más de dos millones de pixeles.
1 920×1 080=2 073 6001\, 920 \times 1\,080 = 2\,073\, 600
  • El visión artificial se reduce a 480480 o incluso hasta los 240240:
640×480=307 200320×240=76 800\begin{array}{rcr} 640 \times 480 &=& 307\,200\\ 320 \times 240 &=& 76\,800 \end{array}

Teniendo en cuenta que son 33 canales de color, las cámaras ofrecen mucha información del entorno y son excelentes sensores exteroceptivos.

A modo de ejemplo vamos a tomar solo la información de una fila de la matrix de la imagen, colapsando los 33 canales de color a una escala de grises y la vamos a graficar para ver la curva que genera:

  • ¿ Cuál es la escala de la gráfica en xx y yy ?
  • ¿ Cuál es el rango ?
  • ¿ Porqué vibra ?
  • ¿ Qué significa el punto negro ?
Paso 1 — Preparar el entorno
  1. Instale las librerías que faltan:

    Ventana de terminal
    pip install matplotlib scipy
  2. Pegue una tira de cinta aislante negra, de unos 2 cm de ancho, sobre una superficie clara (una hoja blanca o el piso del laboratorio).

  3. Ubique el robot con el celular de la práctica 1 de manera que la cinta cruce la imagen de arriba abajo.

Paso 2 — Ejecutar C03
  1. Descargue C03-plot-grayscale-horizontal-center-line.py, llene IP, PUERTO e IPHONE al inicio, igual que en C01 y, si en la práctica 1 tuvo que cambiar la rotación, cámbiela también aquí.
  2. Ejecútelo. Se abren dos ventanas:
    • Camara: el video con una línea roja horizontal en la fila central y un punto sobre ella.
    • Intensidad de la línea horizontal central: la gráfica de esa fila, píxel por píxel, en escala de grises.
  3. Presione q en la ventana de video para salir.
Paso 3 — Observar la curva
  1. Con el robot quieto, observe la gráfica unos segundos sin tocar nada.
  2. Ubique en la gráfica el valle que produce la cinta y compárelo con el resto de la fila.
  3. Anote los valores mínimo y máximo aproximados de la curva y en qué columna está el valle.
Paso 4 — Hacer experimentos

Cambie una cosa a la vez y anote qué le pasa a la curva y al punto:

  1. Mueva la cinta (o el robot) hacia la izquierda y hacia la derecha.
  2. Tape parcialmente la luz del techo con la mano o una hoja, o encienda la linterna de otro celular cerca.
  3. Quite la cinta de la imagen.
  4. Ponga dos tiras de cinta separadas en la imagen.
Paso 5 — Leer el código que encuentra la línea

Ubique en C03 estas líneas y explique con sus palabras qué hace cada una:

horizontal_line = gray[height // 2, :]
umbral = horizontal_line.mean() * 0.7
pesos = np.maximum(0, umbral - horizontal_line)
centro_x = center_of_mass(pesos)[0]
centro_x = centro_x if not np.isnan(centro_x) else width // 2

Use lo que observó en el paso 4 para relacionar cada experimento con estas líneas: ¿por qué el umbral se calcula con el promedio de la fila y no es un número fijo? ¿Qué pasa cuando no hay ningún píxel por debajo del umbral?

Paso 6 — Responder las preguntas

Con sus anotaciones de los pasos 3 a 5, responda las preguntas de esta práctica. Para la de la vibración, recuerde que el robot y la cinta estaban quietos.