AI-For-Beginners/translations/it/lessons/4-ComputerVision/06-IntroCV
Pikachú 5d34bc4eb8 Add support documentation and translations for various lessons 2025-02-12 16:09:04 +00:00
..
lab Add support documentation and translations for various lessons 2025-02-12 16:09:04 +00:00
README.md Add support documentation and translations for various lessons 2025-02-12 16:09:04 +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, porque comprensión 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 emociones, 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 utilizar 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, incluyendo algunos de los algoritmos de Visión por Computadora. También tiene una interfaz de Python y se puede utilizar 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 Aprende OpenCV. En nuestro currículo, nuestro objetivo no es aprender OpenCV, sino mostrarte algunos ejemplos de cuándo se puede usar y cómo.

Cargando Imágenes

Las imágenes en Python pueden ser representadas de manera conveniente por 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 a 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 a 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) or im = 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.
  • Aplicar 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 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 deseas hacer una imagen rectangular del documento en sí.
  • Comprender 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:

  • Pre-procesar 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 Braille Imagen de Braille Pre-procesada Símbolos de Braille

Imagen de OpenCV.ipynb

  • Detectar movimiento en video utilizando 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, al restar esos arreglos de dos fotogramas subsecuentes 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 fotogramas de video y diferencias de fotogramas

Imagen de OpenCV.ipynb

  • Detectar 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 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 un fotograma a otro.

Imagen de Flujo Óptico

Imagen de OpenCV.ipynb

✍️ Cuadernos de Ejemplo: OpenCV prueba OpenCV en acción

Hagamos algunos experimentos con OpenCV explorando Cuaderno de OpenCV

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 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 programa de IA 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 sobre otros proyectos como este que ayuden a nuevos aprendices a ingresar al campo.

Cuestionario posterior a la clase

Revisión y Autoestudio

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

Asignación

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

Marco de Movimiento de Palma

Disclaimer: This document has been translated using machine-based AI translation services. While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation.