Không chỉ dừng lại ở việc chỉ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ận
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
ĐỒ ÁN TỐ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
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ầy Phạ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ất nhiều thời gian quý báu để tận tình chỉ bảo, hướng dẫn, định hướng cho em thực hiệ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 đáo hơ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ạo mọ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à đồ án tốt nghiệp
TP.HCM, ngày……tháng……năm 2020
Sinh viên
TRẦN ĐÌNH SƠN
Trang 8MỞ ĐẦU
1 Lý do chọn đề tài
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ới nhữ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ằng hình ảnh ngày càng tăng Theo đó, lĩnh vực xử lý ảnh cũng được chú trọng phát triể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ệc chỉ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ận dạ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ới ngườ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ận dạng khuôn mặt đóng vai trò quan trọng trong nhiều lĩnh vực đời sống hằng ngày củ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ột ngườ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ận dạng khuôn mặt để nâng cao hiệu suất tuy nhiên dù ít hay nhiều những phương phá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án khác nhau như: phát hiện mặt người (face detection), đánh dấu (facial landmarking), 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 để ứng dụng trong thực tiễn Ở các trường đại học hàng đầu về Công Nghệ Thông Tin như
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ận dạng khuôn mặt người và nó đã trở thành một trong những lĩnh vực nghiên cứu chí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ét tươ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 đặc
Trang 9pháp PCA, LDA, LFA Trong đó, LDA là phương pháp trích rút đặc trưng nhằm giả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
2 Mục đích của đề tài
- 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 (Linear Discriminant 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ạng khuô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:
tự thu thập)
Trang 10
CHƯƠ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ặc mộ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ững nă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ẫn chư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ận dạ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éo
lê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,
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ưng như: 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ột khuô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ất nhiề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ục má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ếu sá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 được test 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 ảnh mặt), tuy nhiên trên thực tế các CSDL có thể rất lớn, ví dụ CSDL ảnh mặt củ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ần trê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ấn luyệ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ùy
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
Con người thu nhận thông tin qua các giác quan, trong đó thị giác đóng vai trò 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áy tính, XLA và đồ họa đã phát triển một cách mạnh mẽ và có nhiều ứng dụng trong cuộ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 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
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à đặc trư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 qua camera là ảnh tương tự (loại camera ống chuẩn CCIR với tần số 1/25, mỗi ảnh 25 dò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ất lượng một ảnh thu nhận được phụ thuộc vào thiết bị thu, môi trường (ánh sáng,
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ểu diễ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ên ngườ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ác củ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 đặc tí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ận dạ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úp phâ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 được bằ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 ngang trê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 trong khoa 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ặt ngườ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áng tối, dung lượng điểm ảnh, môi trường để thu ảnh phong phú kéo theo nhiễu Trong nhiề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án họ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 được phá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 sang cá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ỏi dung lượng bộ nhớ cực lớn, và không hiệu quả theo quan điểm ứng dụng và công nghệ 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ễn thườ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ác quá 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ối mộ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…
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 đổi gầ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ông gian) và độ sáng (mức xám) Khoảng cách giữa các điểm ảnh đó được thiết lập sao cho 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ậy gọi là điểm ảnh (PEL: Picture Element) hay gọi tắt là Pixel Trong khuôn khổ ảnh hai 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 cho mắ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ợp tạ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ình CGA 17” độ phân giải 320*200 Lý do: cùng một mật độ (độ phân giải) nhưng diệ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
Lý do: từ kỹ thuật máy tính dùng 1 byte (8bit) để biểu diễn mức xám: Mức
Ảnh đen trắng: Là ảnh có hai màu đen, trắng (không chứa mầu khác) với
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
Ả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ị
Đị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ởi tí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)
2 D(p,q) = D (p, q)
3 D(p, z) ≤ D(p,q) + D(q, z); z là một điểm ảnh khác
Khoảng cách Euclide: Khoảng cách Euclide giữa hai điểm ảnh p(x, y) và
q(s, t) được định nghĩa như sau:
De(p,q) = [(x - s) 2 + (y – t) 2 ] 1/2
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
- Các khái niệm cơ bản trong XLA:
- Quan hệ 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ểm khá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ởi Willow 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ông lợ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ác má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ác chứ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, theo dõ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ải Face detetion-phát hiện khuôn mặt người trong ảnh), tôi đã mất khá nhiều thời gian cho 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ọn Matlab 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 được cặ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ủa ngành Computer Vision, và cũng được xem là một lĩnh vực nghiên cứu của ngành Biometrics (tương tự như nhận dạng vân tay – Fingerprint recognition, hay nhận dạ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ể áp dụ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ách thứ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ạng vâ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ên mạ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 tay hay 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ôi trườ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 theo cá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 image based 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:
Trang 23Gabor wavelets) và phương pháp lai (hybrid, là sự kết hợp của hai phương pháp toàn cục và local feature) Phương pháp dựa trên các đặc điểm cục bộ đã được chứ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 danh tính, bài toán 1-1) Trong bài toán identification, ta cần xác định danh tính của ảnh kiể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ận dạ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ấy phầ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ếp theo
là bước nhận dạng (recognition) hay phân lớp (classification), tức là xác định danh 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 (Support Vector Machine) không mang lại hiệu quả cao hơn mà còn chậm hơn 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 hay gallery set) và tập để nhận dạng (probe set hay query set, đô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ồm các ảnh được dùng để huấn luyệ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ẽ
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 LDA- còn gọi là Fisher 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
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ôn mặ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ực hiệ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ụng cá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 ở trong mộ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ẳng hạ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ên trê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 ảnh tố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ôn mặ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ển thị 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 đổi nhiề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ạn thấ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àu xám"), và sau đó dễ dàng áp dụng Histogram Equalization là một phương pháp rất
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ước hì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ía cạ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 ảnh mà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 Face Detection là Các thư viện OpenCV làm cho nó khá dễ dàng để phát hiện một khuô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" trong OpenCV 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 bao bọ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 Haar Cascade 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 ảnh nhất định
CvRect detectFaceInImage (IplImage * inputImg, CvHaarClassifierCascade
cvCvtColor (inputImg, greyImg, CV_BGR2GRAY);
} // 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ữ,
Trang 27cvReleaseMemStorage (và lưu trữ); // cvReleaseHaarClassifierCascade (& thác);
}
Bây giờ bạn chỉ có thể gọi là "detectFaceInImage" bất cứ khi nào bạn muốn tì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ác phâ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ấu hì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ác nế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 xe hoặ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ột trong những Classifiers Haar Cascade mà đến với OpenCV (trong "data \ haarcascades " thư mục):
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ới nhau (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ện khuô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ắc chắ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 OpenCV bằ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ác file 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,
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ạng hay 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
“C:\Emgu\emgucv-windows-universal-gpu2.4.9.1847”.
Trang 30- 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
2.4.9.1847\bin\x64;
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…
“C:\Emgu\emgucv-windows-universal-gpu2.4.9.1847\bin” Chọn 3 file: “Emgu.CV.dll”,
”Emgu.CV.UI.dll”, ”Emgu.Util.dll”
Trang 32
4 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ỗi class:
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
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:
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ộc lớ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:
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
}