Tải bản đầy đủ (.doc) (30 trang)

NGHIÊN cứu các kỹ THUẬT PHÁT HIỆN mặt NGƯỜI và ỨNG DỤNG

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (542.88 KB, 30 trang )

BỘ CÔNG THƯƠNG
TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA CNTT
------------

BÁO CÁO
THỰC TẬP TỐT NGHIỆP
ĐỀ TÀI :
NGHIÊN CỨU CÁC KỸ THUẬT PHÁT HIỆN MẶT NGƯỜI
VÀ ỨNG DỤNG
Giáo viên hướng dẫn : Tiến sĩ Phạm Văn Hà
Sinh viên: Lê Thanh Nghị
Lớp: Khoa học máy tính 2 – Khóa 5
Mã sinh viên: 054 106 0137

Hà Nội, ngày 14 tháng 03 năm 2014


Khoa CNTT

Nghiên cứu các kỹ thuật phát hiện mặt người

LỜI NÓI ĐẦU
Công nghệ thông tin đang được ứng dụng trong mọi lĩnh vực của cuộc sống. Với
một hệ thống máy tính, chúng ta có thể làm được rất nhiều việc, tiết kiện thời gian
và công sức. Điển hình như công việc nhận dạng mặt người. Ngày xưa, muốn tìm
kiếm một kẻ tình nghi trong siêu thị hay sân bay, các nhân viên an ninh phải tìm
kiếm trên từng màn hình camera theo dõi. Ngày nay, công việc đấy đã được làm tự
động nhờ các hệ thống nhận dạng mặt người. Phát hiện mặt người trong ảnh là
một phần quan trọng của hệ thống nhận dạng mặt người đó, giải quyết tốt việc
phát hiên mặt người sẽ giúp tiết kiệm thời gian và nâng cao độ chính xác của việc


nhận dạng khuôn mặt.
Phát hiện mặt người cũng là một bài toán nhận dạng đơn giản, hệ thống chỉ cần
phân loại đối tượng đưa vào có phải mặt người hay không phải mặt người. Ở mức
độ cao hơn, sau khi đã phát hiện được khuôn mặt, các khuôn mặt đó sẽ được so
sánh với các khuôn mặt có trong dữ liệu để nhận dạng xem khuôn mặt đấy là của ai
(thường áp dụng trong nhận dạng khuôn mặt của người nổi tiếng hoặc của tội
phạm đang bị truy nã).
Bài toán phát hiện mặt người được bắt đầu nghiên cứu từ những năm 1990s, và
đã có rất nhiều công trình nghiên cứu về phát hiện khuôn mặt trong ảnh, tuy nhiên
cho đến nay, các nhà khoa học vẫn không ngừng tìm các hướng tiếp cận mới, các
thuật toán mới nhằm nâng cao hiệu suất của việc phát hiện khuôn mặt cũng như
việc nhận dạng mặt người.
Sau một thời gian dài học tập và nghiên cứu, cuối cùng em cũng đã hoàn thành đề
tài này, đây là dịp tốt nhất để em có thể gửi lời cảm ơn đến mọi người.
Em xin gửi lời cảm ơn sâu sắc đến T.S Phạm Văn Hà đã tận tình hướng dẫn, định
hướng cho em trong suốt thời gian thực hiện đề tài. Thầy đã cho em những lời khuyên
quý báu giúp em hoàn thành tốt khóa luận.
Em xin chân thành cảm ơn!

2

SVTH: Lê Thanh Nghị - MSV: 0541060137
GVHD: T.S Phạm Văn Hà


Khoa CNTT

Nghiên cứu các kỹ thuật phát hiện mặt người

Tóm tắt

Mục tiêu đề ra:
-

Tìm hiểu giải thuật adaboost, các đặc trưng haar-like, mô hình Cascade of

-

Classifiers.
Áp dụng vào bài toán phát hiện mặt người trong ảnh.

Báo cáo thực tập được trình bày trong bốn chương với bố cục như sau:
Chương 1: Tổng quan về các phương pháp xác định mặt người : Giới thiệu
tổng quan về bài toán xác định mặt người trong ảnh, các ứng dụng và những khó
khăn của bài toán, đồng thời xác định phạm vi của đề tài.
Chương 2: Các phương pháp xác định mặt người : Nêu chi tiết bài toán phát
hiện mặt người, các hướng tiếp cận giải quyết bài toán, các nghiên cứu và thành
quả đạt được của các nhà nghiên cứu trong bài toán xác định mặt người.
Chương 3: Cơ sở lý thuyết : Đi sâu vào hướng tiếp cận dựa theo thuật toán học
máy adaboost. Giới thiệu về các đặc trưng haar-like của khuôn mặt, cách tính các
đặc trưng haar-like. Tiếp theo là giới thiệu về mô hình cascade of classifiers và cách
áp dụng vào bài toán phát hiện mặt người trong ảnh.
Chương 4: Xây dựng ứng dụng : Xây dựng một chương trình demo về phát
hiện mặt người trong ảnh. Nêu lên các phân tích – thiết kế về chương trình.
Cuối cùng là kết luận và hướng phát triển: Tóm tắt những kết quả đạt được,
những hạn chế và nêu lên các hướng phát triển trong tương lai.

3

SVTH: Lê Thanh Nghị - MSV: 0541060137
GVHD: T.S Phạm Văn Hà



Khoa CNTT

Nghiên cứu các kỹ thuật phát hiện mặt người

Mục Lục
LỜI NÓI ĐẦU..........................................................................................................................................2
Tóm tắt..................................................................................................................................................3
Mục Lục.................................................................................................................................................4
Danh sách hình vẽ..................................................................................................................................5
Danh sách từ viết tắt/từ tiếng Anh sử dụng trong báo cáo....................................................................6
CHƯƠNG 1: TỔNG QUAN VỀ CÁC PHƯƠNG PHÁP XÁC ĐỊNH MẶT NGƯỜI............................................7
1.1Giới thiệu về các phương pháp xác định mặt người trong ảnh.....................................................7
1.2 Định nghĩa bài toán xác định mặt người......................................................................................7
1.3Những khó khăn và thách thức đối với bài toán xác định mặt người...........................................7
1.4Các ứng dụng của xác định mặt người..........................................................................................8
1.5Xác định phạm vi đề tài.................................................................................................................8
CHƯƠNG 2: CÁC PHƯƠNG PHÁP XÁC ĐỊNH MẶT NGƯỜI......................................................................9
CHƯƠNG 3: CƠ SỞ LÝ THUYẾT.............................................................................................................10
3.1 Tổng quan về Adaboost..............................................................................................................10
3.1.1 Adaboost.............................................................................................................................11
3.1.2 Thuật toán Adaboost:.........................................................................................................12
3.2Các đặc trưng Haar-like...............................................................................................................14
3.3 Cascade of Classifiers.................................................................................................................17
3.4 Cascade of boosting classfiers....................................................................................................18
CHƯƠNG 4: XÂY DỰNG CHƯƠNG TRÌNH ỨNG DỤNG.........................................................................20
4.1 Sơ lược về OpenCV....................................................................................................................20
4.2 Tổng quan về một hệ thống xác định mặt người trong ảnh.......................................................21
4.3 Phân tích thiết kế hệ thống phát hiện mặt người......................................................................21

