Hệ thống phân tích video theo kiến trúc microservices

393

Một toà nhà, một khu thương mại, một thành phố hiện đang có rất nhiều camera, tuy nhiên, việc sử dụng sức người giám sát tất cả camera gần như là chuyện không khả thi. FPT IS FTS (giờ là SMC) đã tập trung xây dựng giải pháp xử lý ảnh từ camera từ lâu và được triển khai nhiều nơi.

1. Mục tiêu của việc thay đổi kiến trúc

Hệ thống phân tích camera thực hiện các tác vụ bao gồm: Theo dõi đối tượng; Phát hiện chuyển động; Nhận diện khuôn mặt; Nhận diện cử chỉ, hành vi…

Các hệ thống phân tích camera thông thường có nhiều giới hạn, mỗi máy chủ sẽ xử lý một nhóm camera, bao gồm việc tách frame ảnh, phát hiện, nhận dạng vật thể, xử lý dữ liệu sinh ra và tạo thành sự kiện, trong trường hợp máy hủ bị lỗi, toàn bộ nhóm camera trên máy chủ đó sẽ bị ngưng xử lý. Việc phát hiện máy chủ bị lỗi và chuyển nhóm camera đó qua máy chủ khác mất nhiều thời gian và gián đoạn hệ thống. Các xử lý ảnh phức tạp sử dụng các thuật toán máy học và chạy trên card đồ hoạ (GPU) khiến chi phí cho máy chủ tăng đáng kể, trong đó, có nhiều tác vụ như xử lý dữ liệu sự kiện vẫn chủ yếu được hoàn thành bằng CPU. Các máy chủ CPU có giá rẻ hơn khá nhiều và có thể tận dụng cho nhiều mục đích khác nhau.

Để xử lý một lượng lớn camera, cần có một hệ thống tin cậy, hoạt động ổn định, có thể chịu lỗi và có thể mở rộng một cách dễ dàng, ngoài ra hệ thống cần có khả năng phân tán và dễ điều chỉnh tuỳ theo nhu cầu sử dụng dịch vụ.

Xuất phát từ nhu cầu đó, FPT IS đã bắt tay vào nghiên cứu và thay đổi hệ thống phân tích video theo kiến trúc microservices. Hệ thống này có thể xem như là một nâng cấp lớn về mặt kiến trúc của các hệ thống xử lý ảnh trước đây của FPT IS FTS (giờ là SMC) như xử lý vi phạm, đo đếm lưu lượng, nhận diện khuôn mặt… Kiến trúc microservices sẽ cải thiện được khả năng giám sát từng thành phần của hệ thống, phân tải cho các máy chủ được dễ dàng hơn và tận dụng tài nguyên, giảm chi phí đầu tư phần cứng.

Một trong những yêu cầu về mặt kỹ thuật đối với hệ thống là cho phép cập nhật model liên tục, cho phép thay đổi model tuỳ theo nhu cầu sử dụng, tải của hệ thống mà không làm gián đoạn quá trình phân tích camera.

Giai đoạn đầu tiên thay đổi tập trung vào phần lõi, sau đó sẽ phát triển các tính năng quản lý, giám sát cho toàn hệ thống. và các hệ thống triển khai trong năm nay sẽ sử dụng kiến trúc mới.

2. Kiến trúc hệ thống

Hệ thống xử lý ảnh theo kiến trúc microservices bao gồm nhiều xử lý được tách thành các dịch vụ nhỏ, thực hiện các tác vụ riêng biệt và được triển khai độc lập bằng docker. Bao gồm các dịch vụ chính:

  • Tách frame ảnh từ camera
  • Xử lý chuỗi frame ảnh cho từng camera
  • Dịch vụ xử lý ảnh cung cấp chung cho các dịch vụ xử lý frame
Kiến trúc hệ thống theo microservices.

Lấy frame (frame grabber):

Mỗi dịch vụ frame grabber được đóng gói trong 1 container, có nhiệm vụ lấy frame trực tiếp từ camera IP, nhờ vậy, dịch vụ có thể linh động tuỳ vào nhà sản xuất camera, thuật giải nén, tốc độ frame ảnh, độ phân giải ảnh hoặc chuẩn protocol mà camera hỗ trợ để phát triển cho phù hợp, việc đóng gói và triển khai sẽ dễ dàng hơn so với việc xây dựng một ứng dụng hoàn chỉnh và hỗ trợ tất cả các loại camera.

