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

BÀI TẬP LỚN - XỬ LÝ ẢNH - NHẬN DIỆN KHUÔN MẶT QUA VIDEO

22 2 0
Tài liệu đã được kiểm tra trùng lặp

Đ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 đề Nhận Diện Khuôn Mặt Qua Video
Trường học Trường Đại Học Bách Khoa TP.HCM
Chuyên ngành Khoa Điện-Điện Tử
Thể loại Bài Tập Lớn
Năm xuất bản 2018
Thành phố TP.HCM
Định dạng
Số trang 22
Dung lượng 4,82 MB
File đính kèm Attachment.zip (3 MB)

Nội dung

Lần sau khi bạn nhìn thấy Kirill hoặc nhìn thấy một hình ảnh của khuôn mặt của Kirill, tâm trí của bạn sẽ làm theo quá trình này chính xác: 1. Nhận diện khuôn mặt: Nhìn vào bức tranh và tìm một khuôn mặt trong đó. 2. Thu thập dữ liệu: Trích xuất các đặc tính độc đáo của khuôn mặt Kirill mà nó có thể sử dụng để phân biệt anh ta với người khác, như mắt, miệng, mũi, v.v. 3. So sánh dữ liệu: Mặc dù có các biến thể về ánh sáng hoặc biểu thức, nó sẽ so sánh các tính năng độc đáo đó với tất cả các tính năng của tất cả những người bạn biết. 4. Nhận diện khuôn mặt: Nó sẽ xác định "Hey, đó là cậu bé của tôi Kirill!"

Trang 1

TRƯỜNG ĐẠI HỌC BÁCH KHOA TP.HCM

Sinh viên:

TP.HCM, tháng 3 năm 2018

Trang 2

1 GIỚI THIỆU

Khi bạn nhìn vào quả táo, tâm trí bạn ngay lập tức nói với bạn: đó là quả táo. Quá trình

này được công nhận một cách đơn giản nhất. Vậy, nhận diện khuôn mặt là gì? Tương tự,

nhưng đối với khuôn mặt, rõ ràng

Nhưng, câu hỏi thực sự là:

Làm thế nào một máy tính có thể nhận ra khuôn mặt?

Lấy ví dụ thực tế về cuộc sống:

Khi bạn gặp ai đó lần đầu tiên, bạn không biết người đó là ai, đúng không? Trong khi anh

ấy đang nói chuyện với bạn hoặc lắc tay, bạn đang nhìn vào mặt anh ấy: mắt, mũi, miệng, tông màu da… Quá trình này là tâm trí bạn thu thập dữ liệu và đào tạo để nhận diện khuônmặt

Tiếp theo, người đó nói với bạn rằng tên của anh ấy là Kirill ( vâng, Người hướng dẫn khoa học dữ liệu toàn sao của chúng tôi ). Vì vậy, bộ não của bạn đã nhận được dữ liệu

khuôn mặt, và bây giờ nó đã học được rằng dữ liệu này thuộc về Kirill

Lần sau khi bạn nhìn thấy Kirill hoặc nhìn thấy một hình ảnh của khuôn mặt của Kirill, tâm trí của bạn sẽ làm theo quá trình này chính xác:

1 Nhận diện khuôn mặt: Nhìn vào bức tranh và tìm một khuôn mặt trong đó.

2 Thu thập dữ liệu: Trích xuất các đặc tính độc đáo của khuôn mặt Kirill mà nó có

thể sử dụng để phân biệt anh ta với người khác, như mắt, miệng, mũi, v.v

3 So sánh dữ liệu: Mặc dù có các biến thể về ánh sáng hoặc biểu thức, nó sẽ so

sánh các tính năng độc đáo đó với tất cả các tính năng của tất cả những người bạn biết

4 Nhận diện khuôn mặt: Nó sẽ xác định "Hey, đó là cậu bé của tôi Kirill!"

Trang 3

Hinh 1: Hình mẫu

Quy trình nhận diện khuôn mặt của tâm chúng ta

Sau đó, càng có nhiều lần bạn gặp Kirill, càng có nhiều dữ liệu bạn sẽ thu thập về anh ta,

và tâm trí của bạn nhanh hơn sẽ có thể nhận ra anh ta

Bộ não con người của chúng ta có đầy đủ thứ để làm tất cả những điều này tự động. Trongthực tế, chúng ta rất giỏi phát hiện khuôn mặt hầu như ở khắp mọi nơi:

Ví dụ: Gặp gỡ đồng nghiệp trên công ty hằng ngày Máy tính không thể làm việc này tuy

nhiên, để làm điều này tự động, vì thế ta cần phải dạy máy tính làm thế nào để làm điều đó

