Nghiên cứu một số phương pháp nhận dạng khuôn mặt trong ảnh và ứng dụngNghiên cứu một số phương pháp nhận dạng khuôn mặt trong ảnh và ứng dụngNghiên cứu một số phương pháp nhận dạng khuôn mặt trong ảnh và ứng dụngNghiên cứu một số phương pháp nhận dạng khuôn mặt trong ảnh và ứng dụngNghiên cứu một số phương pháp nhận dạng khuôn mặt trong ảnh và ứng dụngNghiên cứu một số phương pháp nhận dạng khuôn mặt trong ảnh và ứng dụngNghiên cứu một số phương pháp nhận dạng khuôn mặt trong ảnh và ứng dụngNghiên cứu một số phương pháp nhận dạng khuôn mặt trong ảnh và ứng dụngNghiên cứu một số phương pháp nhận dạng khuôn mặt trong ảnh và ứng dụngNghiên cứu một số phương pháp nhận dạng khuôn mặt trong ảnh và ứng dụng
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
-
NGUYỄN ANH XUÂN
NGHIÊN CỨU MỘT SỐ PHƯƠNG PHÁP NHẬN DẠNG KHUÔN MẶT
Trang 2Luận văn được hoàn thành tại:
HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
Vào lúc: giờ ngày tháng năm
Có thể tìm hiểu luận văn tại:
- Thư viện của Học viện Công nghệ Bưu chính Viễn thông
Trang 3MỞ ĐẦU
Bài toán phát hiện mặt người được bắt đầu nghiên cứu từ những năm 1970, và
đã có rất nhiều công trình nghiên cứu về việc phát hiện mặt người trong ảnh, tuy nhiên cho đến hôm nay do sự đa dạng và tính phức tạp của thực tế do đó giải pháp toàn diện vẫn đang còn là một thách thức và đang trong giai đoạn nghiên cứu
Gần đây, lĩnh vực nghiên cứu nhận dạng đang được quan tâm nhiều nhất là nhận dạng khuôn mặt, vân tay, giọng nói …Trong đó phát hiện khuôn mặt chiếm một
vị trí đáng kể và cũng không kém quan trọng Nó được ứng dụng trong nhiều lĩnh vực cho các hệ thống an toàn bảo mật, hình sự…Xuất phát từ nhu cầu thực tế khoa học kỹ thuật phát triển những ứng dụng của nó trong đời sống trở nên phổ biến và tình hình tội phạm đang ngày càng phát triển, tinh vi hơn, ứng dụng phát hiện người trong ảnh, camera trở nên quan trọng vì nó giúp cho cơ quan an ninh nhanh chóng xác định được mục tiêu và hỗ trợ con người trong việc cảnh báo và bảo mật thông tin Việc phát hiện khuôn mặt trong ảnh còn được dùng để đếm số người trong ảnh, việc đếm
số người này có ý nghĩa thực tiễn trong cuộc sống như xác định được số lượng khách
ra vào siêu thị, mật độ lưu thông trên đường…
Như chúng ta đã biết khuôn mặt đóng vai trò quan trọng trong quá trình giao tiếp giữa người với người, và nó cũng mang một lượng thông tin trong đó như tuổi tác, giới tính, trạng thái cảm xúc…Nếu chúng ta để ý hơn thì khi hai người đối diện nói chuyện với nhau mình có thể biết người đó đang muốn nói cái gì Chính vì thế mà phát hiện khuôn mặt là một lĩnh vực nghiên cứu hấp dẫn và được nhiều người quan tâm Do đó, dựa trên những kiến thức đã tìm hiểu được và mong muốn nghiên cứu sâu hơn về một vấn đề khá thiết thực hiện nay, cùng với sự hướng dẫn của TS
Nguyễn Đình Hóa, tôi đã chọn đề tài “Nghiên cứu một số phương pháp phát hiện khuôn mặt trong ảnh và ứng dụng” làm đề tài luận văn tốt nghiệp
Ngoài phần mở đầu và kết luận, nội dung chính của luận văn được trình bày trong 3 chương:
Chương I Tổng quan về phát hiện khuôn mặt
Trang 4Trình bày các khái niệm cơ bản về xử lý ảnh, giới thiệu về bài toán phát hiện khuôn mặt trong ảnh, các phương pháp tiêu biểu trong phát hiện khuôn mặt, những khó khăn thách thức của bài toán phát hiện khuôn mặt và ứng dụng của nó trong thực
tế
Chương II Phát hiện khuôn mặt sử dụng Adaboost
Trình bày phương pháp trích chọn đặc trưng khuôn mặt Haar-like, nêu những
ưu điểm vượt trội cũng chính là lý do để lựa chọn thuật toán AdaBoost trong phát hiện khuôn mặt Trình bày các ý tưởng chính của thuật toán
Chương III Thực nghiệm và đánh giá
Giới thiệu môi trường thực nghiệm, cách thức thu thập, tổ chức và xử lý dữ liệu, cài đặt thuật toán AdaBoost và tiến hành thực nghiệm phát hiện khuôn mặt trên các bộ dữ liệu thu thập được và đánh giá kết quả đạt được
Trang 5Chương I: TỔNG QUAN VỀ PHÁT HIỆN KHUÔN MẶT 1.1 Một số kiến thức cơ bản trong xử lý ảnh
1.1.1 Xử lý ảnh là gì?
Những năm gần đây, với sự phát triển của phần cứng máy tính, xử lý ảnh và đồ hoạ theo đó phát triển một cách mạnh mẽ và có nhiều ứng dụng trong cuộc sống Xử
lý ảnh và đồ hoạ đóng một vai trò quan trọng trong tương tác người máy
Quá trình xử lý ảnh được xem như quá trình thao tác ảnh đầu vào nhằm cho ra kết quả mong muốn Kết quả đầu ra của một quá trình xử lý ảnh có thể là một ảnh
“tốt hơn” hoặc là một kết luận
Hình 1.1 Quá trình xử lý ảnh [1]
Hình 1.2 dưới đây mô tả các bước trong quá trình xử lý ảnh
Hình 1.2 Các bước cơ bản trong xử lý ảnh [1]
1.2 Bài toán phát hiện khuôn mặt
Bài toán phát hiện mặt người là hệ thống nhận vào là một ảnh hoặc một đoạn video, qua xử lý trên máy tính thuật toán xác định được tất cả vị trí, kích thước khuôn mặt người trong ảnh đó, nhưng sẽ bỏ qua những thứ khác như ngôi nhà, mặt con vật,
cơ thể con người ,…
Trang 6Các lĩnh vực ứng dụng bài toán phát hiện khuôn mặt
Hệ thống quan sát và theo dõi hành vi
Hệ thống tương tác giữa người và máy Bảo mật
Một số ứng dụng khác
1.3 Các phương pháp phát hiện mặt người trong ảnh
1.3.1 Phương pháp tiếp cận dựa trên các luật tri thức
1.3.2 Phương pháp tiếp cận dựa trên các đặc trưng bất biến 1.3.3 Phương pháp tiếp cận dựa trên đối sánh mẫu
1.3.4 Phương pháp tiếp cận dựa trên kỹ thuật học máy
f Phân loại Bayes
1.3.5 Phương pháp tiếp cận dựa vào đặc trưng 3D
Trang 7Chương II: PHÁT HIỆN KHUÔN MẶT SỬ DỤNG ADABOOST
2.1 AdaBoost và bài toán hát hiện mặt người thời gian thực
Riêng phương pháp AdaBoost cho kết quả khả quan khi phát hiện mặt người trong thời gian thực vì có thể xử lý đến khoảng 15-20 khung hình trong một giây Đây là phương pháp có tốc độ xử lý nhanh nhất trong tất cả các phương pháp học máy Trong luận văn, em sử dụng phương pháp này để giải quyết bài toán
2.2 Trích chọn đặc trưng mặt người Haar-like
Trong luận văn này, em sử dụng đặc trưng đơn giản là đặc trưng Haar-like [6,
7, 8] Đặc trưng Haar-like cũng là đặc trưng được sử dụng trong thuật toán AdaBoost
sẽ trình bày ở mục sau Đặc trưng này được xây dựng từ các hình chữ nhật có kích thước bằng nhau, dùng để tính độ chênh lệch giữa các giá trị điểm ảnh trong các vùng
kề nhau Mỗi đặc trưng Haar-like là sự kết hợp gồm 2 hoặc 3 khối chữ nhật mang giá trị “đen” hoặc “trắng” Những khối chữ nhật này thể hiện sự liên hệ tương quan giữa các bộ phận trong ảnh mà bản thân từng giá trị pixel không thể diễn đạt được
Hình 2.1: Đặc trưng Haar-like cơ bản
Để áp dụng vào bài toán phát hiện mặt người, đặc trưng haar-like được mở rộng ra và được chia thành 3 tập đặc trưng như sau:
(1) Đặc trưng theo cạnh
(2) Đặc trưng theo đường
Trang 8(3) Đặc trưng xung quanh tâm
Hinh 2.2: Đặc trưng Haar-like mở rộng Dựa theo các đặc trưng trên, giá trị của đặc trưng Haar-like được xây dựng bởi
độ chênh lệch giữa tổng các pixel của các vùng đen so với tổng các pixel của các vùng trắng
f(x) = Tổng vùng đen(các mức xám của pixel) - Tổng vùng trắng(các mức xám của pixel) Trong quá trình huấn luyện, số lượng xử lý trên các đặc trưng Haar-like là rất lớn, việc tính tổng các điểm ảnh cho bởi từng đặc trưng làm cho thời gian xử lý tăng đáng kể Do vậy Viola và Jones [6, 7, 8] đã đề xuất ra khái niệm “Integral Image” (ảnh chia nhỏ) để tính toán cho các đặc trưng cơ bản nhằm giảm thiểu chi phí cho bài toán để bài toán có thể xử lý với thời gian thực
Hình 2.3: Cách tính Integral Image của ảnh Integral Image tại vị trí (x,y) bằng tổng các giá trị điểm ảnh phía trên và bên trái của (x,y), bao gồm:
y y x
y x
,
, ,
) , ( )
, (Sau khi đã tính được Integral Image, việc tính tổng điểm ảnh của một vùng bất
kỳ nào đó trên ảnh thực hiện rất đơn giản theo cách sau: (Giả sử ta cần tính tổng điểm ảnh của vùng D như trong hình 2.4):
D = A + B + C + D – (A+B) – (A+C) + A
Với A + B + C + D chính là giá trị tại điểm P4 trên Integral Image, tương tự như vậy A+B là giá trị tại điểm P2, A+C là giá trị tại điểm P3, và A là giá trị tại điểm P1 Vậy ta có thể viết lại biểu thức tính D ở trên như sau:
D = P4- P2 - P3 + P1 = (x4, y4) - (x2, y2) - (x3, y3) + (x1, y1)
P(x,y)
Trang 9Hình 2.4: Ví dụ cách tính nhanh tổng các điểm ảnh của vùng D trên ảnh
Hình 2.5: Ví dụ cách tính nhanh tổng điểm ảnh của vùng D trên ảnh với các đặc trưng
xoay 45o
2.3 Phát hiện mặt người với thuật toán AdaBoost
2.3.1 Giới thiệu
Học theo Adaboost là một cách trong hướng tiếp cận dựa trên diện mạo, Viola
và Jones dùng AdaBoost kết hợp cascade để xác định khuôn mặt người [7] với các đặc trưng dạng Haar wavelet-like Tốc độ xử lý khá nhanh và tỷ lệ chính xác hơn 80% trên ảnh xám
2.3.2 Tiếp cận Boosting
Nguyên lý cơ bản của boosting là sự kết hợp các phân lớp yếu (weak
classification) thành một phân lớp mạnh (strong classification) Trong đó, phân lớp yếu là các bộ phân loại đơn giản chỉ cần có độ chính xác trên 50% Bằng cách này,
chúng ta nói bộ phân loại đã được “boost”
2.3.3 Thuật toán AdaBoost
Thuật toán AdaBoost tuân theo các bước sau: [7]
1 Cho một tập gồm n mẫu có đánh dấu (x1, y1), (x2, y2),… (xn, yn) với xk = (xk1, xk2, … , xkm) là vector đặc trưng Haar và yk = (-1, 1) là nhãn của mẫu (1 ứng với đối tượng, -1 ứng với không phải đối tượng - background)
2 Khởi tạo trọng số ban đầu cho tất cả các mẫu: với m là số mẫu đúng (ứng với object và y = 1) và l là số mẫu sai (ứng với background và y = -1)
Trang 10j k t
j w, |h (x ) y |
Chọn ra hj với εj nhỏ nhất, ta được ht:
}1,1{:X
t
k k
t t
k t k t
y x
h e
y x
h e Z
w w
t t
) ( ,
) ( ,
, ,
Zt: Hệ số dùng để đưa Wt+1 về đoạn [0,1] (normalization factor)
4 Phân loại mạnh được xây dựng :
)((
)(
Sơ đồ khối :
Trang 11Hình 2.8: Lưu đồ thuật toán
2.4 Chuỗi các bộ phân lớp Cascade of Classifiers
Thuật toán Cascade training:
Bước 1: Người dùng chọn các giá trị
- f: false positive rate lớn nhất chấp nhận được của mỗi bộ phân lớp trong cascade
- d: detection rate nhỏ nhất chấp nhận được của mỗi bộ phân lớp trong cascade
- Ftarget: false positive rate lớn nhất chấp nhận được của cascade
Bước 2: Khởi gán
- P = tập các mẫu là khuôn mặt (positive)
- N = tập các mẫu không phải là khuôn mặt (negative)
- F0 = 1.0; D0 = 1.0
- i = 0 //Chỉ số của bộ phân lớp trong cascade
Bước 3:Trong khi mà Fi> Ftarget:
- i = i +1
//Xây dưng bộ phân lớp thứ i trong cascade
- ni = 0 //Số bộ phân lớp yếu của bộ phân lớp thứ i
Trang 12 Tính Fi và Di của cascade hiện tại thông qua validation set
Giảm ngưỡng của bộ phân lớp thứ i cho tới khi cascade hiện tại đạt detection rate ít nhất là d*Di-1 (để ý là Fi cũng sẽ thay đổi theo.)
- N = 0
- Nếu Fi> Ftarget: Đưa những mẫu không phải là khuôn mặt vào cascade hiện tại
và tiến hành detect Những mẫu mà bị nhận dạng là khuôn mặt sẽ được đưa vào N
Minh họa thuật toán Cascade Tranning :
Hình 2.9: Minh họa sự huấn luyện của một cascade gồm N stages Ở mỗi stage, weak classifier tương ứng sẽ được huấn luyện sao cho độ chính xác của nó là h và false
- Hệ điều hành: Windows 8.1 64bit
- Processor: Intel(R) Core(TM) i7-4720HQ CPU @2.60GHz
- RAM: 8GB
Trang 133.2 Xử lý dữ liệu
3.2.1 Sơ đồ thiết kế hệ thống phát hiện khuôn mặt
Hình 3.1: Tổng quan về hệ thống phát hiện mặt người trong ảnh
3.2.2 Bộ dữ liệu đầu vào
Trong luận văn, em sưu tập các dữ liệu ảnh tĩnh chứa khuôn mặt với các bộ dữ liệu sau:
Bao Face Database (gồm 400 ảnh chứa một và nhiều khuôn mặt)
Caltech Faces 1999 Database (gồm 7092 ảnh chứa một hoặc nhiều khuôn mặt) Face Detection DataSet and Benchmark, University of Massachusetts - Amherst (gồm trên 10.000 ảnh chứa khuôn mặt các loại)
BioID-FaceDatabase-V1 (chứa 452 ảnh chứa một khuôn mặt) [9]
Tổng cộng có khoảng gần 20.000 ảnh khuôn mặt (cá nhân và tập thể) được sưu tập trong luận văn
Đối với dữ liệu khuôn mặt trong file video, em thu thập dữ liệu bao gồm IIT Facial Video Database từ [8] với 24 video có độ phân giải thấp (160x120, 320x240) , thời lượng trung bình từ 10-20 giây (tổng số frame khoảng 300), file dạng đuôi AVI với tốc độ 20fps, 06 video tự quay trong thực tế với độ phân giải cao, định dạng MP4, 02 video thu thập từ internet khác, định dạng MPG
NRC-Thuật toán học với AdaBoost đòi hỏi ngoài tập ảnh chứa khuôn mặt (Positive) còn cần các tập ảnh không chứa khuôn mặt hay còn gọi là ảnh nền (Negative) Tập
Trang 14ảnh negative được sưu tầm trên Internet với 3364 ảnh, gồm các nền ảnh từ đơn giản tới phức tạp
Tất cả các ảnh thu thập được đều được xử lý chuyển về định dạng bmp và đánh tên theo tứ tự tăng dần, gợi nhớ để tiện trong việc quản lý dữ liệu và tiến hành thực nghiệm, đánh giá
3.2.3 Huấn luyện phát hiện khuôn mặt trong ảnh
Để hỗ trợ người dùng dễ dàng tiếp cận hơn với các kỹ thuật phát hiện đối tượng, OpenCV đã cung cấp một bộ công cụ rất mạnh mẽ hỗ trợ quá trình huấn luyện
để phát hiện đối tượng trong ảnh với tên gọi HaarKit HaarKit bao gồm các công cụ sau:
create_list.bat; ObjectMarker.exe; samples_creation.bat; haarTraining.bat
Quá trình huấn luyện trải qua 3 bước:
a Chuẩn bị dữ liệu ảnh huấn luyện
b Lấy mẫu đối tượng từ bộ dữ liệu
c Huấn luyện máy học
a) Chuẩn bị dữ liệu ảnh huấn luyện
b) Lấy mẫu đối tượng từ bộ dữ liệu
c) Huấn luyện máy học
Quá trình này gồm 2 bước :
Bước 1 : Tạo ra file vector đưa vào huấn luyện ở bước 2
Bước 2: Học huấn luyện với HaarTraining
Trong quá trình huấn luyện này, em sử dụng máy tính có cấu hình:
- Processor: Intel(R) Core(TM) i7-4720HQ CPU @2.60GHz
- RAM: 8GB
- Hệ điều hành: Windows 8.1 Pro
Thời gian huấn luyện phân tầng cỡ khoảng 10 ngày Việc phân tầng ở những tầng đầu mất vài phút, trong khi từ khoảng tầng 15 trở đi mỗi tầng lên tới hàng chục giờ Thời gian phân tầng lâu do tập ảnh đầu vào lớn, trong đó nhiều ảnh chứa trên 10
Trang 15khuôn mặt, có những ảnh lên tới trên 30 khuôn mặt.bSau khi giai đoạn này hoàn tất ta
có được các phân tầng đặc trưng của khuôn mặt theo thuật toán AdaBoost
Việc sử dụng bao nhiêu tầng để phát hiện khuôn mặt một cách hiệu quả và chính xác nhất là một câu hỏi vô cùng khó trả lời Hiện không có một nghiên cứu nào đưa ra một con số chính xác cho số tầng này, do đó em đã thử nghiệm chương trình với số phân tầng từ 15 đến 30 tầng thì nhận thấy với số tầng nhỏ hơn 20, việc chương trình phát hiện nhầm các nhiễu là khá nhiều (đặc biệt với số tầng nhỏ), ngược lại với
số tầng >22 thì số khuôn mặt bị loại bỏ là tương đối nhiều (chương trình lọc cả các khuôn mặt vì tưởng nhầm là background) Với số tầng là 20 em nhận thấy chương trình cho kết quả với độ chính xác cao nhất
3.2.4 Phát hiện khuôn mặt với OpenCV
Để sử dụng file “output.xml” cho việc phát hiện khuôn mặt, trong ứng dụng em sử dụng các hàm (cv::CascadeClassifier*) load("output.xml") để load dữ
liệu đã được huấn luyện ở phần trước
Một số kết quả của chương trình:
Hình 3.20: Giao diện chính của ứng dụng
Trang 16Hình 3.21: Ví dụ về phát hiện một khuôn mặt trong ảnh
Hình 3.22: Ví dụ về phát hiện nhiều khuôn mặt trong ảnh (4 khuôn mặt)
Trang 17Hình 3.23: Ví dụ về phát hiện thiếu khuôn mặt trong ảnh (thiếu 3/17 khuôn mặt)
Hình 3.24: Ví dụ về phát hiện thừa khuôn mặt trong ảnh (thừa 1 khuôn mặt)
Trang 183.3 Các kết quả đạt được và đánh giá
3.3.1 Phát hiện khuôn mặt trên ảnh tĩnh
Để kiểm nghiệm chương trình trên ảnh tĩnh, em tiến hành trích rút một số lượng ảnh nhất định (1150 ảnh) từ các bộ dữ liệu đã thu thập được (trong đó gồm 900 ảnh chứa 2197 khuôn mặt và 250 ảnh không chứa khuôn mặt nào), các ảnh này cũng chưa từng sử dụng trong quá trình huấn luyện phát hiện khuôn mặt ở bước trước
Dưới đây là bảng kết quả khi chạy thực nghiệm trên 04 bộ ảnh tĩnh được trích rút từ CSDL:
Bảng 3.1: Kết quả thực nghiệm phát hiện khuôn mặt trên ảnh tĩnh
TT Tên bộ dữ liệu
Số ảnh
sử dụng
Số khuôn mặt xuất hiện thực tế
Số khuôn mặt phát hiện đúng (%)
Số khuôn mặt bị phát hiện thiếu (%)
Số khuôn mặt bị phát hiện thừa (%)
1 Bao Face
Database 200 1215
1152 (94,81%)
63 (5.19%)
25 (2,05%)
2 Caltech_WebFa
ces Database 250 356
315 (88,48%)
41 (11,52%)
12 (3.37%)
18 (3.78%)
4 Faces.tar 150 150 142
(94,66%)
8 (5,34%)
3 (2%)
5 Tập ảnh
3 (1.2%)