1. Trang chủ
  2. » Luận Văn - Báo Cáo

FACE MASK DETECTION USING OPENCV

49 82 3

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Face Mask Detection Using OpenCV
Tác giả Trần Thái Sơn, Phạm Thành An, Đào Lê Hải, Bùi Minh Tiến
Người hướng dẫn TS. Võ Lê Cường
Trường học Đại Học Bách Khoa Hà Nội
Thể loại đồ án
Năm xuất bản 2021
Thành phố Hà Nội
Định dạng
Số trang 49
Dung lượng 10,62 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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.

Trang 1

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

Trang 2

LỜI NÓI ĐẦU

Trong vòng hơn 1 năm vừa qua, tình hình đại dịch Covid 19 diễn ra cực kỳphức tạp trên toàn thế giới, tính đến thời điểm hiện tại là giữa năm 2021, mọi chuyệnvẫn đã có phần tiến triển hơn khi thế giới đã điều chế được ra Vaccine cho virus Sars-Cov-2 Tuy nhiên, dù như vậy việc tuân thủ các quy tắc phòng dịch vẫn là rất quantrọng và không thể lơ là, dễ thực hiện nhất đó chính là việc đeo khẩu trang

Do vậy nhóm 3 chúng em quyết định thực hiện đồ án với chủ đề Face MaskDetection, thư viện được sử dụng sẽ là OpenCV Chương trình được sử dụng với mụctiê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òngchống dịch Covid-19 Song song với chủ đề Face Mask Detection, chúng em cùngnhau học OpenCV và thực hành đánh giá độ chính xác đếm

Chúng em xin chân thành cảm ơn thầy Võ Lê Cường và các anh, chị ở AICSLab đã hướng dẫn chúng em trong quá trình hoàn thiện đồ án!

Trang 3

LỜI CAM ĐOAN

Tôi là 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 là TS Võ Lê Cường Đại diện cho toàn bộ thành viên nhóm, tôi xin

cam đoan toàn bộ nội dung được trình bày trong đồ án Face Mask Detection Using

OpenCV là kết quả quá trình tìm hiểu và nghiên cứu của nhóm chúng tôi Các thông

tin được ghi trong bài là thành quả tìm hiểu của nhóm chúng tôi, đã được thực hànhtrong thực tế Mọi thông tin trích dẫn, các tài liệu tham khảo được liệt kê rõ ràng Tôixin chịu hoàn toàn trách nhiệm với những nội dung được viết trong đồ án này

Hà Nội, ngày 17 tháng 06 năm 2021

Người cam đoan

Trần Thái Sơn

Trang 4

TÓM TẮT ĐỒ ÁN

Về tổng quan, đồ án gồm 3 phần:

Chương 1: Tìm hiểu về OpenCV

Trước hết, để sử dụng được thư viện OpenCV thì chúng ta cần hiểu về nó trước Ngônngữ sử dụng sẽ là Python và C++ Trong đó C++ sẽ sử dụng ở bước tìm hiểu, Python

sẽ được sử dụng trong chương 2

Chương 2: Tìm hiểu và triển khai Face Mask Detection

Trong chương này chúng ta sẽ tìm hiều một chương trình Face Mask Detection gồmnhững gì, cách triển khai và kết quả thu được từ chương trình

Chương 3 Đánh giá và kết luận

Chương cuối dùng để đánh giá, nhận xét về những gì nhóm đã làm và chưa làm đượccũng như là đánh giá của nhóm trưởng về đóng góp của mõi thành viên

Bảng phân công nhiệm vụ:

Trang 5

Mục lục

NỘI DUNG CHÍNH Chương 1: Tìm hiểu OpenCV

1 Tìm hiểu chung.

1.1 OpenCV là gì?