Frame grabber còn có nhiệm vụ cắt vùng xử lý ảnh cho phù hợp với cấu hình của từng camera, sau đó co dãn ảnh cho phù hợp với nhu cầu xử lý nhằm làm tăng tốc độ xử lý, giảm băng thông truyền tải.

Sau khi frame ảnh được tách từ camera, các thông tin chi tiết về camera, thời gian tách, độ phân giải gốc được đóng gói kèm để dễ cho các bước xử lý sau. Gói tin sau đó được gởi vào một message queue phân tán có độ trễ thấp.

Xử lý frame (Frame processing):

Frame processing có nhiệm vụ đọc ảnh từ topic được chỉ định,  nhóm các ảnh lại thành chuỗi, gọi các dịch vụ phân tích hình ảnh, nhận kết quả và thực hiện các xử lý trên dữ liệu được trả về. Ví dụ:

  • Phát hiện vật thể, phân loại và khoanh vùng;
  • Theo dõi đối tượng trong một loạt ảnh liên tiếp nhau;
  • Chọn ảnh có chất lượng ảnh cao nhất cho kết quả cuối cùng.

Sau khi xử lý một chuỗi ảnh, sẽ có các sự kiện phát sinh từ kết quả của việc xử lý, các kết quả này sau đó được gởi lại vào message queue. Các kết quả xử lý có thể là:

  • Đo đếm lưu lượng phương tiện trong 1 khung thời gian ngắn;
  • Phát hiện và nhận dạng khuôn mặt;
  • Phát hiện và nhận dạng biển số xe;
  • Phát hiện xe vi phạm vượt đèn đỏ, sai làn.

Dịch vụ xử lý ảnh:

Dựa trên TensorFlow, dịch vụ xử lý ảnh của FIS SMC cung cấp một loạt các dịch vụ liên quan đến xử lý ảnh cho các nhu cầu khác nhau. Ví dụ:

  • Nhận dạng, phân loại xe;
  • Nhận dạng khuôn mặt;
  • Nhận dạng cử chỉ, hành vi;
  • Phát hiện vật thể.

Các dịch vụ xử lý ảnh dùng cấu hình máy chủ đặc biệt có dùng card đồ hoạ (GPU) nhằm tăng tốc độ xử lý. Các dịch vụ xử lý ảnh được cung cấp thông qua giao thức gRPC, do đó các xử lý frame có thể phát triển bằng nhiều ngôn ngữ khác nhau, tối ưu được thời gian phát triển và không phụ thuộc vào nguồn lực.

Lưu trữ, cung cấp dữ liệu:

Dựa trên nền tảng có sẵn của FPT IS SMC, dữ liệu sau khi trích xuất ra camera được cung cấp lại cho các ứng dụng khác. Dữ liệu từ camera được lưu trữ thành nhiều lớp tuỳ theo nhu cầu khai thác:

  • Dữ liệu lưu trữ lâu dài: phục vụ cho nhu cầu phân tích lại dữ liệu.
  • Dữ liệu chỉ số: cho nhu cầu bảng biểu, dashboards, cung cấp công cụ cho người dùng bình thường khả năng xem xét các dữ liệu theo các chỉ số đã được trích xuất sẵn.
  • Dữ liệu đệm: thường được lưu trữ trong thời gian ngắn trong vòng 5-7 ngày tuỳ theo khả năng lữu trữ, dữ liệu đệm đã được lọc và làm sạch phục vụ cho các nhu cầu xem xét toàn bộ dữ liệu gốc trích xuất từ camera, từ đó có thể thực hiện các mô hình tính toán nhằm cập nhật lại các thuật toán tính toán cho chính xác hơn.

Dựa vào dữ liệu được trích xuất từ camera, có thể phát triển nhiều ứng dụng khác nhau như:

  • Tổng hợp lưu lượng phương tiện theo thời gian;
  • Tổng hợp số lượng người ra vào tại cửa hàng;
  • Kiểm tra sự xuất hiện của một người qua nhiều camera khác nhau, nhờ đó có thể tổng hợp được sự xuất hiện của người đó theo thời gian;
  • Phát hiện người trong dạng tình nghi;
  • Bản đồ các khu vực thường hay có nhiều người qua lại trong cửa hàng.

