Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
Aplicaciones en reconocimiento de objetos y detección de imágenes El reconocimiento de objetos y la detección de imágenes son dos tareas fundamentales en el campo de la visión por computadora, y han sido revolucionadas por el uso de Convolutional Neural Networks (CNN). Estas aplicaciones tienen un amplio rango de utilidades en diversas industrias y áreas de investigación, desde sistemas de seguridad y conducción autónoma hasta asistentes de visión para personas con discapacidades visuales. A continuación, explicaremos en detalle cada una de estas aplicaciones y proporcionaremos ejemplos matemáticos y de código para ilustrar su funcionamiento. 1. Reconocimiento de Objetos: El reconocimiento de objetos se refiere a la capacidad de una computadora para identificar y clasificar diferentes objetos en una imagen o en una secuencia de imágenes. Esta tarea puede involucrar la clasificación de una sola imagen en una categoría predefinida (por ejemplo, perros, gatos, coches) o el etiquetado de objetos múltiples en una escena compleja. Ejemplo de Reconocimiento de Objetos con CNN: Para ilustrar el reconocimiento de objetos, utilizaremos un ejemplo con el conjunto de datos CIFAR-10, que contiene imágenes de 10 clases diferentes de objetos. Usaremos una CNN para clasificar estas imágenes en sus respectivas categorías. import tensorflow as tf from tensorflow.keras import layers, models, datasets import matplotlib.pyplot as plt # Cargar y preprocesar los datos (train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data() train_images, test_images = train_images / 255.0, test_images / 255.0 # Definir la arquitectura de la CNN model = models.Sequential([ layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)), layers.MaxPooling2D((2, 2)), layers.Conv2D(64, (3, 3), activation='relu'), layers.MaxPooling2D((2, 2)), layers.Conv2D(64, (3, 3), activation='relu'), layers.Flatten(), layers.Dense(64, activation='relu'), layers.Dense(10, activation='softmax') ]) # Compilar el modelo model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) # Entrenar el modelo history = model.fit(train_images, train_labels, epochs=10, validation_data=(test_images, test_labels)) # Evaluar el modelo test_loss, test_acc = model.evaluate(test_images, test_labels) print("Precisión en el conjunto de prueba:", test_acc) En este ejemplo, se define una CNN similar a la explicada anteriormente. La red se entrena con imágenes de entrenamiento y se evalúa su precisión en un conjunto de prueba. 2. Detección de Imágenes: La detección de imágenes implica la identificación y localización de objetos específicos dentro de una imagen. A diferencia del reconocimiento de objetos, la detección busca no solo clasificar los objetos presentes, sino también delimitar sus posiciones mediante cajas delimitadoras. Ejemplo de Detección de Imágenes con YOLO (You Only Look Once): El enfoque YOLO es un algoritmo popular para la detección en tiempo real de objetos en imágenes. A continuación, se presenta un ejemplo de detección de objetos utilizando YOLO con el conjunto de datos COCO, que contiene una amplia variedad de múltiples objetos en categorías. import cv2 import numpy as np import time # Cargar modelo YOLO net = cv2.dnn.readNet("yolov3.weights", "yolov3.cfg") classes = [] with open("coco.names", "r") as f: classes = [line.strip() for line in f.readlines()] layer_names = net.getLayerNames() output_layers = [layer_names[i[0] - 1] for i in net.getUnconnectedOutLayers()] # Cargar imagen y prepararla para la detección img = cv2.imread("imagen.jpg") height, width, channels = img.shape # Detectar objetos blob = cv2.dnn.blobFromImage(img, 0.00392, (416, 416), (0, 0, 0), True, crop=False) net.setInput(blob) outs = net.forward(output_layers) # Procesar detecciones y dibujar cajas delimitadoras class_ids = [] confidences = [] boxes = [] for out in outs: for detection in out: scores = detection[5:] class_id = np.argmax(scores) confidence = scores[class_id] if confidence > 0.5: center_x = int(detection[0] * width) center_y = int(detection[1] * height) w = int(detection[2] * width) h = int(detection[3] * height) x = int(center_x - w / 2) y = int(center_y - h / 2) class_ids.append(class_id) confidences.append(float(confidence)) boxes.append([x, y, w, h]) # Suprimir detecciones múltiples y dibujar cajas delimitadoras finales indexes = cv2.dnn.NMSBoxes(boxes, confidences, 0.5, 0.4) font = cv2.FONT_HERSHEY_PLAIN colors = np.random.uniform(0, 255, size=(len(classes), 3)) for i in range(len(boxes)): if i in indexes: x, y, w, h = boxes[i] label = str(classes[class_ids[i]]) color = colors[class_ids[i]] cv2.rectangle(img, (x, y), (x + w, y + h), color, 2) cv2.putText(img, label, (x, y + 30), font, 3, color, 3) # Mostrar imagen con detecciones cv2.imshow("Detección de Objetos", img) cv2.waitKey(0) cv2.destroyAllWindows() En este ejemplo, utilizamos el modelo YOLO preentrenado para detectar objetos en una imagen. El modelo se carga junto con un archivo de clases que define las categorías de objetos que se pueden detectar. Luego, se procesarán las detecciones y se dibujarán cajas delimitadoras alrededor de los objetos detectados. Conclusiones: El reconocimiento de objetos y la detección de imágenes son aplicaciones fundamentales en visión por computadora con diversas aplicaciones prácticas. Las Convolutional Neural Networks (CNN) han demostrado su eficacia en estas tareas, logrando avances significativos en campos como la conducción autónoma, la medicina, el control de calidad, entre otros.
Compartir