ĐẠI HỌC ĐÀ NẴNG KHOA CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG ĐỒ ÁN CƠ SỞ 4 ĐỀ TÀI NHẬN DIỆN KHUÔN MẶT ĐEO KHẨU TRANG ĐẢM BẢO AN TOÀN TRONG GIAI ĐOẠN DỊCH COVID 19 LỜI MỞ ĐẦU Theo số liệu thống kê của Goog[.]
Giới thiệu
Tổng quan
Sự phổ biến của hình ảnh trong đời sống đã dẫn đến việc gia tăng lượng thông tin thu được, từ đó thúc đẩy sự phát triển của lĩnh vực xử lý ảnh Công nghệ xử lý ảnh hiện nay không chỉ giúp chỉnh sửa và nâng cao chất lượng hình ảnh mà còn ứng dụng rộng rãi trong việc nhận dạng chữ viết, dấu vân tay và khuôn mặt, góp phần quan trọng vào đời sống xã hội hiện đại.
Nhận dạng khuôn mặt (Face Recognition) là một trong những bài toán được quan tâm hàng đầu trong lĩnh vực xử lý ảnh hiện nay Khuôn mặt không chỉ đóng vai trò quan trọng trong giao tiếp giữa con người mà còn chứa đựng nhiều thông tin giá trị, như giới tính, tuổi tác, chủng tộc, và trạng thái cảm xúc Đặc biệt, nó còn giúp xác định mối quan hệ giữa các cá nhân, cho biết liệu họ có quen biết nhau hay không.
Nhóm chúng em sẽ phát triển hệ thống nhận diện khuôn mặt có đeo khẩu trang hoặc không, nhằm đưa ra cảnh báo Hệ thống này sẽ là cơ sở để phát triển giải pháp cảnh báo việc mang khẩu trang, đặc biệt tại những nơi công cộng đông người như trung tâm thương mại, trường học và bệnh viện.
Trong đề này nhóm chúng em xây dựng “Ứng dụng nhận diện khuôn mặt đeo khẩu trang” với thư viện OpenCV, Keras/Tensorflow, và Deep Learning.
Mục đích
Phát triển phần mềm nhận diện khuôn mặt để xác định xem người dùng có đeo khẩu trang hay không, từ đó cung cấp cảnh báo trên màn hình Giải pháp này hỗ trợ giám sát an toàn trong bối cảnh dịch bệnh nguy hiểm hiện nay.
Tìm hiểu về thư viện OpenCV khi sử dụng trong môi trường lập trình bằng ngôn ngữ Python.
Tìm hiểu về Keras/Tensorflow.
Tìm hiểu về Deep Learning: cách hoạt động và ứng dụng của DeepLearning trong đề tài này.
Phương pháp
- Các phương pháp, thuật toán phục vụ cho việc phát hiện và nhận dạng khuôn mặt người trên ảnh.
- Bộ thư viện xử lý ảnh OpenCv
- Bộ thư viện xử lý và nhận dạng Tensorflow
- Phương pháp nhận diện và học sâu Deep Learning
- Tập trung tìm hiểu nhận dạng khuôn mặt (Face Recognition)
- Công nghệ theo dõi nhận dạng tập trung ROI (Region Of Interest)
- Xử lí ảnh khuôn mặt từ bộ dữ liệu đầu vào có sẵn và huấn luyện để nhận diện.
- Nhận dạng khuôn mặt với webcam và phát hiện mang khẩu trang hoặc không, đưa ra cảnh báo.
Cấu trúc đồ án
Cấu trung đồ án gồm 3 phần chính:
- Chương 1: Giới thiệu tổng quan
- Chương 2: Nghiên cứu tổng quan
- Chương 3: Phân tích thiết kế hệ thống
- Chương 4: Triển khai xây dựng
- Chương 5: Kết luận và hướng phát triển
Nghiên cứu tổng quan
Các phương pháp
2.1.1 Bài toán nhận diện khuôn mặt
Hệ thống nhận dạng khuôn mặt sử dụng ảnh, video hoặc webcam để xác định vị trí khuôn mặt Qua quá trình xử lý và tính toán, hệ thống có khả năng nhận diện người dùng đã biết từ trước hoặc xác định người lạ.
Trước khi nhận diện khuôn mặt, chương trình cần chuẩn bị dữ liệu thô, bao gồm các khuôn mặt của sinh viên Sau đó, dữ liệu này sẽ được huấn luyện để trích xuất các embedding vector, phục vụ cho việc so sánh sau này Vì vậy, việc chuẩn bị dữ liệu ban đầu là rất quan trọng.
Hình 1-Hệ thống nhận diện khuôn mặt
2.1.2 Tổng quan kiến trúc của một hệ thống nhận dạng khuôn mặt
Một hệ thống nhận dạng mặt người thông thường bao gồm bốn bước xử lý sau:
1 Phát hiện khuôn mặt (Face Detection).
2 Phân đoạn khuôn mặt (Face Alignment hay Segmentation).
3 Trích chọn đặc trưng (Feature Extraction).
4 Nhận dạng (Recognition) hay Phân lớp khuôn mặt (Face Clasaification).
2.1.3 Xác định khuôn hình khẩu trang trên khuôn mặt
Khi nhận diện khuôn mặt xác định vị trí và theo dõi cố dịnh trên khuôn.
Hình 2-Các bước chính trong hệ thống nhận dạng
Sử dụng ROI giúp xác định các vật thể trên khuôn mặt khi đeo khẩu trang, như mắt, mũi và miệng, từ đó hệ thống nhận diện được sự hiện diện của khẩu trang.
Vùng quan tâm (ROI) là khu vực trong ảnh mà chúng ta sẽ thực hiện các xử lý hoặc biến đổi, trong khi các khu vực khác sẽ không được chú ý.
Vùng quan tâm (ROI) trong xử lý ảnh
ROI có thể xuất hiện dưới nhiều hình dạng khác nhau, bao gồm hình vuông, hình chữ nhật, hình tròn, hoặc thậm chí là nhiều vùng nhỏ trên ảnh và các pixel riêng lẻ.
ROI là một KHẨU TRANG mà trên đó: pixel quan tâm có giá trị 1 (màu trắng) và pixel không quan tâm có giá trị zero.
Vùng không quan tâm trên ảnh thường là BACKGROUND (ảnh nền).
Áp dụng ROI lên ảnh ta lấy ảnh gốc nhân với khẩu trang ROI.
ROI được mô tả dữ dội quá, hãy cùng Minh xem qua ảnh minh họa của ROI nhé:
Màu trắng thể hiện vùng ảnh ta quan tâm, cần sẽ xử lý.
Màu đen là vùng ta KHÔNG QUAN TÂM, không xử lý hoặc bỏ đi.
Khẩu trang ROI là ma trận nhị phân với các giá trị 0 và 1 Để trực quan hóa ma trận này thành hình ảnh, cần phải thực hiện việc scale về miền giá trị [0, 1].
Các công nghệ thực hiện và các khái niệm liên quan
Để giải quyết bài toán nhận diện khuôn mặt và nhận diện đeo khẩu trang, bài viết sử dụng thư viện xử lý ảnh OpenCV, cùng với Keras/Tensorflow, và áp dụng Deep Learning trong quá trình thực hiện.
Trong đồ án này ngôn ngữ lập trình được sử dụng là Python, được viết trên môi trường của Python là IDLE và Visual Studio Code.
2.2.1 Giới thiệu ngôn ngữ lập trình Python
Python là ngôn ngữ lập trình bậc cao đa năng, được Guido van Rossum phát triển và ra mắt lần đầu vào năm 1991 Với thiết kế dễ đọc, dễ học và dễ nhớ, Python có cấu trúc rõ ràng, thuận tiện cho người mới bắt đầu lập trình Ngôn ngữ này cho phép viết mã lệnh với số lần gõ phím tối thiểu, giúp tối ưu hóa quá trình lập trình.
Python là ngôn ngữ lập trình hoàn toàn động, sử dụng cơ chế cấp phát bộ nhớ tự động, tương tự như các ngôn ngữ như Perl, Ruby, Scheme, Smalltalk và Tcl Ngôn ngữ này được phát triển trong một dự án mã nguồn mở, dưới sự quản lý của tổ chức phi lợi nhuận Python Software Foundation.
Python ban đầu được phát triển cho hệ điều hành Unix, nhưng đã mở rộng sang nhiều hệ điều hành khác như MS-DOS, Mac OS, OS/2, Windows và Linux Mặc dù có sự đóng góp của nhiều cá nhân, Guido van Rossum vẫn là tác giả chính và giữ vai trò quan trọng trong việc định hướng phát triển của Python.
2.2.2 Giới thiệu về thư viện OpenCV
OpenCv (Open Source Computer Vision) là thư viện mã nguồn mở chuyên về thị giác máy, cung cấp hơn 500 hàm và 2500 thuật toán tối ưu cho các vấn đề liên quan Được thiết kế để tận dụng sức mạnh của các chip đa lõi, OpenCv thực hiện các phép toán trong thời gian thực, đảm bảo tốc độ đáp ứng nhanh chóng cho các ứng dụng thông thường.
OpenCv là thư viện đa nền tảng, có khả năng hoạt động trên các hệ điều hành như Windows, Linux, Mac, và iOS Thư viện này tuân thủ quy định mã nguồn mở BSD, cho phép người dùng sử dụng miễn phí cho cả mục đích thương mại và phi thương mại.
Dự án OpenCV bắt đầu từ năm 1999 và được giới thiệu tại hội nghị IEEE về thị giác máy và nhận dạng vào năm 2000 Tuy nhiên, phiên bản OpenCV 1.0 chỉ được công bố chính thức vào năm 2006, và phiên bản 1.1 (prerelease) ra mắt vào năm 2008 Đến tháng 10 năm 2009, OpenCV phiên bản 2.x được phát hành, đánh dấu sự chuyển mình với giao diện C++ và nhiều cải tiến so với phiên bản đầu tiên.
Thư viện OpenCV, ban đầu được Intel hỗ trợ và sau đó là Willow Garage, một phòng thí nghiệm nghiên cứu công nghệ robot, hiện vẫn là một thư viện mã nguồn mở OpenCV được phát triển bởi một quỹ phi lợi nhuận và nhận được sự ủng hộ mạnh mẽ từ cộng đồng.
Artificial intelligence is increasingly permeating our lives and profoundly impacting each of us, with terms like "Artificial Intelligence," "Machine Learning," and "Deep Learning" becoming more prevalent.
Thư viện OpenCV đã trở nên quen thuộc trong lĩnh vực công nghệ Hình vẽ dưới đây mô tả mối quan hệ giữa trí tuệ nhân tạo (artificial intelligence), học máy (machine learning) và học sâu (deep learning).
Deep learning là một chủ đề nóng trong lĩnh vực trí tuệ nhân tạo, thuộc phạm trù machine learning, tập trung vào mạng thần kinh nhân tạo Công nghệ này đã cải thiện đáng kể các ứng dụng như nhận diện giọng nói, tầm nhìn máy tính và xử lý ngôn ngữ tự nhiên Trong vài năm qua, deep learning đã thúc đẩy sự tiến bộ trong nhiều lĩnh vực, bao gồm nhận thức sự vật, dịch tự động và nhận diện giọng nói, giúp giải quyết những thách thức mà các nhà nghiên cứu trí tuệ nhân tạo từng gặp phải Để hiểu rõ hơn về deep learning, cần xem xét một số khái niệm cơ bản về trí tuệ nhân tạo.
Trí tuệ nhân tạo được cấu thành từ các lớp xếp chồng lên nhau, với mạng thần kinh nhân tạo ở đáy, tiếp theo là machine learning, và deep learning ở tầng trên cùng.
2.2.4 Thư viện của Deep Learning – Keras/Deep Learning
Keras là một thư viện 'high-level' với backend có thể là TensorFlow, CNTK hoặc Theano, nổi bật với cú pháp đơn giản hơn nhiều so với TensorFlow Để giới thiệu về các mô hình hơn là việc sử dụng các thư viện deep learning, tôi sẽ chọn Keras với TensorFlow làm backend.
Những lý do nên sử dụng Keras để bắt đầu:
Keras ưu tiên trải nghiệm của người lập trình
Keras đã được sử dụng rộng rãi trong doanh nghiệp và cộng đồng nghiên cứu
Keras giúp dễ dàng biến các thiết kế thành sản phẩm
Keras hỗ trợ huấn luyện trên nhiều GPU phân tán
Keras hỗ trợ đa backend engines và không giới hạn bạn vào một hệ sinh thái
TensorFlow là thư viện mã nguồn mở nổi tiếng nhất thế giới cho machine learning, được phát triển bởi các nhà nghiên cứu từ Google Sự bùng nổ của trí tuệ nhân tạo trong thập kỷ qua đã thúc đẩy sự phát triển của machine learning và deep learning Với khả năng hỗ trợ mạnh mẽ các phép toán học, TensorFlow giúp việc giải quyết các bài toán trong lĩnh vực này trở nên đơn giản, nhanh chóng và tiện lợi hơn.
Kiến trúc TensorFlow hoạt động được chia thành 3 phần:
– Tiền xử lý dữ liệu
– Train và ước tính model
TensorFlow cho phép lập trình viên xây dựng đồ thị dataflow, mô tả cách dữ liệu di chuyển qua các node xử lý Mỗi node đại diện cho một phép toán, trong khi các kết nối giữa các node là các mảng dữ liệu đa chiều, hay còn gọi là 'tensor'.
Hạn chế, tồn tại của các phương pháp
Bài toán nhận dạng mặt người đã được nghiên cứu từ những năm 70, nhưng vẫn gặp nhiều khó khăn và chưa đạt được kết quả mong muốn, thu hút sự quan tâm của nhiều nhóm nghiên cứu trên toàn thế giới Những thách thức chính bao gồm: tư thế và góc chụp ảnh có thể làm khuất các thành phần trên khuôn mặt; sự xuất hiện hoặc thiếu hụt các đặc trưng như râu, kính; biểu cảm khuôn mặt có thể thay đổi đáng kể các thông số nhận diện; sự che khuất bởi các đối tượng khác; biến đổi hướng ảnh do góc quay khác nhau; điều kiện chụp ảnh như ánh sáng và chất lượng camera; và sự thay đổi theo thời gian, làm cho việc nhận dạng trở nên khó khăn ngay cả với con người.
Phân tích thiết kế hệ thống
Mô hình tổng quan của hệ thống nghiên cứu
3.1.1 Luồng hoạt động của hệ thống
Hệ thống nhận diện khuôn mặt đeo khẩu trang được chia thành hai giai đoạn riêng biệt, mỗi giai đoạn bao gồm các bước nhiệm vụ cụ thể để tùy chỉnh quá trình huấn luyện.
Ta có 2 giai đoạn chính như trên sơ đồ:
Giai đoạn 1: Huấn luyện dữ liệu cho hệ thống (Train Face Mask Detector)
Giai đoạn 2: Triển khai nhận diện và phân tích (Apply Face Mask Detector)
Phân tích chi tiết luồng hoạt động của hệ thống
3.2.1 Giai đoạn huấn luyện dữ liệu cho hệ thống
Hình 5-Sơ đồ luồng hoạt động của giai đoạn Train dữ liệu
Chúng ta sẽ tải tập dữ liệu phát hiện khẩu trang, sau đó đào tạo một mô hình bằng Keras/TensorFlow trên tập dữ liệu này và cuối cùng tuần tự hóa trình phát hiện khẩu trang.
Phân tích luồng hoạt động của giai đoạn Train dữ liệu qua thứ tự các bước:
Bước đầu tiên trong quy trình là tải tập dữ liệu mặt nạ, nơi hệ thống sẽ bắt đầu nạp dữ liệu từ tập dữ liệu đã được chuẩn bị sẵn.
Huấn luyện bộ phân loại khẩu trang cho khuôn mặt bằng Keras/TensorFlow là quá trình quan trọng nhằm phân loại khuôn mặt có đeo khẩu trang và không đeo khẩu trang Việc này giúp cung cấp hai kết quả cho quá trình nhận diện, từ đó nâng cao hiệu quả trong việc phân tích hình ảnh.
To serialize a face mask classifier to disk using Keras/TensorFlow, the system will continuously train the input data to maintain effective model training.
3.2.2 Giai đoạn áp dụng và triển khai phân tích nhận diện của hệ thống
Hình 6-Sơ đồ luồng hoạt động phân tích và nhận diện của hệ thống
Sau khi hoàn tất quá trình huấn luyện trình phát hiện khẩu trang, chúng ta có thể tải trình phát hiện này để thực hiện việc nhận diện khuôn mặt Tiếp theo, từng khuôn mặt sẽ được phân loại thành hai nhóm: có đeo khẩu trang và không đeo khẩu trang.
Phân tích luồng hoạt động của giai đoạn áp dụng vào phân tích và nhận diện của hệ thống:
Trước khi tiến hành phân tích, hệ thống cần tải mặt nạ phân loại từ đĩa và nạp toàn bộ ảnh nhận dạng vào bộ nhớ để chúng có thể học, sau đó mới bắt đầu quá trình nhận diện và phân tích.
Phát hiện khuôn mặt trong luồng video: Sau khi tải toàn bộ hình ảnh, chúng ta chuyển sang nhận diện khuôn mặt thông qua luồng video sử dụng webcam từ laptop.
Sau khi nhận diện khuôn mặt từ video stream, chúng ta tiến hành áp dụng ROI để trích xuất khuôn mặt một cách tập trung và chính xác.
Áp dụng công cụ phân loại khẩu trang cho từng khu vực khuôn mặt (ROI) nhằm xác định trạng thái "có khẩu trang" hoặc "không có khẩu trang".
- Show results: hiển thị kết quả sau khi đã tiến hành phân tích nhận diện.
Phân tích tập dữ liệu (dataset)
3.3.1 Xây dựng tập dữ liệu Để xây dựng tập dữ liệu phục vụ cho việc huấn luyện (train) dữ liệu
Chúng tôi đã tạo ra một kho ảnh chân dung đa dạng với khuôn mặt không đeo khẩu trang, nhằm mục đích huấn luyện mô hình nhận diện khuôn mặt trong điều kiện không có khẩu trang.
Sử dụng tập ảnh chân dung không đeo khẩu trang, chúng ta có thể tạo ra tập ảnh nhân tạo bằng cách sử dụng Python và OpenCV để ghép hình khẩu trang vào các khuôn mặt Qua đó, chúng ta tạo ra một tập dữ liệu ảnh nhân tạo có thể áp dụng thực tế.
Các mốc trên khuôn mặt giúp xác định các cấu trúc như đôi mắt, lông mày, mũi, mặt và khuôn hàm Để xây dựng tập dữ liệu về khuôn mặt đeo khẩu trang, cần bắt đầu từ hình ảnh của một người không đeo khẩu trang.
Để tạo ra bộ dữ liệu về khẩu trang trong bối cảnh đại dịch COVID-19, chúng ta sẽ bắt đầu bằng việc sử dụng một bức ảnh của một người không đeo khẩu trang.
Từ đó, chúng ta áp dụng tính năng phát hiện khuôn mặt để tính toán vị trí hộp giới hạn của khuôn mặt trong hình ảnh:
Hình 8-Nhận diện khuôn mặt trên bức ảnh nhờ Deep Learning
Chúng tôi đã áp dụng tính năng nhận diện khuôn mặt bằng phương pháp học sâu (Deep Learning) thông qua OpenCV.
Hình 9-Trích xuất ROI của khuôn mặt với OpenCV và NumPy cắt
Hình 3.3.3 - Khi chúng ta biết vị trí của khuôn mặt trong hình ảnh, chúng ta có thể trích xuất Vùng ưa thích (ROI) của khuôn mặt
Và từ đó, chúng ta áp dụng các điểm mốc trên khuôn mặt, cho phép chúng ta xác định vị trí của mắt, mũi, miệng, v.v.:
Hình 10-Đánh dấu các điểm mốc trên khuôn mặt
Sau đó, chúng ta phát hiện các điểm mốc trên khuôn mặt bằng cách sử dụng dlib để chúng ta biết vị trí đặt khẩu trang trên khuôn mặt.
Tiếp theo, chúng ta cần một hình ảnh của một khẩu trang (với nền trong suốt) như hình bên dưới:
Khẩu trang trong hình 3.3.5 là ví dụ về cách ngăn chặn lây lan COVID-19 qua đường hô hấp Khẩu trang này sẽ tự động được áp dụng lên vùng ROI của khuôn mặt nhờ vào việc xác định các vị trí mốc trên khuôn mặt.
Khẩu trang này sẽ tự động được áp dụng cho khuôn mặt bằng cách sử dụng các điểm mốc trên khuôn mặt, đặc biệt là các điểm dọc theo cằm và mũi, để xác định vị trí chính xác của khẩu trang.
Hình 12-Hình ảnh khẩu trang được đặt lên khuôn mặt
Khẩu trang COVID-19 được áp dụng trên khuôn mặt của người trong hình ảnh ban đầu, sử dụng công nghệ thị giác máy tính thông qua các mốc khuôn mặt từ OpenCV và dlib, khiến cho việc nhận diện trở nên khó khăn.
Chúng ta có thể lặp lại quy trình này cho tất cả các hình ảnh đầu vào, từ đó tạo ra bộ dữ liệu khẩu trang nhân tạo của mình.
Hình 13-Bộ dữ liệu ảnh đeo khẩu trang nhân tạo
Hình ảnh khẩu trang COVID-19 nhân tạo được trình bày trong Hình 3.3.7 sẽ được sử dụng trong bộ dữ liệu "có khẩu trang" và "không có khẩu trang" của chúng tôi Mục tiêu là phát hiện khẩu trang COVID-19 thông qua các phương pháp thị giác máy tính và học sâu, sử dụng Python, OpenCV và TensorFlow/Keras.
Triển khai xây dựng
Cấu trúc dự án
Cấu trúc thư mục chính của dự án:
Tập thư mục dataset chứa dữ liệu được mô tả trong phần “Tập dữ liệu phát hiện khẩu trang COVID-19 của chúng ta”.
Ba hình ảnh examples được cung cấp để bạn có thể kiểm tra trình phát hiện khẩu trang hình ảnh tĩnh.
- train_mask_detector.py : Chấp nhận tập dữ liệu đầu vào của chúng ta và tinh chỉnh
MobileNetV2 dựa trên nó để tạo mask_detector.model Một plot.png lịch sử huấn luyện cũng được tạo ra.
- detect_mask_image.py :Thực hiện phát hiện khẩu trang trong hình ảnh tĩnh.
- detect_mask_video.py : Sử dụng webcam của bạn, tập lệnh này áp dụng tính năng phát hiện khẩu trang cho mọi khung hình trong luồng.
Triển khai kịch bản huấn luyện (training) hệ thống nhận diện khẩu trang
Chúng ta sẽ xem xét tập dữ liệu và tìm hiểu cách sử dụng Keras và TensorFlow để đào tạo một bộ phân loại tự động phát hiện người có đeo khẩu trang hay không Để thực hiện nhiệm vụ này, chúng ta sẽ tinh chỉnh kiến trúc MobileNet V2, một kiến trúc hiệu quả cao phù hợp cho các thiết bị nhúng với dung lượng tính toán hạn chế như Raspberry Pi, Google Coral, và NVIDIA Jetson Nano.
Việc áp dụng công nghệ nhận diện khẩu trang trên các thiết bị nhúng giúp giảm chi phí sản xuất cho hệ thống phát hiện khẩu trang, vì vậy chúng tôi đã quyết định sử dụng kiến trúc này.
Tiến hành triển khai hệ thống:
- Chèn các thư viện có liên quan Deep Learning vào file train_mask_detector.py
- Loading the MobilNetV2 classifier (we will fine-tune this model with pre- trained ImageNet weights)
- Building a new fully-connected (FC) head
Chúng ta sử dụng scikit-learning (sklearn) để phân loại hai nhãn lớp, phân đoạn tập dữ liệu của chúng ta và in báo cáo phân loại.
Việc sử dụng các đường dẫn imutils sẽ hỗ trợ chúng ta trong việc tìm kiếm và liệt kê hình ảnh trong tập dữ liệu Đồng thời, chúng ta sẽ áp dụng matplotlib để vẽ các đường cong đào tạo.
Phân tích cú pháp một số đối số dòng lệnh cần thiết để khởi chạy tập lệnh của chúng ta từ terminal:
Các đối số dòng lệnh bao gồm:
dataset : Đường dẫn đến tập dữ liệu đầu vào của khuôn mặt và khuôn mặt có khẩu trang.
plot: Đường dẫn đến cốt truyện lịch sử đào tạo đầu ra của bạn, sẽ được tạo bằng cách sử dụng matplotlib.
model: Đường dẫn đến mô hình phân loại khẩu trang được tuần tự hóa kết quả. Xác định các deep learning hyperparameters ở một nơi:
Chỉ định các hằng số siêu tham số như tốc độ học ban đầu (INIT_LR), số kỷ nguyên đào tạo và kích thước lô Tiếp theo, áp dụng lịch trình giảm tốc độ học tập để tối ưu hóa quá trình đào tạo.
Tại thời điểm này, chúng ta đã sẵn sàng tải và xử lý trước dữ liệu đào tạo của mình:
Trong khối lệnh, ta có :
- Nắm lấy tất cả các imagePaths trong tập dữ liệu (dòng 44)
Lặp qua các đường dẫn hình ảnh để tải và tiền xử lý, bao gồm thay đổi kích thước hình ảnh thành 224 × 224 pixel, chuyển đổi sang định dạng mảng và chia tỷ lệ cường độ pixel trong hình ảnh đầu vào về phạm vi [-1, 1] thông qua hàm preprocess_input.
- Thêm hình ảnh được xử lý trước và nhãn được liên kết vào danh sách dữ liệu và nhãn, tương ứng (Dòng 59 và 60)
Đảm bảo rằng dữ liệu đào tạo của chúng ta được định dạng dưới dạng mảng NumPy Tiếp theo, chúng ta sẽ tiến hành mã hóa nhãn, phân vùng tập dữ liệu và chuẩn bị cho việc tăng dữ liệu.
Các dòng 67-69 một nóng mã hóa các nhãn lớp của chúng ta, có nghĩa là dữ liệu của chúng ta sẽ ở định dạng sau:
Như bạn có thể thấy, mỗi phần tử của mảng nhãn của chúng ta bao gồm một mảng trong đó chỉ có một chỉ mục là "hot" (tức là 1)
Sử dụng phương pháp tiện lợi của scikit-learning, Dòng 73 và 74 phân đoạn dữ liệu của chúng ta thành 80% đào tạo và 20% còn lại để kiểm tra
Trong quá trình đào tạo, chúng ta áp dụng các đột biến nhanh chóng cho hình ảnh nhằm cải thiện khả năng tổng quát hóa Quá trình này được gọi là tăng dữ liệu, trong đó các tham số như xoay ngẫu nhiên, thu phóng, cắt, dịch chuyển và lật được thiết lập.
Chúng ta sẽ sử dụng đối tượng aug vào thời gian đào tạo Nhưng trước tiên, chúng ta cần chuẩn bị MobileNetV2 để tinh chỉnh:
Tinh chỉnh thiết lập là một quy trình gồm ba bước:
- Tải MobileNet bằng các trọng số ImageNet đã được đào tạo trước, bỏ đầu mạng (Dòng 88 và 89)
- Tạo đầu FC mới và gắn nó vào đế thay cho đầu cũ ( Dòng 93-102)
Cố định các lớp cơ sở của mạng để trọng lượng của chúng không bị cập nhật trong quá trình nhân giống ngược, trong khi trọng lượng của lớp đầu sẽ được điều chỉnh.
Với dữ liệu đã được chuẩn bị và kiến trúc mô hình sẵn sàng, chúng ta có thể tiến hành biên dịch và đào tạo mạng phát hiện khẩu trang.
Dòng 111-113 mô tả quá trình biên dịch mô hình với trình tối ưu hóa Adam, lịch trình phân rã tốc độ học tập và entropy chéo nhị phân Khi xây dựng từ tập lệnh đào tạo với hơn 2 lớp, cần sử dụng entropy chéo phân loại Đào tạo về khẩu trang được thực hiện qua Đường 117-122, và đối tượng tăng dữ liệu (aug) sẽ cung cấp các lô dữ liệu hình ảnh bị đột biến.
Sau khi đào tạo xong, chúng ta sẽ đánh giá mô hình kết quả trên bộ thử nghiệm:
Dòng 126-130 thực hiện dự đoán trên tập kiểm tra bằng cách lấy các chỉ số nhãn của lớp có xác suất cao nhất Sau đó, chúng ta in báo cáo phân loại trên thiết bị đầu cuối để kiểm tra kết quả.
Dòng 138 sắp xếp tuần tự mô hình phân loại khẩu trang của chúng ta vào đĩa
Bước cuối cùng của chúng ta là vẽ các đường cong chính xác và mất mát của chúng ta:
Khi âm mưu của chúng ta đã sẵn sàng, Dòng 152 lưu hình vào đĩa bằng cách sử dụng đường dẫn tệp plot.
Tiến hành huấn luyện hệ thống nhận diện khẩu trang với Keras/Tensorflow
Huấn luyện hệ thống nhận diện khẩu trang với Keras/Tensorflow và Deep
Sử dụng trình Terminal để thực thi câu lệnh Train
Như bạn có thể thấy, chúng ta đang đạt được độ chính xác ~ 99% trên bộ thử nghiệm của mình.
Với những kết quả đạt được, chúng tôi hy vọng mô hình của mình sẽ có khả năng tổng quát tốt cho các hình ảnh ngoài tập huấn luyện và thử nghiệm.
Triển khai nhận diện khẩu trang với video stream qua webcam
Ta tiến hành xây dựng hệ thống nhận diện chạy với thời gian thực
Sử dụng file detect_mask_video.py để xây dựng cấu trúc tập lệnh nhận diện, ta tiến hành import các thư viện cần thiết như bên dưới
Thuật toán trong tập lệnh này tương tự nhau, nhưng được kết hợp một cách linh hoạt để xử lý tất cả các khung hình trong luồng webcam của bạn.
Sự khác biệt chính trong việc nhập liệu là cần có lớp VideoStream và thời gian, giúp chúng ta làm việc hiệu quả với luồng video Chúng ta cũng sẽ sử dụng imutils để áp dụng phương pháp thay đổi kích thước với nhận biết khía cạnh.
Chức năng này nhận diện khuôn mặt và áp dụng công cụ phân loại khẩu trang cho từng khu vực khuôn mặt Hàm này tích hợp mã của chúng tôi và có thể được chuyển sang một tệp Python riêng biệt.
Logic dự đoán khẩu trang / phát hiện khuôn mặt của chúng ta cho tập lệnh này nằm trong hàm detect_and_predict_mask :
Hàm detector_and_posystem_mask của chúng ta chấp nhận ba tham số:
- frame: Một khung từ khuôn mặt luồng của chúng ta
- faceNet: Mô hình được sử dụng để phát hiện vị trí trong khuôn mặt hình ảnh là khẩu trang
- maskNet: Mô hình phân loại khẩu trang COVID-19 của chúng ta
Chúng tôi xây dựng một đốm màu bên trong, phát hiện các khuôn mặt và khởi tạo danh sách để trả về Danh sách này bao gồm khuôn mặt (ROI), vị trí khuôn mặt (loc) và danh sách dự đoán về việc có đeo khẩu trang hay không (preds).
Từ đây, chúng ta sẽ lặp lại các bước phát hiện khuôn mặt:
Trong quá trình xử lý, chúng ta tiến hành lọc các phát hiện yếu và trích xuất các hộp giới hạn, đồng thời đảm bảo rằng tọa độ của các hộp này không vượt ra ngoài giới hạn của hình ảnh.
Tiếp theo, chúng ta sẽ thêm ROI của khuôn mặt vào hai danh sách tương ứng của chúng ta:
Sau khi trích xuất ROI của khuôn mặt và thực hiện xử lý trước, chúng ta sẽ kết nối ROI của khuôn mặt với các hộp giới hạn và thêm chúng vào danh sách tương ứng.
Bây giờ chúng ta đã sẵn sàng để kiểm tra khuôn mặt của chúng ta thông qua dự đoán khẩu trang của chúng ta:
Logic được thiết lập nhằm tối ưu hóa tốc độ Đầu tiên, chúng ta cần xác nhận rằng ít nhất một khuôn mặt đã được phát hiện (Dòng 63); nếu không, chúng ta sẽ trả về các preds trống.
Chúng ta đang tối ưu hóa quy trình suy luận trên toàn bộ loạt mặt trong khung để tăng tốc độ đường dẫn (Dòng 68) Việc viết một vòng lặp riêng để dự đoán từng mặt sẽ không hợp lý do chi phí cao, đặc biệt khi sử dụng GPU cần nhiều giao tiếp trên bus hệ thống Thay vào đó, thực hiện các dự đoán hàng loạt sẽ mang lại hiệu quả tốt hơn.
Dòng 72 trả về các vị trí hộp giới hạn khuôn mặt của chúng ta và các dự đoán khẩu trang / không khẩu trang tương ứng cho người gọi.
Tiếp theo, chúng ta sẽ xác định các đối số dòng lệnh của chúng ta:
Các đối số dòng lệnh của chúng ta bao gồm:
face: Đường dẫn đến thư mục dò tìm khuôn mặt
model: Đường dẫn đến trình phân loại khẩu trang được đào tạo của chúng ta confidence: Ngưỡng xác suất tối thiểu để lọc các phát hiện khuôn mặt yếu
Với việc nhập dữ liệu, chức năng tiện lợi và chuỗi lệnh của chúng ta đã sẵn sàng hoạt động Chúng ta chỉ cần thực hiện một số khởi tạo cần thiết trước khi lặp qua các khung.
Tiếp tục lặp lại các khung trong luồng:
Chúng ta bắt đầu lặp qua các khung trên Dòng 103 Bên trong, chúng ta lấy một khung từ luồng và thay đổi kích thước của nó (Dòng 106 và 107)
Đường dây 111 cung cấp tiện ích tiện lợi bằng cách phát hiện và dự đoán việc mọi người có đeo khẩu trang hay không.
Xử lý hậu kỳ (tức là chú thích) kết quả phát hiện khẩu trang COVID-19:
Bên trong vòng lặp của chúng ta đối với các kết quả dự đoán (bắt đầu từ Dòng 115), chúng ta:
- Mở hộp giới hạn khuôn mặt và dự đoán khẩu trang / không khẩu trang (Dòng 117 và 118)
- Xác định nhãn và màu sắc (Dòng 122-126)
- Chú thích nhãn và giới hạn khuôn mặt (Dòng 130-132)
Cuối cùng, chúng ta hiển thị kết quả và thực hiện dọn dẹp:
Sau khi hiển thị khung, chúng ta sẽ chụp các phím bấm Nếu người dùng nhấn phím q để thoát, chúng ta sẽ rời khỏi vòng lặp và tiến hành công việc dọn phòng.
Nhận diện khẩu trang với OpenCV trong thời gian thực:
Ta có thể khởi chạy trình phát hiện khẩu trang trong các luồng video thời gian thực bằng lệnh sau:
Hình 14-Kết quả nhận diện khuôn mặt không mang khẩu trang
Hình 4.4 – Kết quả nhận diện khuôn mặt khi không đeo khẩu trang đã được hiện ra sau khi phân tích.
Hình 15-Kết quả nhận diện khuôn mặt có đeo khẩu trang
Kết quả nhận diện khuôn mặt khi đeo khẩu trang cho thấy máy dò khẩu trang của chúng ta hoạt động hiệu quả trong thời gian thực và có độ chính xác cao trong dự đoán.