Không chỉ dừng lại ở việcchỉnh sửa, tăng chất lượng hình ảnh mà với công nghệ xử lý ảnh hiện nay chúng ta có thể giải quyết các bài toán nhận dạng chữ viết, nhận dạng dấu vân tay, nhậndạ
Trang 1TRƯỜNG ĐẠI HỌC TRẦN ĐẠI NGHĨA
KHOA CÔNG NGHỆ THÔNG TIN
TRẦN ĐÌNH SƠN NGHIÊN CỨU THUẬT TOÁN LDA MỜ VÀ ỨNG
DỤNG NHẬN DIỆN KHUÔN MẶT
ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC CHUYÊN NGÀNH CÔNG NGHỆ THÔNG TIN
TP.HỒ CHÍ MINH, THÁNG NĂM 2020
Trang 2TRƯỜNG ĐẠI HỌC TRẦN ĐẠI NGHĨA
KHOA CÔNG NGHỆ THÔNG TIN
ĐỒ ÁNTỐT NGHIỆP ĐẠI HỌC CHUYÊN NGÀNH CÔNG NGHỆ THÔNG TIN
Trang 3Nhận xét của giáo viên hướng dẫn
TP.HCM, Ngày Tháng Năm 2020 Giáo Viên hướng dẫn (Ký ghi rõ họ tên) Nhận xét của giáo viên chấm
TP.HCM, Ngày Tháng Năm 2020
Giáo Viên hướng dẫn
(Ký ghi rõ họ tên)
Trang 4MỤC LỤC
Trang
MỞ ĐẦU 1
1 Lý do chọn đề tài 1
2 Mục đích của đề tài 2
3 Đối tượng và phạm vi nghiên cứu đề tài 2
CHƯƠNG 1: GIỚI THIỆU 3
1.1 Bài toán nhận dạng mặt người và những khó khăn 3
1.1.1 Bài toán nhận dạng khuôn mặt người 3
1.1.2 Những khó khăn của hệ thống nhận dạng khuôn mặt 3
1.2 Tổng quan kiến trúc của một hệ thống nhận dạng mặt người 4
1.3 Ngôn ngữ lập trình 6
CHƯƠNG 2 : TỔNG QUAN VỀ XỬ LÝ ẢNH 7
2.1 Xử lý ảnh, các vấn đề cơ bản trong xử lý ảnh 7
2.2 Một số khái niệm cơ bản 10
2.3 Quan hệ giữa các điểm ảnh 11
TỔNG KẾT CHƯƠNG 2 13
CHƯƠNG 3: LÀM QUEN VỚI THƯ VIỆN OPEN CV 14
3.1 Giới thiệu về OpenCV 14
3.1.1 OpenCV là gì? 14
3.1.2 Cấu trúc tổng quan .14
3.2 OpenCV trong nhận dạng khuôn mặt 15
3.2.1 Giới thiệu 15
3.2.2 Làm thế nào để xử lý trước ảnh mặt để nhận diện khuôn mặt: 17
3.3 Hướng dẫn sử dụng các thư viện của OpenCV 21
TỔNG KẾT CHƯƠNG 3 28
CHƯƠNG 4: BÀI TOÁN PHÁT HIỆN VÀ NHẬN DẠNG MẶT NGƯỜI 29
4.1 Face Detection 29
4.1.1 Bài toán xác định mặt người 29
4.1.2 Hướng tiếp cận dựa trên tri thức (knowledge-based) 29
4.1.3 Hướng tiếp cận dựa trên các đặc trưng không đổi 30
4.1.4 Hướng tiếp cận dựa trên phương pháp đối sánh mẫu 30
Trang 54.1.5 Hướng tiếp cận dựa trên diện mạo (appearance-based) 31
4.2 Total error of classification -TEC 32
4.2.1 Thuật toán LDA (Linear Discriminant Analysis) 33
4.2.1.1 Giới thiệu chung về thuật toán 33
4.2.1.2 Ý tưởng cơ bản 33
4.2.1.3 Xây dựng hàm mục tiêu 34
4.2.1.4 Nghiệm của bài toán tối ưu 36
4.2.1.5 Tìm hiểu them về phương sai (covariance) 36
4.2.2 Thuật toán LDA cho multi-class classification problems 37
4.2.2.1 Xây dựng hàm mất mát 38
4.2.2.2 Hàm mất mát cho multi-class LDA 40
4.2.3 Model LDA 40
4.2.3.1 LDA giảm thiểu khối lượng tính toán 41
4.2.3.2 Làm thế nào để giảm chiều dữ liệu 41
4.2.3.3 Lý thuyết về model LDA 42
CHƯƠNG 5: XÂY DỰNG CHƯƠNG TRÌNH - MÔ PHỎNG 46
5.1 Phân Tích Thiết Kế Hệ Thống 46
5.1.1 Sơ đồ use-case 46
5.1.2 Mô Hình Sequence diagram 47
5.1.2.1 Mô hình đăng ký đăng nhập hệ thống 47
5.1.2.2 Mô hình chức năng nhận diện camera 47
5.1.2.3 Chức năng thông báo, chỉnh sửa danh sách điểm danh và cho các bộ phận 48
5.1.3 Sơ đồ thực thể kết hợp 48
5.1.4 Cấu trúc bảng và kiểu dữ liệu thuộc tính 49
5.1.5 Thiết kế cơ sở dữ liệu 50
5.2 Thiết Kế Giao Diện 51
5.2.1 Giao diện đăng nhập 51
5.2.2 Giao diện chính của phần mềm 52
5.2.3 Giao diện thêm sinh viên 52
5.2.4 Giao diện điểm danh 53
5.2.5 Giao diện tra cứu thông tin điểm danh 53
Trang 65.3 Một số thư viện hỗ trợ 54
5.4 Thiết kế hệ thống: 54
5.4.1 Lấy các vectơ riêng tạo thành không gian riêng 54
5.4.2 Nhận hoặc đặt nhãn cho hình ảnh đào tạo tương ứng 54
5.4.3 Nhận hoặc đặt ngưỡng khoảng cách riêng 55
5.4.4 Nhận hình ảnh trung bình 55
5.4.5 Nhận các giá trị đặc trưng của mỗi hình ảnh đào tạo 55
5.4.6 Tạo một trình nhận dạng đối tượng bằng cách sử dụng dữ liệu và tham số truyền 55
5.4.7 Tạo một trình nhận dạng đối tượng bằng cách sử dụng dữ liệu và thông số truyền cụ thể 56
5.4.8 Tính toán các hình ảnh đặc trưng cho hình 56
5.4.9 Phân rã hình ảnh dưới dạng các giá trị riêng 57
5.4.10 Với giá trị eigen, tạo lại hình ảnh được chiếu 57
5.4.11 Nhận khoảng cách giữa eigen Euclid và mọi hình ảnh khác trong cơ sở dữ liệu 58
5.4.12 Cho đối tượng cần kiểm tra, tìm đối tượng tương tự nhất trong cơ sở dữ liệu, trả về chỉ mục và khoảng cách riêng 58
5.4.13 Cố gắng nhận ra hình ảnh và trả lại nhãn của nó 59
CHƯƠNG 6: ĐÁNH GIÁ KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN 60
6.1 Đánh giá kết quả 60
6.1.1 Kết quả đạt được 60
6.1.2 Việc chưa hoàn thành 60
6.2 Hướng phát triển 60
DANH MỤC TÀI LIỆU THAM KHẢO 61
Trang 7LỜI CẢM ƠN
Trước tiên em xin được bày tỏ sự trân trọng và lòng biết ơn đối với thầyPhạm Văn Sáng Trong suốt thời gian học và làm đồ án tốt nghiệp, thầy đã dành rấtnhiều thời gian quý báu để tận tình chỉ bảo, hướng dẫn, định hướng cho em thựchiện đồ án
Em xin được cảm ơn các thầy cô giáo Trường Đại học Trần Đại Nghĩa đãgiảng dạy trong quá trình học tập, thực hành, làm bài tập, giúp em hiểu thấu đáohơn các nội dung học tập và những hạn chế cần khắc phục trong việc học tập,nghiên cứu và thực hiện bản đồ án này
Em xin cảm ơn các bạn bè và nhất là các thành viên trong gia đình đã tạomọi điều kiện tốt nhất, động viên, cổ vũ trong suốt quá trình học tập và đồ ántốt nghiệp
TP.HCM, ngày……tháng……năm 2020
Sinh viên
TRẦN ĐÌNH SƠN
Trang 8MỞ ĐẦU
Với sự phát triển không ngừng của khoa học và công nghệ, đặc biệt là vớinhững chiếc điện thoại thông minh (smartphone) ngày càng hiện đại và được sửdụng phổ biến trong đời sống con người đã làm cho lượng thông tin thu được bằnghình ảnh ngày càng tăng Theo đó, lĩnh vực xử lý ảnh cũng được chú trọng pháttriển, ứng dụng rộng rãi trong đời sống xã hội hiện đại Không chỉ dừng lại ở việcchỉnh sửa, tăng chất lượng hình ảnh mà với công nghệ xử lý ảnh hiện nay chúng ta
có thể giải quyết các bài toán nhận dạng chữ viết, nhận dạng dấu vân tay, nhậndạng khuôn mặt…
Một trong những bài toán được nhiều người quan tâm nhất của lĩnh vực xử
lý ảnh hiện nay đó là nhận dạng khuôn mặt (Face Recognition) 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ớingười, nó mang một lượng thông tin giàu có, chẳng hạn như từ khuôn mặt chúng ta
có thể xác định giới tính, tuổi tác, chủng tộc, trạng thái cảm xúc, đặc biệt là xácđịnh mối quan hệ với đối tượng (có quen biết hay không) Do đó, bài toán nhậndạng khuôn mặt đóng vai trò quan trọng trong nhiều lĩnh vực đời sống hằng ngàycủa con người như các hệ thống giám sát, quản lý vào ra, tìm kiếm thông tin mộtngười nổi tiếng,…đặc biệt là an ninh, bảo mật Có rất nhiều phương pháp nhậndạng khuôn mặt để nâng cao hiệu suất tuy nhiên dù ít hay nhiều những phươngpháp này đang vấp phải những thử thách về độ sáng, hướng nghiêng, kích thướcảnh, hay ảnh hưởng của tham số môi trường
Bài toán Nhận diện khuôn mặt (Face Recognition) bao gồm nhiều bài toánkhác nhau như: phát hiện mặt người (face detection), đánh dấu (faciallandmarking), trích chọn (rút) đặc trưng (feature extration), gán nhãn, phân lớp(classification) Trong thực tế, nhận dạng khuôn mặt người (Face Recognition) làmột hướng nghiên cứu được nhiều nhà khoa học quan tâm, nghiên cứu để ứngdụng trong thực tiễn Ở các trường đại học hàng đầu về Công Nghệ Thông Tin nhưMassachusetts Institute of Technology (MIT), Carnegie Mellon University (CMU),Standford, Berkeley và các công ty lớn như Microsoft, Apple, Google, Facebookđều có các trung tâm về sinh trắc học (Biometrics Center) và nghiên cứu về nhậndạng khuôn mặt người và nó đã trở thành một trong những lĩnh vực nghiên cứuchính cho đến nay Gần đây, công ty Hitachi Kokusai Electric của Nhật mới cho rađời một camera giám sát, có thể chụp ảnh và tìm ra 36 triệu khuôn mặt khác có néttương tự trong cơ sở dữ liệu chỉ trong vòng một giây
Có hai phương pháp nhận dạng phổ biến hiện nay là nhận dạng dựa trên đặctrưng của các phần tử trên khuôn mặt như biến đổi Gabor Wavelet và mạngNeural, SVM,…và nhận dạng dựa trên xét tổng thể toàn khuôn mặt như phương
Trang 9pháp PCA, LDA, LFA Trong đó, LDA là phương pháp trích rút đặc trưng nhằmgiảm số chiều của ảnh tuy đơn giản nhưng mang lại hiệu quả tốt Hệ thống hoạtđộng ổn định và có tính thích nghi cao khi dữ liệu đầu vào thay đổi nhiều
- Xây dựng một dự án phần mềm ứng dụng nhận dạng khuôn mặt
- Tìm hiểu về thư viện OpenCv, phần mềm EmguCv
- Nghiên cứu phương pháp trích chọn đặc trưng Eigenfaces
- Tìm hiểu các phương pháp xác định khuôn mặt (Face Detection)
- Nghiên cứu phương pháp phân tích phân biệt tuyến tính (LinearDiscriminant Analysis - LDA)
3 Đối tượng và phạm vi nghiên cứu đề tài.
a) Đối tượng:
- Các phương pháp, thuật toán phục vụ cho việc phát hiện và nhận dạngkhuôn mặt người trên ảnh
- Bộ thư viện xử lý ảnh OpenCv và công cụ hỗ trợ EmguCv
- Bộ CSDL chuẩn Yalefaces, ngoài ra có thêm bộ CSDL sinh viên tự thu thập
b) Phạm vi nghiên cứu:
- Tập trung tìm hiểu nhận dạng khuôn mặt (Face Recognition) chứ không chútrọng tìm hiểu phát hiện khuôn mặt (Face Detection)
- Việc xử lý ảnh, nhận dạng khuôn mặt thỏa mãn các điều kiện:
Ánh sáng bình thường, ngược sáng, ánh sáng đèn điện (Với bộ CSDL
tự thu thập)
Góc ảnh: Trực diện (frontal) hoặc góc nghiêng không quá 10o
Không bị che khuất (no occulusion).
Ảnh có chất lượng cao (high quality images).
Trang 10CHƯƠNG 1: GIỚI THIỆU 1.1 Bài toán nhận dạng mặt người và những khó khăn.
1.1.1 Bài toán nhận dạng khuôn mặt người.
Hệ thống nhận dạng mặt người là một hệ thống nhận vào là một ảnh hoặcmột đoạn video (một dòng các hình ảnh liên tục) Qua xử lý, tính toán hệ thống xácđịnh được vị trí mặt người (nếu có) trong ảnh và xác định là người nào trong sốnhững người mà hệ thống đã được biết (qua quá trình học) hoặc là người lạ
Hình 1 Hệ thống nhận dạng mặt người.
1.1.2 Những khó khăn của hệ thống nhận dạng khuôn mặt.
Bài toán nhận dạng mặt người là bài toán đã được nghiên cứu từ nhữngnăm 70 Tuy nhiên, đây là một bài toán khó nên những nghiên cứu hiện tại vẫnchưa đạt được những kết quả mong muốn Chính vì thế, vấn đề này vẫn đangđược nhiều nhóm trên thế giới quan tâm nghiên cứu Khó khăn của bài toán nhậndạng mặt người có thể kể đến như sau:
a Tư thế chụp, góc chụp: Ảnh chụp khuôn mặt có thể thay đổi rất nhiều bởi vìgóc chụp giữa camera và khuôn mặt Chẳng hạn như: chụp thẳng, chụp chéobên trái 45o hay chụp chéo bên phải 45o, chụp từ trên xuống, chụp từ dướilên, v.v… Với các tư thế khác nhau, các thành phần trên khuôn mặt như mắt,mũi, miệng có thể bị khuất một phần hoặc thậm chí khuất hết
Trang 11b Sự xuất hiện hoặc thiếu một số thành phần của khuôn mặt: Các đặc trưngnhư: râu mép, râu hàm, mắt kính, v.v… có thể xuất hiện hoặc không Vấn đềnày làm cho bài toán càng trở nên khó hơn rất nhiều.
c Sự biểu cảm của khuôn mặt: Biểu cảm của khuôn mặt con người có thể làmảnh hưởng đáng kể lên các thông số của khuôn mặt Chẳng hạn, cùng mộtkhuôn mặt một người, nhưng có thể sẽ rất khác khi họ cười hoặc sợ hãi,v.v…
d Sự che khuất: Khuôn mặt có thể bị che khuất bởi các đối tượng khác hoặc các khuôn mặt khác
e Hướng của ảnh (pose variations): Các ảnh khuôn mặt có thể biến đổi rấtnhiều với các góc quay khác nhau của trục camera Chẳng hạn chụp với trụcmáy ảnh nghiêng làm cho khuôn mặt bị nghiêng so với trục của ảnh
f Điều kiện của ảnh: Ảnh được chụp trong các điều kiện khác nhau về: chiếusáng, về tính chất camera (máy kỹ thuật số, máy hồng ngoại, v.v…), ảnh cóchất lượng thấp ảnh hưởng rất nhiều đến chất lượng ảnh khuôn mặt
g Aging condition: Việc nhận dạng ảnh mặt thay đổi theo thời gian còn là một vấn đề khó khăn, ngay cả đối với khả năng nhận dạng của con người
h Các hệ thống cực lớn (very large scale systems): Các CSDL ảnh mặt đượctest bởi các nhà nghiên cứu còn khá nhỏ (vài trăm tới vài chục nghìn ảnhmặt), tuy nhiên trên thực tế các CSDL có thể rất lớn, ví dụ CSDL ảnh mặtcủa cảnh sát của một đất nước có thể chứa từ hàng triệu tới hơn 1 tỉ ảnh…
1.2 Tổng quan kiến trúc của một hệ thống nhận dạng mặt người.
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).
Hình 2 Các bước chính trong một hệ thống nhận dạng khuôn mặt.
Trang 12Phát hiện khuôn mặt dò tìm, định vị những vùng (vị trí) có thể là khuôn mặt
xuất hiện trong ảnh hoặc các frame video Các vùng này sẽ được tách riêng để xử
lý Phân đoạn khuôn mặt sẽ xác định vị trí mắt mũi, miệng và các thành phần khác của khuôn mặt và chuyển kết quả này cho bước trích chọn đặc trưng Ở bước trích
chọn đặc trưng, bằng một phương pháp trích chọn đặc điểm nào đó (mẫu nhị phân
cục bộ-Local Binary Pattern-LBP, Gabor wavelets…) sẽ được sử dụng với ảnh mặt
để trích xuất các thông tin đặc trưng cho ảnh từ các thông tin về các thành phầntrên khuôn mặt, kết quả là mỗi ảnh sẽ được biểu diễn dưới dạng một vector đặc
trưng (feature vector) Những vecto đặc trưng này sẽ là dữ liệu đầu vào cho một
mô hình đã được huấn luyện trước để nhận dạng khuôn mặt (Face Recognition) hay phân lớp khuôn mặt (Face Classifition), tức là xác định danh tính (identity) hay nhãn của ảnh-đó là ảnh của ai Ở bước nhận dạng khuôn mặt (Face
Recognition), thường thì phương pháp k-láng giềng gần (k-nearest neighbor:kNN)
sẽ được sử dụng
Bên cạnh những bước chính nêu trên, chúng ta còn có thể áp dụng thêm một
số bước khác như tiền xử lý, hậu xử lý nhằm làm tăng độ chính xác cho hệ thống.
Ví dụ, sau bước phát hiện khuôn mặt, ta có thể thực hiện bước tiền xử lý
(Preprocessing) bao gồm các bước căn chỉnh ảnh (face image alignment) và chuẩn
hóa ánh sáng (illumination normalization).
Do một số thông số như: tư thế khuôn mặt, độ sáng, điều kiện ánh sáng, v.v…
phát hiện khuôn mặt được đánh giá là bước khó khăn và quan trọng nhất so với các
bước còn lại của hệ thống Tuy nhiên, trong phạm vi đồ án này, không tập trung tìm hiểu bước phát hiện khuôn mặt mà chỉ tập trung chủ yếu vào bước nhận dạng
khuôn mặt.
Dữ liệu cho một hệ thống nhận dạng mặt được chia làm 3 tập: tập huấn
luyện (training set), tập tham chiếu (reference set haygallery set) và tập để nhận dạng (probe set hay query set, đôi khi còn gọi là test set) Trong nhiều hệ thống,
tập training trùng với tập reference Tập training gồm các ảnh được dùng để huấnluyện (hay học-learning), thông thường tập này được dùng để sinh ra một không
gian con (projection subspace) là một ma trận và phương pháp hay được sử dụng
là PCA (Principal Component Analysis), WPCA (Whitened PCA), LDA (Linear
Discriminant Analysis), KPCA (Kernel PCA) Tập reference gồm các ảnh đã biết
danh tính được chiếu (projected) vào không gian con ở bước training Bước training nhằm 2 mục đích: giảm số chiều (dimension reduction) của các vector đặc điểm (feature vector) vì các vector này thường có độ dài khá lớn (vài nghìn
tới vài trăm nghìn) nên nếu để nguyên thì việc tính toán sẽ rất rất lâu, thứ hai là
làm tăng tính phân biệt (discriminative) giữa các ảnh khác lớp (định danh khác
nhau), ngoài ra có thể làm giảm tính phân biệt giữa các ảnh thuộc về một lớp (tùytheo phương pháp, ví dụ như Linear Discriminant Analysis LDA- còn gọi là
Trang 13Fisher Linear Discriminant Analysis-Fisherface là một phương pháp làm việc với
tập training mà mỗi đối tượng có nhiều ảnh mặt ở các điều kiện khác nhau) Sau
khi thực hiện chiếu tập reference vào không gian con, hệ thống lưu lại kết quả làmột ma trận với mỗi cột của ma trận là một vector tương ứng với ảnh (định danh
đã biết) để thực hiện nhận dạng (hay phân lớp) Nhận dạng (hay phân lớp) được
thực hiện với tập các ảnh probe, sau khi tiền xử lý xong, mỗi ảnh sẽ được áp dụng phương pháp trích chọn đặc điểm (như với các ảnh thuộc tập training và
reference) và được chiếu vào không gian con Tiếp đến việc phân lớp sẽ dựa trên
phương pháp k-NN, định danh của một ảnh cần xác định sẽ được gán là định
danh của ảnh có khoảng cách (distance) gần với nó nhất Ở đây cần lưu ý là mỗi
ảnh là một vector nên có thể dùng khái niệm hàm khoảng cách giữa hai vector để
đo sự khác biệt giữa các ảnh
1.3 Ngôn ngữ lập trình.
Để giải quyết bài toán nhận dạng khuôn mặt sử dụng thư viện OpenCV,
chúng ta có thể sử dụng các ngôn ngữ lập trình như: NET C#, VB, IronPython,
Java, C++…
Trong đồ án này ngôn ngữ lập trình được sử dụng là NET C#, viết trên phần
mềm Visual Studio 2015
Trang 14CHƯƠNG 2 : TỔNG QUAN VỀ XỬ LÝ ẢNH
2.1 Xử lý ảnh, các vấn đề cơ bản trong xử lý ảnh.
Con người thu nhận thông tin qua các giác quan, trong đó thị giác đóng vaitrò quan trọng nhất Những năm trở lại đây với sự phát triển của phần cứng máytính, XLA và đồ họa đã phát triển một cách mạnh mẽ và có nhiều ứng dụng trongcuộc sống XLA và đồ họa đóng vai trò quan trọng trong tương tác người máy
Quá trình XLA được xem như là quá trình thao tác ảnh đầu vào nhằm cho rakết quả mong muốn Kết quả đầu ra của một quá trình XLA có thể là một ảnh “tốthơn” hoặc một kết luận
Hình 3 Quá trình xử lý ảnh.
Ảnh có thể xem là tập hợp các điểm ảnh và mỗi điểm ảnh được xem như là đặctrưng cường độ sáng hay một dấu hiệu nào đó tại một vị trí nào đó của đối tượng
trong không gian và nó có thể xem như một hàm n biến P(c1, c2, …, cn) Do đó, ảnh
trong XLA có thể xem như ảnh n chiều Sơ đồ tổng quát của một hệ thống XLA:
Hình 4 Các bước cơ bản trong một hệ thống xử lý ảnh.
Sơ đồ này bao gồm các phần sau:
a Phần thu nhận ảnh (Image Acquisition).
Ảnh có thể nhận qua camera màu hoặc đen trắng Thường thì ảnh nhận quacamera là ảnh tương tự (loại camera ống chuẩn CCIR với tần số 1/25, mỗi ảnh 25dòng), cũng có loại camera đã số hóa (như loại CCD-Change Coupled Device) làloại photodiot tạo cường độ sáng tại mỗi điểm ảnh
Camera thường dùng là loại quét dòng; ảnh tạo ra có dạng hai chiều Chấtlượng một ảnh thu nhận được phụ thuộc vào thiết bị thu, môi trường (ánh sáng,thời tiết)
Trang 15b Tiền xử lý (Image Processing).
Sau bộ thu nhận, ảnh có thể bị nhiễu, độ tương phản thấp nên cần đưa vào bộtiền xử lý để nâng cao chất lượng Chức năng chính của bộ tiền xử lý là lọc nhiễu,nâng độ tương phản để làm ảnh rõ, nét hơn
c Phân đoạn (Segmentation) hay phân vùng ảnh.
Phân vùng ảnh là tách một ảnh đầu vào thành các vùng thành phần để biểudiễn phân tích, nhận dạng ảnh Ví dụ: để nhận dạng chữ (hoặc mã vạch) trên phong
bì thư cho mục đích phân loại bưu phẩm, cần chia các câu, chữ, về địa chỉ hoặc tênngười thành các từ, các chữ, các số (hoặc các vạch) riêng biệt để nhận dạng Đây làphần phức tạp khó khăn nhất trong XLA và cũng dễ gây lỗi, làm mất độ chính xáccủa ảnh Kết quả nhận dạng ảnh phụ thuộc rất nhiều vào công đoạn này
d Biểu diễn ảnh (Image Representation).
Đầu ra ảnh sau phân đoạn chứa các điểm ảnh của vùng ảnh (ảnh đã phânđoạn) cộng với mã liên kết với các vùng lân cận Việc chọn các tính chất để thểhiện ảnh gọi là trích chọn đặc trưng (Feature Selection) gắn với việc tách các đặctính của ảnh dưới dạng các thông tin định lượng hoặc làm cơ sở để phân biệt lớpđối tượng này với đối tượng khác trong phạm vi ảnh nhận được Ví dụ: trong nhậndạng ký tự trên phong bì thư, chúng ta miêu tả các đặc trưng của từng ký tự giúpphân biệt ký tự này với ký tự khác
e Nhận dạng ảnh và nội suy ảnh (Image Recognition and Interpretation).
Nhận dạng ảnh là quá trình xác định ảnh Quá trình này thường thu đượcbằng cách so sánh với mẫu chuẩn đã được học (hoặc lưu từ trước) Nội suy là phánđoán theo ý nghĩa trên cơ sở nhận dạng Ví dụ: một loạt chữ số và nét gạch ngangtrên phong bì thư có thể được nội suy thành mã điện thoại Có nhiều cách phân loạiảnh khác nhau về ảnh Theo lý thuyết về nhận dạng, các mô hình toán học về ảnhđược phân theo hai loại nhận dạng ảnh cơ bản:
- Nhận dạng theo tham số
- Nhận dạng theo cấu trúc
Một số đối tượng nhận dạng khá phổ biến hiện nay đang được áp dụng trongkhoa học và công nghệ là: nhận dạng ký tự (chữ in, chữ viết tay, chữ ký điện tử),nhận dạng văn bản (Text), nhận dạng vân tay, nhận dạng mã vạch, nhận dạng mặtngười…
f Cơ sở tri thức (Knowledge Base).
Như đã nói ở trên, ảnh là một đối tượng khá phức tạp về đường nét, độ sángtối, dung lượng điểm ảnh, môi trường để thu ảnh phong phú kéo theo nhiễu Trongnhiều khâu xử lý và phân tích ảnh ngoài việc đơn giản hóa các phương pháp toánhọc đảm bảo tiện lợi cho xử lý, người ta mong muốn bắt chước quy trình tiếp nhận
và XLA theo cách của con người Trong các bước xử lý đó, nhiều khâu hiện nay đã
xử lý theo các phương pháp trí tuệ con người Vì vậy, ở đây các cơ sở tri thức đượcphát huy
Trang 16g Mô tả (biểu diễn ảnh).
Từ hình 5, ảnh sau khi số hóa sẽ được lưu vào bộ nhớ, hoặc chuyển tiếp sangcác khâu tiếp theo để phân tích Nếu lưu trữ ảnh trực tiếp từ các ảnh thô, đòi hỏidung lượng bộ nhớ cực lớn, và không hiệu quả theo quan điểm ứng dụng và côngnghệ Thông thường, các ảnh thô đó được đặc tả (biểu diễn lại hay đơn giản là mãhóa) theo các đặc điểm của ảnh được gọi là các đặc trưng ảnh (Image Features)như: biên ảnh (Boundary), vùng ảnh (Region) Một số phương pháp biểu diễnthường dùng:
- Biểu diễn bằng mã chạy (Run-Length Code)
- Biểu diễn bằng mã xích (Chaine-Code)
- Biểu diễn bằng mã tứ phân (Quad-Tree Code)
Trên đây là các thành phần cơ bản trong các khâu XLA Trong thực tế, cácquá trình sử dụng ảnh số không nhất thiết phải qua hết các khâu đó, tùy theo đặcđiểm ứng dụng Hình 5 cho sơ đồ phân tích, XLA và lưu đồ thông tin giữa các khốimột cách khá đầy đủ Ảnh sau khi số hóa, được nén, lưu lại để truyền qua các hệthống khác sử dụng hoặc xử lý tiếp theo Mặt khác, ảnh sau khi số hóa có thể bỏqua công đoạn nâng cao chất lượng (khi ảnh đủ chất lượng theo một yêu cầu nào
đó) để chuyển tới khâu phân đoạn hoặc bỏ tiếp khâu phân đoạn chuyển trực tiếp tới khâu trích chọn đặc trưng Hình 5 cũng chia các nhánh song song như: nâng
cao chất lượng ảnh có hai nhánh phân biệt: nâng cao chất lượng ảnh (tăng độ sáng,
độ tương phản, lọc nhiễu) hoặc khôi phục ảnh (hồi phục lại ảnh thật khi ảnh gốc bịhỏng) v.v…
Hình 5 Sơ đồ phân tích, xử lý ảnh và lưu đồ thông tin giữa các khối.
Trang 172.2 Một số khái niệm cơ bản.
Điểm ảnh (Picture Element).
Gốc của ảnh (ảnh tự nhiên) là ảnh liên tục về không gian và độ sáng Để xử
lý được bằng máy tính (số), ảnh cần phải được số hóa Số hóa ảnh là sự biến đổigần đúng một ảnh liên tục thành một tập điểm phù hợp với ảnh thật về vị trí (khônggian) và độ sáng (mức xám) Khoảng cách giữa các điểm ảnh đó được thiết lập saocho mắt người không phân biệt được ranh giới giữa chúng Mỗi một điểm như vậygọi là điểm ảnh (PEL: Picture Element) hay gọi tắt là Pixel Trong khuôn khổ ảnhhai chiều, mỗi pixel ứng với cặp tọa độ (x, y)
Định Nghĩa: Điểm ảnh (Pixcel) là một phần tử của ảnh số tại tọa độ (x, y) với độ xám hoặc màu nhất định Kích thước và khoảng cách giữa các điểm ảnh đó được chọn thích hợp sao cho mắt người cảm nhận sự liên tục về không gian và mức xám (hoặc màu) của ảnh số gần như ảnh thật Mỗi một phần tử trong ma trận được gọi là một phần tử ảnh.
Độ phân giải của ảnh.
Định nghĩa: Độ phân giải (Resolution) của ảnh là mật độ điểm ảnh được ấn định trên một ảnh số được hiển thị.
Theo định nghĩa, khoảng cách giữa các điểm ảnh phải được chọn sao chomắt người vẫn thấy được sự liên tục của ảnh Việc lựa chọn khoảng cách thích hợptạo nên một mật độ phân bổ đó chính là độ phân giải và được phân bố theo trục x
và y trong không gian hai chiều
Ví dụ: Độ phân giải của ảnh trên màn hình CGA (Color Graphic Adaptor) làmột lưới điểm theo chiều ngang màn hình: 320 điểm chiều dọc * 200 điểm ảnh(320*200) Rõ ràng, cùng màn hình CGA 12 “ta nhận thấy mịn hơn màn hìnhCGA 17” độ phân giải 320*200 Lý do: cùng một mật độ (độ phân giải) nhưngdiện tích mà hình rộng hơn thì độ mịn (liên tục của các điểm) kém hơn
Mức xám của ảnh.
Một điểm ảnh (pixcel) có hai đặc trưng cơ bản là vị trí (x, y) của điểm ảnh và
độ xám của nó Dưới đây chúng ta xem xét một số khái niệm và thuật ngữ thường dùng trong XLA
- Định nghĩa: Mức xám của điểm ảnh là cường độ sáng của nó được gán
bằng giá trị số tại điểm đó.
- Các thang mức xám thông thường: 16,32,64,128, 256 (Mức 256 là mức
Trang 18Ảnh nhị phân: Ảnh chỉ có hai mức đen trắng phân biệt, tức dùng 1 bit mô tả
21 mức khác nhau Nói cách khác: mỗi điểm ảnh của ảnh nhị phân chỉ có thể là 0
hoặc 1
Ảnh màu: Trong khuôn khổ lý thuyết 3 màu (Red, Blue, Green) để tạo nên
thế giới màu, người ta thường dùng 3 byte để mô tả mức màu, khi đó các giá trị
màu: 28*3 = 224 ≈ 16,7 triệu màu
Định nghĩa ảnh số.
Ảnh số là tập hợp các điểm ảnh với mức xám phù hợp dùng để mô tả ảnh gần với ảnh thật
2.3 Quan hệ giữa các điểm ảnh.
a Các lân cận của điểm ảnh (Image Neighbors).
- Giả sử có điểm ảnh p tại tọa độ (x, y) có 4 điểm lân cận gần nhất theo
chiều đứng và ngang (có thể coi như lân cận 4 hướng chính: Đông, Tây,Nam, Bắc)
{( x-1,y); (x, y-1); (x+1, y); (x, y+1)}= N4(p)
Trong đó, số 1 là giá trị logic; N4(p): tập 4 điểm lân cận của p
Hình 6 Lân cận các điểm ảnh của tọa độ (x, y).
- Các lân cận chéo: Các điểm lân cận chéo Np(P) (Có thể coi lân cận chéo
là 4 hướng: Đông - Nam, Đông - Bắc, Tây - Nam, Tây - Bắc)
Np(P) = {(x+1,y+1); (x+1, y-1); (x-1, y+1); (x-1, y-1)}
- Tập kết hợp: N8(p) = N4(p) + Np(p) là tập hợp 8 lân cận của điểm ảnh p.
- Chú ý: Nếu (x, y) nằm ở biên (mép) ảnh; một số điểm sẽ nằm ngoài ảnh.
b Các mối liên kết điểm ảnh.
Các mối liên kết được xác định để xác định giới hạn (Boundaries) của đối
tượng vật thể hoặc xác định vùng trong một ảnh Một liên kết được đặc trưng bởitính liền kề giữa các điểm và mức xám của chúng
Trang 19Giả sử V là tập các giá trị mức xám Một ảnh có các giá trị cường độ sáng từthang mức xám từ 32 đến 64 được mô tả như sau:
V = {32, 33, 34, …, 63, 64}
Có 3 loại liên kết
- Liên kết 4: Hai điểm ảnh p và q được nói là liên kết 4 với các giá trị cường
độ sáng V nếu q nằm trong một các lân cận của p, tức p thuộc N4(p).
- Liên kết 8: Hai điểm ảnh p và q nằm trong một các lân cận của p, tức q thuộc N8(p).
- Liên kết m (liên kết hỗn hợp): Hai điểm ảnh p và q với các giá trị cường
độ sáng V được nói là liên kết m nếu:
1 q thuộc N4(p) hoặc
2 q thuộc Np(p)
c Đo khoảng cách giữa các điểm ảnh.
Định nghĩa: Khoảng cách D(p) giữa hai điểm ảnh p tọa độ (x, y), q tọa độ
(s, t) là hàm khoảng cách (Distance) hoặc Metric nếu:
1 D(p,q) ≥ 0 (Với D(p,q) = 0 nếu và chỉ nếu p = q)
Khoảng cách khối: Khoảng cách D4(p,q) được gọi là khoảng cách khối đồ
thị (City-Block Distance) và được xác định như sau:
D4(p,q) = |x - s| + |y - t|
Giá trị khoảng cách giữa các điểm ảnh r: giá trị bán kính r giữa điểm ảnh từ
tâm điểm ảnh đến tâm điểm ảnh q khác Ví dụ: Màn hình CGA 12’’ (12’’*2,54cm
= 30,48cm = 304,8mm) độ phân giải 320*200; tỷ lệ 4/3 (chiều dài/chiều rộng).Theo định lý Pitago về tam giác vuông, đường chéo sẽ láy tỷ lệ 5 phần (5/4/3:đường chéo/chiều dài/chiều rộng màn hình); khi đó độ dài thật là (305/244/183)chiều rộng màn hình 183mm ứng với màn hình CGA 200 điểm ảnh theo chiều dọc.Như vậy, khoảng cách điểm ảnh lân cận của CGA 12’’ là ≈ 1mm
Khoảng cách D8(p,q) còn gọi là khoảng cách bàn cờ (Chess-Board
Distance) giữa điểm ảnh p, q được xác định như sau: D8(p,q) = max (|x – s|, |y – t|).
Trang 20TỔNG KẾT CHƯƠNG 2
Các kiến thức cần nắm được:
- Khái niệm xử lý ảnh: Quá trình XLA được xem như là 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
XLA có thể là một ảnh “tốt hơn” hoặc một kết luận
- Các bước cơ bản trong một hệ thống XLA.
Phần thu nhận ảnh (Image Acquisition)
Tiền xử lý (Image Processing)
Phân đoạn (Segmentation)
Biểu diễn ảnh (Image Representation)
Nhận dạng ảnh và nội suy ảnh (Image Recognition and Interpretaion)
Cơ sở tri thức (Knowledge Base)
Mô tả (biểu diễn ảnh)
- Các khái niệm cơ bản trong XLA:
Điểm ảnh
Độ phân giải của ảnh
Mức xám của ảnh
Ảnh số
- Quan hệ giữa các điểm ảnh.
Các lân cận của điểm ảnh (Image Neighbors)
Các mối liên kết điểm ảnh
Đo khoảng cách giữa các điểm ảnh
Trang 21CHƯƠNG 3: LÀM QUEN VỚI THƯ VIỆN OPEN CV
3.1 Giới thiệu về OpenCV
OpenCv là thư viện được thiết kế để chạy trên nhiều nền tảng khác nhau(cross-platform), nghĩa là nó có thể chạy trên hệ điều hành Window, Linux, Mac,
iOS… Việc sử dụng thư viện OpenCv tuân theo các quy định về sử dụng phần
mềm mã nguồn mở BSD do đó bạn có thể sử dụng thư viện này một cách miễn phí
cho các mục đích phi thương mại lẫn thương mại
Dự án về OpenCv được khởi động từ những năm 1999, đến năm 2000 nó
được giới thiệu trong một hội nghị của IEEE về các vấn đề trong thị giác máy và
nhận dạng, tuy nhiên bản OpenCV 1.0 mãi tới tận năm 2006 mới chính thức được
công bố và năm 2008 bản 1.1 (pre-release) mới được ra đời Tháng 10 năm 2009,bản OpenCV thế hệ thứ hai ra đời (thường gọi là phiên bản 2.x), phiên bản này cógiao diện của C++ (khác với phiên bản trước có giao diện của C) và có nhiều điểmkhác biệt so với phiên bản thứ nhất
Thư viện OpenCV ban đầu được sự hỗ trợ từ Intel, sau đó được hỗ trợ bởiWillow Garage, một phòng thí nghiệm chuyên nghiên cứu về công nghệ robot.Cho đến nay, OpenCV vẫn là thư viện mở, được phát triển bởi nguồn quỹ khônglợi nhuận (none-profit foundation) và được sự hưởng ứng rất lớn của cộng đồng
Trang 22Phần CV bao gồm các thư viện cơ bản về XLA và các giải thuật về thị giácmáy tính MLL là bộ thư viện về các thuật toán học máy, bao gồm rất nhiều bộphân cụm và phân loại thống kê HighGUI chứa đựng những thủ tục vào ra, cácchức năng về lưu trữ cũng như đọc các file ảnh và video Phần thứ 4, Cxcore chứađựng các cấu trúc dữ liệu cơ bản (ví dụ như cấu trúc XML, các cây dữ liệu…).Phần cuối cùng là CvAux, phần này bao gồm cá thư viện cho việc phát hiện, theodõi và nhận dạng đối tượng (khuôn mặt, mắt…).
3.2 OpenCV trong nhận dạng khuôn mặt
3.2.1 Giới thiệu
Khi bắt đầu với lĩnh vực nhận dạng mặt (Face Recognition-FR, không phảiFace detetion-phát hiện khuôn mặt người trong ảnh), tôi đã mất khá nhiều thời giancho các thuật toán cơ bản của nhận dạng mặt: PCA, WPCA, LDA, 2DPCA,KPCA, LBP … hay các câu hỏi đại loại như: dùng ngôn ngữ và công cụ gì để càiđặt thuật toán, Matlab, Python, C++ hay C#? Cuối cùng thấy rằng việc chọnMatlab là thích hợp nhất (cho việc nghiên cứu thôi, tất nhiên) và việc hiểu đượccặn kẽ các thuật toán cơ bản như PCA là rất quan trọng cho những ai bắt đầu, vìvậy hy vọng bài viết này sẽ có ích cho ai muốn tìm hiểu về nhận dạng mặt người
Nhận dạng mặt người (Face recognition) là một lĩnh vực nghiên cứu củangành Computer Vision, và cũng được xem là một lĩnh vực nghiên cứu của ngànhBiometrics (tương tự như nhận dạng vân tay – Fingerprint recognition, hay nhậndạng mống mắt – Iris recognition) Xét về nguyên tắc chung, nhận dạng mặt có sựtương đồng rất lớn với nhận dạng vân tay và nhận dạng mống mắt, tuy nhiên sựkhác biệt nằm ở bước trích chọn đặt trưng (feature extraction) của mỗi lĩnh vực
Trong khi nhận dạng vân tay và mống mắt đã đạt tới độ chín, tức là có thể ápdụng trên thực tế một cách rộng rãi thì nhận dạng mặt người vẫn còn nhiều tháchthức và vẫn là một lĩnh vực nghiên cứu thú vị với nhiều người So với nhận dạngvân tay và mống mắt, nhận dạng mặt có nguồn dữ liệu phong phú hơn (bạn có thểnhìn thấy mặt người ở bất cứ tấm ảnh, video clip nào liên quan tới con người trênmạng) và ít đòi hỏi sự tương tác có kiểm soát hơn (để thực hiện nhận dạng vân tayhay mống mắt, dữ liệu input lấy từ con người đòi hỏi có sự hợp tác trong môitrường có kiểm soát)
Hiện nay các phương pháp nhận dạng mặt được chia thành nhiều hướng theocác tiêu chí khác nhau: nhận dạng với dữ liệu đầu vào là ảnh tĩnh 2D(still imagebased FR) là phổ biến nhất, tuy nhiên tương lai có lẽ sẽ là 3D FR (vì việc bố trínhiều camera 2D sẽ cho dữ liệu 3D và đem lại kết quả tốt hơn, đáng tin cậy hơn),cũng có thể chia thành 2 hướng là: làm với dữ liệu ảnh và làm với dữ liệu video.Trên thực tế người ta hay chia các phương pháp nhận dạng mặt ra làm 3 loại:phương pháp tiếp cận toàn cục (global, như Eigenfaces-PCA, Fisherfaces-LDA),phương pháp tiếp cận dựa trên các đặc điểm cục bộ (local feature based, như LBP,
Trang 23Gabor wavelets) và phương pháp lai (hybrid, là sự kết hợp của hai phương pháptoàn cục và local feature) Phương pháp dựa trên các đặc điểm cục bộ đã đượcchứng minh là ưu việt hơn khi làm việc trong các điều kiện không có kiểm soát và
có thể nói rằng lịch sử phát triển của nhận dạng mặt (A never ending story) là sựphát triển của các phương pháp trích chọn đặc trưng (feature extractrion methods)được sử dụng trong các hệ thống dựa trên feature based
Các ứng dụng cụ thể của nhận dạng mặt dựa trên 2 mô hình nhận dạng:identification (xác định danh tính, bài toán 1-N), và verification (xác thực danhtính, bài toán 1-1) Trong bài toán identification, ta cần xác định danh tính của ảnhkiểm tra, còn trong bài toán verification ta cần xác định 2 ảnh có cùng thuộc vềmột người hay không
Các pha trong một hệ thống nhận dạng mặt: để xây dựng một hệ thống nhậndạng mặt, cũng không hề đơn giản, bước đầu tiên cần thực hiện là face detection,tức là phát hiện phần ảnh mặt trong dữ liệu input (CSDL ảnh, video …) và cắt lấyphần ảnh mặt để thực hiện nhận dạng (face cropping), bước thứ hai là tiền xử lýảnh (preprocessing) bao gồm các bước căn chỉnh ảnh (face image alignment) vàchuẩn hóa ánh sáng (illumination normalization) (ở đây tôi đang nói tới các ảnh cógóc nhìn thẳng – frontal view face image), tiếp đến là bước trích chọn đặc điểm(feature extraction), ở bước này một phương pháp trích chọn đặc điểm nào đó(mẫu nhị phân cục bộ – Local Binary Pattern – LBP, Gabor wavelets, …) sẽ được
sử dụng với ảnh mặt để trích xuất các thông tin đặc trưng cho ảnh, kết quả là mỗiảnh sẽ được biểu diễn dưới dạng một vector đặc điểm (feature vector), bước tiếptheo là bước nhận dạng (recognition) hay phân lớp (classification), tức là xác địnhdanh tính (identity) hay nhãn (label) của ảnh – đó là ảnh của ai
Ở bước classification, thường thì phương pháp k-láng giềng gần nhất nearest neighbor:kNN) sẽ được sử dụng, thực tế cho thấy việc dùng SVM (SupportVector Machine) không mang lại hiệu quả cao hơn mà còn chậm hơn Dữ liệu chomột hệ thống nhận dạng mặt được chia làm 3 tập: tập huấn luyện (training set), tậptham chiếu (reference set hay gallery set) và tập để nhận dạng (probe set hay queryset, đôi khi còn gọi là test set)
(k-Trong nhiều hệ thống, tập training trùng với tập reference Tập training gồmcác ảnh được dùng để huấn luyện (hay học-learning), thông thường tập này đượcdùng để sinh ra một không gian con (projection subspace) là một ma trận vàphương pháp hay được sử dụng là PCA (Principal Component Analysis), WPCA(Whitened PCA), LDA (Linear Discriminant Analysis), KPCA (Kernel PCA) Tậpreference gồm các ảnh đã biết danh tính được chiếu (projected) vào không gian con
ở bước training Bước training nhằm 2 mục đích: giảm số chiều (dimensionreduction) của các vector đặc điểm (feature vector) vì các vector này thường có độdài khá lớn (vài nghìn tới vài trăm nghìn) nên nếu để nguyên thì việc tính toán sẽ
Trang 24rất rất lâu, thứ hai là làm tăng tính phân biệt (discriminative) giữa các ảnh khác lớp(định danh khác nhau), ngoài ra có thể làm giảm tính phân biệt giữa các ảnh thuộc
về một lớp (tùy theo phương pháp, ví dụ như Linear Discriminant Analysis còn gọi là Fisher Linear Discriminant Analysis-Fisherface là một phương pháp làmviệc với tập training mà mỗi đối tượng có nhiều ảnh mặt ở các điều kiện khácnhau) Sau khi thực hiện chiếu tập reference vào không gian con, hệ thống lưu lạikết quả là một ma trận với mỗi cột của ma trận là một vector tương ứng với ảnh(định danh đã biết) để thực hiện nhận dạng (hay phân lớp)
LDA-Nhận dạng (hay phân lớp) được thực hiện với tập các ảnh probe, sau khi tiền
xử lý xong, mỗi ảnh sẽ được áp dụng phương pháp trích chọn đặc điểm (như vớicác ảnh thuộc tập training và reference) và được chiếu vào không gian con Tiếpđến việc phân lớp sẽ dựa trên phương pháp k-NN, định danh của một ảnh cần xácđịnh sẽ được gán là định danh của ảnh có khoảng cách (distance) gần với nó nhất
Ở đây cần lưu ý là mỗi ảnh là một vector nên có thể dùng khái niệm hàm khoảngcách giữa hai vector để đo sự khác biệt giữa các ảnh
3.2.2 Làm thế nào để xử lý trước ảnh mặt để nhận diện khuôn mặt:
Bây giờ bạn đã phát hiện một khuôn mặt, bạn có thể sử dụng hình ảnh khuônmặt cho nhận diện khuôn mặt Tuy nhiên, nếu bạn đã cố gắng để đơn giản là thựchiện nhận dạng khuôn mặt trực tiếp trên một hình ảnh hình ảnh bình thường, có thểbạn sẽ nhận được ít hơn độ chính xác 10%! Nó là vô cùng quan trọng để áp dụngcác kỹ thuật hình ảnh trước khi chế biến khác nhau để tiêu chuẩn hóa các hình ảnh
mà bạn cung cấp cho một nhận dạng khuôn mặt hệ thống
Hầu hết các thuật toán nhận dạng khuôn mặt cực kỳ nhạy cảm với điều kiệnánh sáng, do đó nếu nó được huấn luyện để nhận ra một người khi họ đang ở trongmột căn phòng tối, thì có lẽ nó wont nhận ra họ trong một căn phòng sáng…Vấn
đề này được gọi là "lumination phụ thuộc ", và cũng có nhiều vấn đề khác, chẳnghạn như mặt cũng phải ở trong một vị trí rất phù hợp trong những hình ảnh (nhưmắt là trong cùng một điểm ảnh tọa độ), kích thước phù hợp, góc quay, tóc vàtrang điểm, cảm xúc ( mỉm cười, giận dữ, vv), vị trí của đèn (bên trái hoặc bêntrên, vv) Đây là lý do tại sao nó là rất quan trọng để sử dụng một bộ lọc hình ảnhtốt tiền xử lý trước khi áp dụng nhận dạng khuôn mặt
Bạn cũng nên làm những việc như loại bỏ các điểm ảnh xung quanh khuônmặt mà không được sử dụng, chẳng hạn như với một mặt nạ hình elip để chỉ hiểnthị các khu vực mặt bên trong, không phải là tóc và hình nền, kể từ khi họ thay đổinhiều so với khuôn mặt không Để đơn giản , hệ thống nhận diện khuôn mặt tôi sẽcho bạn thấy là Eigenfaces sử dụng hình ảnh thang độ xám Vì vậy, tôi sẽ cho bạnthấy làm thế nào để dễ dàng chuyển đổi hình ảnh màu xám (còn được gọi là "màuxám"), và sau đó dễ dàng áp dụng Histogram Equalization là một phương pháp rấtđơn giản của tự động tiêu chuẩn hóa độ sáng và độ tương phản của hình ảnh gươngmặt của bạn
Trang 25Để có kết quả tốt hơn, bạn có thể sử dụng màu sắc nhận diện khuôn mặt (lýtưởng với phụ kiện màu sắc biểu đồ trong HSV hoặc một không gian màu thay vìRGB), hoặc áp dụng nhiều công đoạn chế biến như tăng cường cạnh, phát hiệnđường viền, phát hiện chuyển động, vv Ngoài ra, mã này là thay đổi kích thướchình ảnh đến một kích thước tiêu chuẩn, nhưng điều này có thể thay đổi tỷ lệ khíacạnh của khuôn mặt.
// Hoặc chuyển đổi hình ảnh để thang màu xám, hoặc sử dụng các hình ảnhmàu xám hiện có
IplImage * imageGrey;
if (imageSrc-> nChannels == 3) {
imageGrey = cvCreateImage (cvGetSize (imageSrc), IPL_DEPTH_8U, 1); //Chuyển đổi từ RGB (thực ra nó là BGR) để Greyscale cvCvtColor (imageSrc,imageGrey, CV_BGR2GRAY);
Sử dụng 'imageProcessed' cho Face Recognition
if (imageGrey)
cvReleaseImage (& imageGrey);
if (imageProcessed)
cvReleaseImage (& imageProcessed);
Như đã đề cập ở trên, giai đoạn đầu tiên trong nhận diện khuôn mặt FaceDetection là Các thư viện OpenCV làm cho nó khá dễ dàng để phát hiện mộtkhuôn mặt phía trước trong một hình ảnh bằng cách sử Haar Cascade Mặt Detector(còn gọi là phương pháp Viola-Jones) Chức năng "cvHaarDetectObjects" trongOpenCV thực hiện việc phát hiện khuôn mặt đích thực, nhưng chức năng là một
Trang 26chút tẻ nhạt để sử dụng trực tiếp, vì vậy nó là dễ nhất để sử dụng chức năng baobọc này:
// Thực hiện nhận diện khuôn mặt trên hình ảnh đầu vào, sử dụng HaarCascade nhất định
// Trả về một hình chữ nhật với các khu vực phát hiện trong hình ảnhnhất định
CvRect detectFaceInImage (IplImage * inputImg, CvHaarClassifierCascade
size = cvSize (inputImg-> chiều rộng, inputImg-> chiều cao);
greyImg = cvCreateImage (kích thước, IPL_DEPTH_8U, 1);
cvCvtColor (inputImg, greyImg, CV_BGR2GRAY);
detectImg = greyImg; // Sử dụng hình ảnh thang độ xám
} // Phát hiện tất cả các khuôn mặt trong hình ảnh thang độ xám
t = (double) cvGetTickCount () ;
rects = cvHaarDetectObjects (detectImg, thác, lưu trữ,
search_scale_factor, 3, cờ, minFeatureSize);
Trang 27cvReleaseImage (& greyImg);
cvReleaseMemStorage (và lưu trữ); // cvReleaseHaarClassifierCascade (& thác);trở lại rc; // Trả lại khuôn mặt lớn nhất được tìm thấy, hoặc (- 1, -1, -1, -1).}
Bây giờ bạn chỉ có thể gọi là "detectFaceInImage" bất cứ khi nào bạn muốntìm một khuôn mặt trong ảnh Bạn cũng cần phải xác định phân loại mặt màOpenCV nên sử dụng để phát hiện khuôn mặt.Ví dụ, OpenCV đi kèm với cácphân loại khác nhau để phát hiện phía trước mặt, cũng như một số gương mặt cấuhình (xem bên), phát hiện mắt, phát hiện mũi, phát hiện miệng, toàn bộ cơ thểphát hiện, vv Bạn thực sự có thể sử dụng chức năng này với bất kỳ các dò khácnếu bạn muốn, hoặc thậm chí tạo máy dò tùy chỉnh riêng của bạn như cho xehoặc phát hiện người , đối với trán nhận diện khuôn mặt, bạn có thể chọn mộttrong những Classifiers Haar Cascade mà đến với OpenCV (trong "data \haarcascades " thư mục):
"Haarcascade_frontalface_default.xml"
"Haarcascade_frontalface_alt.xml"
"Haarcascade_frontalface_alt2.xml"
"Haarcascade_frontalface_alt_tree.xml"
Mỗi người sẽ cho kết quả hơi khác nhau tùy thuộc vào môi trường của bạn,
do đó bạn thậm chí có thể sử dụng tất cả trong số họ và kết hợp các kết quả vớinhau (nếu bạn muốn nhận diện nhất)
// Haar Cascade tập tin, sử dụng để nhận diện khuôn mặt
Char * faceCascadeFilename ="Haarcascade_frontalface_alt.xml";
// Nạp các phân HaarCascade để phát hiện khuôn mặt
CvHaarClassifierCascade * faceCascade;
Trang 28faceCascade = (CvHaarClassifierCascade *) cvLoad (faceCascadeFilename,
0, 0, 0);
if (! FaceCascade) {
printf ("Tải Couldnt Mặt dò '% s' \ n", FaceCascadeFilename);
exit (1);
} // Lấy frame kế tiếp từ máy ảnh
IplImage * inputImg = cvQueryFrame (camera); // Thực hiện nhận diệnkhuôn mặt trên hình ảnh đầu vào, bằng cách sử dụng phân loại Haar được
CvRect faceRect = detectFaceInImage (inputImg , faceCascade); // Hãy chắcchắn rằng một khuôn mặt có giá trị đã được phát hiện
3.3 Hướng dẫn sử dụng các thư viện của OpenCV.
Để sử dụng các thư viện của OpenCV, có thể tải về một bản cài đặt OpenCVbằng cách truy cập địa chỉ: http://sourceforge.net/projects/opencvlibrary/ để tải vềphiên bản mới nhất Sau khi tải về, tiến hành cài đặt bình thường, với thư mục mặc
định là C:\Emgu Sau đó, cần tiến hành tùy chỉnh để có thể làm việc với OpenCV
qua hai IDE thông dụng là Microsoft Visual Studio hoặc Eclipse CDT Tuy nhiên,việc tùy chỉnh này có thể gây khó khăn cho một số người mới bắt đầu, vì vậy, ởđây trình bày một cách khác để có thể sử dụng các thư viện của OpenCV Đó chính
là sử dụng gói phần mềm EmguCV
EmguCV là một gói bao bên ngoài (wrapper) thư viện xử lý ảnh OpenCV của Intel, cho phép lập trình viên có thể gọi các hàm của OpenCV từ trong các ngôn ngữ NET C#, VB, IronPython… Gói này có thể được biên dịch trong Mono
và chạy trên Linux / Mac OS X.
Việc sử dụng và lập trình với EmguCV cũng rất đơn giản, chỉ cần thêm cácfile DLL trong thư mục cài đặt của EmguCV vào chương trình C# thì có thể gọi tất
cả các thuộc tính của EmguCV
Cấu trúc của EmguCV gồm hai lớp cơ bản:
- Lớp thứ nhất là các cấu trúc, thuộc tính, và các hàm dùng để xử lý hình ảnh,lấy ảnh…
Trang 29- Lớp thứ hai là lớp cấp cao, với nhiều tính chất phức tạp dùng để nhận dạnghay xử lý các ma trận, điểm ảnh…
Hình 8 Cấu trúc tổng quát của EmguCV.
Truy cập địa chỉ:
- http://sourceforge.net/projects/emgucv/files/
hoặc
- alpha/libemgucv-windows-universal-gpu-2.4.9.1847.exe/
http://en.sourceforge.jp/projects/sfnet_emgucv/downloads/emgucv/2.4.9-để tải về bản cài đặt của EmguCV
a Hướng dẫn cài đặt EmguCV.
Bước 1: Cài đặt EmguCV 2.4.9
Tải phiên bản EmguCV 2.4.9 Cài đặt vào thư mục mặc định tại: C:\ không
nên thay đổi đường dẫn, sử dụng đường dẫn mặc định windows-universal-gpu2.4.9.1847”.
Trang 30“C:\Emgu\emgucv Chọn tất cả các tùy chọn để cài đặt đầy đủ gói.
Bước 2: Thiết lập biến môi trường.
- Thiết lập 3 đường dẫn sau trong biến người dùng và hệ thống
Trang 31Bước 3: Cấu Hình Visual Studio
1 Tạo một project Window Application mới, đặt tên là “Two Layer”
2. Trong Solution Explorer, click phải chuột vào References, chọn Add
Reference…
3. Chọn tab Browser, duyệt tới thư mục:
”Emgu.CV.UI.dll”, ”Emgu.Util.dll”
Trang 324 Sau đó click vào OK.
Các tham chiếu hiển thị trong Solution Explorer.
Trang 335 Tiếp theo, khai báo các thư viện OpenCV mà chúng ta sử dụng trong mỗiclass:
b Thêm Control của EmguCV vào Toolbox.
Trong Toolbox, click phải chuột vào tab bất kì, chọn Add Tab, gõ tên EmguCV > Enter Click chuột phải lên tab EmguCV vừa tạo, chọn Choose Items…, sau khi hộp thoại hiển thị, chọn tab NET Framework Components Click vào nút Browse, duyệt đến thư mục:
C:\Emgu\emgucv-windows-universal-gpu 2.4.9.1847\bin
Chọn tệp tin Emgu.CV.UI.dll Nhấn Open Trong ô Filter, gõ Emgu Danh
sách các control của thư viện OpenCV sẽ hiển thị ra, chọn tất cả rồi nhấn OK
Sử dụng Control:
Chọn tab EmguCV vừa tạo, chọn control cần sử dụng, kéo thả vào form.
Đặt thuộc tính Name và set Text cho control, rồi sử dụng bình thường như các control khác.
Trang 34c Một số ví dụ.
- Khai báo biến chứa ảnh:
private Image<Bgr,Byte> MyImage;
Image là một lớp ảnh trong thư viện OpenCV, trong đó Color (Bgr) là hệmàu, Depth (Byte) là độ sâu màu
Dòng bên trên nghĩa là khai báo đối tượng MyImage, là một đối tượng thuộclớp ảnh, có hệ màu là RGN (red, green, blue) và độ sâu màu là Byte, tức là giá trịmỗi pixel nằm trong đoạn [0, 255]
- Đối với ảnh xám (grayscale), ta khai báo như sau:
private Image<Gray,Byte> MyImage;
Trong đó giá trị mỗi pixel là độ sáng tại pixel đó, với 0 là tối (đen), và
/ khai báo đối tượng OpenFileDialog để chuẩn bị mở hộp thoại //duyệt file
OpenFileDialog OpenFile = new OpenFileDialog();
/ khi hộp thoại hiển thị, nếu người dùng bấm OK
// thì nạp file ảnh lên control pictureBox1
if (OpenFile.ShowDialog() ==DialogResult.OK)
{
/ gán file hình do người dùng chọn cho biến MyImage
Image<Bgr, Byte> MyImage =new Image<Bgr,
Byte>(OpenFile.FileName);
/ hiển thị ảnh lên control pictureBox1
pictureBox1.Image = MyImage.ToBitmap();
}
}