Saltar al contenido
ros tutorial

07: técnicas de aprendizaje automático



El aprendizaje automático es una técnica cada vez más importante en el campo de la visión artificial. A través del aprendizaje automático, podemos entrenar sistemas para detectar y clasificar objetos específicos en una imagen o video utilizando datos previamente etiquetados. OpenCV proporciona una gran cantidad de funciones y herramientas para el uso de técnicas de aprendizaje automático, lo que lo convierte en una opción ideal para el desarrollo de sistemas de visión artificial avanzados.

Uno de los algoritmos de aprendizaje automático más comunes en el campo de la visión artificial es el algoritmo de clasificación SVM (Support Vector Machine). SVM es un algoritmo de aprendizaje automático supervisado que se utiliza para clasificar datos en diferentes categorías. OpenCV proporciona una implementación de SVM que se puede utilizar para clasificar objetos en una imagen o video.

Por ejemplo, si queremos entrenar un sistema SVM para clasificar imágenes de gatos y perros, podemos utilizar el siguiente código:

Subscríbete a nuestro blog

import cv2
import numpy as np
# Cargar los datos de entrenamiento (imágenes de gatos y perros)
data = np.load("training_data.npy")
# Dividir los datos en atributos (imágenes) y etiquetas (gato/perro)
X, y = data[:, :-1], data[:, -1]
# Crear el modelo SVM
svm = cv2.ml.SVM_create()
svm.setType(cv2.ml.SVM_C_SVC)
svm.setKernel(cv2.ml.SVM_LINEAR)
svm.setC(1.0)
# Entrenar el modelo SVM con los datos de entrenamiento
svm.train(X, cv2.ml.ROW_SAMPLE, y)
# Utilizar el modelo SVM para clasificar nuevas imágenes
img = cv2.imread("test_image.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
Extraer características de la imagen
sift = cv2.xfeatures2d.SIFT_create()
kp, des = sift.detectAndCompute(gray, None)
#Utilizar el modelo SVM para clasificar la imagen
result = svm.predict(des)
#Mostrar el resultado de la clasificación
if result[1][0][0] == 0:
print("Gato")
else:
print("Perro")

Este ejemplo muestra cómo se puede utilizar el algoritmo SVM de OpenCV para entrenar un sistema de clasificación con datos previamente etiquetados de imágenes de gatos y perros, y luego utilizar ese sistema para clasificar nuevas imágenes. En este caso, se utiliza el descriptor SIFT para extraer características de las imágenes antes de ser clasificadas.

Otro algoritmo de aprendizaje automático popular en el campo de la visión artificial es el algoritmo de detección de objetos basado en deep learning, como YOLO (You Only Look Once) y SSD (Single Shot MultiBox Detector). Estos algoritmos utilizan redes neuronales profundas para detectar objetos en una imagen o video. OpenCV proporciona una interfaz para utilizar estos algoritmos mediante la carga de un modelo preentrenado.

Por ejemplo, si queremos utilizar el algoritmo YOLO para detectar objetos en una imagen, podemos utilizar el siguiente código:

import cv2
import numpy as np
# Cargar el modelo pre-entrenado de YOLO
net = cv2.dnn.readNetFromDarknet("yolov3.cfg", "yolov3.weights")
# Definir las capas de salida del modelo
ln = net.getLayerNames()
ln = [ln[i[0] - 1] for i in net.getUnconnectedOutLayers()]
# Cargar la imagen
img = cv2.imread("image.jpg")
(H, W) = img.shape[:2]
# Crear un blob a partir de la imagen
blob = cv2.dnn.blobFromImage(img, 1 / 255.0, (416, 16), swapRB=True, crop=False)
# Enviar el blob a la red neuronal
net.setInput(blob)
layerOutputs = net.forward(ln)
# Inicializar las listas para almacenar las detecciones y las probabilidades
boxes = []
confidences = []
# Recorrer las salidas de la capa
for output in layerOutputs:
    # Recorrer las detecciones
    for detection in output:
        # Extraer las probabilidades y las coordenadas de las cajas delimitadoras
        scores = detection[5:]
        classID = np.argmax(scores)
        confidence = scores[classID]
        # Filtrar las detecciones con baja probabilidad
        if confidence > 0.5:
            # Calcular las coordenadas de las cajas delimitadoras
            box = detection[0:4] * np.array([W, H, W, H])
            (centerX, centerY, width, height) = box.astype("int")
            # Calcular las coordenadas de inicio y fin de las cajas delimitadoras
            x = int(centerX - (width / 2))
            y = int(centerY - (height / 2))
            # Actualizar las listas
            boxes.append([x, y, int(width), int(height)])
            confidences.append(float(confidence))
# Aplicar el algoritmo de suavizado de cajas delimitadoras
indices = cv2.dnn.NMSBoxes(boxes, confidences, 0.5, 0.3)
# Dibujar las cajas delimitadoras y las etiquetas en la imagen
for i in indices:
    i = i[0]
    box = boxes[i]
    x, y, w, h = box[0], box[1], box[2], box[3]
    cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
    cv2.putText(img, "Object", (x, y - 15), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
    #Mostrar la imagen con las detecciones
    cv2.imshow("Detecciones", img)
cv2.waitKey()
cv2.destroyAllWindows()

Este ejemplo muestra cómo se puede utilizar un modelo preentrenado de YOLO en OpenCV para detectar objetos en una imagen. En este caso, se utiliza una imagen y se crea un blob a partir de ella antes de enviarlo a la red neuronal. Luego se recorren las salidas de la red neuronal para extraer las detecciones y las probabilidades, y se aplica un algoritmo de suavizado de cajas delimitadoras para reducir la cantidad de detecciones sobrepuestas. Finalmente, se dibujan las cajas delimitadoras y las etiquetas en la imagen para mostrar las detecciones.

En resumen, el uso de técnicas de aprendizaje automático con OpenCV es una forma eficaz de desarrollar sistemas de visión artificial avanzados. OpenCV proporciona una gran cantidad de funciones y herramientas para el uso de algoritmos de aprendizaje automático, incluyendo SVM, redes neuronales y algoritmos de detección de objetos basados en deep learning. Es importante tener un conocimiento previo de la teoría detrás de estas técnicas, saber cómo configurar y utilizar los algoritmos adecuados para el problema específico que se desea resolver y tener habilidades en programación con Python.

Aviso Legal

Política de cookies

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

07:Tutorial visión artificial con OpenCV y Python: Uso de técnicas de aprendizaje automático con OpenCV

  • por