3. QUÁ TRÌNH THỰC HIỆN
3.2. Huấn luyện mơ hình Deep Learning
3.2.4. Mơ hình phát hiện chuyển động
- Trong điều kiện thực tế của trạm biến áp thì phần lớn thời gian đều khơng có người và tần suất người xuất hiện trong trạm và không thường xuyên. Cho nên việc trích xuất ảnh từ camera và liên tục dùng mơ hình Deep Learning để suy luận AI là khơng cần thiết. Việc làm này có thể làm tăng áp lực tính tốn lên cho Server một cách khơng cần thiết và gây lãng phí tài ngun tính tốn.
- Do đó, ta cần phải có một mơ hình có nhiệm vụ phát hiện các chuyển động bất thường ghi nhận bởi camera đó. Mơ hình phát hiện chuyển động này đóng vai trị như một bộ lọc để chọn ra ảnh thật sự có sự kiện bất thường thì mới tiến hành suy luận AI, phân tích và báo động nếu đúng là trường hợp có người.
trong ảnh mà khơng cần phải phân tích các chuyển động này. Do đó, việc sử dụng phương pháp Optical Flow để nhận diện chuyển động là không cần thiết.
- Dựa vào kỹ thuật Image Subtraction để so sánh sự khác nhau giữa 2 ảnh liên tiếp, ở luận văn này ta thực hiện thuật toán phát hiện chuyển động như Hình 3.12.
Hình 3.12. Thuật tốn phát hiện chuyển động sử dụng CUDA OpenCV
- Với ngõ vào là ảnh của thời điểm t (hiện tại) (cur_img) và frame_id cũng như camera_id của bức ảnh, ta chuyển ảnh về ảnh gray và resize ảnh về kích thước nhỏ hơn để giảm thời gian tính tốn. Dựa vào thơng tin camera id và frame id, ta lấy được ảnh của thời điểm t-1 (thời điểm trước đó) (prev_img) đã lưu trong bộ nhớ tạm. - Tiến hành so sánh cur_imag và prev_img bằng cách lấy trị tuyệt đối của hiệu hai ma trận ảnh trên. Kết quả là một ma trận 1 chiều thể hiện sự khác nhau của hai bức ảnh.
���� = �������#∃%− ��������#∃% (3.1)
- Ma trận flow sẽ được lấy ngưỡng nhị phân với giá trị ngưỡng tuỳ chỉnh cho phù hợp với môi trường.
�ℎ���ℎ = δ 1 0 �� ����(�, �) > �ℎ���ℎ�����ℎ������ (3.2)
- Sau khi lấy ngưỡng ta sử dùng hàm FindContours và ContourArea để tìm ra vùng chuyển động lớn nhất trong khung ảnh. So sánh tỉ lệ của vùng chuyển động này
với tồn bộ diện tích ảnh, nếu tỉ lệ này lớn hơn một ngưỡng cho phép thì có nghĩa là khung ảnh này có chuyển động.
- Với các ứng dụng cần xử lý ảnh như thuật toán phát hiện chuyển động chúng ta thường sử dụng thư viện Open CV, tuy nhiên thư viện OpenCV thường tính tốn bằng CPU nên cũng khá hạn chế về tốc độ nếu như khối lượng tính tốn q lớn. Hiện nay OpenCV cũng có thể tính tốn trên GPU qua thư viện CUDA OpenCV, giúp cho thời gian tính tốn ma trận của chúng ta nhanh hơn đáng kể, tuy nhiên không phải function nào của thư viện OpenCV cũng có thể hoạt động trên OpenCV CUDA ví dụ như hàm FindContours. Chính vì thế, để cải thiện hiệu năng của thuật tốn thì 2 functions tính tốn ma trận là tính trị tuyệt đối và lấy ngưỡng sẽ được tính tốn trên GPU nhằm giảm tải cho CPU.
- Thuật toán phát hiện chuyển động này sẽ được thực thi tại Edge Device, chi tiết về quá trình này sẽ được trình bày tại phần 3.4.3.