AI-For-Beginners/translations/es/lessons/4-ComputerVision/06-IntroCV
leestott 464396d431 🌐 Update translations via Co-op Translator 2025-08-24 10:52:15 +00:00
..
lab 🌐 Update translations via Co-op Translator 2025-08-24 10:52:15 +00:00
README.md 🌐 Update translations via Co-op Translator 2025-08-24 10:52:15 +00:00

README.md

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, ya que comprender puede significar muchas cosas, incluyendo encontrar un objeto en una imagen (detección de objetos), entender qué 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 emociones, detección e identificación de rostros, y estimación de poses en 3D, por nombrar algunas.

Cuestionario previo a la clase

Una de las tareas más simples de la visión por computadora es la 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 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 usar algunas técnicas algorítmicas para mejorar la imagen.

Existen varias bibliotecas de Python disponibles para el procesamiento de imágenes:

  • imageio se puede usar para leer/escribir diferentes formatos de imágenes. También admite ffmpeg, una herramienta útil para convertir fotogramas de video en imágenes.
  • Pillow (también conocido como PIL) es un poco más potente y también admite algunas manipulaciones de imágenes como morphing, ajustes de paleta y más.
  • OpenCV es una 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 en Python.
  • dlib es una biblioteca en C++ que implementa muchos algoritmos de aprendizaje automático, incluyendo algunos de los algoritmos de visión por computadora. También tiene una interfaz en Python y se puede usar para tareas desafiantes como la detección de rostros y puntos clave 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 usar 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 usar y cómo.

Cargar 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 la 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)

La misma función cvtColor se puede usar para realizar otras transformaciones de espacio de color, como convertir una imagen a escala de grises o al espacio de color HSV (Matiz-Saturación-Valor).

También puedes usar OpenCV para cargar fotogramas de video uno por uno; se da un ejemplo en el ejercicio OpenCV Notebook.

Procesamiento de imágenes

Antes de alimentar una imagen a una red neuronal, es posible que desees aplicar varios pasos de preprocesamiento. OpenCV puede hacer muchas cosas, incluyendo:

  • Redimensionar la imagen usando im = cv2.resize(im, (320,200),interpolation=cv2.INTER_LANCZOS)
  • Desenfocar la imagen usando im = cv2.medianBlur(im,3) o im = cv2.GaussianBlur(im, (3,3), 0)
  • Cambiar el brillo y contraste de la imagen se puede hacer mediante manipulaciones de arreglos de NumPy, como se describe en esta nota de Stackoverflow.
  • Usar umbralización llamando a las funciones cv2.threshold/cv2.adaptiveThreshold, lo cual a menudo es preferible a ajustar el brillo o contraste.
  • Aplicar diferentes transformaciones a la imagen:
    • Transformaciones afines pueden ser útiles si necesitas combinar rotación, redimensionamiento e inclinación en la imagen y conoces la ubicación de origen y destino de tres puntos en la imagen. Las transformaciones afines mantienen las líneas paralelas 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 con la cámara de un smartphone desde algún ángulo y quieres hacer una imagen rectangular del documento en sí.
  • Entender el movimiento dentro de la imagen usando flujo óptico.

Ejemplos de uso de la Visión por Computadora

En nuestro OpenCV Notebook, damos algunos ejemplos de cuándo se puede usar la visión por computadora para realizar tareas específicas:

  • Preprocesar 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 Braille Imagen Braille Preprocesada Símbolos Braille

Imagen de OpenCV.ipynb

  • Detectar movimiento en video usando diferencia de fotogramas. Si la cámara está fija, entonces los fotogramas del flujo de la cámara deberían ser bastante similares entre sí. Dado que los fotogramas se representan como arreglos, simplemente al restar esos arreglos de dos fotogramas consecutivos obtendremos la diferencia de píxeles, que debería ser baja para fotogramas estáticos y volverse más alta cuando haya un movimiento sustancial en la imagen.

Imagen de fotogramas de video y diferencias de fotogramas

Imagen de OpenCV.ipynb

  • Detectar movimiento usando Flujo Óptico. 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 vectorial 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 fotograma a fotograma.

Imagen de Flujo Óptico

Imagen de OpenCV.ipynb

✍️ Ejemplo de Notebooks: OpenCV prueba 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 la punta de los dedos se pueden resolver únicamente mediante 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 mediante un robot. Investiga otros proyectos como este que ayudan a nuevos aprendices a iniciarse en el campo.

Cuestionario posterior a la clase

Revisión y Autoestudio

Lee más sobre flujo óptico en este excelente tutorial.

Asignación

En este laboratorio, tomarás un video con gestos simples, y tu objetivo será extraer movimientos hacia arriba/abajo/izquierda/derecha usando flujo óptico.

Fotograma de Movimiento de Palma

Descargo de responsabilidad:
Este documento ha sido traducido utilizando el servicio de traducción automática Co-op Translator. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse como la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de malentendidos o interpretaciones erróneas que puedan surgir del uso de esta traducción.