11 KiB
Introducción a la Visión por Computadora
Visión por Computadora es una disciplina cuyo objetivo es permitir que las computadoras obtengan una comprensión de alto nivel de las imágenes digitales. Esta es una definición bastante amplia, porque comprender puede significar muchas cosas diferentes, incluyendo encontrar un objeto en una imagen (detección de objetos), entender lo que está sucediendo (detección de eventos), describir una imagen en texto, o reconstruir una escena en 3D. También hay tareas especiales relacionadas con imágenes humanas: estimación de edad y emoción, detección e identificación de rostros, y estimación de pose en 3D, por nombrar algunas.
Cuestionario previo a la clase
Una de las tareas más simples de la visión por computadora es clasificación de imágenes.
La visión por computadora a menudo se considera una rama de la IA. Hoy en día, la mayoría de las tareas de visión por computadora se resuelven utilizando redes neuronales. Aprenderemos más sobre el tipo especial de redes neuronales utilizadas para la visión por computadora, redes neuronales convolucionales, a lo largo de esta sección.
Sin embargo, antes de pasar la imagen a una red neuronal, en muchos casos tiene sentido utilizar algunas técnicas algorítmicas para mejorar la imagen.
Hay varias bibliotecas de Python disponibles para el procesamiento de imágenes:
- imageio se puede usar para leer/escribir diferentes formatos de imagen. También soporta ffmpeg, una herramienta útil para convertir fotogramas de video en imágenes.
- Pillow (también conocido como PIL) es un poco más poderosa y también soporta algunas manipulaciones de imágenes como morfología, ajustes de paleta, y más.
- OpenCV es una poderosa biblioteca de procesamiento de imágenes escrita en C++, que se ha convertido en el estándar de facto para el procesamiento de imágenes. Tiene una interfaz conveniente para Python.
- dlib es una biblioteca de C++ que implementa muchos algoritmos de aprendizaje automático, incluidos algunos de los algoritmos de Visión por Computadora. También tiene una interfaz de Python y se puede usar para tareas desafiantes como la detección de rostros y puntos de referencia faciales.
OpenCV
OpenCV se considera el estándar de facto para el procesamiento de imágenes. Contiene muchos algoritmos útiles, implementados en C++. También puedes llamar a OpenCV desde Python.
Un buen lugar para aprender OpenCV es este curso de Learn OpenCV. En nuestro plan de estudios, nuestro objetivo no es aprender OpenCV, sino mostrarte algunos ejemplos de cuándo se puede utilizar y cómo.
Cargando Imágenes
Las imágenes en Python se pueden representar convenientemente mediante arreglos de NumPy. Por ejemplo, las imágenes en escala de grises con un tamaño de 320x200 píxeles se almacenarían en un arreglo de 200x320, y las imágenes en color de la misma dimensión tendrían una forma de 200x320x3 (para 3 canales de color). Para cargar una imagen, puedes usar el siguiente código:
import cv2
import matplotlib.pyplot as plt
im = cv2.imread('image.jpeg')
plt.imshow(im)
Tradicionalmente, OpenCV utiliza codificación BGR (Azul-Verde-Rojo) para imágenes en color, mientras que el resto de las herramientas de Python utilizan el más tradicional RGB (Rojo-Verde-Azul). Para que la imagen se vea correctamente, necesitas convertirla al espacio de color RGB, ya sea intercambiando dimensiones en el arreglo de NumPy o llamando a una función de OpenCV:
im = cv2.cvtColor(im,cv2.COLOR_BGR2RGB)
Las mismas funciones cvtColor function can be used to perform other color space transformations such as converting an image to grayscale or to the HSV (Hue-Saturation-Value) color space.
You can also use OpenCV to load video frame-by-frame - an example is given in the exercise OpenCV Notebook.
Image Processing
Before feeding an image to a neural network, you may want to apply several pre-processing steps. OpenCV can do many things, including:
- Resizing the image using
im = cv2.resize(im, (320,200),interpolation=cv2.INTER_LANCZOS) - Blurring the image using
im = cv2.medianBlur(im,3)orim = cv2.GaussianBlur(im, (3,3), 0) - Changing the brightness and contrast of the image can be done by NumPy array manipulations, as described in this Stackoverflow note.
- Using thresholding by calling
cv2.threshold/cv2.adaptiveThreshold, que a menudo son preferibles a ajustar el brillo o el contraste. - Aplicando diferentes transformaciones a la imagen:
- Transformaciones afines pueden ser útiles si necesitas combinar rotación, redimensionamiento y sesgo en la imagen y conoces la ubicación de origen y destino de tres puntos en la imagen. Las transformaciones afines mantienen paralelas las líneas paralelas.
- Transformaciones de perspectiva pueden ser útiles cuando conoces las posiciones de origen y destino de 4 puntos en la imagen. Por ejemplo, si tomas una foto de un documento rectangular a través de la cámara de un smartphone desde algún ángulo, y quieres hacer una imagen rectangular del documento mismo.
- Entendiendo el movimiento dentro de la imagen utilizando flujo óptico.
Ejemplos de uso de la Visión por Computadora
En nuestro Cuaderno de OpenCV, damos algunos ejemplos de cuándo se puede usar la visión por computadora para realizar tareas específicas:
- Preprocesamiento de una fotografía de un libro en Braille. Nos enfocamos en cómo podemos usar umbralización, detección de características, transformación de perspectiva y manipulaciones de NumPy para separar símbolos individuales de Braille para su posterior clasificación por una red neuronal.
![]() |
![]() |
![]() |
|---|
Imagen de OpenCV.ipynb
- Detectando movimiento en video utilizando la diferencia de fotogramas. Si la cámara está fija, entonces los fotogramas de la transmisión de la cámara deberían ser bastante similares entre sí. Dado que los fotogramas se representan como arreglos, al restar esos arreglos de dos fotogramas subsiguientes obtendremos la diferencia de píxeles, que debería ser baja para fotogramas estáticos y aumentar una vez que haya un movimiento sustancial en la imagen.
Imagen de OpenCV.ipynb
-
Detectando movimiento utilizando Flujo Óptico. El flujo óptico nos permite entender cómo se mueven los píxeles individuales en los fotogramas de video. Hay dos tipos de flujo óptico:
- Flujo Óptico Denso calcula el campo de vectores que muestra para cada píxel hacia dónde se está moviendo.
- Flujo Óptico Escaso se basa en tomar algunas características distintivas en la imagen (por ejemplo, bordes) y construir su trayectoria de un fotograma a otro.
Imagen de OpenCV.ipynb
✍️ Cuadernos de Ejemplo: OpenCV intenta OpenCV en Acción
Hagamos algunos experimentos con OpenCV explorando OpenCV Notebook
Conclusión
A veces, tareas relativamente complejas como la detección de movimiento o la detección de yemas de los dedos pueden resolverse puramente con visión por computadora. Por lo tanto, es muy útil conocer las técnicas básicas de visión por computadora y lo que bibliotecas como OpenCV pueden hacer.
🚀 Desafío
Mira este video del AI show para aprender sobre el proyecto Cortic Tigers y cómo construyeron una solución basada en bloques para democratizar las tareas de visión por computadora a través de un robot. Investiga otros proyectos como este que ayuden a incorporar nuevos aprendices en el campo.
Cuestionario posterior a la clase
Revisión y Autoestudio
Lee más sobre el flujo óptico en este gran tutorial.
Tarea
En este laboratorio, tomarás un video con gestos simples, y tu objetivo es extraer movimientos arriba/abajo/izquierda/derecha utilizando flujo óptico.
Descargo de responsabilidad:
Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Si bien nos esforzamos por la precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de malentendidos o malas interpretaciones que surjan del uso de esta traducción.




