Inicio > Cursos > Computer Vision con Python > YOLO: deteccion de objetos en tiempo real
Computer Vision con PythonDeteccion de ObjetosLección 7 de 12

YOLO: deteccion de objetos en tiempo real

YOLO (You Only Look Once) es el modelo mas popular para deteccion de objetos. A diferencia de metodos anteriores que analizan regiones una por una, YOLO procesa TODA la imagen en una sola pasada.

Versiones: • YOLOv5: Ultralytics, muy popular, facil de usar • YOLOv8: Mas preciso, misma interfaz • YOLO11: Ultimo modelo (2024), el mas avanzado

Capacidades: • Detecta 80 clases del dataset COCO: persona, auto, perro, gato, celular, laptop, silla, etc. • 30-60 FPS en GPU, 5-15 FPS en CPU • Variantes: nano (rapido), small, medium, large, xlarge (preciso)

Aplicaciones reales: • Conteo de personas en espacios publicos • Deteccion de vehiculos y peatones (seguridad vial) • Control de calidad en fabricas (detectar defectos) • Monitoreo de inventario en tiendas • Drones autonomos (evitar obstaculos) • Analisis deportivo (tracking de jugadores y balon) • Agricultura (detectar plagas, contar frutas)

# pip install ultralytics
from ultralytics import YOLO
import cv2

# Cargar modelo (se descarga automaticamente)
model = YOLO("yolo11n.pt")  # n=nano, s, m, l, x

# Detectar en imagen
results = model("foto.jpg")
for r in results:
    boxes = r.boxes
    for box in boxes:
        cls = int(box.cls[0])
        conf = float(box.conf[0])
        name = model.names[cls]
        x1, y1, x2, y2 = map(int, box.xyxy[0])
        print(f"{name}: {conf:.2f} en ({x1},{y1})-({x2},{y2})")

# Detectar en webcam en tiempo real
cap = cv2.VideoCapture(0)
while True:
    ret, frame = cap.read()
    if not ret: break
    
    results = model(frame, verbose=False)
    annotated = results[0].plot()  # Dibuja boxes y labels
    
    # Contar objetos por clase
    counts = {}
    for box in results[0].boxes:
        name = model.names[int(box.cls[0])]
        counts[name] = counts.get(name, 0) + 1
    
    y = 30
    for name, count in counts.items():
        cv2.putText(annotated, f"{name}: {count}",
            (10, y), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2)
        y += 25
    
    cv2.imshow("YOLO", annotated)
    if cv2.waitKey(1) & 0xFF == ord("q"): break
cap.release()
# Entrenamiento custom: detectar TUS objetos
from ultralytics import YOLO

# 1. Preparar dataset en formato YOLO:
# dataset/
#   train/
#     images/  (fotos .jpg)
#     labels/  (archivos .txt con coordenadas)
#   val/
#     images/
#     labels/
#
# Cada .txt tiene lineas: clase x_centro y_centro ancho alto
# (valores normalizados 0-1)

# 2. Crear data.yaml:
# train: dataset/train/images
# val: dataset/val/images
# nc: 3  # numero de clases
# names: ["gato", "perro", "pajaro"]

# 3. Entrenar
model = YOLO("yolo11n.pt")  # Partir de modelo pre-entrenado
model.train(
    data="data.yaml",
    epochs=50,
    imgsz=640,
    batch=16,
)

# 4. Usar modelo entrenado
custom = YOLO("runs/detect/train/weights/best.pt")
results = custom("nueva_foto.jpg")
ConsejoPara entrenar YOLO custom usa Roboflow (roboflow.com) para etiquetar imagenes. Sube fotos, dibuja bounding boxes, y exporta en formato YOLO automaticamente.
← Deteccion y reconocimiento facialDeteccion de pose y manos →

Practica esta lección

Resuelve los ejercicios del curso de Computer Vision con Python en la app, gratis y con corrección automática.

Empezar a practicar