từng bước

II Phương pháp phát hiện khuôn mặt dựa vào đặc trưng haar-like

Nói đơn giản là: nó sẽ chèn đặc trưng Haarlike lên toàn bộ bức hình của bạn Khu vực nàogiống thì nó sẽ nhận diện ở đó là mặt của bạn Cho nên có rất nhiều khu vực trong hình nó

Trang 4

sẽ nhận là mặt của bạn Sau đó nó sẽ dùng các ảnh ko giống để loại trừ các vùng này Cho nên trong quá trình training một bộ nhận dạng của Adaboost, số lượng ảnh sai luôn phải tuơng đối nhiều để nó loại trừ.

Hình 2: Các đặc trưng mở rộng của các đặc trưng Haar-like cơ sở

III LÝ THUYẾT CÔNG NHẬN KHUÔN MẶT OPENCV

Nhờ OpenCV, mã hóa nhận dạng khuôn mặt giờ đây dễ dàng hơn bao giờ hết. Có ba bước

dễ dàng để mã hóa máy tính nhận dạng khuôn mặt, tương tự như các bước mà bộ não của chúng ta sử dụng để nhận dạng khuôn mặt. Các bước này là:

Thu thập dữ liệu: Thu thập dữ liệu khuôn mặt (hình ảnh khuôn mặt trong trường

hợp này) của những người bạn muốn xác định

Đào tạo Trình nhận dạng: Nguồn cấp dữ liệu đối mặt với dữ liệu và tên tương

ứng của mỗi khuôn mặt cho trình nhận dạng để nó có thể tìm hiểu

Trang 5

Công nhận: Nạp khuôn mặt mới của người đó và xem liệu trình nhận diện khuôn

mặt ta vừa đào tạo có nhận ra được không

Và đây là cách Trình nhận diện khuôn mặt của chúng ta sẽ xem xét khi chúng ta hoàn tất

mã hóa:

Hình 3: Kết quả nhận diện

OpenCV có ba trình nhận dạng khuôn mặt tích hợp và nhờ mã hóa rõ ràng, ta có thể sử dụng bất kỳ mã nào trong số chúng chỉ bằng cách thay đổi một dòng mã. Dưới đây là tên của những người nhận diện khuôn mặt và cuộc gọi có trên OpenCV:

EigenFaces - cv2.face.createEigenFaceRecognizer ()

FisherFaces - cv2.face.createFisherFaceRecognizer ()

Biểu đồ mô hình nhị phân cục bộ (LBPH) - cv2.face.createLBPHFaceRecognizer ()

1 EIGENFACES NHẬN DIỆN KHUÔN MẶT

Thuật toán này xem xét thực tế là không phải tất cả các phần của khuôn mặt đều quan

trọng không kém hoặc hữu ích cho nhận dạng khuôn mặt . Thật vậy, khi bạn nhìn vào

Trang 6

ai đó, bạn nhận ra người đó bằng những đặc điểm riêng biệt của mình, như mắt, mũi, má hoặc trán; và cách họ thay đổi sự tôn trọng lẫn nhau.

Theo nghĩa đó, bạn đang tập trung vào các vùng thay đổi tối đa . Ví dụ, từ mắt đến mũi có

một thay đổi đáng kể, và áp dụng tương tự từ mũi vào miệng. Khi bạn nhìn vào nhiều khuôn mặt, bạn so sánh chúng bằng cách nhìn vào các khu vực này, bởi vì bằng cách bắt

sự thay đổi tối đa giữa các khuôn mặt, chúng giúp bạn phân biệt một khuôn mặt với khuônmặt kia

Theo cách này, cách trình nhận dạng EigenFaces hoạt động như thế nào. Nó xem xét tất cả

các hình ảnh đào tạo của tất cả mọi người nói chung và cố gắng trích xuất các thành phần

có liên quan và hữu ích và loại bỏ phần còn lại. Những tính năng quan trọng này được gọi

là các thành phần chính .

Lưu ý: Chúng ta sẽ sử dụng các thuật ngữ: thành phần chính s, phương sai , các khu vực

có thay đổi cao và các tính năng hữu ích không rõ ràng vì tất cả chúng đều giống nhau.

Dưới đây là hình ảnh hiển thị phương sai được trích xuất từ danh sách các khuôn mặt

Hình 4: Các thành phần chính của bộ nhận dạng khuôn mặt Eigen Faces

Nguồn: docs.opencv.org

Bạn có thể thấy rằng các tính năng hữu ích đại diện cho các khuôn mặt nhận được tên của