OpenCV viết tắt của Open Source Computer Vision được xem là một trong những 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 ra mắt vào năm 1999 tại Intel bời Gary Bradsky, được phát hành theo giấy phép BSD nên OpenCV là nền tảng miễn phí cho cả học thuật và thương mại OpenCV hỗ trợ các ngôn ngữ phổ biến như C++, C, Python, Java Ngoài ra nó còn hỗ trợ đa nền tảng gồm Windows, Linux, Mac OS, IOS hay Android

Về bản chất, OpenCV được viết bằng cách tối ưu hóa C/C++ tích hợp OpenCL, thư viện có thể tận dụng lợi thế của xử lý đa lõi Thư viện của OpenCV chứa hơn 2500 thuật toán được tối ưu hóa OpenCV được sử dụng rộng rãi trên toàn thế giới, có phạm vi sử dụng trải dài trên nhiều lĩnh vực từ nghệ thuật, tương tác, cho đến lĩnh vực khai thác mỏ, bản đồ trên web hoặc côngnghệ robot

1.2 Các tính năng có trong thư viện OpenCV

Thư viện OpenCV có những tính năng nổi bật như sau :

Trang 6

- Giúp xử lý cũng như hiển thị hình ảnh , video, Input hay Output (highgui, coremimgproc)

- Hỗ trợ 2D hay 3D

- Có thể phát hiện ra các vật thể như Object, feature 2D,…

- Nhận diện cử chỉ, khuôn mặt, hành vi

- Tương tác giữa con người và máy tính

- Điều khiển robot

- Hỗ trợ thực tế tăng cường

1.3 Ứng dụng của OpenCV trong thực tế

Là 1 thư viện có tính ứng dụng cao, và thế giới đang bước vào cuộc cách mạngcông nghiệp 4.0, thời điểm trí tuệ nhân tạo được tích hợp vào thực tiễn cuộc sống rấtnhiều, trên thực tế, một số ứng dụng của OpenCV có thể kể đến như:

- Kiểm tra và giám sát tự động

- Robot và xe hơi tự lái

- Phân tích hình ảnh y học

- Tìm kiếm và phục hồi hình ảnh/video

- Phim, game – cấu trúc 3D từ chuyển động

- Nghệ thuật sắp đặt tương tác

1.4 Các module phổ biến trong OpenCV

Trong OpenCV có các cấu trúc module khác nhau và nó bao gồm cả một số thưviện liên kết tĩnh hoặc động (Static Library/Dynamic Library) Một số module phổbiến nhất có thể kể đến như:

- Core (Core functional): được biết đến là một module nhỏ gon, giúp xác địnhcác cấu trúc dữ liệu cơ bản nhất và nó bao gồm cả các mảng đa chiều dày đặc, cácchức năng cơ bản

- Imgproc (Image Processcing): module có chức năng 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 về hình học như chỉnh size,warping, affining, … đồng thời module này có thể chuyển đổi không gian màu, biểu

đồ

- Video (Video Analysis): Module cho phép phân tích các video có tính năng

Trang 7

- Cali 3D (Camera Calibration and 3D Reconstruction): thuật toán hình học đachiều cơ bản nhất, có thể hiệu chuẩn máy ảnh single hay stereo cũng như dự đoánđược các đối tượng như âm thanh nổi, các yếu tố giúp tái tạo 3D

- Feature 2D (2D feature framework): module giúp phát hiện được các tínhnăng nổi bật nhất trong bộ nhận diện, thông số đối nghịch hay bộ truy suất thông số

- Objdetect (Object detection): Module giúp phát hiện ra đối tượng, đồng thời

mô phỏng cho các class đã được định sẵn như là con 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 các video trongOpenCV

- Highgui (high – level GUI): giao diện sử dụng nhằm thực hiện quá trình giaotiếp UI trong OpenCV

2 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 ra các điểm giống nhau giữa 2 hình ảnh cho trước qua việc

so sánh và khớp các keypoint sử dụng khảng cách euclid (đoạn thẳng nối 2

điểm với nhau trong không gian )

Phương pháp:

• B1: xác định các keypoint và tính toán descriptor để so sánh ( SURF

detection )