4.3.1 Phân tích.............................................................................................................................21
4.3.2 Thiết kế hệ thống................................................................................................................22
4.3.3 Thiết kế giao diện................................................................................................................23
4

SVTH: Lê Thanh Nghị - MSV: 0541060137
GVHD: T.S Phạm Văn Hà


Khoa CNTT

Nghiên cứu các kỹ thuật phát hiện mặt người

4.4 Demo chương trình....................................................................................................................26
Đánh giá, kết luận và hướng phát triển................................................................................................28
Tài liệu tham khảo:...............................................................................................................................30

Danh sách hình vẽ
STT
1
2
3
4
5
6
7
8
9
10
11

12
13
14
15
16

Tên
Hình 3.1: Boosting
Hình 3.2: Sơ đồ khối xây dựng bộ phân loại
Hình 3.3: 4 đặc trưng Haar-like cơ bản
Hình 3.4: Các đặc trưng mở rộng của các đặc trưng Haar-like cơ sở
Hình 3.5: Cách tính Integral Image của ảnh
Hình 3.6: Ví dụ cách tính nhanh tổng các điểm ảnh của vùng D trên
ảnh
Hình 3.7: Ví dụ cách tính nhanh tổng điểm ảnh của vùng D trên
ảnh
Hình 3.8: Huấn luyện cascade N lớp
Hình 3.9: Cascade of boosting classifiers
Hình 4.1 : Cấu trúc cơ bản của OpenCV
Hình 4.2: Tổng quan về hệ thống phát hiện mặt người trong ảnh
Hình 4.3: Biểu đồ ngữ cảnh của hệ thống
Hình 4.4: Sơ đồ khối chương trình

Hình 4.5: Biểu đồ phân rã chức năng.
Hình 4.5: Giao diện chương trình demo
Hình 4.6: Chạy thử chương trình

Trang
11
13

14
15
16
16
16
18
18
20
21
21
22
23
24
27

5

SVTH: Lê Thanh Nghị - MSV: 0541060137
GVHD: T.S Phạm Văn Hà


Khoa CNTT

Nghiên cứu các kỹ thuật phát hiện mặt người

Danh sách từ viết tắt/từ tiếng Anh sử dụng trong báo cáo
Từ viết tắt/từ tiếng Anh
picBox
txtNotice
btnBrowse

btnDetect

Từ đầy đủ
Picturebox
Textbox “Notice”
button Browse
button detect

Classifier

False alarm
Feature

Haar-like feature

Nghĩa tiếng Việt
Đối tượng khung ảnh
Đối tượng textbox
Đối tượng nút “Duyệt ảnh”
Đối tượng nút “Thực hiện”
Một bộ phân loại được xây dựng
theo một thuật toán học máy nào
đấy, dùng để phân loại các đối
tượng (khuôn mặt hay không phải
khuôn mặt)
Là tỉ lệ nhận dạng sai của các bộ
phân loại
Đặc trưng. Là các thông tin giúp
nhận biết đối tượng.
Các đặc trưng của đối tượng trong

ảnh. Các đặc trưng này thường
được định nghĩa bằng các tính toán
với tổng điểm ảnh của một vùng
nào đó trên bức ảnh.

Hit rate

Là tỉ lệ nhận dạng đúng của các bộ
phân loại

Max false alarm

Đạt được tỉ lệ sai này thì bộ phân
loại được xây dựng thành công, tỉ
lệ sai này là một giá trị bé, có thể
chấp nhận được trong bài toán phân
loại.

Strong classifier

Threshold

Weak classifier

Bộ phân loại mạnh là bộ phân loại
được xây dựng từ nhiều bộ phân
loại yếu, có độ chính xác cao.
Ngưỡng.
Ngưỡng là giá trị ranh giới giữa các
lớp, giá trị của ngưỡng thường

được chọn từ thực nghiệm. Chọn
giá trị thích hợp nhất để hợp thành
các bộ phân loại yếu.
Bộ phân loại yếu. Là bộ phân loại
đơn giản có độ chính xác khoảng
6

SVTH: Lê Thanh Nghị - MSV: 0541060137
GVHD: T.S Phạm Văn Hà


Khoa CNTT

Nghiên cứu các kỹ thuật phát hiện mặt người
50%.

CHƯƠNG 1: TỔNG QUAN VỀ CÁC PHƯƠNG PHÁP XÁC ĐỊNH
MẶT NGƯỜI
1.1
Giới thiệu về các phương pháp xác định mặt người trong
ảnh
Trong nhiều năm qua, có rất nhiều công trình nghiên cứu về bài toán nhận
dạng mặt người. Các nghiên cứu đi từ bài toán đơn giản, từ việc nhận dạng một
mặt người trong ảnh đen trắng cho đến mở rộng cho ảnh mầu và có nhiều mặt
người trong ảnh. Đến nay các bài toán xác định mặt người đã mở rộng với nhiều
miền nghiên cứu như nhận dạng khuôn mặt, định vị khuôn mặt, theo dõi mặt người
hay nhận dạng cảm xúc mặt người…
Phát hiện mặt người trong ảnh là phần đầu tiên của một hệ thống nhận dạng mặt
người. Các hệ thống nhận dạng khuôn mặt được bắt đầu xây dựng từ những năm
1970, tuy nhiên do còn hạn chế về các luật xác định mặt người nên chỉ được áp

dụng trong một số ứng dụng như nhận dạng thẻ căn cước. Nó chỉ được phát triển
mạnh mẽ từ những năm 1990 khi có những tiến bộ trong công nghệ video và ngày
nay thì các ứng dụng của xác định mặt người đã trở nên phổ biến trong cuộc sống.

1.2