các khuôn mặt Eigen . Vì vậy, bộ nhận dạng EigenFaces tự đào tạo bằng cách trích xuất

các thành phần chính, nhưng nó cũng giữ một bản ghi về những thành phần nào thuộc về

Trang 7

người nào. Vì vậy, bất cứ khi nào bạn giới thiệu một hình ảnh mới cho thuật toán, nó lặp lại quá trình tương tự như sau:

1 Trích xuất các thành phần chính từ hình ảnh mới

2 So sánh các tính năng đó với danh sách các phần tử được lưu trữ trong quá trình đào tạo

3 Tìm những người có kết quả phù hợp nhất

4 Trả lại nhãn 'người' được liên kết với thành phần phù hợp nhất đó

Tuy nhiên, một điều cần lưu ý trong hình ảnh trên là thuật toán EigenFaces cũng coi

chiếu sáng là một tính năng quan trọng . Kết quả là, ánh sáng và bóng tối được chọn

bởi EigenFaces, nó phân loại chúng như là một “khuôn mặt”

Nhận diện khuôn mặt chọn lên trên con người, bị chi phối bởi hình dạng và độ tối: hai mắt, mũi, miệng

2 CÔNG CỤ NHẬN DIỆN KHUÔN MẶT FISHERFACES

Thuật toán này là phiên bản cải tiến của phiên bản cuối cùng. Như chúng ta vừa

thấy, EigenFaces xem xét tất cả các khuôn mặt đào tạo của tất cả mọi người cùng một lúc

và tìm thấy các thành phần chính từ tất cả chúng kết hợp. Bằng cách đó, nó không tập trung vào các tính năng phân biệt một cá nhân với người khác. Thay vào đó, nó tập trung vào những cái đại diện cho tất cả các khuôn mặt của tất cả mọi người trong dữ liệu huấn

luyện, nói chung .Nhưng đây là kicker:

Xem xét các thay đổi ánh sáng trong các hình ảnh sau:

Trang 8

Hình 5: Các mức độ xáng của một hình Nguồn: docs.opencv.org

Vì EigenFaces cũng tìm thấy sự chiếu sáng như một thành phần hữu ích, nó sẽ tìm thấy biến thể này rất phù hợp cho nhận dạng khuôn mặt và có thể loại bỏ các đặc tính của khuôn mặt của người khác, xem chúng ít hữu ích hơn. Cuối cùng, phương sai mà

EigenFaces đã trích xuất chỉ đại diện cho các đặc điểm khuôn mặt của một cá nhân .

LÀM THẾ NÀO ĐỂ GIẢI QUYẾT VẤN ĐỀ NÀY?

Chúng ta có thể làm điều đó bằng cách điều chỉnh các EigenFaces sao cho nó trích xuất các tính năng hữu ích từ các khuôn mặt của mỗi người một cách riêng biệt thay vì trích xuất chúng từ tất cả các khuôn mặt được kết hợp. Bằng cách này, ngay cả khi một người

có thay đổi ánh sáng cao, nó sẽ không ảnh hưởng đến quá trình khai thác tính năng của người khác

Chính xác, FisherFaces đối mặt với thuật toán nhận dạng trích xuất các thành phần chính

phân biệt một người với những người khác. Theo nghĩa đó, các thành phần của một cá nhân không thống trị (trở nên hữu dụng hơn) so với các thành phần khác

Dưới đây là hình ảnh các thành phần chính sử dụng thuật toán FisherFaces

Trang 9

Hình 6: FisherFaces Face Recognizer Các thành phần chính. Nguồn: docs.opencv.org

Bạn có thể thấy rằng các tính năng đại diện cho các khuôn mặt nhận được tên của khuôn mặt Fisher .Một điều cần lưu ý ở đây là FisherFaces chỉ ngăn các tính năng của một người

trở thành duy nhất, nhưng nó vẫn xem xét những thay đổi chiếu sáng như một tính năng hữu ích.Chúng ta biết rằng biến thể ánh sáng không phải là một tính năng hữu ích để trích xuất vì nó không phải là một phần của khuôn mặt thực tế

3 BIỂU ĐỒ NHẬN DẠNG KHUÔN MẪU NHỊ PHÂN CỤC BỘ (LBPH)

Chúng ta biết rằng Eigenfaces và Fisherfaces đều bị ảnh hưởng bởi ánh sáng và chúng ta không thể đảm bảo điều kiện ánh sáng hoàn hảo. Nhận diện khuôn mặt LBPH là một cải tiến để khắc phục nhược điểm này .

Ý tưởng với LBPH không phải là nhìn toàn bộ hình ảnh, mà thay vào đó, hãy cố gắng tìm