Chọn vùng hình chữ nhật của hình ảnh xung quanh keypoint Kích thước

chính xác của vùng được xác định trong giai đoạn phát hiện keypoint,

thường là phương pháp Fast Hessian

Trang 8

Sau đó chúng ta lặp lại từng keypoint được phát hiện và chia vùng keypoint

Trang 9

• B2: với 2 bộ descriptor áp dụng FLANN để tính toán ra những cặp

có khoảng cách euclid bé nhất ( hay những cặp giống nhau nhất ) và

lọc lấy những cặp phù hợp nhất

• B3: từ các cặp trên vẽ đường nối các cặp điểm và hiển thị ra

- Thực hành:

Trang 10

Đọc ảnh đầu vào và chuyển sang ảnh xám

minHessian: ngưỡng cho bộ dò keypoint trong SURF

detectAndCompute: input image, array (ma trận lọc ), bộ keypoint và

descriptor

knnMatch: gồm các bộ mô tả, các cặp keypoint thỏa mãn và hệ số k để đếm

các cặp keypoint thỏa mãn trong descriptor

Lọc ra các cặp điểm thỏa mãn tốt nhất bằng cách so sánh khoảng cách

euclid bé hơn ngưỡng đã đặt bên trên

Trang 11

Nối các cặp điểm

drawMatches(): gồm 2 ảnh và bộ keypoint của chúng, những cặp điểm đã

tìm đưuọc output, màu hiển thị các cặp điểm, các điểm, bộ lọc hiển thị

những điểm được lọc và cờ lệnh (không vẽ các điểm đơn)

Kết quả

2.1.2 Features 2D + Homography to find a known object

( Gần tương tự feature matching with FLANN )

Sau khi vẽ các cặp điểm ra ta thực hiện tính ma trận Homography, ma trận

này thể hiện mối quan hệ không gian của hai ảnh Ta sử dụng ma trận

Homography để nắn ảnh 2 về không gian ảnh 1 Lúc này hai ảnh sẽ nằm

trên cùng một mặt phẳng

Trang 12

Xác định 4 điểm của vật thể

Kẻ đường thẳng nối 4 điểm đó

line: input, điểm đầu đoạn thẳng, điểm cuối đoạn thẳng, màu, độ dày

Kết quả:

2.1.3 Creating your own corner detector

Mục tiêu

- Tìm eigenvalues (giá trị riêng) và eigenvectors (véc-tơ riêng)

=> xác định xem 1 pixel có phải là 1 góc hay không

Trang 13

+ Quét 1 cửa sổ w (x, y) (với độ dịch chuyển u theo hướng x, độ dịch

chuyển v theo hướng y) qua I

+ Tính toán biến thiên của cường độ

Trong đó:

w (x, y): Cửa sổ ở vị trí (x, y)

I (x, y): Cường độ tại (x, y)

Trang 14

I (x + u, y + v): Cường độ tại cửa sổ đã di chuyển (x + u, y + v)

- Để tìm các cửa sổ có góc, ta tìm các cửa sổ có biến thiên cường độ lớn

=> tối đa hóa phương trình trên

- Sử dụng Taylor mở rộng

- Biến đổi phương trình dưới dạng ma trận

- 1 điểm được tính cho mỗi cửa sổ

=> xác định xem mỗi cửa sổ có thể chứa 1 góc hay không:

Trang 15

- Tải 1 ảnh (“windows.jpg”)

- Chuyển ảnh từ thang màu sang thang xám

- cornerEigenValsAndVecs(): hàm tìm giá trị riêng và vector riêng để xác

định 1 pixel có là góc hay không

- Quét Harris corner detect qua Mc (ma trận pixels của ảnh thang xám)

- Tạo cửa sổ hiển thị cho Harris corner detector

- Tạo thanh ngang mức chất lượng cho Harris corner detector

Trang 16

- cornerMinEigenVal(): hàm tìm giá trị riêng min để phát hiện góc

