Thiết kế và chế tạo cánh tay robot 5 bậc tự do phân loại sản phẩm ứng dụng cô...
Báo cáo
1. ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
BÁO CÁO
Project2
NHẬN DẠNG ẢNH SỬ DỤNG THUẬT TOÁN PCA
Nhóm sinh viên thực hiện :
Đỗ Hồng Cường mssv: 20101209
Bùi Văn Cường mssv: 20101002
Giảng viên hướng dẩn : ThS. Đỗ Văn Uy
Hà Nội: 04-2013
2. Nhận dạng ảnh sử dụng thuật toán PCA
MỤC LỤC
LỜI MỞ ĐẦU ....................................................................................................4
CHƯƠNG I : THƯ VIỆN OPENCV..................................................................5
I. Thư viện mã nguồn mở Opencv. ......................................................... 5
II. Tổ chức thư viện OpenCV ................................................................... 7
III. Hàm cho một số chức năng cụ thể .................................................... 9
1.1. Load ảnh.................................................................................................9
1.2. Chức năng Lọc Nhiễu............................................................................ 10
1.3. Đổi màu ảnh. ........................................................................................ 12
1.4. Đọc ảnh từ VIDEO................................................................................ 12
1.5. Đọc ảnh từ Camara................................................................................ 13
CHƯƠNG II : THUẬT TOÁN PCA .............................................................. 14
I. Ý tưởng................................................................................................. 14
II. Phân tích thành phần chính PCA ..................................................... 15
III. Hình ảnh minh họa ............................................................................ 19
CHƯƠNG III : MÔ PHỎNG CHƯƠNG TRÌNH .............................................. 24
I. Công cụ sử dụng và một số file liên quan.......................................... 24
1.1. Thư viện Opencv 2.4.3......................................................................... 24
1.2. Công cụ Visual studio C++ 2010 Express ............................................. 24
1.3. Bộ dữ liệu sử dụng............................................................................... 24
Project2 – GVHD : Đỗ Văn Uy Page 2
3. Nhận dạng ảnh sử dụng thuật toán PCA
II, Các biến , hàm trong sử dụng trong chương trình ............................ 26
2.1. Chức năng tìm khuôn mặt giống với khuôn mặt cho trước ...................... 26
2.2. Chức năng tìm và đánh dấu khuôn mặt có trong ảnh............................. 27
III. Chạy thử chương trình ....................................................................... 28
KẾT LUẬN ...................................................................................................... 34
TÀI LIỆU THAM KHẢO ................................................................................. 35
Project2 – GVHD : Đỗ Văn Uy Page 3
4. Nhận dạng ảnh sử dụng thuật toán PCA
LỜI MỞ ĐẦU
Hiện nay , cùng với sự phát triển của xã hội , vấn đề an ninh, bảo mật
đang được yêu cầu khắt khe tại mọi quốc gia trên thế giới . Các hệ thống
nhận dạng con người, đồ vật .... được ra đời và phát triển với độ tin cậy
ngày càng cao . Với cách tiếp cận đối tượng nhận dạng theo phương
pháp này , chúng ta có thể thu nhận được nhiều thông tin từ đối tượng
hơn, mà không cần tác động nhiều đến đối tượng cũng vẫn đảm bảo tính
chính xác , an toàn , thuận tiện .
Một trong những bài toán được xã hội quan tâm hiện nay là nhận
dạng khuôn mặt . Chúng ta có thể liệt kê ra một số thuật toán cụ thể để
giải quyết vấn đề nhận dạng như : PCA, LDA, ICA, EP, EBGM .... Tuy
nhiên vì điều kiện thời gian nên nhóm em chỉ tập trung vào tìm hiểu và
làm một ứng dụng nhỏ sử dụng thuật toán đang khá nổi tiếng và thông
dụng hiện nay là thuật toán PCA (Principal component analysis) – phân
tích thành phần chính .
Nội dung trình bày trong báo cáo này ,nhóm em sẽ đi sâu khai thác
thuật toán PCA để giải quyết hai vấn đề chính :
Thứ nhất : Xác định vị trí những khuôn mặt trong một bức ảnh
Thứ hai : Tìm một khuôn mặt giống với khuôn mặt cho trước .
Project2 – GVHD : Đỗ Văn Uy Page 4
5. Nhận dạng ảnh sử dụng thuật toán PCA
CHƯƠNG I : THƯ VIỆN OPENCV
I. Giới Thiệu Về Thư Viện Mã Nguồn Mở OpenCV.
OpenCV (Open Computer Vision library) do Intel phát triển, được
giới thiệu năm 1999 và hoàn thiện thành phiên bản 1.0 năm 2006. Thư
viện OpenCV - gồm khoảng 500 hàm – được viết bằng ngôn ngữ lập
trình C và tương thích với các hệ điều hành Windows, Linux, Mac OS...
đóng vai trò xác lập chuẩn giao tiếp, dữ liệu, thuật toán cho lĩnh vực CV
và tạo điều kiện cho mọi người tham gia nghiên cứu và phát triển ứng
dụng.
Trước OpenCV không có một công cụ chuẩn nào cho lĩnh vực xử
lý ảnh. Các đoạn code đơn lẻ do các nhà nghiên cứu tự viết thường
không thống nhất và không ổn định. Các bộ công cụ thương mại như
Matlab, Simulink, Halcon, v.v... lại có giá cao chỉ thích hợp cho các
công ty phát triển các ứng dụng lớn. Ngoài ra còn có các giải pháp kèm
theo thiết bị phần cứng mà phần lớn là mã đóng và được thiết kế riêng
cho từng thiết bị, rất khó khăn cho việc mở rộng ứng dụng.
OpenCV là công cụ hữu ích cho những người bước đầu làm quen
với xử lý ảnh số vì các ưu điểm sau:
Project2 – GVHD : Đỗ Văn Uy Page 5
6. Nhận dạng ảnh sử dụng thuật toán PCA
- OpenCV là công cụ chuyên dụng: Được Intel phát triển theo
hướng tối ưu hóa cho các ứng dụng xử lí và phân tích ảnh, với cấu trúc
dữ liệu hợp lý, thư viện tạo giao diện, truy xuất thiết bị phần cứng được
tích hợp sẵn. OpenCV thích hợp để phát triển nhanh ứng dụng.
- OpenCV là công cụ mã nguồn mở: Không chỉ là công cụ miễn phí
(với BSD license), việc được xây dựng trên mã nguồn mở giúp OpenCV
trở thành công cụ thích hợp cho nghiên cứu và phát triển, với khả năng
thay đổi và mở rộng các mô hình, thuật toán.
- OpenCV đã được sử dụng rộng rãi: Từ năm 1999 đến nay,
OpenCV đã thu hút được một lượng lớn người dùng, trong đó có các
công ty lớn như Microsoft, IBM, Sony, Siemens, Google và các nhóm
nghiên cứu ở Standford, MIT, CMU, Cambridge... Nhiều forum hỗ trợ
và cộng đồng người dùng đã được thành lập, tạo nên kênh thông tin rộng
lớn hữu ích cho việc tham khảo tra cứu.
Project2 – GVHD : Đỗ Văn Uy Page 6
7. Nhận dạng ảnh sử dụng thuật toán PCA
Hình 1.8 Nhận dạng khuôn mặt với Haar classifier
II. Tổ chức thư viện OpenCV
Hình 1.7 Tổ chức thư viện OpenCV
- CXCORE chứa các định nghĩa kiểu dữ liệu cơ sở. Ví dụ, các cấu
trúc dữ liệu cho ảnh, điểm và hình chữ nhật được định nghĩa trong
cxtypes.h . CXCORE cũng chứa đại số tuyến tính và phương pháp thống
kê, chức năng duy trì và điều khiển chuỗi. Một số ít, các chức năng đồ
họa để vẽ trên ảnh cũng được đặt ở đây.
- CV chứa các thuật toán về xử lý ảnh và định kích cỡ camera. Các
chức năng hình họa máy tính cũng được đặt ở đây.
Project2 – GVHD : Đỗ Văn Uy Page 7
8. Nhận dạng ảnh sử dụng thuật toán PCA
- CVAUX được mô tả trong tài liệu của OpenCV như chứa các mã
cũ và thứ nghiệm. Tuy nhiên, các giao diện đơn cho sự nhận diện ảnh ở
trong module này. Code sau này chúng được chuyên dụng cho nhận
diện mặt và chúng được ứng dụng rộng rãi cho mục đích đó.
- HIGHGUI và CVCAM được đặt trong cùng thư mục là
“otherlibs”.
+ HIGHGUI : chứa các giao diện vào ra cơ bản, nó cũng chứa các
khả năng cửa sổ mở rộng và vào ra video.
+ CVCAM : chứa các giao diện cho video truy cập qua DirectX
trên nền Windows 32 bits.
Kèm theo thư viện là tài liệu hướng dẫn và các ví dụ mẫu thể hiện
một phần các chức năng của công cụ OpenCV.
Các chức năng của openCV tập trung vào thu thập ảnh, xử lí ảnh và
các thuật toán phân tích dữ liệu ảnh, bao gồm:
- Truy xuất ảnh và phim: đọc ảnh số từ camera, từ file, ghi ảnh và
phim
- Cấu trúc dữ liệu ảnh số và các dữ liệu hỗ trợ cần thiết: ma trận,
vector, chuỗi, xâu và cây
- Xử lí ảnh căn bản: các bộ lọc có sẵn, tìm chi tiết cạnh, góc, chỉnh
đổi màu, phóng to thu nhỏ, và hiệu chỉnh histograms
- Xử lí cấu trúc: tìm viền, nhận chuyển động, thay đổi trong không
gian 3D, đối chiếu bản mẫu, xấp xỉ các đơn vị hình học cơ sở - mặt
phẳng, đa giác, ellipse, đường thẳng...
Project2 – GVHD : Đỗ Văn Uy Page 8
9. Nhận dạng ảnh sử dụng thuật toán PCA
- Phân tích dữ liệu ảnh: nhận dạng thực thể, theo dõi các chi tiết và
phân tích chuyển động
- Tạo giao diện đơn giản: hiển thị ảnh, thao tác bàn phím, chuột,
thanh trượt để chỉnh thông số (nếu cần thiết các bạn có thể tự tạo thêm
các phím điều khiển thông qua thao tác chuột, hoặc tích hợp thêm các
thư viện về giao diện như wxWidgets)
- Chức năng vẽ, chú thích lên ảnh.
III. Hàm cho một số chức năng cụ thể
1.1. Load ảnh.
IplImage: kiểu cấu trúc lưu giữthông tin file ảnh cần load, như: định
dạng, kích thước, dung lượng, màu sắc,…
cvLoadImage(): Hàm load ảnh.
cvNamedWindow():Thiết lập cửa sổ để hiện thị ảnh.
cvShowImage():Hiển thi ảnh.
cvWaitKey(0):Chờ bấm phím bất kỳ để kết thúc chương trình.
cvReleaseImage( ):Xóa ảnh
cvDestroyWindow( ):Xóa cửa sổ.
Project2 – GVHD : Đỗ Văn Uy Page 9
10. Nhận dạng ảnh sử dụng thuật toán PCA
1.2. Chức năng Lọc Nhiễu.
cvCreateImage():Tạo 1 ảnh mới có các thông số tương ưng với ảnh
gốc.
cvSmooth():Thưc hiện bộ lọc trung bình.
cvNamedWindow():Tạo cửa sổ hiển thị ảnh.
Project2 – GVHD : Đỗ Văn Uy Page 10
11. Nhận dạng ảnh sử dụng thuật toán PCA
Project2 – GVHD : Đỗ Văn Uy Page 11
12. Nhận dạng ảnh sử dụng thuật toán PCA
1.3. Đổi màu ảnh.
cvCvtColor():Đổi màu ảnh.
1.4. Đọc ảnh từ VIDEO.
cvNamedWindow( ):Tạo cửa sổ để hiển thị ảnh.
CvCapture:cấu trúc chứa thông tin của File AVI.
cvCreateFileCapture(): Lấy thông số từ File Avi được Load.
Project2 – GVHD : Đỗ Văn Uy Page 12
13. Nhận dạng ảnh sử dụng thuật toán PCA
hệ thống sẽ đọc các ảnh từ đoạn VIDEO và xếp chúng thành một dãy
các ảnh động liên tiếp nhau nên ta cũng có cảm giác như đang xem một
VIDEO.
1.5. Đọc ảnh từ Camara
cvCreateCameraCapture(0): hoạt động tương tự như hàm
cvCreateFileCapture()
Webcam máy tính sẽ bật lên,hệ thống sẽ nhận ảnh từ CAMERA.
Project2 – GVHD : Đỗ Văn Uy Page 13
14. Nhận dạng ảnh sử dụng thuật toán PCA
CHƯƠNG II : THUẬT TOÁN PCA
I. Ý tưởng
Khuôn mặt người có rất nhiều nét để nhận biết , nếu như ta gặp
một người bạn sau một thời gian dài, ta có thể nhận ra ngay người đó
dù những chi tiết cụ thể trên người đó có thể thay đổi như da , mái
tóc. Ta nhận ra ngay người đó không phải vì nhớ được đôi mắt , mũi ,
hay môi , tóc , lông mày mà ta nhận ra vì nhớ được diện mạo của
người đó. Tức là tồn tại một nét tổng thể nào đó để có thể nhận diện ,
thuật toán của ta bắt đầu từ ý tưởng này .
Phân tích thành phần chính (Principal Component Analysis) gọi tắt
là PCA là thuật toán nhận dạng ảnh dựa trên những nét tổng thể của
khuôn mặt .
Ban đầu ta có một tập ảnh khuôn mặt gọi là tập ảnh huấn luyện
(training set) . Giả sử mỗi ảnh có kích thước M*N , ta coi mỗi bức
ảnh này là một vector trong không gian M*N chiều. Bây giờ mỗi
khuôn mặt là một vector , ta thấy những vector này không phân bố
ngẫu nhiên trong không gian ảnh mà phân bố theo một quy luật tương
đối nào đó, ta cI.ó thể nói những vector này nằm trong một không
gian còn gọi là không gian khuôn mặt . Từ những vector trong tập
huấn luyện , ta sẽ tìm một cơ sở trực chuẩn cho không gian khuôn
Project2 – GVHD : Đỗ Văn Uy Page 14
15. Nhận dạng ảnh sử dụng thuật toán PCA
mặt . Những vector thuộc cơ sở này có thể coi là những vector mang
những nét tổng thể đặc trưng về khuôn mặt .
II. Phân tích thành phần chính PCA
Giả sử tập huấn luyện có P ảnh , khi đó ta sẽ sở P vector : T1, T2 ..
Tp .
Tính vector ảnh trung bình :
Sự khác biệt giữa những khuôn mặt với ảnh trung bình là những
vector :
Ai = Ti – m , i = 1 ... P
Ý tưởng của việc phân tích thành phần chính là tìm một tập những
vector trực chuẩn uk sao cho những vetor này mô tả tốt nhật sự phân
bố những vector khuôn mặt trong không gian . Những vector uk được
chọn sao cho :
Project2 – GVHD : Đỗ Văn Uy Page 15
16. Nhận dạng ảnh sử dụng thuật toán PCA
Những vector uk và giá trị vô hướng , chính là những vector riêng
và trị riêng tương ứng của ma trận AAT có kích thước M*N x M*N,
do kích thước ma trện này quá lớn nên ta không thể tìm được những
vector riêng và trị riêng trực tiếp được , thay vào đó ta sẽ tìm những
vector riêng của ma trận ATA có kích thước PxP .
Nếu v là một vector riêng của ATA và là trị riêng tương ứng, khi
đó ta có :
ATAv = v <=> AATAv = Av
Tức Av là một trị riêng của ma trận AAT .
Thông thường ta chỉ lấy một số Q vector riêng ứng với Q trị riêng
có giá trị lớn nhất .
Sau khi có các vector riêng của ma trận AAT , ta sẽ chuẩn hóa
chúng để thu được một cơ sở trực chuẩn của không gian mặt .
Đặt L = ATA , tìm V là tập hợp các vector riêng của L, D là tập hợp
các trị riêng tương ứng .
V bao gồm Q vector riêng ứng với những trị riêng lớn hơn một giá trị
nào đó hoặc tương ứng với Q trị riêng lớn nhất trong D .
Project2 – GVHD : Đỗ Văn Uy Page 16
17. Nhận dạng ảnh sử dụng thuật toán PCA
E = AV là tập các vector riêng của AAT . Do đây là những vector
riêng , mà nó lại có dạng khuôn mặt nên còn gọi là Eigenfaces . E là
ma trận M*NxQ , mỗi cột là một vector riêng .
Chuẩn hóa các vector cột trong E (chia mỗi vector cho độ dài của
vector đó ).
Bây giờ ta có thể coi E là một trực chuẩn của không gian khuân
mặt. Với H là bức ảnh có cùng kích thước với tập huấn luyện . Ta sẽ
xét nó có phải là bức ảnh khuôn mặt hay không, cũng như tìm bức
ảnh giống với nó nhất trong tập huấn luyện .
H được xem là một vector trong không gian M*N chiều
Đặt K = H – m với m là vector ảnh trung bình .
Cho V là một không gian có tích vô hướng hữu hạn chiều và W
là một không gian con của V . Giả sử W có một cơ sở trực chuẩn là
{u1,.....,uQ} . Khi đó hình chiếu trực giao của vector u bất kì lên W
được xác định như sau :
Độ dài || u – u0 || được gọi là khoảng cách từ u đến W .
Project2 – GVHD : Đỗ Văn Uy Page 17
18. Nhận dạng ảnh sử dụng thuật toán PCA
Tập hợp ci = <u / ui>, i = 1,...Q được gọi là tọa độ của u0 trong không
gian W .
Tìm C = ETAi là tọa độ của hình chiểu Kf của K lên không gian khuôn
mặt . C là vector cột Q x 1
Với ci = C(i, 1); ei = E( : , i) .
Với Ai là một cột trong ma trận A (tương ứng với bức ảnh Ti trong
tập huấn luyện) . Ta tính Ci = ETAi là tọa độ của hình chiếu Aif của A
lên không gian khuôn mặt .
Ta tính hai đại lượng sau :
S = || K – Kf || xem như là khoảng cách từ bức ảnh H đến không
gian khuôn mặt
Si = || C- Ci || xem như là khoảng cách từ H đến bức ảnh Ti trong
tập huấn luyện
Xét a và b là hai ngưỡng nào đó :
s < a thì H là bức ảnh khuôn mặt (do H đủ gần với không
gian khuôn mặt )
si < b thì Ti là bức ảnh của cùng một người với H (đủ gần với
Ti) .
Vậy là ta có thể tìm được bức ảnh trong tập huấn luyện
giống với bức ảnh H hay xác định đó có phải là bức ảnh
trong tập huấn luyện . Tuy nhiên ảnh H phải có cùng kích
thước với những bức ảnh trong tập huấn luyện . Bây giờ
Project2 – GVHD : Đỗ Văn Uy Page 18
19. Nhận dạng ảnh sử dụng thuật toán PCA
trong một bức ảnh lớn hơn H có nhiều khuôn mặt ta sẽ xác
định vị trí của những khuôn mặt trong bức ảnh .
Tại mỗi vị trí (x, y) trong H , đặt H(x, y) là một vùng
trong H có kích thước M x N tại (x, y) , ta xem ảnh con
H(x, y) là một vector M*N chiều .
K(x, y) = H(x, y) – m
Tìm Kf (x, y) là hình chiếu của K(x, y) lên không gian
khuân mặt .
Tính s(x, y) = || K(x, y) - Kf (x, y)) ||
Tập hợp các giá trị s(x, y) tạo thành một bản đồ khuôn mặt
(face map) của H , từ đó ta có thể xác định vị trí những khuôn
mặt trong ảnh .
III. Hình ảnh minh họa
Trong ví dụ này ta có một tập huấn luyện gồm những khuôn mặt có
kích thước 180 x 200 pixel , dưới đây là một số hình ảnh của những
eigenfaces thu được (lưu ý đây chỉ là các vector trực giao , những
eigenfaces thực sự chính là những vector này được chuẩn hóa )
Project2 – GVHD : Đỗ Văn Uy Page 19
20. Nhận dạng ảnh sử dụng thuật toán PCA
Bây giờ ta chiếu hai bức ảnh lên không gian khuôn mặt này :
Như ta đã thấy nếu bức ảnh là khuân mặt người thì hình chiếu của nó
sẽ khá giống với ảnh gốc , còn khi bức ảnh không phải là người thì hình
Project2 – GVHD : Đỗ Văn Uy Page 20
21. Nhận dạng ảnh sử dụng thuật toán PCA
chiếu sẽ khác với ảnh gốc rất nhiều , do đó khoảng cách từ bức ảnh mặt
người tới không gian mặt sẽ nhỏ hơn rất nhiều so với khoảng cách từ
bức ảnh không phải mặt người tới không gian mặt .
Dưới đây là một ví dụ khác , ta có một tập huấn luyện gồm những bức
ảnh có kích thước 18 x 27 pixel , ta cũng tìm các Eigenfaces và sau đó
tìm các face map của một bứa ảnh để kiểm tra . Trong ví dụ này thì ảnh
con H(x, y) vùng hình chũ nhật có tâm tại (x, y) trên bức ảnh và có kích
thước 18 x 27 pixel .
Project2 – GVHD : Đỗ Văn Uy Page 21
22. Nhận dạng ảnh sử dụng thuật toán PCA
Hình trên là map của bức ảnh ban đầu
Ta thấy vị trí mỗi khuân mặt là những vùng cực tiểu địa phương trên
bức ảnh (là những đốm đen trong những vùng trắng hình chữ nhật).
Bây giờ nếu ta có một cơ sở dữ liệu những ảnh không phải khuân mặt
(ta thường tập trung vào những hình ảnh xung quanh khuân mặt như cổ
áo , một phần của khuôn mặt ...). Tìm face map của bức ảnh ban đầu với
không gian không phải của khuôn mặt này , ta thu được kết quả như sau
Project2 – GVHD : Đỗ Văn Uy Page 22
23. Nhận dạng ảnh sử dụng thuật toán PCA
Hình trên cũng khá giống với face map ứng không gian khuôn mặt
nhưng tại mỗi vùng sáng trên hình chữ nhật thì không hề có tâm ở giữa .
Thực ra từ face map ứng với không gian khuôn mặt , nếu ta có một
thuật toán tốt để tìm những vị trí cực tiểu địa phương thì đã có thể xác
định vị trí các khuôn mặt. Face map ứng với không gian không phải
khuôn mặt chỉ là một cách đơn giản giúp ta tìm chính xác hơn thôi .
Tất cả những điều thu được ở trên chỉ là kết quả hoàn toàn dựa trên lý
thuyết , trong thực tế những thuật toán nhận dạng mặt người đã phát
triển lên rất nhiều từ ý tưởng của thuật toán PCA mới có được độ chính
xác yêu cầu .
.
Project2 – GVHD : Đỗ Văn Uy Page 23
24. Nhận dạng ảnh sử dụng thuật toán PCA
CHƯƠNG III : MÔ PHỎNG CHƯƠNG TRÌNH
I. Công cụ sử dụng và một số file liên quan
1.1. Thư viện Opencv 2.4.3
- Là thư viện hỗ trợ xử lý hình ảnh
1.2. Công cụ Visual studio C++ 2010 Express
- Chúng ta sẽ sử dụng công cụ này để viết ứng dụng bằng
C .
- Công cụ này cần được cộng thêm thư viện của opencv
2.4.3
1.3. Bộ dữ liệu sử dụng
- Hai file :
+ train.txt : lưu thông tin những ảnh được đưa ra để
huấn luyện (bao gồm chỉ số ảnh và đường dẫn đến ảnh)
Project2 – GVHD : Đỗ Văn Uy Page 24
25. Nhận dạng ảnh sử dụng thuật toán PCA
+ test.txt : Lưu chỉ số và đường dẫn các ảnh dùng để
kiểm tra .
- File facedata.xml chứa các dữ liệu trong quá trình nhận
dạng .như số ảnh huấn luyện , vector ảnh trung bình ....
- Các thư mục ảnh S1 , S2 , S3 ..... , S40 , trong mỗi thư
mục có chứa 10 ảnh của cùng một người trong các
trạng thái khác nhau . chương trình sẽ lấy một số ảnh
trong các thư mục này để làm đầu vào trong việc huấn
luyện và tìm khuôn mặt giống với khuôn mặt cho trước.
Project2 – GVHD : Đỗ Văn Uy Page 25
26. Nhận dạng ảnh sử dụng thuật toán PCA
- Các ảnh để chúng ta tìm và đánh dấu các khuôn mặt có
trong nó test1.jpg, test2.jpg ...
II. Các biến , hàm trong sử dụng trong chương trình
2.1. Chức năng tìm khuôn mặt giống với khuôn mặt cho trước
Sử dụng các biến toàn cục :
- int nTrainFaces : số ảnh được đưa ra để huấn luyện
- int nEigens : số các giá trị riêng
- IplImage **faceImgArr : mảng chứa các ảnh
- IplImage *pAvgTrainImg : ảnh trung bình
- IplImage **eigenVecArr : vector riêng
- CvMat *personNumTruthMat : mảng chứa các chỉ số
ảnh
- Cv *projectedTrainFaceMat : lưu trữ các khuôn mặt
huấn luyện sau khi chiếu lên không gian con PCA
Sử dụng các hàm :
- learn() : thực hiện công việc
+ load dữ liệu (chỉ số và đường dẫn ảnh để huấn
luyện trong file train.txt)
+ thực hiện thuật toán PCA để tìm không gian con
+ chiếu dữ liệu huấn luyện lên không gian con
Project2 – GVHD : Đỗ Văn Uy Page 26
27. Nhận dạng ảnh sử dụng thuật toán PCA
+ lưu lại tất cả các thông tin (giá trị riêng, vector riêng,
ảnh trung bình, chỉ số ảnh , khuôn mặt được chiếu)
- recognize() : thực hiện công việc :
+ load dữ liệu (chỉ số và đường dẫn ảnh để kiểm tra
trong file “test.txt”) .
+ chiếu ảnh cần kiểm tra lên không gian con PCA
(dùng hàm cvEigenDecomposite(.....))
+ đưa ra kết quả là chỉ số ảnh nhận dạng được theo
chương trình và ảnh thực .
- doPCA() : khởi tạo các biến số , ma trận ...để làm đầu
vào và nhận kết quả đầu ra khi gọi hàm xử lý theo thuật
toán PCA (cvCalcEigenObjects(......))
- storeTrainingData() : lưu tất cả dữ liệu vào file
“facedata.xml”
- loadTrainingData( Cv **pTrainPersonNumMat) :
load dữ liệu trong file “facedata.xml”
- findNearestNeighbor ( float *projectedTestFace ) : so
sánh từng ảnh test với từng ảnh train , tìm và trả lại chỉ
số của ảnh train có khoảng cách nhỏ nhất với nó .
- loadFaceImgArray(char *filename) : load ảnh cũng
như chỉ sổ của nó lưu trữ vào mảng .
2.2. Chức năng tìm và đánh dấu khuôn mặt có trong ảnh
Sử dụng các biến toàn cục:
- CvHaarClassifierCascade *pCascade : load dữ liệu từ
file XML trong opencv
- CvMemStorage *pStorage : Bộ nhớ đệm tự động
Project2 – GVHD : Đỗ Văn Uy Page 27
28. Nhận dạng ảnh sử dụng thuật toán PCA
- CvSeq *pFaceRectSeq : Lưu danh sách các khuôn mặt
được xác định trong ảnh
- IplImage *pInpImg : lưu ảnh dùng để xác định khuôn
mặt
Sử dụng các hàm :
- cvHaarDetectObjects() : tìm kiếm khuôn mặt có trong
ảnh .
III. Chạy thử chương trình
Sau khi chạy chương trình , màn hình xuất hiện
Project2 – GVHD : Đỗ Văn Uy Page 28
29. Nhận dạng ảnh sử dụng thuật toán PCA
Ta chọn chức năng 1, màn hình yêu cầu nhập tên file ảnh
Nhập tên file ảnh , chương trình cho kết quả
Project2 – GVHD : Đỗ Văn Uy Page 29
30. Nhận dạng ảnh sử dụng thuật toán PCA
Tắt cửa sổ ảnh , chương trình hỏi bạn có muốn tiếp tục tìm kiếm
khuôn mặt nữa không , bạn chọn “y” và nhập tên file ảnh và lặp lại quá
trình trên .
Nếu không muốn thực hiện thao tác này ta chọn “n” , chương trình
hỏi bạn có muốn tiếp tục với chức năng khác không , nếu chon “n”
chương trình sẽ dừng , chọn “y” chương trình trở về menu ban đầu .
Project2 – GVHD : Đỗ Văn Uy Page 30
31. Nhận dạng ảnh sử dụng thuật toán PCA
Ta chọn chức năng 2
Project2 – GVHD : Đỗ Văn Uy Page 31
32. Nhận dạng ảnh sử dụng thuật toán PCA
Chọn tiếp chức năng 1.
Chương trình hỏi tiếp ta nhập “n”
sau đó nhập “y” để đồng ý nhận dạng ảnh, chương trình hiển thị kết quả
.
Chức năng 2 trong Mục lựa chọn tiếp cũng cho kết quả tương tự .
Project2 – GVHD : Đỗ Văn Uy Page 32
33. Nhận dạng ảnh sử dụng thuật toán PCA
Project2 – GVHD : Đỗ Văn Uy Page 33
34. Nhận dạng ảnh sử dụng thuật toán PCA
KẾT LUẬN
PCA là phương pháp dùng để xây dựng đặc trưng khuôn mặt , nó
là một nền tảng đẻ phát triển các thuật toán khác . Thực tế có rất
nhiều tác giả đã áp dụng thuật toán PCA , kết hợp với những phương
pháp như mạng neuralb , xác xuất thông kê để xây dựng những thuật
toán có độ chính xác cao . Ưu điểm của thuật toán PCA là nó dễ cài
đặt , nếu ta xét bài toàn tìm khuôn mặt giống nhau thì chỉ cần áp dụng
hoàn toàn vào lý thuyết là đã có độ chính xác khá cao, nếu áp dụng
cho bài toán tìm vị trí khuôn mặt thì cần phải có một thuật toán nữa
để sử dụng face map thu được theo lý thuyết . Khuyết điểm của PCA
là các mẫu khuôn mặt luân phụ thuộc vào tập huấn luyện , có nghĩa là
các khuôn mặt trong ảnh kiểm tra phải giống với các ảnh huấn luyện
về kích thước , tư thế , độ sáng . Thực tế trong tập huấn luyện gồm
nhiều nhóm hình , mỗi nhóm hình là hình của một người với tư thế và
độ sáng khác nhau .
Có rất nhiều thuật toán nhận dạng mặt người dựa trên những chi tiết
của khuôn mặt như đôi mắt , lông mày, cấu trúc của khuôn mặt, hay màu
da ....Khác hoàn toàn với những thuật toán trên , PCA nhận dạng dựa
trên những nét tổng thể của khuôn mặt . Còn hơn một thuật toán , PCA
đã cung cấp một cơ sở rất đễ dàng cho việc mô tả đặc trưng khuôn mặt ,
để từ đó có thể phát triển những thuật toán nhận dạng khác . Vì vậy có
Project2 – GVHD : Đỗ Văn Uy Page 34
35. Nhận dạng ảnh sử dụng thuật toán PCA
thể PCA không phải là tốt nhất , nhưng là thuật toán phổ biến nhất được
áp dụng trong bài toán nhận dạng mặt người .
TÀI LIỆU THAM KHẢO
https://en.wikipedia.org/wiki/Principal_component_analysis
http://www.cognotics.com/opencv/servo_2007_series/part_2/index.html
http://www.bytefish.de/blog/pca_in_opencv/
http://www.pages.drexel.edu/~nk752/tutorials.html
http://dphtuan.uphero.com/dphtuannews/posts
Project2 – GVHD : Đỗ Văn Uy Page 35