CHƯƠNG 4: XÂY DỰNG HỆ THỐNG
4.3. XÂY DỰNG HỆ THỐNG YOLODETECT
YOLO muốn xác định được đối tượng thì em cần phải trả lại cho nó đọc là file cfg và weight. Đó là file em đã dùng để huấn luyện và file được trả về sau khi huấn luyện hoàn thành.
Hình 40: Thêm 2 file nhận được sau khi huấn luyện để sử dụng.
Sau khi YOLO đọc được file weight em sẽ xác định đối tượng.
36
Hình 41: Thiết lặp loại bỏ các bounding box không phù hợp.
Hình ảnh từ camera khi đưa vào được chuyển lại thành frame và residual blocks sẽ chia lại thành lưới với kích thước là 416x416 để thời gian xác định đối tượng có thể diễn ra nhanh hơn.
Khi thực hiện xác định đối tượng thông qua YOLO sẽ sinh ra nhiều bounding box cho một đối tượng cần xác định vì vậy ở đây em sẽ sử dụng thuật toán NMS để bỏ bớt các bounding box thừa và chỉ giữ lại đúng một bouding box chính bao quanh đối tượng.
Ở đây em chọn nms_threshold là 0,4 và chọn ngưỡng tin tưởng conf_threshold là 0,5. Những ngưỡng này được người dùng chọn sao cho tốc độ xử lý được cho là nhanh nhất.
37
Hình 42: Tùy chỉnh các ngưỡng conf_threshold và nms_threshold.
Sau khi lọc các bounding box và chỉ chọn một bouding box bao quanh đối tượng phù hợp thì em sẽ vẽ bounding box đó để xác định đối tượng.
Hình 43: Vẽ bounding box đã lọc lên đối tượng.
Trong khi vẽ bouding box em có thêm vào một label là tên của đối tượng mặc định ở đây là “person”
Vì một số lý do như đối tượng đưa tay vào vùng nguy hiểm nhưng họ chưa đến vùng nguy hiểm nhưng bouding box sẽ bao quát hết đối tượng gây ra việc xác định nhầm lẫn nên ở đây em thêm hàm centroid để xác định tâm đối tượng.
Khi điểm centroid nằm trong vùng nguy hiểm thì tương đương với việc trọng tâm của đối tượng đã bước vào vùng nguy hiểm từ đó có thể xác định đối tượng cần được cảnh báo.
4.3.2. Cảnh báo:
Như đã trình bày ở trên, khi điểm centroid của đối tượng vào vùng nguy hiểm thì sẽ có thông báo. Ở đây em chọn ra hai thông báo bao gồm một thông báo xuất hiện trên màn hình với dòng chữ “warning!!!” màu đỏ và một thông báo bao gồm hình ảnh kèm văn bản được gửi đến tài khoản telegram của người sử dụng.
38
Hình 44: Thiết lặp thông báo cho hệ thống.
Khi có đối tượng trong vùng nguy hiểm, thông báo trên tài khoản telegram của người sử dụng sẽ được gửi liên tục với thời gian là 3 giây trên một lần đến khi đối tượng ra khỏi vùng nguy hiểm.
4.3.3. Mở camera và tạo vùng nguy hiểm:
Để mở camera em sử dụng hai thư viện là OpenCV và imutils.
Hình 45: Logo của OpenCV
Trong quá trình sử dụng OpenCV em đã sử dụng nhiều camera để kiểm tra và nhận thấy:
• OpenCV có thể mở được tất cả các camera khi kết nối đến.
• OpenCV ổn đinh ở mức 45 khung hình trên mỗi giây (45FPS).
39
• Khi sử dụng các dòng máy ảnh để làm kiểm tra, một số dòng máy (Fujifilm XT5, Canon R6) thì OpenCV chỉ kết nối mà không mở được hình ảnh. Chỉ hiện lên màn hình đen.
Vì nguyên nhân trên em đã sử dụng thêm thư viện là imutils để có thể hỗ trợ thêm.
Khi sử dụng các camera sẽ có những lý do khiến cho camera sẽ bị thay đổi khung hình (mưa bão, gió lớn hoặc có người tác động, …). Vì vậy ở đây em sẽ cho người sử dụng khi sử dụng hệ thống sẽ vẽ lại trên khung hình vùng nguy hiểm để có thể kiểm soát một cách tốt nhất.
Hình 46: Sự kiện chuột để vẽ vùng nguy hiểm trên hệ thống.
Ở đây em sử dụng sự kiện chuột để người sử dụng đánh dấu những điểm của vùng nguy hiểm bằng chuột trái và lưu nó vào points. Những điểm do người sử dụng đánh dấu sẽ có màu đỏ.
Tiếp theo đó em sử dụng hàm polylines vẽ kết nối các điểm của người dùng.
Các đường vẽ sẽ có màu xanh dương.
Hệ thống này được em xây dựng để phù hợp với tất cả mọi người nên việc người dùng là người lớn tuổi hay thị giác kém sẽ khó nối điểm cuối cùng đến điểm đầu để kết thúc chọn vùng nguy hiểm. Từ đó em chọn cách khi người sử dụng muốn kết thúc vùng chọn thì chỉ cần ấn phím “d”, chỉ khi kết thúc thì hàm detect mới được sử dụng. Và muốn tắt hệ thống thì chỉ cần ấn phím “q”.
40
Hình 47: Thêm nút ấn thuận tiện thao tác.