- Tạo cửa sổ hiển thị cho Shi-Tomasi corner detector

- Tạo thanh ngang mức chất lượng cho Shi-Tomasi corner detector

- Hàm Shi - Tomasi corner detector

- Hàm Harris corner detector

- Kết quả

Trang 17

2.2 2D Video Analysis

2.2.1 Meanshift

Mục tiêu: truy vết đối tượng trong video

Lý thuyết: Cho sẵn 1 số điểm nhất định và 1 window, mục đích là di

chuyển window từ khu vực có mật độ điểm (pixel) thấp sang khu vực có

mật độ cao hơn

- Nhược điểm: yêu cầu phải xác định được bán kính window Điều rất quan

trọng là kích thước của ROI ít nhất phải tương ứng với kích thước của đối

tượng đang được theo dõi

Trang 18

Thực hành

- Lấy video và bắt đầu đọc video

- Track_window: Cài đặt kích thước cho ROI

- Roi: tạo ra khung ROI ban đầu (chiều cao, chiều rộng)

- Hsv_roi: Lấy dải màu chính trong ROI ban đầu để quyết định dải màu sẽ

được theo dõi

Trang 19

- Term_crit: Cài đặt điều kiện để dừng tracking( trung tâm ROI không di

chuyển/ tạo ra ROI mới hơn 10 lần)

- Ret,frame: Lấy frame từ video

- cv.cvtColor: chuyển sang không gian màu HSV

- cv.calcBackProject: đối chiếu với histogram để tìm pixel tương ứng với

dải màu của đối tượng trong ROI đầu

- cv.imshow: hiển thị box

Kết quả:

2.2.2 Camshift

- Nếu đối tượng thay đổi kích thước hoặc thay đổi hướng thì meanshift sẽ

có thể không đúng nữa → Camshift

- Giả sử có 1 loạt các điểm X, Y trong không gian: ( yêu cầu phải xác định

trước số nhóm )

Trang 20

Bước 1: Thuật toán sẽ tạo ra một số điểm bất kì trong không gian, ví dụ bạn

muốn chia thành 3 nhóm thì k = 3 3 điểm này gọi là centroids

Bước 2: Với mỗi điểm dữ liệu, nó sẽ tạm thời được phân vào một nhóm

(cluster) dựa theo khoảng cách của điểm dữ liệu tới điểm k gần nhất

Bước 3: Với mỗi cluster này, tính mean của các điểm rồi gán điểm mean

này là centroids mới

Bước 4: Người ta sẽ lặp đi lặp lại bước 2 và 3 cho tới khi kết quả không

còn thay đổi nhiều

Trang 21

Ví dụ cho thuật toán Camshift.

- Code: giống meanshift nhưng trả về là 1 box chữ nhật xoay và box

parameter để đối chiếu với lần lặp tiếp theo

- boxPoint: tạo 1 box chữ nhật xoay bao quanh object

- pts: lấy góc nghiêng của box theo object

- polylines: xoay box theo góc nghiêng của object

Trang 22

2.3 Object Detection

2.3.1 Cascade Classifier.

Mục tiêu:

- Tìm hiểu chức năng hoạt động của trình phát hiện đối tượng theo tầng Haar

- Kiến thức cơ bản về nhận diện khuôn mặt và phát hiện mắt bằng Bộ phân

loại xếp tầng dựa trên Tính năng Haar

Sử dụng cv :: CascadeClassifier để phát hiện các đối tượng trong một luồng

video Sử dụng các chức năng:

cv :: CascadeClassifier :: tải để tải tệp trình phân loại xml Nó có thể là bộ

phân loại Haar hoặc LBP

cv :: CascadeClassifier :: detectorMultiScale để thực hiện việc phát hiện

Lý thuyết

Phát hiện đối tượng bằng cách sử dụng bộ phân loại tầng dựa trên tính năng

Haar là một phương pháp phát hiện đối tượng hiệu quả Đây là một