Định nghĩa bài toán xác định mặt người.

Xác định khuôn mặt người là một kỹ thuật máy tính để xác định các vị trí và
kích thước của các khuôn mặt người trong các ảnh bất kì. Kỹ thuật này nhận biết
các đặc trưng của khuôn mặt và bỏ qua những thứ khác như: tòa nhà, cây cối, cơ
thể …

1.3
Những khó khăn và thách thức đối với bài toán xác định
mặt người.
Việc xác định khuôn mặt người có những khó khăn nhất định như:
• Hướng (pose) của khuôn mặt đối với máy ảnh, như: nhìn thẳng, nhìn
nghiêng hay nhìn từ trên xuống. Cùng trong một ảnh có thể có nhiều
khuôn mặt ở những tư thế khác nhau.
• Sự có mặt của các chi tiết không phải là đặc trưng riêng của khuôn mặt
người, như: râu quai nón, mắt kính, ….
• Các nét mặt (facial expression) khác nhau trên khuôn mặt, như: vui, buồn,
ngạc nhiên, ….
7

SVTH: Lê Thanh Nghị - MSV: 0541060137
GVHD: T.S Phạm Văn Hà



Khoa CNTT

Nghiên cứu các kỹ thuật phát hiện mặt người

• Mặt người bị che khuất bởi các đối tượng khác có trong ảnh.
Sự biểu cảm của khuôn mặt : sự biểu cảm có thể làm thay đổi đáng kể các đặc trưng
và thông số của khuôn mặt, ví dụ như khuôn mặt của cùng một người sẽ rất khác
khi người đấy cười, tức giận hay sợ hãi …

1.4

Các ứng dụng của xác định mặt người.

Xác định mặt người thường là một phần của một hệ thống (facial recognition
system). Nó thường được dùng trong giám sát video, giao tiếp người máy và quản
lý cơ sở dữ liệu ảnh… Các ứng cơ bản của xác định mặt người có thể kể đến là:





1.5

Xác minh tội phạm
Camera chống trộm
Bảo mật
Lưu trữ khuôn mặt

Xác định phạm vi đề tài.


Trong đề tài này, em tập trung vào việc xác định khuôn mặt trong ảnh. Từ đấy
lưu khuôn mặt tìm được vào CSDL để phục vụ cho các mục đích khác ( chẳng hạn
như nhận dạng mặt người hoặc ghép khuôn mặt vào bức ảnh khác … ). Do các điều
kiện khó khăn đã nêu ở trên ( mục 3 chương 1) em xin đưa ra những giả định và
rành buộc sau để giảm độ phức tạp của bài toán:
• Các khuôn mặt được chụp thẳng hoặc góc nghiêng không đáng kể (bé
hơn 10o)
• Phông nền của ảnh không quá phức tạp
• Ảnh được chụp trong điều kiện ánh sáng bình thường

8

SVTH: Lê Thanh Nghị - MSV: 0541060137
GVHD: T.S Phạm Văn Hà


Khoa CNTT

Nghiên cứu các kỹ thuật phát hiện mặt người

CHƯƠNG 2: CÁC PHƯƠNG PHÁP XÁC ĐỊNH MẶT NGƯỜI
Dựa vào tính chất của các phương pháp xác định mặt người trên ảnh, các
phương pháp này được chia thành bốn loại chính, tương ứng với bốn hướng tiếp
cận khác nhau. Ngoài ra cũng có rất nhiều nghiên cứu mà phương pháp xác định
mặt người không chỉ dựa vào một hướng mà có liên quan đến nhiều hướng.
• Hướng tiếp cận dựa trên tri thức: Dựa vào các thuật toán, mã hóa các đặc
trưng và quan hệ giữa các đặc trưng của khuôn mặt thành các luật. Đây là
hướng tiếp cận theo kiểu top-down.
• Hướng tiếp cận dựa trên đặc trưng không thay đổi: Xây dựng các thuật
toán để tìm các đặc trưng của khuôn mặt mà các đặc trưng này không thay

đổi khi tư thế khuôn mặt hay vị trí đặt camera thay đổi.
• Hướng tiếp cận dựa trên so sánh khớp mẫu: Dùng các mẫu chuẩn của
khuôn mặt (các mẫu này đã được chọn và lưu trữ) để mô tả các khuôn mặt
hay các đặc trưng của khuôn mặt (các mẫu này được chọn tách biệt theo
tiêu chuẩn đã được các tác giả đề ra để so sánh). Phương pháp này có thể
dùng để xác định vị trí hay dò tìm khuôn mặt trên ảnh.
• Hướng tiếp cận dựa trên diện mạo: Trái ngược với hướng tiếp cận dựa trên
khuôn mẫu, các mô hình (hay các mẫu) sẽ được học từ một tập ảnh huấn
luyện mà thể hiện tính chất tiêu biểu của sự xuất hiện của mặt người trong
ảnh. Sau đó hệ thống (mô hình) sẽ xác định mặt người. Phương pháp này
còn được biết đến với tên gọi tiếp cận theo các phương pháp học máy.

9

SVTH: Lê Thanh Nghị - MSV: 0541060137
GVHD: T.S Phạm Văn Hà


Khoa CNTT

Nghiên cứu các kỹ thuật phát hiện mặt người

CHƯƠNG 3: CƠ SỞ LÝ THUYẾT
3.1 Tổng quan về Adaboost
Học theo Adaboost là một cách trong hướng tiếp cận dựa trên diện mạo, Viola
và Jones dùng AdaBoost kết hợp cascade để xác định khuôn mặt người [17] với các
đặc trưng dạng Haar wavelet-like. Tốc độ xử lý khá nhanh và tỷ lệ chính xác hơn
80% trên ảnh xám.
Thuật toán học máy Adaboost được phát triển thuật toán boosting, do đó bọn
em sẽ trình bày một chút về thuật toán boosting trước khi trình bày về Adaboost.

