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")
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