cấu trúc cục bộ của nó bằng cách so sánh từng pixel với các pixel lân cận

Trang 10

Sau khi bạn đọc các giá trị 0/1 này trong cửa sổ 3 × 3 theo thứ tự chiều kim đồng hồ, bạn

sẽ có một mẫu nhị phân như 11100011 là cục bộ cho một khu vực cụ thể của hình ảnh

Khi bạn hoàn thành việc này trên toàn bộ hình ảnh, bạn sẽ có một danh sách các mẫu nhị

phân cục bộ .

Hình 7: Chuyển đổi LBP thành nhị phân. Nguồn: López & Ruiz; 

Các mẫu nhị phân cục bộ được áp dụng cho Nhận diện khuôn mặt và Nhận dạng Bây giờ,sau khi bạn nhận được danh sách các mẫu nhị phân cục bộ, bạn chuyển đổi từng mẫu

thành số thập phân bằng cách sử dụng nhị phân sang chuyển đổi thập phân (như trong hình trên) và sau đó bạn tạo biểu đồ của tất cả các giá trị thập phân đó. Một biểu đồ mẫu

giống như sau:

Cuối cùng, bạn sẽ có một biểu đồ cho mỗi khuôn mặt trong tập dữ liệu huấn luyện.Điều

đó có nghĩa rằng nếu có 100 hình ảnh trong tập dữ liệu huấn luyện thì LBPH sẽ trích xuất

Trang 11

100 biểu đồ sau khi đào tạo và lưu trữ chúng để nhận dạng sau này Sau đó trong quá trìnhnhận dạng, quá trình này như sau:

1) Đưa hình ảnh mới vào trình nhận dạng để nhận diện khuôn mặt

2) Trình nhận dạng tạo ra một biểu đồ cho hình ảnh mới đó

3) Sau đó nó so sánh biểu đồ đó với các biểu đồ mà nó đã có

4) Cuối cùng, nó tìm thấy kết quả phù hợp nhất và trả về nhãn người được liên kếtvới kết quả phù hợp nhất đó

Dưới đây là một nhóm các khuôn mặt và hình ảnh mẫu nhị phân cục bộ tương ứng của

chúng. Bạn có thể thấy rằng các mặt LBP không bị ảnh hưởng bởi các thay đổi trong

điều kiện ánh sáng :

Hình 4: Các thành phần chính của bộ nhận dạng khuôn mặt LBPH

Nguồn: docs.opencv.org

Trang 12

IV Chương trình

-Tiến hành viết chương trình theo 3 bước:

1) Prepare Tranning Data:Đọc các ảnh dùng để trainning cho mỗi person với gương mặt được phát hiện sẽ dược gán một label tương ứng với người liên quan

2) Train Face Recognize: Sử dụng thư viện OpenCV’s LBPH recognizer để huấn luyện

dữ liệu đã chuẩn bị ở bước 1

3) Prediction:Đưa một vài ảnh bên ngoài để test máy có dự đoán đúng không

1 Prepare Tranning Data

-Dữ liệu trainning bao gồm 2 người mỗi người 12 ảnh Và tất cả được đặt trong thư mục Trainning-data

-Trong folder Tranning-data sẽ chứa các foder con, được đặt tên là s1,s2,… tương ứng vớimỗi person Trong từng folder con sẽ có khoảng 12 ảnh.Cấu trúc thư mục như hình sau:

Trang 13

-Folder test-data sẽ chứa

các ảnh dùng để nhận diện và test thử khả năng nhận diện của máy sau khi đã train thành công

Data freparation for face recognizer

Vâng, để biết khuôn mặt nào thuộc về người nào, trình nhận diện khuôn mặt OpenCV chấp nhận thông tin theo một định dạng cụ thể. Trong thực tế, nó nhận được hai vectơ:

 Một là khuôn mặt của tất cả mọi người

 Thứ hai là các nhãn số nguyên cho mỗi khuôn mặt

Ví dụ: nếu chúng ta có hai cá nhân và hai hình ảnh cho mỗi cá nhân:

Sau đó, bước chuẩn bị dữ liệu sẽ tạo ra các vectơ mặt và nhãn sau:

Cụ thể, chúng tôi có thể chia nhỏ bước này thành các bước phụ sau đây:

Trang 14

1) Đọc tất cả các tên thư mục con được cung cấp trong thư mụctraining-data.Trong hướngdẫn này;chúng tôi có tên thư mục:s1, s2.

