Hệ thống cảnh báo đeo khẩu trang phòng chống dịch COVID-19 đơn giản với OpenCV và Keras
14:45 - 03/08/2020
Những ngày gần đây, dịch COVID-19 đã quay trở lại và chúng ta cần nghiêm túc chấp hành đeo khẩu trang đầy đủ khi ra khỏi nhà
Cùng theo dõi cách tạo ra một hệ thống cảnh báo người dân đeo khẩu trang đơn giản với máy tính nhúng NVIDIA Jetson Nano và DeepLearning nhé
NVIDIA Jetson AGX Orin Hardware Layout and GPIO Expansion Header Pinout
NVIDIA Jetson là nền tảng hàng đầu thế giới dành cho Trí tuệ nhân tạo (AI) và Deep Learning
Jetson Stats dùng cho Giám sát và Điều khiển trên NVIDIA Jetson Ecosystem [Xavier NX, Nano, AGX Xavier, TX1, TX2]
Xilinx Kria Edge AI SOM ra mắt với Developer Kit
LỜI NÓI ĐẦU
Như các bạn cũng đã biết thì dịch COVID-19 đã quay trở lại trong những ngày gần đây rất căng thẳng. Do vậy, toàn dân chúng ta phải đồng lòng cùng nhau thực hiện nghiêm túc các quy định của chính phủ đề ra nhằm chung tay đẩy lùi dịch bệnh !!!
Hôm nay, mình xin giới thiệu với các bạn cách xây dựng một hệ thống đơn giản giúp nhận diện và cảnh báo người dân đeo khẩu trang nhé !!!
Giới thiệu cơ bản về hệ thống
Phần cứng của hệ thống mình sử dụng đó là board mạch NVIDIA Jetson Nano và Raspberry Pi Camera V2, cùng đó xây dựng một mạng MobileNetV2 với một vài tinh chỉnh đơn giản với OpenCV và Keras/Tensorflow để cảnh báo người dân đeo khẩu trang đầy đủ khi ra đường.
Hệ thống của chúng ta sẽ giám sát thông qua Rasberry Pi Camera V2, hình ảnh đầu vào sẽ được xử lý và đưa qua Neural Network để đưa ra kết luận người dùng có đeo khẩu trang hay không, từ đó đưa ra cảnh báo phù hợp. Trong các dự án thực tế, chúng ta có thể kết nối thêm loa hoặc đèn LED để việc cảnh báo thiết thực hơn
Bộ dữ liệu mình sử dụng ở đây được tạo ra bởi tác giả Prajna Bhandary, với 1376 ảnh ("mask" và "nomask"). Kết hợp với kĩ thuật Image Augmentation, chúng ta sẽ tạo ra được một bộ data đồ sộ đó !!!
Hệ thống của mình bao gồm có 2 phase :
Ở Phase 1 : Train Face Mask Detector, mình sẽ thu thập dữ liệu và huấn luyện mạng MobileNetV2 đã tinh chỉnh với 2 class : "Mask" và "NoMask", sau đó lưu model vào disk
Phase 2 : Sau khi đã load model đã train ở Phase 1, mình sẽ sử dụng các phương pháp detect gương mặt, sau đó bóc tách được phần quan tâm (ROI), rồi áp dụng model đã train để dự đoán gương mặt đã được bóc tách thuộc class "Mask" hay "NoMask"
Chi tiết các bước thực hiện
Bước 1 : Chuẩn bị và kết nối phần cứng
Phần cứng chúng ta sẽ sử dụng trong hệ thống này bao gồm :
+ 1 Board mạch NVIDIA Jetson Nano Developer kit : (LINK)
+ 1 Camera Pi V2 : (LINK)
+ 1 thẻ nhớ (tối thiểu 32GB) đã ghi hệ đều hành : (LINK)
+ (Đèn/ Loa cảnh báo)
+ Màn hình LCD hiển thị : (LINK)
+ Nguồn cho Jetson Nano : (LINK)
Bước 2 : Thu thập dữ liệu để huấn luyện mạng CNN
Trong hệ thống này, chúng ta cần một lượng data lớn để train mạng để hệ thống đạt độ chính xác cao nhất. Vì vậy, mình sẽ sử dụng bộ data Mask/No mask có sẵn của Prajna Bhandary.
Bộ dữ liệu này gồm 1376 tấm ảnh với 690 hình ảnh chứa người đeo khẩu trang và 686 hình ảnh người không đeo khẩu trang
Từ 1376 hình ảnh có sẵn ở trên, mình sẽ tiếp tục tạo thêm dữ liệu bằng kĩ thuật Data Augmentation, trước khi đưa vào mạng CNN để train model
Bước 3 : Tạo thêm data sử dụng kĩ thuật Image Augmentation
Trong bước này, mình sẽ sử dụng kĩ thuật Data Augmentation để xoay, lật ảnh nhằm mục đích tạo thêm data cho bộ dữ liệu của mình
Sau khi áp dụng kĩ thuật này, chúng ta sẽ thu được một bộ data mới bao gồm 2751 hình ảnh với 1380 hình ảnh thuộc lớp "Mask" và 1371 hình ảnh thuộc lớp "Nomask"
Tiếp theo mình sẽ chia 2751 hình ảnh này thành 2 phần Train và Test bằng cách sử dụng hàm train_test_split của thư viện keras, tỷ lệ ảnh Train là 80%, ảnh Test là 20%
Bước 4 : Xây dựng mô hình mạng Neural
Tại bước này, mình sẽ sử dụng baseModel đó là mạng MobileNetV2
Lý do mình lựa chọn mạng MobileNetV2 đó là, mô hình này khá "nhẹ", rất phù hợp với các hệ thống nhúng (Raspberry Pi, Jetson Nano, ...) hay các ứng dụng cần chạy trên smartphone, điểm chung của các thiết bị này là đều có khả năng tính toán thấp, nhưng cần độ chính xác tương đối cao.
Tuy mô hình mạng MobileNetV2 "nhẹ", nhưng độ chính xác của nó không hề kém cạnh các mô hình CNN "khủng" khác như VGG16, VGG19, trong khi lượng tham số chỉ bằng 1/40 các mạng này
Sau khi đã lựa chọn baseModel, mình sẽ thực hiện một vài tinh chỉnh thêm một số layer để phù hợp với bài toán mình đã đề ra.
Bước 5 : Training mạng CNN
Sau khi đã xây dựng xong được model, ta sẽ train model với 2200 hình ảnh thuộc tập train và 551 hình ảnh thuộc tập test trong khoảng 20 epochs
Như các bạn thấy trên hình, sau khi train 30 epochs, model đã đạt được chỉ số Accuracy là 96,05% với tập train và 98,05 % với tập test
Bước 6 : Demo hệ thống
Sau khi đã train thành công, mình sẽ bắt tay vào demo thử hệ thống của mình, thử đeo khẩu trang xem hệ thống nhận diện có chuẩn không nhé !!!
Sau đây là video demo của mình :
Demo trên máy tính cá nhân :
Demo trên máy tính nhúng NVIDA Jetson Nano Developer Kit :
LỜI KẾT
Hệ thống cảnh báo người đeo khẩu trang đơn giản với OpenCV, Tensorflow/Keras hoạt động mượt mà, có thể chạy realtime trên các thiết bị cấu hình thấp như Raspberry Pi, Jetson Nano, thậm chí MobilePhone với độ chính xác tương đối cao.
Mặc dù với lượng dataset không hề lớn (khoảng 1376 ảnh) và các ảnh thuộc class "mask" được tạo ra bằng kĩ thuật ghép hình sử dụng OpenCV
Nhưng hạn chế của hệ thống đó là chỉ nhận diện chính xác đối với các loại khẩu trang y tế thông dụng màu xanh hoặc xám, vì vậy để cải thiện độ chính xác của hệ thống các bạn có thể
+ Thu thập thêm dữ liệu ảnh chụp thật của những người đeo khẩu trang
+ Thu thập cả những ảnh chụp dễ gây nhầm lẫn với mô hình như người lấy tay hoặc khăn bịt mặt, thực tế họ lại không đeo khẩu trang
TÀI LIỆU THAM KHẢO
Bài viết này có tham khảo một số nguồn đến từ :
+ COVID-19: Face Mask Detection using TensorFlow and OpenCV
+ COVID-19: Face Mask Detector with OpenCV, Keras/TensorFlow, and Deep Learning
Cảm ơn các bạn đã đọc bài viết của mình, xin chào và hẹn gặp các bạn trong các bài viết tiếp theo.
MLAB : Liên hệ số HOTLINE để được hỗ trợ trực tiếp : 0862.628.846
+ Chuỗi Bài viết về MÁY ĐO THÂN NHIỆT (LINK HERE)
+ Playlist Video về MÁY ĐO THÂN NHIỆT (LINK HERE)
Nếu các bạn có bất kỳ ý tưởng mới cũng như đóng góp nào đừng ngần ngại mà hãy inbox trực tiếp cho fanpage . Xin chào và hẹn gặp lại các bạn trong các bài viết tiếp theo !!!
PIVIETNAM.COM.VN CHÚC CÁC BẠN THÀNH CÔNG !!!
Thực hiện bài viết : Bùi Minh Đức
Để cập nhật các tin tức công nghệ mới các bạn làm theo hướng dẫn sau đây :
Các bạn vào Trang chủ >> Tin tức. ở mục này có các bài viết kỹ thuật thuộc các lĩnh vực khác nhau các bạn có thể lựa chọn lĩnh vực mà mình quan tâm để đọc nhé !!!
Các bạn cũng có thế kéo xuống cuối trang để xem những tin tức công nghệ mới nhất.