Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

Visión por computador en tiempo real, Unidad 4 — Optimización del preprocesado, 4.2 — Operaciones críticas ·

OpenCV eficiente

OpenCV eficiente

Introducción

En la visión por computador en tiempo real, la optimización del preprocesado es clave para asegurar que los sistemas funcionen con baja latencia y alta precisión. El paquete de herramientas OpenCV (Open Source Computer Vision Library) es una de las bibliotecas más populares para el procesamiento de imágenes y video. Sin embargo, usar OpenCV eficientemente puede ser desafiante debido a la gran cantidad de funciones disponibles y su potencialmente alto coste computacional. En esta unidad, exploraremos cómo optimizar el preprocesado utilizando técnicas efectivas en OpenCV.

Explicación principal con ejemplos

OpenCV proporciona una amplia gama de herramientas para preprocesar imágenes antes de aplicar modelos de visión por computador. Sin embargo, algunas operaciones pueden ser costosas en términos de tiempo y recursos. A continuación, se describen algunas estrategias efectivas para optimizar el uso de OpenCV.

Ejemplo: Reducción de resolución

Una técnica común es reducir la resolución de las imágenes antes de procesarlas. Esto puede disminuir significativamente los costos computacionales sin perder demasiada calidad en muchos casos.

import cv2
import numpy as np

# Carga una imagen
img = cv2.imread('imagen.jpg')

# Reduce la resolución a mitad
resized_img = cv2.resize(img, (int(img.shape[1]/2), int(img.shape[0]/2)))

cv2.imshow('Imagen original', img)
cv2.imshow('Imagen reducida', resized_img)
cv2.waitKey(0)

Ejemplo: Conversión a escala de grises

Convertir las imágenes a escala de grises puede reducir el tiempo de procesamiento, ya que los modelos de visión por computador en tiempo real suelen funcionar mejor con datos en una sola dimensión.

gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow('Imagen en color', img)
cv2.imshow('Imagen en escala de grises', gray_img)
cv2.waitKey(0)

Ejemplo: Uso de ROI dinámicas

En lugar de procesar toda la imagen, identificar y procesar solo las regiones de interés (ROI) relevantes puede disminuir significativamente el tiempo de procesamiento.

# Define una ROI
x, y, width, height = 100, 100, 200, 200

roi = img[y:y+height, x:x+width]

cv2.rectangle(img, (x, y), (x + width, y + height), (0, 255, 0), 3)
cv2.imshow('Imagen original', img)
cv2.imshow('ROI', roi)
cv2.waitKey(0)

Errores típicos / trampas

  1. Copias innecesarias: Algunas funciones de OpenCV realizan copias internas, lo que puede aumentar el tiempo de procesamiento.
   # Error: Crea una copia innecesaria
   img_copy = cv2.copyMakeBorder(img, 10, 10, 10, 10, cv2.BORDER_CONSTANT)
  1. Uso ineficiente de arrays NumPy: Operaciones vectorizadas en NumPy pueden ser más eficientes que operaciones iterativas.
   # Error: Iteración ineficiente
   for i in range(img.shape[0]):
       img[i] = cv2.cvtColor(img[i], cv2.COLOR_BGR2GRAY)
   
   # Corrección: Uso de vectorización
   gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  1. Uso ineficiente de múltiples llamadas a funciones: En lugar de llamar a una función varias veces, combinar las operaciones puede disminuir el tiempo de procesamiento.

Checklist accionable

  • 1. Reduce la resolución de las imágenes.
  • 2. Convierte las imágenes a escala de grises donde sea posible.
  • 3. Identifica y procesa solo las ROI relevantes.
  • 4. Evita copias innecesarias utilizando cv2.getRectSubPix o cv2.bitwise_and.
  • 5. Utiliza vectorización en NumPy para operaciones iterativas.
  • 6. Combina múltiples llamadas a funciones en una sola operación.

Cierre con "Siguientes pasos"

Siguientes pasos

  1. Explora más sobre OpenCV: Familiarízate con las funcionalidades avanzadas de OpenCV para preprocesamiento.
  2. Integra GPU: Si tienes acceso a hardware que soporta CUDA, considera usar cv2.cuda para procesar imágenes en GPU.
  3. Optimiza modelos de deep learning: Comienza a utilizar modelos más ligeros y eficientes como MobileNet o EfficientNet.

Siguiendo estas estrategias, podrás optimizar significativamente el preprocesado en tus sistemas de visión por computador en tiempo real utilizando OpenCV.

Contacto

Indica tu objetivo (ChatGPT, RAG, agentes, automatización) y tu stack (web/backend).