2) Trích xuất số nhãn.Hãy nhớ rằng tất cả các thư mục con chứa hình ảnh của một người theo định dạng:sLabeltrong đó Label là một số nguyên đại diện cho mỗi người.Ví dụ: tên thư mục:s1có nghĩa là người đó có nhãn 1,s2 có nghĩa là nhãn của người đó là 2, v.v.Chúng tôi sẽ chỉ định số nguyên được trích xuất trong bước này cho mọi khuôn mặt được phát hiện trong phần tiếp theo

3) Đọc tất cả các hình ảnh của người đó và áp dụng phát hiện khuôn mặt cho từng

Trang 15

 Dòng 12, phương thức cv2.CascadeClassifier của lớp detectMultiScale để phát hiện tất cả các khuôn mặt trong ảnh.

 Dòng 20, trong những gương mặt trả về chỉ chọn gương mặt đầu tiên Face[0] (Nếu trong hình có nhiều gương mặt sẽ bị sai)

 Khuôn mặt được trả về là hình chữ nhật(x,y,chiều rộng, chiều cao) và không phải là hình ảnh khuôn mặt thực tế Vì vậy dòng 23 là đoạn code trích khuôn mặt từ hình ảnh xám và trả về cả vùng hình ảnh khuôn mặt và hình chữ nhật khuôn mặt

Hàm trích xuất và gán nhãn gương mặt cho data có sẵn:

Trang 16

 Trong dòng 8, hàm đọc tên tất cả các thư mục được lưu trên đường dẫn

 Dòng 10-13, tạo mảng lưu trữ khuôn mặt và nhãn

 Dòng 27, lấy nhãn của đối tượng thông qua tên thư mục

 Dòng 31, lấy đường dẫn thư mục chứa ảnh

 Dòng 34, lấy tên tất cả các file ảnh trong thư mục

 Dòng 47, lấy đường dẫn ảnh

 Dòng 50- 72, Đọc ảnh, phát hiện gương mặt, gán nhãn và trả về kết quả

2.Train Face Recognize

-Trong OpenCV có trang bị 3 bộ nhận dạng khuôn mặt

1) EigenFaces: cv2.face.createEigenFaceRecognizer()

2) FisherFace: cv2.face.createFisherFaceRecognizer()

3) LBPHFisherFace:cv2.face.LBPHFisherFaceRecognizer()

Trang 17

-Xét về tính chính xác và ổn định lựa chọn LBPHFisherFace sẽ có kết quả tốt hơn 2 bộ còn lại.

Chương trình:

Tạo bô nhận dạng khuôn mặt bằng hàm cv2.face.createLBPHFaceRecognizer()

Tiến hành tranning bằng hàm face_recognize với 2 đối số là 2 mảng numpy (faces và np.array(labels))

3 Prediction

Chương trình:

Hàm đầu tiên draw_rectangle vẽ một hình chữ nhật trên hình ảnh dựa trên các tọa độ đã cho.Nó sử dụng chức năng dựng sẵn của OpenCV cv2.rectangle(img, topLeftPoint, bottomRightPoint, rgbColor, lineWidth) để làm như vậy

Hàm thứ hai draw_text sử dụng hàm dựng sẵn của OpenCV cv2.putText(img, text, startPoint, font, fontSize, rgbColor, lineWidth) để vẽ văn bản trên hình ảnh

Trang 18

Hàm nhận diện khuôn mặt:

line-6 đọc hình ảnh thử nghiệm.

Line-7 phát hiện khuôn mặt từ hình ảnh thử nghiệm

line-11 nhận diện khuôn mặt bằng cách gọi phương thức của trình nhận diện khuôn

mặt.Phương thức này sẽ trả về nhãn. predict(face) 

line-12 lấy tên được liên kết với thẻ.

Line-16 vẽ hình chữ nhật xung quanh khuôn mặt được phát hiện.

Line-18 vẽ tên của cá nhân được dự đoán ở trên hình chữ nhật khuôn mặt.

4.Áp dụng các hàm đã xây dựng cho chương trình chính xử lí video

Do Video bản chất là tập hợp nhiều frame ảnh, cho nên việc xử lí video thực chất là quá trình xử lí trên từng frame

Trang 19

dụng khối try except để xử lí ngoại lệ cho trường hợp những frame không có gương mặt

để video liền mạch và không lỗi

V Kết Quả

Đối với video có 1 người:

Trang 20

Đối với video có 2 người trở lên:

Trang 21

Trường hợp nhận diện sai:

Trang 22

VI)Nhận xét

Đối với video chỉ có 1 người,máy nhận diện đúng và không sai

Đối với video có 2 người trở lên, máy có trường hợp bỏ sót khuôn mặt và 1 vài trường hợpnhận diện sai

Ngày đăng: 01/06/2024, 21:47

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w