phương pháp tiếp cận dựa trên máy học, trong đó chức năng cascade được

đào tạo từ rất nhiều hình ảnh tích cực và tiêu cực Sau đó, nó được sử dụng

Trang 23

Thuật toán

Làm việc với tính năng nhận diện khuôn mặt Ban đầu, thuật toán cần rất

nhiều ảnh dương (ảnh có khuôn mặt) và ảnh âm (ảnh không có khuôn mặt)

để huấn luyện bộ phân loại Các tính năng Haar hiển thị trong hình ảnh

dưới đây được sử dụng Mỗi đối tượng là một giá trị duy nhất thu được

bằng cách lấy tổng số pixel bên dưới hình chữ nhật màu đen trừ tổng số

pixel bên dưới hình chữ nhật màu đen

Tất cả các kích thước và vị trí có thể có của mỗi hạt nhân được sử dụng để

tính toán rất nhiều tính năng ( Đối với mỗi phép tính đối tượng, chúng ta

cần tìm tổng các pixel dưới các hình chữ nhật màu trắng và đen

=> giới thiệu hình ảnh tích phân

Tuy nhiên hình ảnh của bạn lớn, nó làm giảm các phép tính cho một pixel

nhất định thành một phép toán chỉ liên quan đến bốn pixel

Ví dụ, hãy xem xét hình ảnh dưới đây

Hàng trên cùng cho thấy hai tính năng tốt

-Đặc điểm đầu tiên được chọn dường như tập trung vào đặc tính là vùng

mắt thường sẫm màu hơn vùng mũi và má

- Đặc điểm thứ hai được chọn dựa trên đặc tính là mắt tối hơn sống mũi

Nhưng các cửa sổ tương tự được áp dụng cho má hoặc bất kỳ nơi nào khác

là không liên quan

Trang 24

Tính năng tốt nhất trong số 160000+ tính năng? Nó được thực hiện bởi

Adaboost

-Áp dụng từng tính năng trên tất cả các hình ảnh đào tạo Đối với mỗi đặc

điểm, nó sẽ tìm ra ngưỡng tốt nhất sẽ phân loại các mặt thành tích cực và

tiêu cực Rõ ràng là sẽ có sai sót hoặc phân loại sai

-Chọn các tính năng có tỷ lệ lỗi tối thiểu, có nghĩa là chúng là các tính năng

phân loại chính xác nhất hình ảnh có khuôn mặt và không có khuôn mặt \

-Quy trình tương tự được thực hiện Tỷ lệ lỗi mới được tính Cũng có trọng

số mới quy trình được tiếp tục cho đến khi đạt được độ chính xác hoặc tỷ

lệ lỗi cần thiết hoặc số lượng tính năng cần thiết được tìm thấy)

Bộ phân loại cuối cùng là tổng trọng số của các bộ phân loại yếu này Nó

được gọi là yếu vì một mình nó không thể phân loại hình ảnh, nhưng cùng

với những thứ khác tạo thành một bộ phân loại mạnh

Trong một hình ảnh, hầu hết hình ảnh là vùng không có khuôn mặt

=> phương pháp đơn giản để kiểm tra xem cửa sổ có phải là vùng khuôn

mặt hay không

Trang 25

Các tính năng được nhóm thành các giai đoạn phân loại khác nhau và áp

dụng từng tính năng một Nếu một cửa sổ không thành công ở giai đoạn

đầu tiên, hãy loại bỏ nó Nếu nó vượt qua, hãy áp dụng giai đoạn thứ hai

của các tính năng và tiếp tục quá trình Cửa sổ vượt qua tất cả các giai đoạn

là một vùng khuôn mặt Kế hoạch đó như thế nào!

Máy dò có hơn 6000 tính năng với 38 giai đoạn với 1, 10, 25, 25 và 50 tính

năng trong năm giai đoạn đầu tiên (Hai tính năng trong hình trên thực sự

được lấy là hai tính năng tốt nhất từ Adaboost) Trung bình 10 tính năng