Tiếp cận Boosting
Về lịch sử, boosting bắt nguồn từ câu hỏi nổi tiếng được đưa ra bời Kearns vào
năm 1989 : “Liệu có thể tạo ra một strong classifier từ một tập các bộ phân loại
yếu?”. Năm 1990, Robert Schapire đưa ra thuật toán boosting đầu tiên, tiếp đến
năm 1993 thì nó được Drucker, Schapire và Simard kiểm nghiệm trong trong các
chương trình nhận dạng ( OCR application ). Freund đã tiếp tục các nghiên cứu của
Schaprire, và đến năm 1995 thì ông cùng với Schapire phát triển boosting thành
adaboost.
Như vậy, nguyên lý cơ bản của boosting là sự kết hợp các weak classifiers
thành một strong classifier. Trong đó, weak classifier là các bộ phân loại đơn giản
chỉ cần có độ chính xác trên 50%. Bằng cách này, chúng ta nói bộ phân loại đã được
“boost”.
Để hiểu cách hoạt động của thuật toán boosting, ta xét một bài toán phân loại
2 lớp (mẫu cần nhận dạng chỉ thuộc một trong hai lớp) với D là tập huấn luyện
gồm có n mẫu. Trước tiên, chúng ta sẽ chọn ngẫu nhiên ra n1 mẫu từ tập D (n1để tạo tập D1. Sau đó, chúng ta sẽ xây dựng weak classifier đầu tiên C1 từ tập D1.
Tiếp theo, chúng ta xây dựng tập D2 để huấn luyện bộ phân loại C2. D2 sẽ được xây
dựng sao cho một nửa số mẫu của nó được phân loại đúng bởi C1 và nửa còn lại bị
phân loại sai bởi C1. Bằng cách này, D2 chứa đựng những thông tin bổ sung cho C1.
Bây giờ chúng ta sẽ xây huấn luyện C2 từ D2.
Tiếp theo, chúng ta sẽ xây dựng tập D3 từ những mẫu không được phân loại
tốt bởi sự kết hợp giữa C1 và C2: những mẫu còn lại trong D mà C1 và C2 cho kết
10

SVTH: Lê Thanh Nghị - MSV: 0541060137
GVHD: T.S Phạm Văn Hà


Khoa CNTT


Nghiên cứu các kỹ thuật phát hiện mặt người

quả khác nhau. Như vậy, D3 sẽ gồm những mẫu mà C1 và C2 hoạt động không hiệu
quả. Sau cùng, chúng ta sẽ huấn luyện bộ phân loại C3 từ D3.
Bây giờ chúng ta đã có một strong classifier: sự kết hợp C1, C2 và C3. Khi tiến
hành nhận dạng một mẫu X, kết quả sẽ được quyết định bởi sự thỏa thuận của 3 bộ
C1, C2 và C3: Nếu cả C1 và C2 đều phân X vào cùng một lớp thì lớp này chính là kết
quả phân loại của X; ngược lại, nếu C1 và C2 phân X vào 2 lớp khác nhau, C3 sẽ
quyết định X thuộc về lớp nào

Hình 3.1: Boosting

3.1.1 Adaboost
Như đã biết, AdaBoost ( Adaptive Boost ) là một bộ phân loại mạnh phi tuyến
phức dựa trên hướng tiếp cận boosting được Freund và Schapire đưa ra vào
năm 1995. Adaboost hoạt động trên nguyên tắc kết hợp tuyến tính các weak
classifier dựa trên các đặc trưng Haar- Line để hình thành một strong classifier.
Để có thể kết hợp các bộ phân loại yếu, Adaboost sử dụng một trọng số
(weight) để đánh dấu các mẫu khó nhận dạng. Trong quá trình huấn luyện, cứ
mỗi weak classifier được xây dựng, thuật toán sẽ tiến hành cập nhật lại trọng số
để chuẩn bị cho việc xây dựng weak classifier tiếp theo: tăng trọng số của các
mẫu bị nhận dạng sai và giảm trọng số của các mẫu được nhận dạng đúng bởi
weak classifier vừa xây dựng. Bằng cách này, các weak classifier sau có thể tập
11

SVTH: Lê Thanh Nghị - MSV: 0541060137
GVHD: T.S Phạm Văn Hà


Khoa CNTT


Nghiên cứu các kỹ thuật phát hiện mặt người

trung vào các mẫu mà các weak classifier trước đó chưa thực hiện tốt. Sau cùng
các weak classifier sẽ được kết hợp tùy theo mức độ ‘tốt’ của chúng để tạo nên
một strong classifier.
1 Các weak classifiers hk(x) là các bộ phân loại yếu, được biểu diễn như sau:
2

3
4
5
6
7

Trong đó:
X : mẫu hay cửa sổ con cần xét ( X = (x1,x2,…,xn) là vector đặc trưng của mẫu)
Ok: ngưỡng (O = teta)
fk: giá trị của đặc trưng Haar-like
pk: hệ số quyết định chiều của bất phương trình
Công thức trên có thể diễn giải như sau: Nếu giá trị đặc trưng của mẫu cho bởi
hàm đánh giá của bộ phân loại vượt qua một ngưỡng cho trước thì mẫu đấy là
khuôn mặt ( gọi là object : đối tượng cần nhận dạng ), ngược lại thì mẫu là
background ( không phải là đối tượng ).

3.1.2 Thuật toán Adaboost:
1. Cho một tập gồm n mẫu có đánh dấu (x 1,y1), (x2,y2),… (xn,yn) với xk ∈ (xk1, xk2,
… , xkm) là vector đặc trưng và yk ∈ (-1, 1) là nhãn của mẫu (1 ứng với object,
-1 ứng với background).
2. Khởi tạo trọng số ban đầu cho tất cả các mẫu: với m là số mẫu đúng (ứng với

object và y = 1) và l là số mẫu sai (ứng với background và y = -1).

3. Xây dựng T weak classifiers
Lặp t = 1, …, T
• Với mỗi đặc trưng trong vector đặc trưng, xây dựng một weak
classifier hj với ngưỡng θj và lỗi εj.

• Chọn ra hj với εj nhỏ nhất, ta được ht:
• Cập nhật lại trọng số:

12

SVTH: Lê Thanh Nghị - MSV: 0541060137
GVHD: T.S Phạm Văn Hà


Khoa CNTT

Nghiên cứu các kỹ thuật phát hiện mặt người

• Trong đó:

: Hệ số dùng để đưa

về đoạn [0,1] (normalization factor)

Strong classifier được xây dựng :

Sơ đồ khối
Tập các mẫu

Mẫu
sai

Tập các mẫu và
trọng số

Bắt đầu
huấn luyện

Khởi tạo tập đặc
trưng ban đầu

Mẫu
đúng
Xác định các đặc
trưng trong từng
mẫu, xây dựng các
bộ phân loại yếu
tương ứng
Cập nhật lại trọng số

Đặc trưng
haar-like

Tính toán giá trị lỗi
cho mỗi đặc trưng
(false alarm)

Sai
Kết thúc,

strong
classifier
đuợc xây
dựng

Xác định ngưỡng

Đúng

False alarm ≤
max false alarm

Chọn weak
classifier có giá trị
lỗi bé nhất

Lưu weak
classifier
được chọn

Hình 3.2: Sơ đồ khối xây dựng bộ phân loại
Quá trình huấn luyện bộ phân loại được thực hiện bằng một vòng lặp mà ở
mỗi bước lặp, thuật toán sẽ chọn ra weak classifier h t thực hiện việc phân loại với
lỗi εt nhỏ nhất (do đó sẽ là bộ phân loại tốt nhất) để bổ sung vào strong classifier.
Mỗi khi chọn được 1 bộ phân loại h t, Adaboost sẽ tính giá trị α t theo công thức ở
trên. αt cũng được chọn trên nguyên tắc làm giảm thiểu giá trị lỗi ε t.
Hệ số αt nói lên mức độ quan trọng của ht:
13

SVTH: Lê Thanh Nghị - MSV: 0541060137

GVHD: T.S Phạm Văn Hà


Khoa CNTT

Nghiên cứu các kỹ thuật phát hiện mặt người

• Trong công thức của bộ phân loại H(x):

Ta thấy tất cả các bộ phân loại h t đều có đóng góp vào kết quả của bộ
phân loại H(x), và mức độ đóng góp của chúng phụ thuộc vào giá trị α t
tương ứng: ht với αt càng lớn thì nó càng có vài trò quan trọng trong H(x).
• Trong công thức tính αt:

Dễ thấy giá trị αt tỉ lệ nghịch với εt. Bởi vì ht được chọn với tiêu chí đạt εt
nhỏ nhất, do đó nó sẽ đảm bảo giá trị αt lớn nhất.
Sau khi tính được giá trị α t, Adaboost tiến hành cập nhật lại trọng số của các
mẫu: tăng trọng số các mẫu mà ht phân loại sai, giảm trọng số các mẫu mà h t phân
loại đúng. Bằng cách này, trọng số của mẫu phản ánh được mức độ khó nhận dạng
của mẫu đó và ht+1 sẽ ưu tiên học cách phân loại những mẫu này.
Vòng lặp xây dựng strong classifier sẽ dừng lại sau T lần lặp. Trong thực tế cài
đặt (thư viện OpenCV của Intel), người ta ít sử dụng giá trị T vì không có công thức
nào đảm bảo tính được giá trị T tối ưu cho quá trình huấn luyện. Thay vào đó,
người ta sử dụng giá trị max false positive hay max false alarm (tỉ lệ nhận dạng sai
tối đa các mẫu background). Tỉ lệ này của bộ phân loại cần xây dựng không được
phép vượt quá giá trị này. Khi đó, qua các lần lặp, false alarm của strong classifier
Ht(x) xây dựng được (tại lần lặp thứ t) sẽ giảm dần, và vòng lặp kết thúc khi tỉ lệ
này thấp hơn max false alarm.
3.2Các đặc trưng Haar-like
Viola và Jones dùng 4 đặc trưng cơ bản [20] để xác định khuôn mặt người.

Mỗi đặc trưng Haar–like là sự kết hợp của hai hay ba hình chữ nhật "trắng" hay
"đen" như trong hình sau:

Hình 3.3: 4 đặc trưng Haar-like cơ bản

14

SVTH: Lê Thanh Nghị - MSV: 0541060137
GVHD: T.S Phạm Văn Hà


Khoa CNTT

Nghiên cứu các kỹ thuật phát hiện mặt người

Để áp dụng các đặt trưng này vào việc bài toán xác định mặt người, 4 đặt
trưng Haar-like cơ bản được mở rộng ra, và được chia làm 3 tập đặc trưng như
sau:
1. Đặc trưng cạnh (edge features):

2. Đặc trưng đường (line features):

3. Đặc trưng xung quanh tâm (center-surround features):

Hình 3.4: Các đặc trưng mở rộng của các đặc trưng Haar-like cơ sở
Lợi ích của các đặc trưng Haar-like là nó diễn đạt được tri thức về các đối
tượng trong ảnh (bởi vì nó biểu diễn mối liên hệ giữa các bộ phận của đối tượng),
điều mà bản thân từng điểm ảnh không diễn đạt được. Để tính giá trị các đặc trưng
haar-like, ta tính sự chênh lệch giữa tổng của các pixel của các vùng đen và các
vùng trắng như trong công thức sau:

f(x) = Tổngvùng đen(pixel) - Tổngvùng trắng(pixel)
Như vậy ta có thể thấy rằng, để tính các giá trị của đặc trưng Haar-like, ta
phải tính tổng của các vùng pixel trên ảnh. Nhưng để tính toán các giá trị của các
đặc trưng Haar-like cho tất cả các vị trí trên ảnh đòi hỏi chi phí tính toán khá lớn,
không đáp ứng được cho các ứng dụng đòi hỏi tính run-time. Do đó Viola và Jones
đưa ra một khái niệm gọi là Integral Image để tính toán nhanh cho khác feature cơ
bản. Sau này, Lienhart kế thừa gọi Integral Image là SAT – Summed Area Table và
đưa ra thêm khái niệm RSAT – Rotated Summed Area Table dùng để tính toán
nhanh cho các đặc trưng xoay 1 góc 45 o. Integral Image là một mảng 2 chiều với
kích thước bằng với kích của ảnh cần tính các đặc trưng Haar-like, với mỗi phần tử
của mảng này được tính bằng cách tính tổng của điểm ảnh phía trên (dòng-1) và
bên trái (cột-1) của nó. Bắt đầu từ vị trí trên, bên trái đến vị trí dưới, phải của ảnh,
15

SVTH: Lê Thanh Nghị - MSV: 0541060137
GVHD: T.S Phạm Văn Hà


Khoa CNTT

Nghiên cứu các kỹ thuật phát hiện mặt người

việc tính toán này đơn thuần chỉ đựa trên phép cộng số nguyên đơn giản, do đó tốc
độ thực hiện rất nhanh.

P(x,y)

Hình 3.5: Cách tính Integral Image của ảnh
Sau khi đã tính được Integral Image, việc tính tổng điểm ảnh của một vùng
bất kỳ nào đó trên ảnh thực hiện rất đơn giản theo cách sau: (Giả sử ta cần tính

tổng điểm ảnh của vùng D như trong hình 11):
D = A + B + C + D – (A+B) – (A+C) + A
Với A + B + C + D chính là giá trị tại điểm P4 trên Integral Image, tương tự
như vậy A+B là giá trị tại điểm P2, A+C là giá trị tại điểm P3, và A là giá trị tại điểm
P1. Vậy ta có thể viết lại biểu thức tính D ở trên như sau:

A

P1

C

B

P2

D
P3

P4

Hình 3.6: Ví dụ cách tính nhanh tổng các điểm ảnh của vùng D trên ảnh
B
2

A
D

RSAT(x,y)
(a)


1

C
3

4

(b)

Hình 3.7: Ví dụ cách tính nhanh tổng điểm ảnh của vùng D trên
ảnh với các đặc trưng xoay 45o

16

SVTH: Lê Thanh Nghị - MSV: 0541060137
GVHD: T.S Phạm Văn Hà


Khoa CNTT

Nghiên cứu các kỹ thuật phát hiện mặt người

Với các đặc trưng Haar-like xoay 45 o Integral Image tại một điểm (x, y) được
tính theo công thức:

Tổng pixel của một vùng bất kỳ trên ảnh vẫn được tính theo cách sau:
D = A + B + C + D – (A+B) – (A+C) + A
Như vậy tổng các điểm ảnh trong một hình chữ nhật (kể cả trường hợp xoay
45º) bất kì đều có thể được tính nhanh dựa trên integral image tại 4 đỉnh của nó :

Sum (D ) = .4 - 2 – 3 + 1

3.3 Cascade of Classifiers
Ta thấy quá trình huấn luyện, bộ phân loại phải duyệt qua tất cả các đặc trưng
của các mẫu trong tập training. Việc này tốn rất nhiều thời gian. Tuy nhiên, trong
các mẫu đưa vào, không phải mẫu nào cũng thuộc loại khó nhận dạng, có những
mẫu background rất dễ nhận ra (ta gọi đây là những mẫu background đơn giản).
Đối với những mẫu này, ta chỉ cần xét một hay vài đặc trưng đơn giản là có thể
nhận diện được chứ không cần xét tất cả các đặc trưng. Nhưng đối với các bộ phân
loại thông thường thì cho dù mẫu cần nhận dạng là dễ hay khó thì nó vẫn sẽ xét tất
cả các đặc trưng mà nó rút ra được trong quá trình học. Do đó, chúng tốn thời gian
xử lý một cách không cần thiết.
Cascade of Classifiers được xây dựng chính là nhằm rút ngắn thời gian xử lý,
giảm thiểu false alarm cho bộ phân loại. Cascade tree gồm nhiều stage (hay còn gọi
là layer), mỗi stage của cây sẽ là một stage classifier. Một mẫu để được phân loại là
đối tượng thì nó cần phải đi qua hết tất cả các stages của cây. Các stage classifiers ở
stage sau được huấn luyện bằng những mẫu negative mà stage classifier trước nó
nhận dạng sai, tức là nó sẽ tập trung học từ các mẫu background khó hơn, do đó sự
kết hợp các stage classifiers này lại sẽ giúp bộ phân loại có false alarm thấp. Với cấu
trúc này, những mẫu background dễ nhận diện sẽ bị loại ngay từ những stages đầu
tiên, giúp đáp ứng tốt nhất đối với độ phức tạp gia tăng của các mẫu đưa vào, đồng
thời giúp rút ngắn thời gian xử lý.
Thuật toán cascade traning:
1.

Gọi:
F là giá trị false alarm và d là độ chính xác của weak classifier ở mỗi stage
17

SVTH: Lê Thanh Nghị - MSV: 0541060137

GVHD: T.S Phạm Văn Hà


Khoa CNTT

2.
3.

Nghiên cứu các kỹ thuật phát hiện mặt người

Ftarget: Giá trị max false alarm.
P, N là số lượng mẫu positive và negative.
Pi, Ni là tập positive và negative cho bộ phân lớp ở tầng thứ i.
Fi, Di: Giá trị false alarm và độ chính xác của cascade trước khi đến tầng thứ
i.
Khởi tạo i=0; F0=1.0; D0 = 1.0
Lặp: while Fi>Ftarget
• i = i+1;
• Huấn luyện bộ phân loại hi từ tập Pi và Ni với detection rate d và max
false alarm f. Thêm hi vào cây phân lớp.
• Dùng cây phân lớp hiện có để tính Fi: Duyệt qua N mẫu negative cho đến
khi nào tìm đủ n mẫu mà cây phân lớp hiện có phân loại sai. (
• N :=

• Nếu Fi >Ftarget
N = { số mẫu sai ở stage hiện tại phân loại sai }.
P = { số mẫu positive mà stage hiện tại phân loại dúng }
Minh họa thuật toán cascade training:
stage 1


……

2

N

N-1

hitrate = hN
h

h

1-f

1-f

1-f

h

falsealarms = fN
1-f

Input pattern classified as a non-object
Hình 3.8: Huấn luyện cascade N lớp
Hình 3.8 minh họa sự huấn luyện của một cascade gồm N stages. Ở mỗi stage,
weak classifier tương ứng sẽ được huấn luyện sao cho độ chính xác của nó là h và
false alarm bằng f.


3.4 Cascade of boosting classfiers
Cascade of boosting classifiers là mô hình cascade of classifiers với mỗi
classifier được xây dựng bằng Adaboost sử dụng haar-like.

18

SVTH: Lê Thanh Nghị - MSV: 0541060137
GVHD: T.S Phạm Văn Hà


Khoa CNTT

Nghiên cứu các kỹ thuật phát hiện mặt người

Y

I

N

Y

N

N

Y

N


C
L
A
S
S

NON-CLASS

Hình 3.9: Cascade of boosting classifiers
Viola và Jones đã sử dụng rất thành công cascade of boosting classifiers cho
bài toán nhận dạng mặt người. Với tập huấn luyện gồm 4196 hình mặt người được
đưa về ảnh grayscale kích thước 24x24 và 9500 hình background, hai ôngđã xây
dựng cấu trúc cascade tree gồm 38 stage với tổng cộng 6060 đặc trưng haar-like.
Thực nghiệm đã cho thấy classifier ở stage đầu tiên sử dụng 2 đặc trưng và loại
được khoảng 50% mẫu background (không phải mặt người) và có độ chính xác là
d = 100%. Classifier ở stage thứ 2 sử dụng 10 đặc trưng loại được 80% mẫu
background với độ chính xác vẫn là 100%. Hệ thống này được so sánh với hệ thống
của Rowley-Baluja-Kanade (sử dụng mạng neural), Schneiderman-Kanade (sử
dụng phương pháp thống kê), và cho thấy tỉ lệ nhận dạng là ngang nhau, trong khi
hệ thống của Viola và Jones chạy nhanh hơn đến 15 lần so với hệ thống của RowleyBaluja-Kanade và nhanh hơn 600 lần hệ thống của Schneiderman-Kanade.
Lý do mà cấu trúc cascade đạt tốc độ nhận dạng nhanh chính là nhờ nó sớm loại bỏ
được các mẫu background đơn giản (thường có số lượng lớn hơn nhiều so với các
mẫu chứa object – các mẫu chưa khuôn mặt cần tiến hành nhận dạng). Bên cạnh
đó, hệ thống của Viola và Jones cũng đạt được độ chính xác khá cao nhờ vào thuật
toán cascade training, các bộ nhận dạng được huấn luyện bằng AdaBoost với đặc
trưng Haar-like mô tả tốt thông tin đối tượng, cùng với cách Integral Image tính
nhanh các đặc trưng, không làm giảm tốc độ nhận dạng của hệ thống. Như vậy, mô
hình Cascade of Boosted Classifiers thật sự là một cách tiếp cận tốt cả về tốc độ lẫn
khả năng nhận dạng, rất phù hợp với bài nhận dạng mặt người.


19

SVTH: Lê Thanh Nghị - MSV: 0541060137
GVHD: T.S Phạm Văn Hà


Khoa CNTT

Nghiên cứu các kỹ thuật phát hiện mặt người

CHƯƠNG 4: XÂY DỰNG CHƯƠNG TRÌNH ỨNG DỤNG
Phát hiện mặt người trong ảnh có nhiều ứng dụng trong cuộc sống, tuy nhiên,
trong bài này, bọn em chỉ xây dựng một chương trình nhỏ để minh họa cho các lý
thuyết ở trên. Cụ thể đấy là một chương trình phát hiện mặt người trong ảnh được
viết trên nền visual c ++ của Microsoft, sử dụng thư viện mã nguồn mở OpenCV của
Intel.

4.1 Sơ lược về OpenCV
Open CV là thư viện mã nguồn mở của intel về thị giác máy tính. Nó cung cấp
một bộ mã nguồn bao gồm hàng trăm hàm, lớp dựa trên các thuật toán về xử lý
ảnh cũng như Computer vision dùng ngôn ngữ C/C++. Open CV thể hiện sự đa dạng
của trí tuệ nhân tạo. Được ứng dụng nhiều trong các bài toán nhận dạng mặt, dò
tìm mặt, phát hiện mặt, lọc Kalman, …
Cấu trúc tổng quan của OpenCV bao gồm 5 phần chính. 4 trong 5 phần đó
được chỉ ra trong hình vẽ dưới.
CV

MLL

HighGUI


Các hàm về xử lý
ảnh và giải thuật về
thị giác máy tính

Các thuật toán học
máy, bao gồm các bộ
phân cụm, phân loại
thống kê

Các hàm và thủ tục
làm việc với file ảnh
và file video

CXCORE
Các cấu trúc dữ liệu cơ bản, cấu trúc XML, các hàm về đồ
họa …
Hình 4.1 : Cấu trúc cơ bản của OpenCV
Phần CV bao gồm các thư viện cơ bản về xử lý ảnh và các giải thuật về thị giác
máy tính. ML 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
20

SVTH: Lê Thanh Nghị - MSV: 0541060137
GVHD: T.S Phạm Văn Hà


Khoa CNTT


Nghiên cứu các kỹ thuật phát hiện mặt người

cùng là CvAux, phần này bao gồm cá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 …).

4.2

Tổng quan về một hệ thống xác định mặt người trong ảnh
Ước lượng các đặc trưng
Tính các đặc trưng
nhanh từ nhiều tỉ lệ

Ảnh

Các hàm Haar cơ bản

Integral Image

gốc

Cấu trúc phân tầng
(Cascade of classifier)

I

C1

Y


C2
N

N

Cn
N

NON-CLASS

Y

C
L
A
S
S

Số lượng lớn
các đặc trưng

Một tập nhỏ
các đặc trưng

Chọn đặc trưng

Điều chỉnh
thông số
Adaboost


Quyết định kết quả
Hình 4.2: Tổng quan về hệ thống phát hiện mặt người trong ảnh
Về cơ bản, từ ảnh gốc ban đầu, hệ thống sẽ chia ảnh thành vô số vùng nhỏ để
tính các đặc trưng, sau đấy đưa các đặc trưng. Tiếp theo, chương trình sẽ xác định
các vùng khả quan (các ứng viên) có thể là khuôn mặt, cuối cùng các ứng viên này
sẽ được đưa vào một bộ phân loại để tiến hành xác định ứng viên nào là mặt người.

4.3 Phân tích thiết kế hệ thống phát hiện mặt người
4.3.1 Phân tích
Nhiệm vụ chính của chương trình là dò tìm khuôn mặt từ một bức ảnh.

21

SVTH: Lê Thanh Nghị - MSV: 0541060137
GVHD: T.S Phạm Văn Hà


Khoa CNTT

Nghiên cứu các kỹ thuật phát hiện mặt người
Capture ảnh

0
HỆ THỐNG PHÁT
HIỆN MẶT NGƯỜI
TRONG ẢNH

NGƯỜI
DÙNG


Hình 4.3: Biểu đồ ngữ cảnh của hệ thống

Như vậy các chức năng chương trình bao gồm:
• Đọc các file ảnh
• Phát hiện các nhiều khuôn mặt có trong bức ảnh

4.3.2 Thiết kế hệ thống
Với các chức năng ở trên, chương trình được chia thành thành 2 phần chính:
Phần xử lý đầu vào, phần phát hiện khuôn mặt và phần xử lý đầu ra.
Đầu vào
(ảnh)

Phát hiện
nhanh khuôn
mặt

Hình 4.4: Sơ đồ khối chương trình
a.Xử lý đầu vào
Chương trình nhận đầu vào là file ảnh, video hoặc webcam, tuy nhiên, việc
phát hiện khuôn mặt được thực hiện trên các bức ảnh, do đó, với đầu vào là
webcam hay file video, ta phải chuyển thành các ảnh tĩnh và xử lý trên từng ảnh
22

SVTH: Lê Thanh Nghị - MSV: 0541060137
GVHD: T.S Phạm Văn Hà


Khoa CNTT

Nghiên cứu các kỹ thuật phát hiện mặt người


tĩnh. Sau khi đã có ảnh đầu vào rồi thì sẽ chuyển ảnh cho giai đoạn xử lý tiếp theo,
đó là phát hiện các khuôn mặt có trong ảnh .
b.Phát hiện khuôn mặt
Phần này xử lý chính nghiệp vụ của hệ thống. Sau khi có ảnh truyền vào, hệ
thống sẽ thực hiện chức năng phát hiện khuôn mặt có trong ảnh.
Việc phát hiện khuôn mặt được thực hiện nhanh bằng thuật toán Adaboost
thông qua hàm cvHaarDetectObjects() của OpenCV. Hàm này thực hiện việc phát
hiện đối tượng dựa trên các đặc trưng haar-like, cụ thể là nhờ vào một bộ Cascade
được truyền vào cho hàm. Bộ Cascade được xây dựng theo dạng cây (tree-node) và
đã được huấn luyện từ trước.
Việc huấn luyện bộ Cascade có thể thực hiện từ những dữ liệu thu thập được để
phục vụ cho quá trình nhận dạng. Ví dụ, muốn nhận dạng một người A, ta thu
thập các ảnh khuôn mặt của người A với nhiều tư thế, góc chụp và điều kiện
chụp khác nhau, sau đấy cho bộ nhận dạng học theo thuật toán Cascade
training. Tuy nhiên việc nhận dạng khuôn mặt là một công việc khó và tốn nhiều
thời gian, do đó, em không thực hiện nó trong khóa luận của mình.
HỆ THỐNG PHÁT HIỆN
MẶT NGƯỜI TRONG ẢNH

1.Xử lý đầu vào

2.Phát hiện nhanh
khuôn mặt bằng
Adaboost

1.1. Capture ảnh

3. Xử lý đầu ra
3.1. Lưu ảnh vào thư mục

thích hợp trên máy
3.2.Lưu ảnh vào CSDL

Hình 4.5: Biểu đồ phân rã chức năng.
4.3.3 Thiết kế giao diện
Dưới đây là hình ảnh giao diện mà em sử dụng.

23

SVTH: Lê Thanh Nghị - MSV: 0541060137
GVHD: T.S Phạm Văn Hà


Khoa CNTT

Nghiên cứu các kỹ thuật phát hiện mặt người

Hình 4.6: Giao diện chương trình demo
Nó gồm có 1 khung ảnh (picture box), 1 textbox lưu cho biết đường dẫn của ảnh, 2
button “duyệt ảnh” để tìm ảnh và “thực hiện” để phát hiện mặt người trong ảnh, 1
nhãn Thông báo (labText) để cho biết có bao nhiêu khuôn mặt được phát hiện.
Về nội dung mã nguồn của 2 button trên.
//Nút Duyệt ảnh
private: System::Void btnBrowse_Click(System::Object^ sender,
System::EventArgs^ e) {
Stream^ myStream;
OpenFileDialog^ openFileDialog1 = gcnew OpenFileDialog;
openFileDialog1->InitialDirectory = "..\\Anh";
openFileDialog1->Filter = "Images files (*.jpeg)|*.png|All files (*.*)|*.*";
openFileDialog1->FilterIndex = 2;

openFileDialog1->RestoreDirectory = true;
if ( openFileDialog1->ShowDialog() ==
System::Windows::Forms::DialogResult::OK )
{
if ( (myStream = openFileDialog1->OpenFile()) != nullptr )
{
// Insert code to read the stream here.
FilePath = openFileDialog1->FileName;
picBox->Load(FilePath);

24

SVTH: Lê Thanh Nghị - MSV: 0541060137
GVHD: T.S Phạm Văn Hà


Khoa CNTT

Nghiên cứu các kỹ thuật phát hiện mặt người

txtNotice->Text=FilePath;
//picBox->BackgroundImage =
System::Drawing::Image::FromFile(FilePath);
// Dung cau lenh o tren thi anh co the ko duoc vua man
hinh.
myStream->Close();
}
}
}


Khi nhấp chuột vào nút Duyệt ảnh thì nó sẽ hiện ra 1 cửa sổ cho phép người dùng
tìm đến 1 bức ảnh nào đó. Sau khi chọn và ấn OK thì nó sẽ load ảnh vào picturebox
(em đặt là picBox) và đường dẫn sẽ được hiển thị lên textbox (em đặt là txtNotice).
Vì em để thuộc tính Size mode của picBox là Stretch nên nó sẽ tự động chỉnh ảnh
sao cho lấp đầy kích thước của picBox.
//Nút Thực hiện
private: System::Void butDetec_Click(System::Object^ sender,
System::EventArgs^ e) {
// Khởi tạo
CvHaarClassifierCascade * pCascade = 0; //con trỏ nhận
diện nằm giữ data trong file XML
CvMemStorage * pStorage = 0; // Khởi tạo bộ nhớ đệm
CvSeq * pFaceRectSeq;
int i;
System::String ^ str = txtNotice->Text;
char* str2 =
(char*)Marshal::StringToHGlobalAnsi(str).ToPointer();
IplImage * pInpImg =
cvLoadImage(str2,CV_LOAD_IMAGE_COLOR);
pStorage = cvCreateMemStorage(0);
pCascade = (CvHaarClassifierCascade
*)cvLoad(("..\\faceDetec\\haarcascade_frontalface_alt2.xml"),0,0,0);
/*if (!pStorage || !pCascade )
{
printf("Khoi tao that bai: %s \n",
(!pInpImg)? "khong the load file hinh anh" :
(!pCascade)? "khong the load file xml -- "
"kiem tra dung duong dan":"sai duong dan");
exit(-1);
}*/

//Nhận dạng mặt trong ảnh
pFaceRectSeq = cvHaarDetectObjects(
pInpImg,
pCascade,
pStorage,
1.1,
3,
CV_HAAR_DO_CANNY_PRUNING,
cvSize(0,0));
//Vẽ hình chủ nhật xung quanh khuôn mặt
for (i=0;i<(pFaceRectSeq ? pFaceRectSeq->total:0);i++)
{
CvRect * r = (CvRect*)cvGetSeqElem(pFaceRectSeq,i);
CvPoint pt1 = {r->x,r->y};
CvPoint pt2 = {r->x + r->width,r->y + r->height};
cvRectangle(pInpImg,pt1,pt2,CV_RGB(255,0,0),3,4,0);
}

25

SVTH: Lê Thanh Nghị - MSV: 0541060137
GVHD: T.S Phạm Văn Hà


×