Site logo
Tác giả
  • avatar Nguyễn Đức Xinh
    Name
    Nguyễn Đức Xinh
    Twitter
Ngày xuất bản
Ngày xuất bản

Ứng dụng OpenCV + YOLO để phát hiện người và vật thể trong video thời gian thực Chi tiết

Giới thiệu

Trong thời đại AI và Machine Learning, khả năng phát hiện người và vật thể (Object Detection) trong video thời gian thực là nền tảng cho nhiều ứng dụng thông minh như camera giám sát, xe tự lái, đếm người, hoặc hệ thống phân tích hành vi. Hai công nghệ nổi bật trong lĩnh vực này là OpenCVYOLO (You Only Look Once) — khi kết hợp, chúng tạo nên một giải pháp mạnh mẽ, hiệu quả, và có thể chạy trên thời gian thực ngay cả trên thiết bị tầm trung.


1. Tổng quan về OpenCV và YOLO

🔹 OpenCV là gì?

OpenCV (Open Source Computer Vision Library) là thư viện mã nguồn mở chuyên về xử lý ảnh và thị giác máy tính. Nó hỗ trợ nhiều tính năng như:

  • Xử lý ảnh (filter, edge detection, transform…)
  • Phát hiện khuôn mặt, theo dõi chuyển động
  • Làm việc với camera và video stream
  • Tích hợp dễ dàng với Python, C++, Java

🔹 YOLO là gì?

YOLO là mô hình Deep Learning dùng để phát hiện đối tượng (Object Detection) trong ảnh và video. Điểm mạnh của YOLO:

  • Nhanh: xử lý ảnh theo cơ chế “you only look once” – chỉ nhìn một lần để dự đoán tất cả bounding box.
  • Chính xác: cân bằng tốt giữa tốc độ và độ chính xác.
  • Đa dạng: hỗ trợ nhiều phiên bản như YOLOv3, v5, v7, v8 (phiên bản mới nhất từ Ultralytics).

2. Quy trình phát hiện người và vật thể trong video thời gian thực

Bước 1: Cài đặt môi trường

pip install opencv-python ultralytics

Bước 2: Tải mô hình YOLO

Sử dụng YOLOv8 (Ultralytics):

from ultralytics import YOLO

model = YOLO("yolov8n.pt")  # mô hình nhỏ (fast)

Bước 3: Mở camera hoặc video

import cv2

cap = cv2.VideoCapture(0)  # 0 = webcam, hoặc truyền đường dẫn video

Bước 4: Chạy phát hiện đối tượng

while True:
    ret, frame = cap.read()
    if not ret:
        break

    results = model(frame)
    annotated_frame = results[0].plot()  # vẽ bounding box

    cv2.imshow("Detection", annotated_frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

👉 Khi chạy script này, bạn sẽ thấy video stream với các bounding box hiển thị tên vật thể như person, car, dog,… trong thời gian thực.


3. Cấu trúc xử lý phía sau YOLO

YOLO chia ảnh thành lưới (grid) và dự đoán bounding box cùng xác suất lớp (class probability) cho từng ô. Cấu trúc tổng thể gồm:

  • Backbone: trích xuất đặc trưng (feature extraction).
  • Neck: hợp nhất thông tin từ nhiều tầng khác nhau (multi-scale).
  • Head: dự đoán vị trí và loại đối tượng.

Tất cả đều được xử lý trong một lần forward pass, giúp YOLO đạt tốc độ cực nhanh.


4. Ứng dụng thực tế

Ứng dụng Mô tả
👮 Hệ thống giám sát Phát hiện người xâm nhập khu vực cấm
🚗 Xe tự lái Nhận diện người đi bộ, xe khác, tín hiệu giao thông
🧍‍♂️ Đếm người Đếm số lượng người ra vào cửa hàng
🏭 Nhà máy thông minh Theo dõi an toàn lao động hoặc sản phẩm lỗi

5. Best Practice để tối ưu hiệu năng

  • ✅ Sử dụng GPU (CUDA) để tăng tốc độ xử lý.
  • ✅ Giảm kích thước input (ví dụ 640x480) để tăng FPS.
  • ✅ Dùng YOLOv8n hoặc YOLOv8s cho real-time, YOLOv8x cho độ chính xác cao hơn.
  • ✅ Kết hợp tracking (như DeepSORT) để gán ID cho từng đối tượng di chuyển.
  • ✅ Khi triển khai thực tế: có thể dùng ONNX Runtime hoặc TensorRT để tăng tốc inference.

6. Kết hợp OpenCV + YOLO + Tracking

Bạn có thể kết hợp YOLO (nhận diện) và DeepSORT (theo dõi chuyển động):

from ultralytics import YOLO
from deep_sort_realtime.deepsort_tracker import DeepSort

model = YOLO("yolov8n.pt")
tracker = DeepSort(max_age=30)

while True:
    ret, frame = cap.read()
    results = model(frame)
    detections = results[0].boxes.xyxy.cpu().numpy()
    tracks = tracker.update_tracks(detections, frame=frame)

Điều này giúp hệ thống không chỉ phát hiện, mà còn theo dõi đường di chuyển của mỗi đối tượng qua khung hình.


7. Tổng kết

Công nghệ Vai trò
OpenCV Xử lý ảnh, hiển thị, đọc camera/video
YOLO Mô hình phát hiện đối tượng thời gian thực
DeepSORT Theo dõi đối tượng qua nhiều khung hình

Khi kết hợp, chúng tạo nên một pipeline AI thị giác mạnh mẽ, có thể ứng dụng trong hàng chục lĩnh vực thực tế từ an ninh đến thương mại.


8. Hướng phát triển nâng cao

  • Tích hợp với Flask/FastAPI để tạo API phát hiện vật thể.
  • Chạy trên Raspberry Pi hoặc Jetson Nano cho các ứng dụng IoT.
  • Kết hợp thêm Speech hoặc RAG để tạo hệ thống camera có khả năng giải thích bằng ngôn ngữ tự nhiên.

📘 Tóm tắt:

OpenCV + YOLO là sự kết hợp lý tưởng để xây dựng hệ thống phát hiện vật thể thời gian thực. Với sự hỗ trợ từ GPU và mô hình YOLOv8, bạn có thể triển khai các ứng dụng AI Computer Vision mạnh mẽ chỉ với vài dòng Python.