Face Mask Detection, thư viện được sử dụng sẽ là OpenCV. Chương trình được sử dụng với mục tiêu nhận diện những người xuất hiện trong khung hình camera có tích hợp nhận diện đang có hay không đeo khẩu trang. Qua đó cũng góp một phần vào công cuộc phòng chống dịch Covid19.
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN ĐIỆN TỬ - VIỄN THÔNG ĐỒ ÁN I FACE MASK DETECTION USING OPENCV Nhóm sinh viên thực hiện: Giảng viên hướng dẫn: Trần Thái Sơn – 20187148 TS Võ Lê Cường Phạm Thành An - 20187114 Đào Lê Hải - 20187126 Bùi Minh Tiến - 20187497 Hà Nội, 6-2021 LỜI NÓI ĐẦU Trong vịng năm vừa qua, tình hình đại dịch Covid 19 diễn phức tạp tồn giới, tính đến thời điểm năm 2021, chuyện có phần tiến triển giới điều chế Vaccine cho virus SarsCov-2 Tuy nhiên, dù việc tuân thủ quy tắc phòng dịch quan trọng lơ là, dễ thực việc đeo trang Do nhóm chúng em định thực đồ án với chủ đề Face Mask Detection, thư viện sử dụng OpenCV Chương trình sử dụng với mục tiêu nhận diện người xuất khung hình camera có tích hợp nhận diện có hay khơng đeo trang Qua góp phần vào cơng phịng chống dịch Covid-19 Song song với chủ đề Face Mask Detection, chúng em học OpenCV thực hành đánh giá độ xác đếm Chúng em xin chân thành cảm ơn thầy Võ Lê Cường anh, chị AICS Lab hướng dẫn chúng em q trình hồn thiện đồ án! LỜI CAM ĐOAN Tôi Trần Thái Sơn, mã số sinh viên 20187148, sinh viên lớp ET-LUH17, khóa 63 Người hướng dẫn TS Võ Lê Cường Đại diện cho tồn thành viên nhóm, tơi xin cam đoan tồn nội dung trình bày đồ án Face Mask Detection Using OpenCV kết trình tìm hiểu nghiên cứu nhóm chúng tơi Các thơng tin ghi thành tìm hiểu nhóm chúng tơi, thực hành thực tế Mọi thơng tin trích dẫn, tài liệu tham khảo liệt kê rõ ràng Tôi xin chịu hoàn toàn trách nhiệm với nội dung viết đồ án Hà Nội, ngày 17 tháng 06 năm 2021 Người cam đoan Trần Thái Sơn TÓM TẮT ĐỒ ÁN Về tổng quan, đồ án gồm phần: Chương 1: Tìm hiểu OpenCV Trước hết, để sử dụng thư viện OpenCV cần hiểu trước Ngơn ngữ sử dụng Python C++ Trong C++ sử dụng bước tìm hiểu, Python sử dụng chương Chương 2: Tìm hiểu triển khai Face Mask Detection Trong chương tìm hiều chương trình Face Mask Detection gồm gì, cách triển khai kết thu từ chương trình Chương Đánh giá kết luận Chương cuối dùng để đánh giá, nhận xét nhóm làm chưa làm đánh giá nhóm trưởng đóng góp mõi thành viên Bảng phân cơng nhiệm vụ: Mục lục NỘI DUNG CHÍNH Chương 1: Tìm hiểu OpenCV Tìm hiểu chung 1.1 OpenCV gì? OpenCV viết tắt Open Source Computer Vision xem thư viện mã nguồn mở hàng đầu cho việc xử lý ảnh theo thời gian thực Chính thức mắt vào năm 1999 Intel bời Gary Bradsky, phát hành theo giấy phép BSD nên OpenCV tảng miễn phí cho học thuật thương mại OpenCV hỗ trợ ngơn ngữ phổ biến C++, C, Python, Java Ngồi cịn hỗ trợ đa tảng gồm Windows, Linux, Mac OS, IOS hay Android Về chất, OpenCV viết cách tối ưu hóa C/C++ tích hợp OpenCL, thư viện tận dụng lợi xử lý đa lõi Thư viện OpenCV chứa 2500 thuật tốn tối ưu hóa OpenCV sử dụng rộng rãi tồn giới, có phạm vi sử dụng trải dài nhiều lĩnh vực từ nghệ thuật, tương tác, lĩnh vực khai thác mỏ, đồ web công nghệ robot 1.2 Các tính có thư viện OpenCV Thư viện OpenCV có tính bật sau : - Giúp xử lý hiển thị hình ảnh , video, Input hay Output (highgui, corem imgproc) - Hỗ trợ 2D hay 3D - Có thể phát vật thể Object, feature 2D,… - Nhận diện cử chỉ, khuôn mặt, hành vi - Tương tác người máy tính - Điều khiển robot - Hỗ trợ thực tế tăng cường 1.3 Ứng dụng OpenCV thực tế Là thư viện có tính ứng dụng cao, giới bước vào cách mạng cơng nghiệp 4.0, thời điểm trí tuệ nhân tạo tích hợp vào thực tiễn sống nhiều, thực tế, số ứng dụng OpenCV kể đến như: - Kiểm tra giám sát tự động - Robot xe tự lái - Phân tích hình ảnh y học - Tìm kiếm phục hồi hình ảnh/video - Phim, game – cấu trúc 3D từ chuyển động - Nghệ thuật đặt tương tác 1.4 Các module phổ biến OpenCV Trong OpenCV có cấu trúc module khác bao gồm số thư viện liên kết tĩnh động (Static Library/Dynamic Library) Một số module phổ biến kể đến như: - Core (Core functional): biết đến module nhỏ gon, giúp xác định cấu trúc liệu bao gồm mảng đa chiều dày đặc, chức - Imgproc (Image Processcing): module có chức xử lý hình ảnh gồm có lọc hình ảnh tuyến tính, phi tuyến tính, cho phép biến đổi hình học chỉnh size, warping, affining, … đồng thời module chuyển đổi khơng gian màu, biểu đồ - Video (Video Analysis): Module cho phép phân tích video có tính ước tính chuyển động, tách thuật toán theo dõi vật thể OpenCV - Cali 3D (Camera Calibration and 3D Reconstruction): thuật tốn hình học đa chiều nhất, hiệu chuẩn máy ảnh single hay stereo dự đoán đối tượng âm nổi, yếu tố giúp tái tạo 3D - Feature 2D (2D feature framework): module giúp phát tính bật nhận diện, thông số đối nghịch hay truy suất thông số - Objdetect (Object detection): Module giúp phát đối tượng, đồng thời mô cho class định sẵn người, khuôn mặt, xe hơi, chó, mèo, … - Videoio (Video I/O): giao diện sử dụng nhằm thu, mã hóa video OpenCV - Highgui (high – level GUI): giao diện sử dụng nhằm thực trình giao tiếp UI OpenCV Những kiến thức OpenCV quan trọng 2.1 2D Features framework 2.1.1 Feature matching with FLANN Mục đích: Tìm điểm giống hình ảnh cho trước qua việc so sánh khớp keypoint sử dụng khảng cách euclid (đoạn thẳng nối điểm với khơng gian ) Phương pháp: • B1: xác định keypoint tính tốn descriptor để so sánh ( SURF detection ) Chọn vùng hình chữ nhật hình ảnh xung quanh keypoint Kích thước xác vùng xác định giai đoạn phát keypoint, thường phương pháp Fast Hessian Sau lặp lại keypoint phát chia vùng keypoint thành x khu vực Đối với khu vực phụ x này, Haar-wavelet trích xuất window có size 5x5 Lọc qua Gaussian filter để giảm nhiễu tính tốn feature vector ( khoảng cách euclid ) • B2: với descriptor áp dụng FLANN để tính tốn cặp có khoảng cách euclid bé ( hay cặp giống ) lọc lấy cặp phù hợp • B3: từ cặp vẽ đường nối cặp điểm hiển thị - Thực hành: Đọc ảnh đầu vào chuyển sang ảnh xám minHessian: ngưỡng cho dò keypoint SURF detectAndCompute: input image, array (ma trận lọc ), keypoint descriptor knnMatch: gồm mô tả, cặp keypoint thỏa mãn hệ số k để đếm cặp keypoint thỏa mãn descriptor Lọc cặp điểm thỏa mãn tốt cách so sánh khoảng cách euclid bé ngưỡng đặt bên 10 Hình 2: Folder without_mask 35 Hình 3: Folder with_mask Toàn dataset gồm 1376 ảnh: - with_mask: 690 ảnh - without_mask: 686 ảnh 36 3.2.2 Code chương trình a Training face mask detector Tensorflow Keras Thư viện tensorflow.keras hỗ trợ tính sau: - Thực gia tăng liệu - Tải lên trình phân loại MobilNetV2 classifier - Thực trình tiền xử lý - Tải lên liệu (image data) Thực khai báo đường dẫn tới file cần thiết: - “//dataset”: đường dẫn tới dataset chứa folder with_mask without_mask - “//model//mask_model”: đường dẫn tới đầu mask model sau hóa - “//plot”: đường dẫn vào đầu chương trình training mask detector 37 - Đây thông số deep learning đặc biệt bao gồm Initial learning rate, number of training epochs batch size, số liệu lấy theo tài liệu tham khảo - Lấy tất đường dẫn tới tất ảnh dataset (dòng 42) - Khởi tạo list data labels (dòng 44, 45) - Cho vòng lặp qua ImagePaths thực tiền xử lý ảnh (dòng 48 – 59) Các bước tiền xử lý bao gồm: + Resize ảnh sang kích thước 224x224 pixel (dòng 53) + Chuyển đổi ảnh sang định dạng array (dòng 54) + Điều chỉnh cường độ pixel ảnh đầu vào phạm vi [-1,1] thông qua hàm preprocess_input() (dòng 55) + Ảnh sau qua tiền xử lý label liên kết tương ứng thêm vào list data labels (dòng 58, 59) + Chuyển đổi list sang dạng Numpy array (dòng 62,63) 38 Tiếp theo thực mã hóa label, phân vùng tập liệu chuẩn bị cho việc tăng liệu - Mã hóa class lables (dịng 66-68) - Áp dụng phương pháp scikit-learn, phân đoạn liệu thành 75% cho training 25% cho testing (dongf 72,73) - Các dịng 76-83 tham số xoay, thu phóng, cắt, dịch chuyển lật ngẫu nhiên thiết lập để thực trình data augmentation 39 Tiếp theo cần triển khai MobilNetV2 để thực fine-tunning *fine-tunning: q trình sử dụng mơ hình mạng huấn luyện cho nhiệm vụ định để thực nhiệm vụ tương tự - Tải MobilNet trọng số ImageNet training trước đó, khơng cần có kết nối mạng (dịng 88) - Tạo headModel thay baseModel (dòng 89-98) - Tạo hàm for chạy qua layers baseModel buộc dừng chúng, mục đích để liệu khơng tự update q trình training (dịng 102,103) Tiến hành compile train trình phát trang (face mask detector) - Compile model với trình biên dịch (dòng 107-109) - Khởi chạy face mask traing (dòng 113-118) 40 Sau q trình training hồn tất, tiếp tục tiến hành test - Thực dự đoán tập kiểm tra, lấy số nhãn lớp có xác suất cao (dịng 122-126) - Show hình kết phân loại thiết bị đầu cuối để kiểm tra (dịng 129137) - Tuần tự hóa model chuyền lại vào model_path (dòng 134) Cuối thực vẽ đường cong thể độ xác mát 41 Kết quả: Hình 4: Kết chương trình training Hình 5: Biểu đồ thể độ xác mát q trình training detect Có thể thấy, độ xác đạt 99% qua test 42 b Phát trang qua video stream (webcam) - thư viện tensorflow/keras sử dụng để tải model MaskNet tiền xử lý input - OpenCV sử dụng cho thao tác hình - imutils cho phép cung cấp VideoStream - time để hỗ trợ cho VideoStream Tạo def nhằm thực face detection mask prediction - Chức phát khn mặt sau áp dụng model phát mặt đeo trang (face mask classifier) cho ROI khuôn mặt - đối số chức detect_and_predict_mask gồm: + frame: frame từ webcam + faceNet: model dùng để nhận diện vị trí khn mặt + maskNet: model phân loại mặt đeo trang + blob: Các chấm đỏ dùng để phát khuôn mặt (dòng 16, 17) 43 + Khởi tạo list, gồm faces (ROI), locs (vị trí khn mặt) preds (dự đốn mặt đeo trang hay khơng) (dịng 26-28) Trong faces locs giá trị blob trả - Thực vịng lặp qua cơng cụ detection, sử dụng hàm if để lọc phát có độ xác khơng cao (dịng 34-38) - Khởi tạo bouding box đảm bảo box thuộc giới hạn khung hình (Dịng 4147) Thêm thơng số ROI - Thực trích xuất face ROI tiến hành tiền xử lý (dòng 51-55) - Thêm thông số ROI bouding box vào list tương ứng (dòng 59-60) 44 Cho faces chạy qua model dự đốn mặt đeo trang - Dịng 63 sử dụng để xác nhận có khn mặt phát hiện, không hệ thống trả dự đoán trống - Chuyển đổi định dạng face ROI Numpy 32 bit nhằm có dự đốn xác (dịng 67) - Thực dự đốn tồn khn mặt (dịng 68) - Nếu có khn mặt phát hiện, hệ thống trả bouding box dự đốn khn mặt có đeo trang hay không Khởi tạo face detector, face mask detector Webcam Thực lặp qua frame thuộc Webcam 45 - Lấy frame từ webcam (dòng 90) resize kích thước nhỏ (chọn chiều dài 800pixel) (dịng 91) - Sử dụng chức detect_and_predict_mask để nhận diện dự đốn mặt có đeo trang hay khơng (dòng 95) Xử lý kết detect - Trong vòng lặp thực hiện: + Show kết bouding box dự đốn đeo trang hay khơng (dịng 101, 102) + Xác định label màu sắc bouding box tương ứng (dòng 106, 107): Mask – xanh, No Mask - Đỏ + Show kết label lên bounding box Show kết hình 46 - Chương trình dừng nhấn “q” bàn phím Kết Hình 6: Kết mặt khơng đeo trang 47 Hình 7: Kết mặt đeo trang Dưới bảng nhận xét kết công việc thành viên nhóm 3: TÀI LIỆU THAM KHẢO 48 https://www.pyimagesearch.com/2020/05/04/covid-19-face-mask-detectorwith-opencv-keras-tensorflow-and-deep-learning/ https://github.com/balajisrinivas/Face-Mask-Detection/ https://github.com/balajisrinivas/Face-Mask-Detection/tree/master/dataset Thuật toán face detection Viola-Jones xuất năm 2001 báo “ Rapid Object Detection using a Boosted Cascade of Simple Features” Paul Viola Michael Jones 49