Vấn đề với việc biểu diễn ảnh đó là ảnh có độ phân giải cao. Các ảnh xám với kích thước p q sẽ chiếm một không gian vector là m p q , do đó với ảnh có kích thước 100x100 sẽ chiếm một không gian ảnh là 10000. Câu hỏi đặt ra là: có phải tất cả dữ liệu trong không gian ảnh đều có ích? Chúng ta chỉ có thể đưa ra quyết định nếu có phương sai trong dữ liệu, vì vậy những gì chúng ta đang tìm kiếm đó là các thành phần chiếm hầu hết các thông tin. Phương pháp phân tích thành phần chính (PCA) đã được đề xuất bởi Karl Pearson (1901) và Harold Hotelling (1933) để biến một tập hợp các biến tương quan thành một tập hợp các biến không tương quan nhỏ hơn. Ý tưởng ở đây là: với một bộ dữ liệu có độ phân giải cao (high-dimensional dataset) thì thường nó được mô tả bởi các biến tương quan và do đó chỉ có một số nhỏ là có ý nghĩa đối với hầu hết các thông tin. Phương pháp PCA cho thấy được các hướng mà có phương sai lớn nhất trong các dữ liệu, và được gọi là thành phần chính.
Trang 46
Mô tả thuật toán
GọiX x x1, ,...,2 xnlà vectơ ngẫu nhiên với d i
x R Giá trị trung bìnhđược tính bởi công thức:
1 1 n i i x n (2.26)
Khi đó, ma trận hiệp phương sai S của nó sẽ là:
1 T i i S x x n (2.27)
Giá trị riêngi và vector riêng vi của S
, 1, 2,...,
i i i
Sv v i n (2.28)
Bậc của vector riêng giảm dần theo trị riêng. k các thành phần chính là các vector riêng tương ứng với k trị riêng lớn nhất. k các thành phần
chính của vector x được cho bởi công thức:
T y W x (2.29) Trong đó W v v1, ,...,2 vk Theo PCA thì: x Wy (2.30) Trong đó W v v1, ,...,2 vk
Trang 47
Hình 2.25. Các khuôn mặt được mô tả bởi thuật toán Eigenfaces
Khi đó phương pháp Eigenfaces thực hiện nhận dạng khuôn mặt bằng cách Chiếu tất cả các mẫu huấn luyện vào không gian con PCA. Chiếu hình ảnh truy vấn vào không gian con PCA.
Tìm kiếm vùng lân cận gần nhất giữa các hình ảnh huấn luyện và hình ảnh truy vấn.
Vẫn còn lại một vấn đề cần giải quyết. Tưởng tượng là nếu ta đưa 400 tấm ảnh có kích thước 100x100 pixel. Phương pháp PCA sẽ tiến hành giải các ma trận hiệp phương sai S XX T, như vậy size X 10000 400 . Và khi đó ta phải kết thúc với 10000 10000 ma trận, khoảng 0.8GB. Việc giải ma trận này là không khả thi, vì vậy ta sẽ cần phải áp dụng một thủ thuật. Theo đại số tuyến tính, ta biết rằng một ma trận M N với M N thì chỉ có thể có
1
N giá trị riêng. Vì vậy, hoàn toàn có thể khai triển giá trị riêng S X X T theo kích thước N N :
Trang 48
T
i i i
X Xv v (2.31)
Và thu được giá trị riêng ban đầu của S XX Tbằng phép nhân bên trái của ma trận dữ liệu:
T
i i i
XX Xv Xv (2.32)
Kết quả là các vector riêng là trực giao với nhau, để có được vector riêng trực giao thì nó cần phải được chuẩn hóa để đơn vị chiều dài [25].
2.8.2 Fisherfaces
Phương pháp phân tích thành phần chính (PCA) là cốt lõi của phương pháp Eigenfaces, tìm một tổ hợp tuyến tính của các đặc trưng nhằm tối đa hóa tổng phương sai trong dữ liệu. Trong khi điều này rõ ràng là cách mạnh mẽ để thể hiện dữ liệu, nhưng nó không xét đến bất kỳ lớp nào và vì vậy rất nhiều thông tin tách biệt có thể bị mất khi các thành phần được loại đi. Tưởng tượng một tình huống mà sự khác biệt trong dữ liệu được tạo ra bởi một nguồn bên ngoài, như ánh sáng. Các thành phần được xác định bởi PCA không nhất thiết chứa bất kỳ thông tin tách biệt nào, vì vậy nên các mẫu dự được đưa ra bị làm mờ lẫn nhau và việc phân loại trở nên là không thể.
Phân tích biệt số tuyến tính thực hiện giảm độ phân giải theo lớp cụ thể (a class-specific dimensionality reduction) được phát minh bởi các nhà thống kê tuyệt vời - ông RA Fisher. Ông đã sử dụng nó thành công để phân loại hoa trong bài báo của ông vào năm 1936 - Sử dụng nhiều phép đo trong vấn đề phân loại. Để tìm ra sự kết hợp của các đặc trưng mà nó phân tách tốt nhất giữa các lớp, phương pháp phân tích biệt số tuyến tính thực hiện tối đa hóa tỷ lệ giữa các phân lớp với phân lớp phân tán bên trong, thay cho
Trang 49
việc tối đa hóa việc phân tán tổng thể. Ý tưởng đơn giản đó là: trong biểu hiện dữ liệu bậc thấp hơn các lớp giống nhau nên được phân cụm chặt chẽ với nhau, còn các lớp khác nhau thì nên phân càng xa càng tốt. Điều này cũng đã được Belhumeur, Hespanha và Kriegman công nhận và vì vậy họ đã áp dụng phương pháp phân tích biệt số trong nhận dạng khuôn mặt.
Mô tả thuật toán
Gọi X là vector ngẫu nhiên với các mẫu được lấy từ các lớp c:
1 2 1 2 , ,..., , ,..., c i n X X X X X x x x (2.33)
Các ma trận phân tán SBvà S W_ được cho bởi công thức:
1 1 j i c T B i i i i c T W j i j i i x X S N S x x (2.34) Trong đó là trung bình tổng: 1 1 N i i x N (2.35) Và ilà trung bình của lớp i1,...,c: 1 j i i j x X i x X (2.36)
Thuật toán Fisher sẽ tìm hàm W, hàm này dùng để tối đa hóa tiêu chí phân lớp tách biệt:
Trang 50 arg max T B opt W T W W S W W W S W (2.37)
Theo [26], thì giải pháp cho vấn đề tối ưu hóa này được đưa ra bằng cách giải quyết các vấn đề trị số đặc trưng chung (General Eigenvalue Problem):
1 B i W i W B i i i S S v S S v v (2.38)
Có một vấn đề còn lại để giải quyết: bậc của SWtại N c nhiều nhất, với các mẫu Nvà các lớp c. Trong vấn đề nhận dạng mẫu, số lượng mẫu N là hầu như luôn luôn nhỏ hơn so với kích thước của dữ liệu đầu vào (số lượng điểm ảnh), do đó ma trận tán xạ SWsẽ trở nên ít hơn (xem [27]). Trong [21] đã được giải quyết bằng cách thực hiện phân tích thành phần chính trên các dữ liệu và đưa các mẫu thành không gian N c chiều. Phân tích biệt số tuyến tính sau đó sẽ được thực hiện trên dữ liệu đã được giảm, bởi vì SW
không còn là dữ liệu đơn nữa.
Vấn đề tối ưu khi này có thể được viết lại như sau: arg max arg max T pca W T T T pca B pca fld W T T pca W pca W W S W W W S W W W W W S W W (2.39)
Các ma trận biến đổi W sẽ đưa ra mẫu thành không gian c1chiều được cho bởi công thức:
T T
fld pca
Trang 51
Phương pháp Fisherfaces học một ma trận biến đổi lớp đặc biệt, vì vậy nó không chụp sự chiếu sáng rõ ràng như là phương pháp Eigenfaces. Thay vào đó phương pháp phân tích biệt số sẽ tìm các đặc trưng trên khuôn mặt để phân biệt giữa người với nhau. Điều quan trọng là phải đề cập đến, đó là việc thực hiện các Fisherfaces cũng phụ thuộc nhiều vào các dữ liệu đầu vào. Thực tế cho thấy: nếu ta huấn luyện các Fisherfaces với các hình ảnh có ánh sáng tốt và cố gắng để nhận ra những khuôn mặt trong điều kiện chiếu sáng xấu, thì khi đó phương pháp hầu như chỉ có khả năng tìm thấy các thành phần sai (chỉ vì những đặc trưng có thể không chiếm ưu thế trên hình ảnh có điều kiện ánh sáng xấu). Điều này là hợp lý, vì phương pháp này không có cơ hội để tìm hiểu sự chiếu sáng.
Fisherfaces cho phép xây dựng lại hình ảnh, giống như Eigenfaces đã làm. Nhưng do chúng ta chỉ xác định các đặc trưng để phân biệt giữa các đối tượng, nên ta không thể mong đợi đến việc xây dựng lại được hình ảnh đẹp như ảnh ban đầu.
Hình 2.26. Ảnh khuôn mặt biểu diễn bởi thuật toán Fisherfaces
2.8.3 Biểu đồ tần suất các mẫu nhị phân cục bộ (LBP)
Eigenfaces và Fisherfaces cho ta tiếp cận toàn diện phần nào để nhận dạng khuôn mặt. Khi tiến hành xử lý dữ liệu như một vector nào đó trong một không gian hình ảnh có độ phân giải cao (high-dimensionality). Chúng ta đều biết điều này là không tốt, do đó, cần đưa ra một không gian con có ít chiều hơn (độ phân giải thấp hơn), trong đó (có thể là) thông tin hữu ích sẽ được bảo tồn. Phương pháp Eigenfaces tối đa hóa sự phân tán tổng thể, có
Trang 52
thể gây ra vấn đề nếu phương sai được tạo ra bởi nguồn bên ngoài, vì các thành phần với phương sai tối đa trên tất cả các lớp không nghĩa là có ích trong việc phân loại. Vì vậy, để bảo tồn một số thông tin phân biệt, ta áp dụng phương pháp phân tích biệt số tuyến tính và tối ưu hóa như trình bày trong phương pháp Fisherfaces.
Hình 2.27. Biểu đồ đánh giá về tỉ lệ nhận dạng của phương pháp Eigenfaces và phương pháp Fisherfaces trên cơ sở dữ liệu AT & T Facedatabase
Thực tế không lúc nào là hoàn hảo. Ta không thể đảm bảo thiết lập ánh sáng hoàn hảo trong tất cả các hình ảnh của mình hoặc trong 10 hình khác nhau của một người. Vì vậy, chuyện gì sẽ xảy ra nếu chỉ có một ảnh cho mỗi người? Khi đó ước tính phương sai của ta cho các không gian con có thể sai khủng khiếp, và cũng tương tự như vậy đối với việc nhận dạng. Nhớ rằng các phương pháp Eigenfaces có tỷ lệ nhận dạng lên tới 96% đối với dữ liệu khuôn mặt AT&T? Như vậy, ta cần có bao nhiêu hình để có được ước tính hữu ích như vậy? Hình 2.27 là biểu đồ đánh giá về tỉ lệ nhận dạng
Trang 53
của phương pháp Eigenfaces và phương pháp Fisherfaces trên cơ sở dữ liệu khuôn mặt AT&T, đây là cơ sở dữ liệu tương đối đơn giản:
Để có được tỉ lệ nhận dạng tốt ta sẽ cần ít nhất là 8 (1) hình cho mỗi người và khi đó phương pháp Fisherfaces lúc này là không còn thực sự có ích nữa [26]. Vì vậy, một số nghiên cứu đã tập trung vào việc trích xuất các đặc trưng cục bộ từ các hình ảnh. Ý tưởng là để không coi toàn bộ ảnh như là một vector nhiều chiều, nhưng chỉ mô tả đặc trưng cục bộ của một đối tượng. Các đặc trưng mà ta trích xuất theo cách này sẽ hoàn toàn có chiều ít hơn. Ý tưởng là tốt, nhưng ta sẽ sớm thấy được rằng các biểu diễn hình ảnh mà chúng ta có được không chỉ bị ảnh hưởng bởi sự chiếu sáng. Nếu xem xét đến như thay đổi tỉ lệ ảnh (phóng to, thu nhỏ), chuyển đổi hoặc xoay ảnh – thì các đặc tả cục bộ của ta phải được ít nhất có một chút mạnh mẽ chống lại điều đó.
Hình 2.28. Mô tả toán tử LBP
Cũng giống như SIFT, phương pháp các mẫu nhị phân cục bộ (Local Binary Pattern) có nguồn gốc từ phân tích kết cấu 2D. Ý tưởng cơ bản của mẫu nhị phân địa phương cục bộ là để tổng quát hóa các cấu trúc cục bộ trong ảnh bằng cách so sánh từng điểm ảnh với các vùng lân cận. Lấy một điểm ảnh ở giữa và ngưỡng của nó sẽ là các điểm lân cận. Nếu cường độ của các điểm ảnh giữa lớn hơn hay bằng điểm ảnh lân cận thì khi đó nó được biểu thị là 1 và là 0 nếu ngược lại. Khi đó, ta sẽ có một chuỗi nhị phân chẳng hạn như 1001111. Do đó, với 8 điểm ảnh xung quanh ta sẽ có
Trang 54
2^8 tổ hợp có thể, và nó được gọi là mẫu nhị phân cục bộ hoặc được gọi là mã LBP (Hình 2.28).
Mô tả thuật toán
Mô tả toán học của LBP có thể được biểu diễn bằng công thức sau:
1 0 , P 2P c c p c p LBP x y s i i (2.41)
Trong đó, x yc, clà điểm ảnh giữa với cường độ là ic và inlà cường độ của các điểm ảnh lân cận, s là hàm dấu được định nghĩa bằng cộng thức:
10 neu x 0 s x nguoc lai (2.42)
Một điểm lân cận cố định không thể mã hóa chi tiết thông tin khác nhau về tỉ lệ. Vì vậy, toán tử trên đã được mở rộng để sử dụng được cho các biến lân cận [24]. Ý tưởng đó là sắp xếp một số bất kỳ các điểm lân cận trên một vòng tròn với bán kính thay đổi, điều này cho phép chụp được vùng lân cận như sau:
Hình 2.29. Toán tử LBP mở rộng (ELBP)
Cho một điểm x yc, cđiểm lân cận là x yp, p,p P có thể được tính như sau:
Trang 55 2 cos 2 sin p c p c p x x R p p y y R p (2.43)
Trong đó Rlà bán kính của vòng tròn và Plà số các điểm mẫu.
Biểu thức trên là mở rộng của mã LBP ban đầu, do đó nó còn được gọi là LBP mở rộng (hay còn có tên là LBP vòng). Nếu tọa độ các điểm trên vòng tròn không tương ứng với tọa độ của ảnh, thì có thể lấy điểm theo nội suy:
, 1 0,0 0,1 1 1,0 1,1 f f y f x y x x f f y (2.44)
Theo định nghĩa thì toán tử LBP là mạnh mẽ, nó có thể chống lại biến đổi đơn điệu của gam màu xám. Chúng ta có thể dễ dàng xác minh điều này bằng cách xem hình LBP từ một hình biến đổi nhân tạo (do đó ta thấy những gì một hình ảnh trông giống như LBP):
Hình 2.30. Biểu diễn khuôn mặt với thuật toán LBP
Vì vậy, những gì còn lại để làm là làm thế nào để kết hợp các thông tin không gian trong mô hình nhận dạng khuôn mặt. Đề xuất của Ahonen et. al
Trang 56
[24] là phân chia hình ảnh LBP thành m các vùng cục bộ và tiến hành trích lọc biểu đồ histogram của mỗi vùng đó. Các vector đặc trưng không gian nâng cao sau đó thu được bằng cách ghép các biểu đồ histograms cục bộ (không trộn chúng lại với nhau). Các biểu đồ này được gọi là biểu đồ mẫu nhị phân cục bộ.
Trang 57
CHƯƠNG 3
THIẾT KẾ HỆ THỐNG ĐIỀU KHIỂN VÀO RA TRÊN HỆ THỐNG NHÚNG LINUX
Trong chương này, tôi sẽ trình bày cách việc xây dựng chương trình nhận dạng khuôn mặt để điều khiển vào ra trên hệ thống nhúng linux (trên Raspberry Pi – gọi tắt là Raspi) bằng cách sử dụng ngôn ngữ lập trình C++, BashScript, thư viện Opencv v2.4.8, sau đó tiến hành xây dựng máy chủ web thời gian thực để tương tác với người dùng với NodeJS.
3.1 Nhận dạng khuôn mặt 3.1.1 Phân tích giải thuật 3.1.1 Phân tích giải thuật
Nhận dạng khuôn mặt là quá trình gán nhãn cho một khuôn mặt đã được biết đến. Cũng giống như con người học để nhận ra gia đình, bạn bè và những người nổi tiếng của họ chỉ bằng cách nhìn khuôn mặt của những người đó.
Có nhiều kỹ thuật cho máy tính để học cách nhận ra một khuôn mặt đã biết trước đó. Để nhận dạng khuôn mặt thì có thể thông qua 4 bước chính:
Phát hiện khuôn mặt: Đây là quá trình định vị vùng xuất hiện mặt trong một ảnh. Bước này không quan tâm người đó là ai, chỉ là bức ảnh đó có xuất hiện khuôn mặt con người.
Tiền xử lý khuôn mặt: Đây là quá trình xử lý hình ảnh khuôn mặt sao cho nhìn rõ ràng hơn và cân chỉnh sao cho cùng kích thước với các