3. QUÁ TRÌNH THỰC HIỆN
3.4. Triển khai hệ thống xử lý AI
3.4.3. Triển khai hệ thống Edge Computing
3.4.3.1.! Mục tiêu chính
Hình 3.26. Q trình thực thi tại Edge Device!
- Nhằm giảm áp lực tính tốn lên máy chủ, đề tài luận văn sử dụng một máy tính nhúng tên là Jetson Nano Developer Kit làm một Edge Device (ED).
- Các Camera, Server và ED sẽ được kết nối với nhau chung một mạng thông qua cổng ethernet tích hợp sẵn trong thiết bị.
- Nhiệm vụ chính của thiết bị biên (Edge Device) này là thực hiện giải mã tín hiệu RTSP của các camera thành dữ liệu ảnh RGB, xử lý ảnh để phát hiện chuyển động, gửi ảnh đó lên Server để suy luận AI sau đó nhận kết quả suy luận để xử lý theo từng bài toán cụ thể. Chi tiết q trình xử lý sẽ được mơ tả ở phần sau.
3.4.3.2.! Q trình xử lý
- Để có thể xử lý được hình ảnh trích xuất từ các camera việc đầu tiên cần làm là phải giải mã (decoding) các luồng RTSP có được từ các camera. Trong thực tế, chúng ta có nhiều các giải mã luồng RTSP như sử dụng thư viện OpenCV, các ứng dụng các sẵn như VLC, FFMPEG, …
- Tuy nhiên các công cụ giải mã này thường sử dụng tài nguyên CPU cho quá trình decoding, điều này sẽ làm ảnh hưởng rất nhiều đến hiệu năng tính tốn của thiết bị Edge Device với nhiều hạn chế về phần cứng hơn so với Server. Chính vì thế, đề tài luận văn này đề xuất một phương pháp giải mã luồng RTSP khác đó chính là sử dụng thư viện NVIDIA DeepStream SDK [17] cho quá trình giải mã.
- Một workflow hoàn chỉnh của DeepStream sẽ bao gồm toàn bộ quá trình decoding dữ liệu camera đến suy luận AI, phân tích dữ liệu, gửi và encoding dữ liệu stream đó thành một ngõ ra hồn chỉnh. Tuy nhiên, cũng chính vì DeepStream đã hỗ trợ sẵn tất cả ở tầng xử lý AI do đó chúng ta sẽ gặp nhiều khó khăn trong việc sửa đổi để phù hợp cho một ứng dụng cụ thể của để tài luận văn.
- Vì lý do đó, ta chỉ sử dụng DeepStream cho mục đích decoding RTSP camera để có dữ liệu ảnh mong muốn, còn phần suy luận AI và xử lý dữ liệu phía sau chúng ta sẽ tự triển khai sao cho phù hợp với bài toán thực tế đã đặt ra.
- Tổng quan hơn về toàn bộ quá trình xử lý tại Edge Device sử dụng Deep Stream được mơ tả ở Hình 3.27.
- Chương trình chính để xử lý tín hiệu từ camera và suy luận AI được chia thành 3 luồng cơ bản như sau:
+ Luồng chính (Main Thread) dùng để giải mã tín hiệu và xử lý dữ liệu. + Luồng phụ 1 (Bus Call Thread) dùng để nhận tín hiệu trả về từ DeepStream trong suốt quá trình giải mã để phát hiện các bất thường như là đã kết nối hoặc mất kết nối đến các camera.
+ Luồng phụ 2 (Notify Thread) dùng để nhận dữ liệu từ Main Thread gửi vào Notify Queue và chuyển chúng thành một gói tin phù hợp để gửi lên Server. + Ngoài 3 luồng cơ bản này ra, tuỳ thuộc vào số lượng camera được yêu cầu xử lý thì Main Thread sẽ khởi tạo thêm các luồng con (Child Thread) tương ứng cho mỗi camera.
- Cụ thể quá trình xử lý sẽ diễn ra như sau:
+ Đầu tiên, khi chương trình được khởi chạy thì Main Thread sẽ kết nối với PostgreSQL Service – một mini-database chứa có thơng tin cài đặt cần thiết cho quá trình hoạt động của Edge Device. Main Thread sẽ lấy các thông tin của camera như RTSP, thông tin Model cần chạy và các toạ độ vùng nguy hiểm đã được cài đặt trước.
+ Tiếp theo, dựa vào thơng tin có được, MainThread sẽ khởi chạy DeepStream để phục vụ cho q trình decoding tín hiệu camera.
+ Dựa vào thơng tin camera có được, DeepStream sẽ kết nối với các camera và khởi chạy các Child Thread tương ứng với mỗi camera để tiến hành decoding.
+ Khi kết nối thành công với camera, DeepStream sẽ gửi về cho BusCall Thread một sự kiện tương ứng để báo rằng camera đã được kết nối. Dựa vào thông tin này BusCall Thread sẽ tiến hành xử lý và gửi một gói tin vào Notify Queue để báo cho Server biết rằng camera đã được chạy.
+ Dữ liệu ảnh được giải mã từ các camera sẽ là một ảnh màu RGB, sau đó ta tiến hành phân tích chuyển động trong bức ảnh bằng thuật phát hiện chuyển động (Motion Detection) được mô tả ở phần 3.2.4.
+ Sau khi phát hiện có chuyển động trong camera tiếp theo ta tiến hành suy luận AI để nhận diện người trong ảnh. Tuỳ theo mơ hình AI mà người dùng chọn là chạy trên Cloud hay tại chính ED, hình ảnh RGB này được xử lý cho phù hợp với ngõ vào của mơ hình và tiến hành suy luận.
+ Kết quả trả về từ quá trình suy luận là bouding boxes, classId và scores mà mơ hình Object Detection tính tốn được. Nếu là ứng dụng phát hiện người khơng đội mũ bảo hộ thì kết quả trả về sẽ có thêm kết quả suy luận của mơ hình Classification (ResNet-50). Về thuật tốn xử lý sẽ được mơ tả cụ thể ở phần 3.4.3.4 và 3.4.3.5.
+ Với cơ sở suy luận và các kết quả trả về của mơ hình Deep Learning, ta tiến hành kiểm tra tuỳ theo từng yêu cầu của bài toán là phát hiện người, báo động khi người vào khu vực nguy hiểm (hay ra khỏi khu vực cho phép) hay báo động khi không đội mũ bảo hộ.
+ Kết quả báo động sẽ được gửi về hàng đợi Notify Queue để luồng Notify Thread xử lý gửi về cho Server và báo động cho người giám sát.
+ Ngoài ra, cứ cách nhau khoảng 30 giây lại có một gói tin chứa thơng tin về tốc độ xử lý của camera được gửi về Server để tiện cho quá trình theo dõi hệ thống.
3.4.3.3.! Cảnh báo độ nhập
- Ở bài tốn cảnh báo đột nhập, vì trong điều kiện thực tế của trạm biến áp là hạn chế người bên ngồi có thể tự do di chuyển trong khuôn viên của trạm trừ các nhân viên bảo trì và vận hành trạm. Do đó, tình huống người xuất hiện trong trạm biến áp là một điều bất thường cần được cảnh báo để không xảy ra hậu quả đáng tiếc.
- Tại Edge Device, ta định nghĩa sự kiện đột nhập xảy ra khi phát hiện có chuyển động bất thường trong ảnh ghi nhận bởi camera và mơ hình Object Detection dự đốn ảnh đó có người. Từ đó, kết hợp giữa mơ hình phát hiện chuyển động và kết
đó, classId và scores (tỉ lệ dự đốn) từ đó ta tiến hành kiểm ra lại scores nếu lớn hơn ngưỡng cho phép có nghĩa là có người. Thực hiện gửi cảnh báo lên Server với tần suất 5 giây một lần trong suốt quá trình xảy ra sự kiện.
3.4.3.4.! Cảnh báo vi phạm vùng hoạt động
- Với bài toán phát hiện người di chuyển vào vùng khơng được phép. Khó khăn đầu tiên là với một hệ thống nhiều camera trong trạm biến áp thì mỗi camera sẽ có một góc nhìn khác nhau, điều đó dẫn đến việc mỗi vùng nguy hiểm trong mỗi camera cũng sẽ khác nhau. Thế nên ta cần có một giao diện (GUI) để người quản lý TBA xác định các vùng nguy hiểm hoặc vùng an toàn tương ứng với mỗi camera mà họ muốn.
- Sau đó dựa vào kết quả mà Object Detection model trả về khi trong khung hình có xuất hiện người, ta sẽ dùng toạ độ bounding box của từng người để so sánh với toạ độ vùng đã xác định trước đó bằng thuật tốn suy luận và báo động.
- Thuật tốn suy luận (Hình 3.28) như sau:
+ Dựa vào toạ độ vùng mà chúng ta cài đặt cho Camera, Edge Device sẽ tạo một ma trận nhị phân có kích thước bằng với kích thước ảnh đang xử lý. Ta gọi đó là mask_area với các pixel ảnh nằm trong vùng (area) có giá trị 1 và ngồi vùng có giá trị là 0.
+ Sau khi mơ hình nhận diện người phát hiện được người xuất hiện trong khung ảnh đó, ta tiến hành trích xuất toạ độ bounding box của người đó. Vì muốn kiểm tra vị trị tương đối giữa người và vùng đã chọn, ta cần quan tâm đến vị trí chân của người đó trong khung hình. Chính vì thế, thay vì sử dụng tồn bộ box ta chỉ cần lấy phần dưới của box xem như đó là vị trí chân của người bị phát hiện. Sau đó ta tạo ra một ma trận nhị phân thứ 2 gọi là mask_box với pixel trong box có giá trị 1 và còn lại là 0.
+ Tiến hành nhân chập hai ma trận trên lại với nhau, kết quả ta thu được một ma trận nhị phân mới (mask_overlap) là kết quả giao nhau giữa box của người và vùng cần xem xét.
+ Với trường hợp vùng đã chọn là vùng nguy hiểm và người không được vào: nếu ma trận mask_overlap có tổng giá trị pixel lớn hơn 0 có nghĩa là người này đang vào vùng nguy hiểm, ta thực hiện báo động.
+ Với trường hợp vùng đã chọn là vùng an tồn và người khơng được ra khỏi vùng: nếu ma trận mask_overlap có tổng giá trị pixel bằng 0 có nghĩa là người này đã ra khỏi vùng an toàn, ta thực hiện báo động.
3.4.3.5.! Cảnh báo khơng đội nón bảo hộ
- Với bài tốn phát hiện người khơng đội mũ bảo hộ chuyên dụng ta cần phải dựa vào kết quả suy luận của mơ hình Object Detection để xác định vùng có người
khơng đội thì ta sẽ cắt (crop) phần trên của vùng người mà mơ hình Object Detection phát hiện (Hình 3.29). Tiếp theo ta đưa tập ảnh này vào mơ hình ResNet-50 để phân loại xem người này có đội mũ bảo hiểm hay khơng.
Hình 3.29. Q trình giải quyết bài tốn phát hiện người khơng đội mũ bảo hộ!
- Q trình suy luận trên sẽ được triển khai trên Triton Serving với sự kết hợp của hai mơ hình YOLOv5 và ResNet-50 như đã trình bày ở phần 3.4.2. Sau khi phát hiện khung hình có chuyển động, Edge Device sẽ gửi ảnh đó lên Server để thực hiện suy luận, sau đó dựa vào kết quả suy luận để thực hiện báo động.