OpenCV: Aprendizaje automático

Profundiza en el uso de algoritmos y redes neuronales en OpenCV para categorizar imágenes y optimizar flujos de trabajo de visión.

Aprende OpenCV GRATIS y certifícate

El aprendizaje automático en OpenCV ofrece un conjunto de herramientas que permiten entrenar y aplicar modelos clásicos y de deep learning en tareas de clasificación y reconocimiento. Con la ayuda de la librería cv2.ml, se pueden crear y gestionar algoritmos como SVM, KNN o árboles de decisión, mientras que el módulo cv2.dnn proporciona métodos para cargar redes neuronales previamente entrenadas.

En un flujo de trabajo típico, se recaban imágenes etiquetadas y se extraen características relevantes. Para ello, se pueden emplear descriptores clásicos como HOG, SIFT u ORB. Con HOG, se calculan histogramas de gradientes en celdas locales, para luego agrupar los valores y formar vectores representativos. Este tipo de descriptores ayuda a capturar la estructura de la imagen:

import cv2 as cv

hog = cv.HOGDescriptor()
descriptor = hog.compute(imagen)

Tras calcular estos vectores para un conjunto de datos, se organizan junto a las etiquetas y se emplean en el entrenamiento de un clasificador.

Para un modelo SVM, se puede emplear cv.ml.SVM_create() y configurar parámetros como kernel o criterio de convergencia. Luego, con train(), se suministran los descriptores y las etiquetas. Un ejemplo básico:

import numpy as np

# Asumiendo que 'datos' es un array con descriptores y 'labels' sus etiquetas
svm = cv.ml.SVM_create()
svm.setType(cv.ml.SVM_C_SVC)
svm.setKernel(cv.ml.SVM_LINEAR)
svm.train(np.array(datos, dtype=np.float32), cv.ml.ROW_SAMPLE, np.array(labels))

Tras el entrenamiento, se utilizan métodos como predict() para clasificar nuevas imágenes. Este enfoque resulta útil cuando se dispone de un dataset moderado y se requiere un pipeline de clasificación con algoritmos tradicionales.

Para escenarios con alta variabilidad, se recomiendan técnicas de deep learning. El módulo cv2.dnn permite cargar y aplicar redes neuronales en formato ONNX, Caffe o TensorFlow. Por ejemplo, para un modelo en formato ONNX, se emplea:

red = cv.dnn.readNetFromONNX("modelo.onnx")
entrada = cv.dnn.blobFromImage(imagen, scalefactor=1/255.0, size=(224, 224))
red.setInput(entrada)
salida = red.forward()

La clasificación se obtiene de salida, que típicamente contiene probabilidades de pertenencia a distintas clases. Para mejorar la precisión de la red, se suele aplicar normalización y un preprocesamiento ajustado a los requerimientos del modelo.

En el ámbito de la detección de objetos, OpenCV incluye arquitecturas como SSD o YOLO, que pueden cargarse de manera similar. Con la función cv.dnn.blobFromImage(), se generan tensores de entrada con un formato adecuado. Posteriormente, se obtienen las coordenadas de los cuadros delimitadores y la confianza de las clases detectadas. Este procedimiento proporciona una aproximación unificada para identificar múltiples instancias en una imagen.

La evaluación de estos sistemas de aprendizaje se realiza con métricas como exactitud, precisión o sensibilidad. En muchas ocasiones, se recopilan datos en un conjunto de validación separado para verificar la capacidad de generalización. De esta forma, si se observa un comportamiento deficiente, se pueden ajustar parámetros o probar otras combinaciones de descriptores y algoritmos.

Para manejar volúmenes grandes de datos o distintos formatos, es habitual combinar estas técnicas con librerías de Python que facilitan la carga y el procesamiento masivo de imágenes. De este modo, se establecen pipelines reproducibles de entrenamiento, evaluación y despliegue, centralizando toda la información necesaria para la toma de decisiones en proyectos de reconocimiento visual.

Empezar curso de OpenCV

Lecciones de este módulo de OpenCV

Lecciones de programación del módulo Aprendizaje automático del curso de OpenCV.

Ejercicios de programación en este módulo de OpenCV

Evalúa tus conocimientos en Aprendizaje automático con ejercicios de programación Aprendizaje automático de tipo Test, Puzzle, Código y Proyecto con VSCode.