trong số 6000+ được đánh giá trên mỗi cửa sổ phụ

=>cách hoạt động của tính năng nhận diện khuôn mặt Viola-Jones

2.3.2 Haar-cascade Detection in OpenCV

- OpenCV cung cấp một phương pháp đào tạo hoặc các mô hình được đào

tạo trước, có thể được đọc bằng cách sử dụng phương thức tải

cv :: CascadeClassifier ::

- Ví dụ mã sau đây sẽ sử dụng các mô hình thác Haar được đào tạo trước để

phát hiện khuôn mặt và mắt trong một hình ảnh Đầu tiên, một

cv :: CascadeClassifier được tạo và tệp XML cần thiết được tải bằng

phương thức cv :: CascadeClassifier :: load Sau đó, quá trình phát hiện

được thực hiện bằng cách sử dụng phương thức cv :: CascadeClassifier ::

detectorMultiScale, trả về các hình chữ nhật ranh giới cho các khuôn mặt

hoặc mắt được phát hiện

Giải thích code

Đọc luồng video đầu vào

Ngày đăng: 13/01/2022, 12:49

HÌNH ẢNH LIÊN QUAN

Bảng phân công nhiệm vụ: - FACE MASK DETECTION USING OPENCV
Bảng ph ân công nhiệm vụ: (Trang 4)
Hình 1. 1:  Kết quả detection - FACE MASK DETECTION USING OPENCV
Hình 1. 1: Kết quả detection (Trang 28)
Hình 1.2 : Sơ đồ khối cho hệ thống nhận diện khẩu trang - FACE MASK DETECTION USING OPENCV
Hình 1.2 Sơ đồ khối cho hệ thống nhận diện khẩu trang (Trang 29)
Hình 1. 3: Đầu ra của chương trình Mask Detection - FACE MASK DETECTION USING OPENCV
Hình 1. 3: Đầu ra của chương trình Mask Detection (Trang 29)
Hình 2. 1: Đặc trưng HOG của ảnh chưa khuôn mặt - FACE MASK DETECTION USING OPENCV
Hình 2. 1: Đặc trưng HOG của ảnh chưa khuôn mặt (Trang 30)
Hình 2. 2: : Các đặc trưng Haar - FACE MASK DETECTION USING OPENCV
Hình 2. 2: : Các đặc trưng Haar (Trang 31)
Hình 2. 4:  Sơ đồ khối hệ thống detect khuôn mặt bằng thuật toán Viola-Jones - FACE MASK DETECTION USING OPENCV
Hình 2. 4: Sơ đồ khối hệ thống detect khuôn mặt bằng thuật toán Viola-Jones (Trang 32)
Hình 3. 1:  Sơ đồ khối chương trình phát hiện khẩu trang - FACE MASK DETECTION USING OPENCV
Hình 3. 1: Sơ đồ khối chương trình phát hiện khẩu trang (Trang 34)
Hình 3. 2: Folder without_mask - FACE MASK DETECTION USING OPENCV
Hình 3. 2: Folder without_mask (Trang 35)
Hình 3. 3: Folder with_mask - FACE MASK DETECTION USING OPENCV
Hình 3. 3: Folder with_mask (Trang 36)
Hình 3. 5: Biểu đồ thể hiện độ chính xác và mất mát của quá trình training detect - FACE MASK DETECTION USING OPENCV
Hình 3. 5: Biểu đồ thể hiện độ chính xác và mất mát của quá trình training detect (Trang 42)
Hình 3. 4: Kết quả chương trình training. - FACE MASK DETECTION USING OPENCV
Hình 3. 4: Kết quả chương trình training (Trang 42)
Hình 3. 6: Kết quả mặt không đeo khẩu trang - FACE MASK DETECTION USING OPENCV
Hình 3. 6: Kết quả mặt không đeo khẩu trang (Trang 47)

TỪ KHÓA LIÊN QUAN

w