0

[Open Source] #108 - Frigate: Hệ thống NVR AI thời gian thực với kiến trúc Multiprocessing, Shared Memory và Pipeline xử lý thị giác máy tính tối ưu

Trong lĩnh vực giám sát an ninh (NVR), thách thức lớn nhất không phải là ghi hình, mà là làm sao để hệ thống có thể "hiểu" được nội dung video mà không làm quá tải CPU. Frigate đã tạo ra một cuộc cách mạng trong cộng đồng Self-hosted bằng cách kết hợp xử lý video thô hiệu năng cao với trí tuệ nhân tạo (AI) tại chỗ, cho phép nhận diện người, xe, động vật một cách chính xác trên phần cứng dân dụng.

Dưới góc độ kỹ thuật, Frigate là một bài học mẫu mực về việc vượt qua giới hạn của Python bằng kiến trúc Đa tiến trình (Multiprocessing) và quản lý bộ nhớ Shared Memory cực kỳ thông minh.

Github: https://github.com/blakeblackshear/frigate


🛠️ 1. Nền tảng công nghệ: Tối ưu hóa cho phần cứng chuyên dụng

Frigate được thiết kế để tận dụng tối đa sức mạnh của các bộ tăng tốc phần cứng, biến những chiếc máy tính mini thành các trạm xử lý AI mạnh mẽ:

  • Ngôn ngữ: Python (Logic điều phối & AI), TypeScript/React (Web UI), và Go (go2rtc cho livestream độ trễ thấp).
  • Video Engine (FFmpeg): Xương sống cho mọi tác vụ giải mã (decoding), mã hóa (encoding) và cắt đoạn video.
  • AI Accelerators: Hỗ trợ đa dạng từ Google Coral (EdgeTPU), NVIDIA GPU (TensorRT) đến Intel GPU (OpenVINO). Việc đẩy tác vụ nhận diện cho chip chuyên dụng giúp CPU gần như không phải làm việc.
  • Shared Memory (/dev/shm): Frigate sử dụng bộ nhớ dùng chung để truyền tải dữ liệu hình ảnh thô giữa các tiến trình, loại bỏ hoàn toàn độ trễ do copy dữ liệu (Zero-copy).

🏗️ 2. Trụ cột kiến trúc: Multiprocessing và Cơ chế "Motion-to-Object"

Kiến trúc của Frigate giải quyết bài toán hiệu năng bằng tư duy chia để trị:

  • Bypass Python GIL: Vì Python bị giới hạn bởi GIL, Frigate tách mỗi Camera và mỗi bộ Detector thành các tiến trình (Process) độc lập. Một camera bị treo sẽ không làm sập toàn bộ hệ thống.
  • Hai giai đoạn nhận diện (Two-stage Detection):
    • Giai đoạn 1 (Motion): Sử dụng OpenCV (rất nhẹ) để tìm chuyển động điểm ảnh.
    • Giai đoạn 2 (Object): Chỉ khi có chuyển động, vùng ảnh đó mới được cắt ra và gửi tới AI (nặng) để xác định xem đó là đối tượng gì. Điều này giúp hệ thống có thể quản lý hàng chục camera chỉ với một chip Coral duy nhất.
  • Dynamic Region Processing: Thay vì gửi toàn bộ khung hình 4K đi nhận diện, Frigate tính toán "vùng quan tâm", resize về kích thước chuẩn của model (ví dụ 320x320) để tối ưu hóa băng thông bus phần cứng.

🔄 3. Workflow: Pipeline xử lý từ luồng RTSP đến Sự kiện AI (Sequence Diagram)

Sơ đồ dưới đây mô tả hành trình của một khung hình từ camera đến khi trở thành một thông báo an ninh:

image.png


⚡ 4. Các kỹ thuật "Pro-level" trong mã nguồn

  1. Zero-copy Frame Sharing: Kỹ thuật ghi dữ liệu vào /dev/shm giúp các tiến trình Python khác nhau truy cập vào cùng một mảng pixel mà không tốn CPU để sao chép dữ liệu giữa các không gian địa chỉ.
  2. Object Tracking (Norfair/Centroid): Frigate gán ID duy nhất cho mỗi đối tượng. Nếu một người đi khuất sau cột điện và xuất hiện lại, hệ thống vẫn hiểu đó là cùng một người, tránh việc đếm lặp hoặc spam thông báo.
  3. Hardware-accelerated Preview (MSE/WebRTC): Tích hợp go2rtc để chuyển đổi luồng camera thành các định dạng hiện đại, cho phép xem livestream độ phân giải cao trên trình duyệt với độ trễ dưới 500ms.
  4. Smart Retention Policy: Cho phép cấu hình lưu trữ cực kỳ chi tiết (ví dụ: "Chỉ giữ lại video 4K nếu có người, nếu không có người chỉ giữ 480p hoặc xóa sau 24h").

⚖️ 5. So sánh chiến lược

Tiêu chí Frigate Blue Iris Nest/Arlo (Cloud)
Xử lý AI Local (Chip chuyên dụng) CPU (Tốn tài nguyên) Cloud (Tốn băng thông)
Quyền riêng tư Tuyệt đối Tuyệt đối Thấp (Dữ liệu gửi đi)
Độ trễ nhận diện Gần như tức thì Trung bình Cao (Phụ thuộc internet)
Chi phí vận hành Một lần (Mua phần cứng) Một lần (Mua license) Thuê bao hàng tháng
Khả năng mở rộng Rất cao (Kubernetes/Docker) Hạn chế (Windows-based) Theo gói cước

✅ Kết luận: Tại sao Frigate là đỉnh cao của NVR mã nguồn mở?

Frigate không chỉ là một phần mềm ghi hình; nó là một hệ thống xử lý thị giác máy tính quy mô nhỏ được tối ưu hóa cực độ. Bằng cách kết hợp giữa các tiến trình Python cô lập, bộ nhớ dùng chung và khả năng tận dụng chip AI chuyên dụng, dự án đã chứng minh rằng chúng ta có thể xây dựng một hệ thống an ninh "thông minh hơn Google Nest" ngay tại nhà.

Đối với các lập trình viên Backend và AI, nghiên cứu Frigate sẽ giúp bạn hiểu sâu về:

  • Cách quản lý Shared Memory trong hệ điều hành Linux.
  • Kỹ thuật tối ưu hóa Inference Pipeline cho các thiết bị Edge.
  • Tư duy thiết kế hệ thống Event-driven dựa trên dữ liệu video thời gian thực.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí