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

📘 Giới thiệu

Trong kỷ nguyên của Trí tuệ nhân tạo (AI)Thị giác máy tính (Computer Vision), khả năng phát hiện vật thể trong video thời gian thực đã trở thành một ứng dụng quan trọng — từ camera an ninh, xe tự hành, đến hệ thống phân tích hành vi con người.

Bài viết này sẽ hướng dẫn chi tiết cách kết hợp OpenCV và YOLO (You Only Look Once) để xây dựng hệ thống nhận diện người và vật thể trong thời gian thực.


⚙️ 1. OpenCV và YOLO là gì?

🔹 OpenCV (Open Source Computer Vision Library)

OpenCV là thư viện mã nguồn mở giúp xử lý hình ảnh và video trong thời gian thực. Nó cung cấp hàng trăm hàm để:

  • Xử lý ảnh (lọc, phát hiện cạnh, phân ngưỡng)
  • Xác định vật thể, khuôn mặt
  • Theo dõi chuyển động
  • Và đặc biệt: kết hợp với các mô hình AI như YOLO để phát hiện vật thể

🔹 YOLO (You Only Look Once)

YOLO là một mô hình Object Detection (phát hiện vật thể) nổi tiếng, có ưu điểm:

  • Nhanh: chỉ cần một lần quét ảnh (one forward pass)
  • Chính xác: xác định cả vị trí (bounding box) và nhãn (label)
  • Ứng dụng thời gian thực rất tốt khi kết hợp với GPU

Các phiên bản phổ biến: YOLOv3, YOLOv5, YOLOv8, YOLO-NAS.


🧩 2. Quy trình phát hiện vật thể với OpenCV + YOLO

Quy trình gồm 5 bước chính:

  1. Load mô hình YOLO

    • Dùng file cấu hình .cfg và trọng số .weights (hoặc .pt nếu dùng YOLOv5 trở lên)
    • Hoặc tải mô hình pretrained qua ultralytics/yolov8
  2. Khởi tạo camera/video input

    • Dùng cv2.VideoCapture(0) cho webcam, hoặc truyền đường dẫn file video.
  3. Tiền xử lý khung hình

    • Resize, chuẩn hóa (normalize), và chuyển đổi sang định dạng phù hợp với YOLO (BGR → RGB).
  4. Phát hiện vật thể

    • YOLO xuất ra danh sách bounding boxes, xác suất (confidence) và nhãn (class name).
  5. Hiển thị kết quả

    • Vẽ khung bao quanh vật thể (Bounding box) bằng OpenCV.

💻 3. Ví dụ code Python

import cv2
from ultralytics import YOLO

# 1️⃣ Load model YOLOv8 pretrained
model = YOLO("yolov8n.pt")  # mô hình nhẹ, nhanh

# 2️⃣ Mở camera (0 = webcam)
cap = cv2.VideoCapture(0)

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

    # 3️⃣ Dự đoán
    results = model(frame)

    # 4️⃣ Hiển thị kết quả
    annotated_frame = results[0].plot()

    cv2.imshow("Real-time Detection", annotated_frame)

    # 5️⃣ Thoát bằng phím Q
    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

cap.release()
cv2.destroyAllWindows()

Kết quả: Mỗi vật thể (người, xe, chó, mèo, chai, laptop, v.v.) sẽ được YOLO phát hiện, gán nhãn và vẽ khung bao trong video theo thời gian thực.


⚡ 4. Cách tối ưu hiệu suất

Để đạt được tốc độ và độ chính xác cao hơn:

Kỹ thuật Mô tả Lợi ích
GPU Acceleration (CUDA) Cài đặt OpenCV với hỗ trợ CUDA và chạy YOLO trên GPU Tăng tốc xử lý 10–30 lần
Resize frame Giảm độ phân giải đầu vào (ví dụ 640×480) Giảm thời gian inferencing
Batch inference Gom nhiều frame xử lý cùng lúc Tối ưu hiệu suất
Multi-threaded capture Đọc và xử lý video song song Giảm độ trễ (latency)

🧱 5. Các ứng dụng thực tế

  • 👮 Giám sát an ninh thông minh (Smart CCTV)
  • 🚗 Nhận diện phương tiện cho giao thông
  • 🧍‍♂️ Đếm người trong khu vực
  • 🏭 Phát hiện lỗi sản phẩm trong dây chuyền sản xuất
  • 🏢 Phân tích hành vi khách hàng trong bán lẻ

⚠️ 6. Những vấn đề thường gặp

Vấn đề Nguyên nhân Cách khắc phục
Sai nhãn / nhầm đối tượng Mô hình chưa fine-tune cho dữ liệu riêng Fine-tune với dataset nội bộ
FPS thấp Không có GPU hoặc độ phân giải cao Dùng CUDA / giảm kích thước frame
Bounding box nhấp nháy Độ tin cậy thấp Lọc theo confidence > 0.5
Không phát hiện trong ánh sáng yếu Thiếu dữ liệu huấn luyện tương tự Dùng mô hình huấn luyện đa điều kiện ánh sáng

🔍 7. Mở rộng: Kết hợp với AI nâng cao

Sau khi đã có hệ thống phát hiện vật thể, bạn có thể kết hợp thêm các mô-đun AI khác:

  • Tracking (theo dõi) với DeepSORT, ByteTrack
  • Nhận diện khuôn mặt (Face Recognition)
  • Đếm người hoặc vật thể qua thời gian
  • Phân tích hành vi (Behavior Analysis)

🧩 Kết luận

Việc kết hợp OpenCV và YOLO giúp bạn nhanh chóng triển khai hệ thống nhận diện vật thể thời gian thực hiệu quả và linh hoạt. Từ đó, doanh nghiệp có thể ứng dụng vào an ninh, bán lẻ, sản xuất, và phân tích dữ liệu hình ảnh thông minh.