3. Hiệu quả

Sau một thời gian kiểm tra, thực hiện nhiều đánh giá, hệ thống cho một số kết quả tích cực sau:

Một, Tổng tốc độ xử lý của cả chuỗi khá tốt, cho tốc độ xử lý gần bằng với việc ứng dụng đóng thành cả gói. Việc gọi dịch vụ có độ trễ khá thấp và các xử lý tốn băng thông có thể triển khai trên cùng máy chủ.

Hai, Hệ thống có khả năng chia tải tốt, có thể xử lý song song nhiều tác vụ trên cùng một ảnh, ví dụ: đối với thao tác nhận dạng mặt, trong cùng một ảnh có nhiều mặt, có thể gởi mỗi mặt đã phát hiện được trong ảnh cho các dịch vụ cùng xử lý, sau đó tổng hợp kết quả, nhờ đó có khả năng tăng tốc xử lý đối với các thao tác xử lý ảnh phức tạp hoặc đòi hỏi nhiều xử lý cùng lúc. Hay việc nhận dạng nhiều khuôn mặt trên cùng một hình có thể gởi cho nhiều dịch vụ khác nhau trên nhiều server cùng xử lý.

Ba, hệ thống có thể xử lý tuỳ theo nhu cầu, ví dụ như đối với thao tác nhận dạng mặt, thao tác này không thường xuyên phải thực hiện, nhờ đó có thể chia tải cho các dịch vụ khác trên máy chủ, giảm chi phí đầu tư hệ thống.

Bốn, độ chịu tải, chịu lỗi cao do các dịch vụ đã được chia nhỏ, việc gián đoạn một vài dịch vụ không ảnh hưởng đáng kể đến toàn hệ thống. Khả năng mở rộng rất tốt, có thể mở rộng từng phần riêng biệt tuỳ theo nhu cầu xử lý bằng cách cựa vào tình trạng hoạt động của từng cụm dịch vụ để điều chỉnh hoặc scale cho phù hợp với nhu cầu.

Năm, có thể chạy đồng thời 2, 3 model cùng một lúc đối với 1 camera mà không làm ảnh hưởng đến hiệu năng của camera. Kết quả xử lý của các model khác nhau có thể so sánh để từ đó chọn ra model tốt nhất trong từng trường hợp cụ thể. Việc cập nhật model không ảnh hưởng đến hệ thống, hệ thống vẫn hoạt động bình thường cho đến khi việc update model được thực hiện xong. Ngoài ra có thể đánh version cho từng model để tiến hành nâng cấp từ từ tuỳ theo nhu cầu xử lý của từng camera.

Bên cạnh đó, có thể tận dụng được nguồn do máy chủ không có GPU có giá thành rẻ hơn đáng kể, chiếm cũng ít chỗ hơn (Blade server, 1U) so với máy chủ có GPU (2U, 4U). Mô hình triển khai linh động, có thể đưa frame grabber hoặc các thao tác phát hiện đơn giản lên máy tính nhúng. việc kết nối vẫn thông suốt thông qua message queue. Một số framework được sử dụng có thể kể đến: Consul, nats.io, MemSQL, TensorFlow, Docker, gRPC…

4. Kết luận

Mặc dù kiến trúc microservices có thể không là kiến trúc hoàn hảo cho việc xử lý luồng, nhất là đối với các luồng dữ liệu nặng như camera, việc áp dụng kiến trúc microservices vẫn đem đến nhiều kết quả tích cực, trong đó việc dễ dàng điều chỉnh model nhận dạng ảnh mà không ảnh hưởng luồng xử lý là ưu điểm lớn, giúp giảm thiểu thời gian phát triển các giải pháp xử lý camera. Một lưu ý là mô hình triển khai, ngôn ngữ lập trình cũng như năng lực của developer ảnh hưởng khá nhiều đến tốc độ xử lý tổng thể của hệ thống.

 Nguyễn Đăng Duy – FPT IS

Tin liên quan: