Nhận dạng mặt người (Face recognition) bằng PCA (eigenface) – Matlab code on ORL database

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: phương pháp tiếp cận toàn cục (global, như Eigenfaces-PCA, Fisherfaces-LDA), phương pháp tiếp cận dựa trên các đặc điểm cục bộ (local feature based, như LBP, Gabor 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 (k-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). 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 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.

Các thách thức đối với nhận dạng mặt: hiện nay các vấn đề sau được coi là thách thức lớn (chưa có phương pháp tốt) đối với nhận dạng mặt:

+ vấn đề hướng (pose variations), các kết quả với các ảnh có hướng thay đổi (>45 độ, không phải chính diện) còn khá khiêm tốn, có lẽ 3D là một hướng giải quyết.

+ vấn đề ảnh có độ phân giải thấp (low resolution): ảnh thu được từ các camera giám sát (surveillance camera) thường có kích thước và chất lượng rất rất thấp, các kết quả nghiên cứu về lĩnh vực này còn chưa nhiều.

+ làm việc với dữ liêu video (video based face recognition): với sự phát triển của các phương tiện multimedia, thông tin mặt người trong các dữ liệu video là vô cùng nhiều, tuy nhiên hầu hết các phương pháp nhận dạng vẫn làm việc với ảnh tĩnh trích xuất từ dữ liệu video, chưa có phương pháp tốt tận dụng hết ưu thế của dữ liệu video.

+ các hệ thống cực lớn (very large scale systems): các cơ sở dữ liệu (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 nước có thể chứa từ hàng triệu tới hơn 1 tỉ ảnh …

+ aging condition: việc nhận dạng ảnh mặt thay đổi theo thời gian thực sự vẫn còn là một vấn đề lớn ngay cả đối với khả năng nhận dạng của con người.

+ illumination (ánh sáng): là một trong những biggest challenges của nhận dạng mặt, chưa có phương pháp tốt cho các ảnh chụp ở điều kiện out door unconstrained.

Nguồn gốc của các thách thức trên là do tập training thường chỉ có một ảnh cho mỗi đối tượng (lớp) với các điều kiện cố định, trong khi tập probe lại gồm các ảnh ở các điều kiện khác (như đã liệt kê ở trên), làm gia tăng sự khác biệt giữa ảnh training, gallery và probe.

Nghiên cứu về nhận dạng mặt: vì có nhiều bước và còn nhiều thách thức nên có thể lựa chọn một khía cạnh trong một bước để tiến hành, ví dụ như chỉ nghiên cứu về illumination normalization, hay chỉ làm với ảnh low resolution, nhận dạng cảm xúc của khuôn mặt, hoặc thậm chí cụ thể hơn nữa, chỉ làm về face image alignment … Tuy nhiên hầu hết các nhà nghiên cứu đều tập trung vào bước feature extraction, tức là tìm một cách thức trích chọn đặc điểm hiệu quả cho nhận dạng mặt.

CSDL cho nhận dạng mặt: điều đầu tiên cần thiết khi nghiên cứu về nhận dạng mặt là phải có các CSDL ảnh mặt và cách thức chuẩn (standard protocol) để thực hiện test trên các CSDL đó, vì còn phải so sánh với các kết quả đã có khác trên các CSDL đó. ORL là một CSDL nhỏ và cũ của AT&T nhưng khá thích hợp với người mới bắt đầu. Nó gồm 400 ảnh của 40 người, mỗi người có 10 ảnh với các biểu hiện (facial expression) và điều kiệu về hướng, ánh sáng khác nhau. Các CSDL khác nên test là: FERET, FRGC v2.0, SCFace, LFW, AR. Trong các CSDL này, ảnh mặt đã được chuẩn bị sẵn, tức là chúng ta không cần thực hiện bước face detection, chỉ cần dựa vào các thông tin được cung cấp để thực hiện cắt phần ảnh mặt cần thiết cho nhận dạng. Để download database ORL, các bạn có thể truy cập tới địa chỉ này. Lưu ý là CSDL này gồm các ảnh ở format .pgm, format này hơi lạ với các chương trình đọc ảnh của Windows, nhưng với Matlab thì không có vấn đề gì, các bạn có thể save lại thành định dạng .bmp hoặc .jpg để có thể nhận thấy rõ ràng hơn.

Trong bài viết này, tôi chỉ nói về PCA dành cho nhận dạng mặt theo phương pháp eigenface, sẽ không có các bước chuẩn hóa ánh sáng và trích chọn đặc điểm. CSDL được sử dụng minh họa là ORL, tập training trùng với tập reference và mỗi lớp (mỗi người) sẽ chọn n=1,2,3,4 hoặc 5 ảnh đưa vào tập training, số còn lại (10-n cho mỗi lớp) sẽ được dùng cho tập probe.

Phương pháp PCA cho nhận dạng mặt (eigenface): Mỗi ảnh có kích thước WxH (kích thước phổ biến là 128×128) sẽ được chuyển thành một vector cột có độ dài W*H (cho cả tập training và probe) (gọi là các vector Xi). Ở bước training, một vector trung bình của tất cả các ảnh training sẽ được tính (vector M), sau đó mỗi vector thuộc tập training sẽ bị mean-subtracted: Xi=Xi-M, ma trận hiệp phương sai được tính bằng C = A’*A, trong đó A’ là ma trận chuyển vị của A và A =[X1, X2, …Xk] là ma trận với các cột là các vetor Xi, k là số ảnh thuộc tập training (k=40*n với CSDL ORL). A sẽ có kích thước là (W*H)xk, còn ma trận C sẽ có kích thước là kxk, do k nhỏ hơn W*H rất nhiều nên việc tính k vector riêng (eigenvectors) và giá trị riêng tương ứng (eigenvalues) của C là dễ. Ta sẽ tìm được k giá trị riêng tương ứng với k vector riêng của C. Các vector riêng được sắp xếp theo thứ tự giảm dần của các giá trị riêng tương ứng, việc sử dụng tất cả các vector riêng là không cần thiết nên chỉ có N (N viết hoa nhé) giá trị riêng đầu tiên tương ứng với N vector riêng được sử dụng (chính về thế nên phương pháp này được gọi là phân tích thành phần chính-Principal Component Analysis). N vector riêng này sẽ tạo thành một ma trận có kích thước (W*H)xN là ma trận của không gian con nhận được (ta gọi ma trận này là Cp). Tiếp đến các ảnh thuộc tập training (ở đây cũng là tập reference) sẽ được chiếu vào không gian con bằng phép nhân: Ap = Cp’ * A, tương tự các ảnh của tập probe sẽ được chiếu vào không gian con bằng phép nhân: Bp = Cp’*B. Ap và Bp sẽ có kích thước tương ứng là NxNoTrain (NoTrain là số ảnh training, tức là bẳng k) và NxNoTest (NoTest là số ảnh của tập probe), nghĩa là mỗi ảnh tương ứng được biểu diễn bẳng một vector cột. Ở bước phân lớp, với mỗi ảnh thuộc tập probe, ta tìm ảnh thuộc tập training gần với nó nhất. Ở bước này các hàm khoảng cách: euclidean, mahalanobis, cosine angle distance đều có thể sử dụng.

Thực chất, ở nguyên bản của phương pháp PCA ma trận C = A*A’, và có kích thước là (W*H)x(W*H), tức là một ma trận rất, rất lớn nên Mathew A. Turk and Alex P. Pentland (tác giả của phương pháp eigenface) đã sử dụng một thủ thuật là tìm N vector riêng vi (i=1..N) và giá trị riêng của ma trận L=A’*A (dễ hơn do ma trận có kích thước nhỏ hơn) sau đó tính N vector riêng của C=A*A’ bằng công thức ui=A*vi.

Việc tìm các vector riêng của ma trận hiệp phương sai C (trên thực tế là với ma trận L) có hai cách: dùng phương pháp eigen decomposition (hàm eig của matlab) hoặc singular value decomposition-SVD (hàm svd của matlab), tuy nhiên svd có vẻ nhanh và cho kết quả tốt hơn so với eig.

Sau đây là bảng tỉ lệ kết quả nhận dạng (Rank-1 Recognition Rate-RR) với số ảnh huấn luyện cho mỗi đối tượng là từ 1->5:

Eigenfaces

Why matlab? Vì matlab nhanh và thích hợp cho việc nghiên cứu, thử nghiệm. Nên nhớ rằng PCA hay một phương pháp nào đó bạn nghĩ ra có thể chưa phải là tốt nhất, vì thế nên việc sử dụng C/C++/C# hay một ngôn ngữ lập trình ứng dụng nào đó để cài đặt là không thực sự cần thiết, bạn sẽ thấy tốc độ cũng không nhanh hơn (thường là chậm hơn, trừ khi bạn dùng GPU hoặc tối ưu mã nguồn), rất mất thời gian và chắc gì thuật toán của bạn đã có hiệu quả đủ tốt để đầu tư công sức cho việc lập trình, với lại một hệ thống nhận dạng mặt có thể chạy trên thực tế gồm rất nhiều bước khác nữa, ở đây bạn mới làm với các ảnh frontal của một database đã có sẵn, vì thế đừng có lăn tăn nhiều.

Cuối cùng, nếu bạn muốn trao đổi về nội dung bài viết hay lấy source code của PCA (eigenface), hãy để email lại qua mục comment của bài viết này, tôi sẽ gửi lại cho bạn qua email.

P/S (ngày 18/08/2014): sau một thời gian dài nhận được nhiều yêu cầu gửi code của nhiều bạn, tôi đã cố gắng nhanh nhất có thể gửi cho hầu hết các bạn với mục đích cung cấp một chút gì đó gọi là cơ sở và hy vọng có sự trao đổi với những ai cùng quan tâm. Nhưng sự trao đổi thì khá ít mà một số câu hỏi kiểu “chạy cái này thế nào?” hay “Sao không thấy gì?” thì phổ biến nên tôi mong muốn các bạn hãy đọc kỹ, xem kỹ trước khi yêu cầu và theo đuổi lĩnh vực này vì nhận dạng mặt và phương pháp eigenfaces không phải là những thứ dễ dàng (để hiểu và code) theo kiểu google search, download, click and get the results.

Update ngày 24/06/2015:

Face recognition with OpenCV tutorial.

Update ngày 17/06/2013:

More about eigenfaces

Java code

OpenCV based source code 1

OpenCV source code 2

C# based PCA source code 1

C# based PCA for shape matching

EmguCV C# tutorial

EgmuCV C# face detection

EgmuCV C# multiple faces detection and recognition

Eye tracking 1

Eye tracking 2

OpenCV based Eye tracking 3

OpenCV based face and eyes detection

319 Responses to “Nhận dạng mặt người (Face recognition) bằng PCA (eigenface) – Matlab code on ORL database”

  1. Pham Viet Says:

    mình cũng rất tò mò về lĩnh vực này !mong bạn giúp mình nhé !thanks.

    • hiep Says:

      em đang học môn máy học và đang tìm hiểu về vấn đề này trên matlab, a gởi cho em code matlab tham khảo anh nhé, cám ơn a nhiều và chúc a sức khỏe

  2. Ngoc Diep Says:

    Anh có thể gửi source code cho em để em tham khảo được không ạ. Nếu được anh gủi qua Gmail của em là : ngocdiepkhmt3.haui@gmail.com nhé.Thanks

  3. Tran Hai Says:

    Mong bạn gửi mail cho mình code PCA, cảm ơn bạn nhiều:
    mail của mình là: tranhai20511@gmail.com

  4. nguyen van minh Says:

    Mình cũng thấy có nhiều điều hay về cái này ak, bạn có tài liệu và source code ko cho mình đi hoặc bán rẻ rẻ cho mình cũng dc. nếu dc bạn gửi qua email: minhgdu@gmail.com

  5. nguyễn huy trung Says:

    bài viêt rất hữu ích. ban cho mình hỏi nếu muốn vân dụng kết hợp PCA và thư viện EmguCV trong nhân dạng sẽ tiến hành cụ thể ra sao, vì bước phát hiện mình đã thực hiện được
    rất cảm ơn bạn
    bạn có thể send mình code được không?
    truyenthongmang@gmail.com

    • 4fire Says:

      Thế thì cũng dễ thôi, nhưng tôi nghĩ là cũng không có nhiều tác dụng lắm vì tỉ lệ nhận dạng của eigenface khá khiêm tốn, đặc biệt là với các ảnh ở các điều kiện unconstrained.
      Tuy nhiên nếu bạn muốn: EmguCV là một .Net wrapper của OpenCV, nên bạn có thể tham khảo ở đây nhé: https://github.com/bytefish/opencv. Tác giả Philipp Wagner đã đưa nó vào phần distribute của OpenCV nhưng ở địa chỉ trên thì cập nhật thường xuyên hơn.

      • bui văn minh Says:

        Xin chào bạn.
        Rất cảm ơn câu trả lời của bạn. Bạn có thể cho mình hỏi: trong EmguCV có 1 lớp EigenObjectRecognizer sử dụng theo thuật toán PCA có phải không ạ?

        Nếu có thể được Bạn có thể giúp mình hiểu rõ hơn về lớp EigenObjectRecognizer này được không ? Các bước của thuật toán PCA thể hiện ở các phương thức nào trong lớp này ạ.? Câu hỏi cuối cùng: Có thể lấy các giá trị của từng bước trong thuật toán PCA và hiện thị ra trên 1 giao diện bằng C# được không ạ?

        Xin chân thành cảm ơn. mong bạn có thể giải đáp giúp mình

      • viet Says:

        e chào a!
        e cũng quan tâm và đang tìm hiểu về đề tài này. nhưng em chỉ mới làm quen thôi a có tài liệu gì liên quan cho em tham khảo với. và bài viết của a rất hay anh cho em xin source code của PCA (eigenface) tham khảo với nha. cảm ơn a.
        viet11b6@gmail.com

  6. Hùng Says:

    bài viết tuyệt. many thanks tới tác giả, tớ cũng muốn có tài liệu và code tham khao, mong răng bạn bớt chút thời gian gửi cho tớ theo địa chỉ mail: hmhcntt@gmail.com

  7. duonganhhung Says:

    hiện tại em đang làm đồ án tốt nghiệp về nhận dạng khuôn mặt, cũng sử dụng LBP và PCA eighenface cho việc nhận dạng :). Đọc được bài viết của anh thì em như lụm được vàng :X. Mong anh có thể cho em xin source để em có thể hoàn thành được luận văn :).
    mail : duonganhhung@gmail.com
    thx anh lần nữa :X

    • duonganhhung Says:

      anh cho em hỏi thêm, việc nhận dạng = LPB + PCA thì tỉ lệ thành công cao hơn so với dùng kĩ thuật classifier như SVM ko nhỉ, hiện tại em thấy hướng đi của em hơi mơ mộng quá, nhiều lúc chả biết có hoàn thành ko nữa :((

      • 4fire Says:

        Về mặt bản chất SVM khác với kNN, anh chưa bao giờ sử dụng SVM cho phần recognition (bước nhận dạng) cho bài toán nhận dạng mặt, chỉ mới dùng SVM để thực hiện face antispoofing và thấy hiệu quả vì khi đó chỉ có 2 lớp. Tuy nhiên anh đã được đọc và có thể nhận thấy rõ ràng rằng: SVM chậm hơn kNN và cho kết quả nhận dạng không cao hơn kNN.
        Về LBP+PCA, tất nhiên là tốt hơn PCA, kết quả cao hơn, nhưng vẫn chỉ là bước đầu thôi. Đối với các ảnh tốt (frontal+constrained conditions) thì LBP+WPCA khá tốt, nhưng khi có các điều kiện khác (aging, unconstrained …) thì vẫn chưa ăn thua. Tuy nhiên nếu em làm đề tài tốt nghiệp đại học hoặc cao học thì thế chắc là ok rồi. Anh nghĩ em có thể bỏ qua SVM vì nó chẳng cần thiết đâu. Mà LBP+PCA có code sẵn với OpenCV rồi mà (https://github.com/bytefish/opencv). Em chỉ việc đọc hiểu và custom theo ý mình thôi, chắc 2 tháng là xong.

        • duonganhhung Says:

          thật ra là ở bước face detection và việc nhận dạng các điểm trên khuôn mặt em ko dùng OpenCV mà sử dụng công cụ khác do giáo viên HD đưa cho, nên cũng hơi lăn tăn :). BTW, em sẽ down bộ source về ngâm cứu 🙂
          thx anh lần nữa 🙂

          • 4fire Says:

            Anh chưa hiểu bài toán của em lắm, em làm với database nào? Hay là trên database riêng? Và em tập trung vào bước nào? Nhận dạng (face recognition) hay detection (face detection)?

          • duonganhhung Says:

            hiện tại thì giáo viên hướng dẫn của em sẽ cho em làm với database chuẩn, và hướng tập trung của em là vào việc nhận dạng ( recognition ), còn hướng detection thì em có 2 hướng: 1 là dùng OpenCV, 2 là dùng công cụ do giáo viên hướng dẫn cung cấp ( pittpatt )

          • 4fire Says:

            pittpatt là công ty nhận dạng mặt mà Google mua lại, giống như facebook mua lại face.com với giá hơn 100 triệu dollars. Nhưng đó không phải là hướng, là công cụ để dùng sẵn cho việc detection. Thực ra anh hỏi câu này vì hơi tò mò tí thôi. Database chuẩn mà em dùng là cái nào vậy? Của riêng chỗ em phát triển hay public?

          • duonganhhung Says:

            à, em nghĩ giáo viên sẽ đưa cho e database chuẩn :), có thể là chuẩn MBGC hoặc Feret

          • duonganhhung Says:

            nếu ko được thì em sẽ làm với public, hi 🙂

          • 4fire Says:

            MBGC hay FERET đều là public database. Nhưng MBGC không phải là chuyên cho Face recognition, có lẽ là FRGC v2 thì đúng hơn, nhưng nói thật với em, nếu chỉ LBP hay eigenface thì test trên FERET, FRGC không có nhiều ý nghĩa lắm, vì người ta đã công bố kết quả đó rồi. Mà với FRGC, training với 16000 ảnh, sau đó tập target và query cũng 16000 ảnh thì sợ em cũng không thực hiện được.

          • duonganhhung Says:

            thx anh đã chỉ bảo, em sẽ liên hệ lại với giáo viên hướng dẫn để thống nhất ý kiến ạ 🙂

    • van dat nguyen Says:

      a có thê cho em xin tài liệu,code của projet này vs.Em cũng đang rất cần đê lm đê tài tot nghiep

  8. anonymous Says:

    Thanks. Minh cung dang can, Gui dum cho minh nha. mail : anonymous12022000@yahoo.com

  9. thanh Says:

    em cung dang nghien cuu ve do an nhan dien khuon mat su dung matlab, a co tai lieu hay source lien wan toi do an nay thi cho em xin voi, mail of e la snow_angle177@yahoo.com , thanks a nhieu

  10. long Says:

    Minh cũng đang nghiên cứu về lĩnh vực này , mọi tài liệu và source liên quan bạn có thể gửi qua mail cho mình được k ngtanquilong@gmail.com thanks nha

  11. trường Says:

    cho mình xin cái đc ko về tham khảo dù biết khó khăn rất nhiều mail to: truong3288@gmail.com

  12. Vo Son Dong Says:

    Hi Bạn. Bài viết hay quá. Bạn send cho mình thuật toán và source code của phan này hen. thanks bạn nhiều. Email cua minh là vosondong86@gmail.com

  13. Pham Ngoc Son Says:

    Anh ơi em cũng đang quan tâm tới vấn đề này, bài viết của anh hay quá.
    Anh send cho em với nhen, mail: nhandbunch@gmail.com
    Cám ơn anh nhiều lắm.

  14. phuoc loc Says:

    Anh ơi cho em hỏi cơ sở dữ liệu mặt người là gì vậy anh ,nhất là cơ sở của những trường đại học ấy .
    mail :doanphuocloc87@gmail.com

    • 4fire Says:

      CSDL mặt người (face database) là CSDL chứa các ảnh mặt người dùng để đánh giá hiệu năng của các thuật toán nhận dạng mặt. Các CSDL này được thu thập từ ảnh mặt của những người tình nguyện (sinh viên, cán bộ nghiên cứu ….) và thường thuộc về các trung tâm nghiên cứu Computer Vision-CV, Pattern Recognition-PR hay Biometrics, một số ít thuộc về các trường đại học (ví dụ FRGC v2 thuộc về University of Notre Dame). Các CSDL này thường có các qui định riêng về việc thực hiện test với các ảnh gọi là protocol và có các metadata đi kèm (vị trí của các đặc điểm quan trọng của khuôn mặt – như mắt chẳng hạn). Để lấy được các CSDL này cũng khá phức tạp: phải ký tờ qui định về bản quyền, phải thuộc cơ sở giáo dục hay nghiên cứu, phải có sếp (từ trưởng khoa trở lên) ký vào request form. Tuy nhiên việc tồn tại các CSDL này và các protocol là rất cần thiết vì nhờ có nó mà các nhà nghiên cứu mới có thể so sánh được các hệ thống với nhau.

  15. Quốc trung Says:

    Mình cũng đang quan tâm và có ý muốn tìm hiểu ,thực hiện về đề tài này. Trong phạm vi cho phép, bạn có thể cho mình xin thêm vài tài liệu liên quan, chương trình hoặc source code của phương pháp này được không. Mình cảm ơn bạn rất nhiều.
    email của mình là : quoctrungvn90@gmail.com

    • 4fire Says:

      Source code của bài này sẽ gửi được gửi cho em qua email. Tuy nhiên về tài liệu thì em phải cụ thể hơn nữa thì mới gửi được vì liên quan tới nhận dạng mặt có quá nhiều tài liệu. Chỉ có thể giúp em vì là người đã đọc qua một số để gửi cho em đúng cái em cần thôi. Rất hoan nghênh em và các bạn nào đi vào lĩnh vực nhận dạng mặt hoặc pattern recognition, computer vision, biometrics vì còn nhiều cái để khám phá và cũng có nhiều cơ hội xin học tập hoặc làm việc ở nước ngoài cũng như phát triển các ứng dụng trong nước.

  16. vanquangtk Says:

    Chào anh ,em cũng đang nghiên cứu về thuật toán PCA.Em đang gặp khó khăn trong vấn đề tách ra biên dạng của vật thể trong ảnh, và thuật toán nhận dạng vật thể đang chuyển động.Anh có cách nào giải quyết các vấn đề trên không.Em cảm ơn anh.Email của em là: vanquang17@gmail.com

    • 4fire Says:

      Anh chỉ làm về nhận dạng mặt và fake face detection và với anh PCA chỉ dùng để training trong pha dimension reduction. Tuy nhiên bài toán của em phát biểu nghe có vẻ chưa được cụ thể lắm, anh nghĩ là cần phải cụ thể hơn nữa, nhận dạng thể loại gì, vì không thể đối sánh một vật chuyển động với tất cả mọi thứ được. Thứ hai là vấn đề tách biên, anh chưa hiểu rõ lắm về câu hỏi này, ý em là phát hiện vùng chứa đối tượng chuyển động à? Anh nhớ đã có viết một cái demo chạy detect mấy cái đối tượng chuyển động bằng OpenCV, nếu em cần anh sẽ gửi. Ngoài ra em có thể kiếm quyển “Vision with Direction” của Josef Bigun để đọc thêm xem có tìm được gì cần không.

      • vanquangtk Says:

        Vâng,ý em là phát hiện ra vật thể đang chuyển động từ đó tách ra biên dạng của vật thể,em đang làm bằng matlab nên anh có thể nói cho em về thuật toán được không a.Em cám ơn anh.

        • 4fire Says:

          Anh không giúp được vì không làm lĩnh vực em hỏi. Tuy nhiên anh thấy bài toán của em rộng quá, có ít nhất 3 bước liên quan tới 3 lĩnh vực nghiên cứu khác nhau: phát hiện chuyển động, tách biên đối tượng, phân lớp đối tượng. Em nên xác định mục tiêu của bài toán hẹp hơn thì sẽ dễ dàng hơn. Ví dụ như anh làm nhận dạng mặt, anh có làm bước face detection đâu, cũng không làm bước illumination normalization, chỉ từ bước feature extraction thôi, coi như ảnh mặt đã sẵn sàng để nhận dạng, chứ còn làm hết thì e rằng không đủ công lực.

  17. thanh Says:

    mình đang tìm hiểm về thuật toán PCA, ban5 có thể giữ source cho minh dc ko
    nếu có thể đây là mail cua mình: thanhton0206@gmail.com
    thanhks

  18. Hung Says:

    Em đang nghiên cứu về thuật toán PCA. Mail của mình: thienquy32@yahoo.com

  19. anh tu Says:

    Em đang tìm hiểu về PCA. Mong nhận được source tham khảo từ tác giả.
    Email: anhtu.khtn@gmail.com

  20. anh tu Says:

    Thank tác giả viết bài lần nữa. 😀

  21. Nguyễn Hoàng Vũ Says:

    Bài viết của tác giả thật hữu ích, xin cảm ơn
    Mình đang làm đồ án tốt nghiệp với đề tài là nhận dạng mặt người 3D, theo như mình biết thì thuật toán PCA chỉ nhận dạng ảnh 2D thôi, vì nếu thay đổi hướng, hoặc điều kiện ánh sáng thì nó làm việc chưa hiệu quả, vậy tác giả có thể cho mình biết với đề tài của mình thì dùng thuật toán gì, cần thêm gì nữa không, mình đang cần rất gấp , mong tác giả bớt chút thời gian gởi cho mình, mail là vulhu06@yahoo.com
    Cảm ơn nhiều

    • 4fire Says:

      Trước hết phải nhận xét rằng em rất dũng cảm khi làm đề tài này. Mặc dù 2D FR vẫn còn tiếp tục và 3D FR là tương lai nhưng hiện tại việc triển khai cũng như nghiên cứu về 3D FR cũng còn khá mới. Hiển nhiên là vì nó khó hơn về thuật toán, về dữ liệu cũng không phổ biến bằng 2D. Tôi không làm về 3D nên chỉ có thể giúp em với một vài ý kiến thế này:
      + nếu có thể, hãy làm việc với thầy em để đổi sang 2D, cái này là ưu tiên số 1, vì xử lý ảnh 3D cũng không dễ dàng gì. Nhân tiện tò mò một chút là em làm với database nào vậy?
      + tôi không bàn tiếp về eigenface ở đây vì nói nó không tốt khi hướng, điều kiện ánh sáng … thay đổi là hiển nhiên, eigenface là thuật toán rất cơ bản, không thể đòi hỏi nhiều hơn ở nó. Tôi có xem một bài viết nói là chuyển ảnh từ 3D thành 2D sau đó dùng 2D PCA. Hy vọng em có thể tìm thấy điều gì đó ở đây. http://paper.ijcsns.org/07_book/200912/20091222.pdf
      Về 2D PCA thì nó cũng như PCA thôi, tức là cũng không có nhiều hy vọng nhưng đó là một hướng dễ nhất để làm 3D FR mà không mất nhiều công sức. Chúc em may mắn.

  22. Thanh hoang Says:

    Email:thanhhoang2012@gmail.com.Cảm ơn anh đã chia sẻ.

  23. trandaitrang Says:

    bạn có thể gửi code jum minh dc k?minh cung lam do an va muon tim hieu ve van de nay.
    cam on ban nhieu
    mail :trandaitrang1210@gmail.com

  24. Chien Quang Le Says:

    Mình cũng đang nghiên cứu về lĩnh vực liên quan. Mong tác giả có thể gửi code để mình có thể tham khảo. Chân thành cảm ơn tác giả bài viết.

  25. tranvanquy Says:

    Mình cũng đang làm đề tài nhận dạng khuôn mặt với OpenCV+Visual 2010,ban co tai liệu hay soure code có thể gửi cho mình tham khảo với.Cảm ơn bạn nhiều nha.mail.vanmaichoem1205@yahoo.com.

  26. Hoang Says:

    mail của em hoanghcmut09@gmail.com, a có thể gửi code cho e tham khảo được không. E xin cảm ơn

  27. cảnh Says:

    tình hình là e đang cần làm đồ án về cái này.ae nào có tài liệu hay code có thể gửi cho e xin dc k.e cảm ơn nhiều
    mail e là thanapuchita@gmail.com

  28. Linh Says:

    Hiện tại mình cũng đang nghiên cứu vấn đề này, bạn có thể cho mình code để mình tham khảo được không. cảm ơn bạn nhiều. rokuwin@gmail.com

  29. Nguyễn Trọng Nghĩa Says:

    Mình đang làm luận văn về lĩnh vực này, làm phiền bạn gởi code để mình tham khảo với, thanks

  30. phuong Says:

    mình cũng đang làm đề tài về lĩnh vực này, bạn làm ơn gửi code cho mình tham khảo vs, thanks

  31. phuong Says:

    đây là mail của mình, làm phiền bạn nhé
    phuongphuongth9x@gmail.com

  32. thạnh Says:

    mình cũng đang nghiên cứu thuật toán PCA để mô phỏng trên matlab. Mong được sự giúp đỡ của bạn
    mail của mình là: thanhhq85@gmail.com
    chân thành cảm ơn bạn !

  33. tranquangle Says:

    minh cung dang tim hieu ve de tai nhan dien khuon mat ung dung voi RFID rat maong duoc giup do

  34. Binh Says:

    Mình cũng đang nghiên cứu về vấn đề này, bạn có thể gửi cho mình thuật toán và source code của phần này được không, cảm ơn bạn nhiều. Email cua minh là uni4tek@gmail.com

  35. Hau Says:

    Nho ban gui giup minh tai lieu lien quan va code voi,minh dang lam ve phan nay nen minh rat can. Mong ban giup cho.Cam on ban nhieu. Mail cua minh la: mismeo@gmail.com

    • Hau Says:

      Chào bạn! mình cảm ơn về bài viết và code PCA bạn đã share. Bạn cho mình hỏi này tí, nếu ứng dụng phương pháp PCA trong nhận dạng biển báo giao thông (trên ảnh 2D) thì kết quả có tốt như nhận dạng mặt người không? bạn đã thử làm về cái này chưa? mình đang định làm đề tài tốt nghiệp về nhận dạng biển báo giao thông dùng PCA để nhận dạng. mình rất phân vân. mong bạn góp ý kiến giúp mình với. cảm ơn bạn nhiều nhé!

      • 4fire Says:

        Xin chào, tôi chưa bao giờ dùng PCA cho bài toán nhận dạng biển giao thông (Traffic sign recognition) nên không thể trả lời bạn chính xác được. Nhưng PCA đối với nhận dạng mặt chỉ là một phương pháp rất cơ bản và kết quả rất hạn chế đối với các điều kiện thay đổi của nhận dạng mặt (ánh sáng, hướng, aging …), thậm chí chỉ khoảng 5-7% (đối với CSDL SCFaces) nên chỉ được dùng cho bước dimension reduction sau khi có một thuật toán feature extraction tốt.

  36. lê quốc ân Says:

    e cũng đang mê làm cái này, anh có thể cho e mã nguồn để tham khảo được không ah, cảm ơn anh rất nhiều.
    maimottinhyeu199217@gmail.com

  37. Nguyễn Quang Thạch Says:

    Mình rất muốn hiểu biết về PCA, mong bạn giúp đỡ!

  38. thuy3677@gmail.com Says:

    Mình cũng đang nghiên cứu về lĩnh vực này, bạn có thể vui lòng gửi cho mình tài liệu được không?
    Email: thuy3677@gmail.com.
    Bạn gửi cho mình được các tài liệu liên quan đến face recognition và code c++ chạy trên visual studio 2010 với Open CV 2.4.3 thì tốt quá.
    Cảm ơn bạn nhiều.

  39. lennguyen Says:

    Tôi cũng đang nghiên cứu về lĩnh vực này cho luận văn Thạc sĩ của mình. Mong nhận được sự giúp đỡ của anh về các tài liệu liên quan đến vấn đề này.
    Trân trọng cảm ơn!
    Note; Đ/c Email; lennguyen86@gmail.com

  40. Nguyễn Anh Tú Says:

    Bạn cho mình xin code 🙂
    mình đang tìm hiểu về PCA được tháng nay nhưng vẫn chưa đâu vào đâu
    mail của mình : tuna.hust@gmail.com
    Cảm ơn bạn nhiều!

  41. Trần Trung Kiên Says:

    mình cần tham khảo code chương trình nhận dạng mặt người trong video, bạn có không cho mình với

  42. Trần Trung Kiên Says:

    mail của mình: kien18111977@yahoo.com

  43. tan Says:

    ban co the gui cho minh code pca vantamm27@gmail.com

  44. Xuân Quỳnh Says:

    Nhờ bạn gửi mail source code cho mình nhé: quynhlxbkhn@gmail.com
    Cảm ơn bạn nhiều!

  45. XuanDong Says:

    Bài viết hay quá. Nếu có thể bạn gửi cho mình source code vào mail này nhé: xuandong.khmt1k5@gmail.com

  46. Hung Anh Says:

    Em mới đăng kí đề tài nhận dang khuôn mặt để làm khóa luận, chắng biết bắt đầu từ đâu nữa, nếu có thời gian anh có thể cho em 1 số lời khuyên được không ạ, email của em là hoanganhhung12291@gmail.com, mong nhận được mail tư vấn của anh. Anh có suorce code gì thì cho em xin với luôn ạ!

    • 4fire Says:

      Cũng không biết tư vấn cho em kiểu gì? Em phải nói cụ thể hơn nữa, hoặc tự em phải rõ ràng về mục đích, yêu cầu của đề tài cần thực hiện thì anh mới có thể đưa ra vài lời khuyên, chứ nhận dạng mặt có nhiều thứ như thế, em chỉ đưa ra mỗi cái tên thì anh chịu. Cụ thể là em định làm cái gì trong luận văn tốt nghiệp của mình? Bắt đầu quan trọng nhất là xác định đúng cái mình cần làm, sau đó mới đi tìm thuật toán thích hợp để thực hiện, theo anh ban đầu em cần làm như thế đã, mà quan trọng hơn nữa là phải thống nhất được với thầy hướng dẫn về những thứ đó.

  47. BUT DA Says:

    bài viết hay
    thanks!
    em cũng đang làm đồ án nhận dạng theo PCA
    anh share code cho em với đc ko
    giúp em với, email em la tiptrang_90@yahoo.com
    em cảm ơn nhiều

  48. Ta Là Ai Says:

    Anh ơi ! Về nhận dạng khuôn mặt sử dụng thuật toán PCA em có đọc qua và khá là hiểu nhưng mà khi triển khai thì quả thật hơi khó , vì em chưa biết nhiều về OpenCV , loay hoay mãi mới cài được OpenCV mà hạn nộp BTL gấp gáp quá . Anh giúp em với , có thể gửi em source code em tham khảo được không anh ??? mail em là : cuongphongba@gmail.com

  49. nguyentai Says:

    anh cho em xin source code với ạ. email em là: nguyentai5191@gmail.com
    cảm ơn anh trước ^^

  50. thuy Says:

    a gửi cho e với e đang rất cần .thuykute.281292@gmail.com
    cam on a nhiu

  51. thuy Says:

    e cám ơn a nhiều.a có thể vào gmail cho e hỏi chút được k ? hoặc cho e xin sdt.hjjh

  52. hang Says:

    ad oi.cho e code di.e dang lam bai bao cao ve thuat toan nay.
    gmail cua e la. hangcuongpro@gmail.com

  53. Minh Says:

    anh có code svm và pca không gửi mail em với nhutminhho@gmail.com. thanks anh

  54. hothangthoi Says:

    Bài viết rất hữu ích,

    Anh có thể cho tôi xin code pca để nghiên cứu thêm, địa chỉ mail: hothangthoi@gmail.com

    Xin cảm ơn anh!

  55. Tin Says:

    Chào bạn,

    Hiện tại mình đang nghiên cứu về vấn đề “Mã Hóa Dữ Liệu Dùng Sinh Trắc Học Khuôn Mặt”. Trong quá trình rút trích đặc trưng sinh trắc học (khuôn mặt) mình có biết có 2 thư viện hỗ trợ là OpenCV và JavaCV. Về JavaCV thì mình implement được việc detect khuôn mặt còn nhận diện thì mình chưa làm được. Nhưng mình thấy OpenCV nó hỗ trợ nhiều và giải thích rõ ràng hơn. Khôn biết bạn có nghiên cứu về lĩnh vực này không. Theo bạn mình nên dùng OpenCV hay là JavaCV.

    Cảm ơn,

    • 4fire Says:

      Chào bạn. Thực ra trước đây tôi thường dùng Matlab hoặc Python để implement các thuật toán nhận dạng mặt vì Matlab rất nhanh và tiện. Cùng thời gian đó tôi cũng thử với OpenCV (cách đây 2 năm) và thấy rằng nó khá tệ, chỉ riêng thao tác đọc 1000 ảnh, Matlab mất khoảng hơn 1 giây nhưng OpenCV thì mất tới 3 giây, và nhiều vấn đề khác về các thuật toán liên quan. Tuy nhiên gần đây (từ bản 2.4.5->2.4.9) tôi có implementation lại mấy thuật toán và thấy rằng về tốc độ, OpenCV đã có sự vượt trội so với Matlab (chỉ riêng về xử lý ảnh), về độ tiện lợi thì đã khá ổn, vẫn còn một vài vấn đề như các thuật toán hỗ trợ khác (như FFT, Matrix Multiplication, Eigen & SVD decomposition) và độ chính xác nhưng theo tôi bạn nên dùng OpenCV. Ngoài ra OpenCV còn hỗ trợ lập trình song song với GPU (bạn có thể xem thêm bài viết này hoặc này), một hướng mà tôi nghĩ là đúng đắn và sẽ rất phát triển trong tương lai. Hơn nữa theo tôi biết JavaCV không phải là một thư viện (library) đúng nghĩa như OpenCV mà chỉ là một wrapper để gọi tới OpenCV trên môi trường Java nên chắc chắn sẽ chậm hơn dùng trực tiếp OpenCV với các chương trình viết bằng C/C++, ngược lại những gì bạn viết với OpenCV hoàn toàn có thể rewrite lại với JavaCV. Rất hoan nghênh các trao đổi về cùng lĩnh vực này với bạn.

      • Tin Says:

        Chào bạn,

        Cảm ơn bạn.
        Mình cũng định chuyển hướng sang OpenCV, nhưng mình viết trên mobile (android). Mô hình work-follow của ứng dụng mình là: input (face: camera hoặc image)—> Feature Extraction (Rút trích đặc trưng). Sau đó mình dùng đặc trưng sinh trắc học để bảo vệ khóa mã trong quá trình mã hóa. Vấn đề mình vướng mắc là input (face: camera hoặc image)—> Feature Extraction (Rút trích đặc trưng) , mong bạn giúp cho!

        • 4fire Says:

          Thành thật mà nói, tôi vẫn chưa hiểu rõ bạn định làm gì? Đặc trưng sinh trắc học (biometric discriminative features) có thể là nhiều thứ khác như vân tay, mống mắt, giọng nói, nhưng ở đây chắc bạn làm với mặt. Tôi hình dung thế này: bạn dùng thiết bị mobile capture ảnh mặt, sau đó trích chọn đặc trưng, lưu lại, sau đó ??? Nhưng muốn có hiệu quả, bạn cần phải thực hiện ít nhất là 3 bước nữa trước khi trích chọn đặc trưng: phát hiện mặt trong ảnh chụp được (face detection), crop vùng ảnh mặt, chuẩn hóa ánh sáng. Trong 3 bước này thì chỉ có việc crop là dễ (sau khi đã detect chính xác). Với yêu cầu không cao lắm (ảnh nhìn thẳng – frontal), thư viện objectdetect của OpenCV sẽ giúp bạn detect được vùng mặt, vị trí của mắt, sau đó có thể crop lấy vùng ảnh mặt, chuẩn hóa ánh sáng bạn có thể dùng thuật toán cân bằng histogram, cũng ở mức cơ bản. Về trích chọn đặc điểm bạn có thể dùng LBP hoặc đơn giản nhất là PCA.
          Việc bạn code để chạy trên Adroid không phải là lý do để lựa chọn JavaCV hay OpenCV, tôi nghĩ là OpenCV không có vấn đề gì với nền tảng di động (dù là iOS hay Adroid). Tất cả những chi tiết kỹ thuật về lập trình, tôi nghĩ bạn đọc quyển sách nàybài viết về detect mặt+mắt là đủ. Chúc bạn thành công.

  56. Duy Nguyen Van Says:

    Dạ chào anh, em đang làm khóa luận tốt nghiệp liên quan đến đề tài nhận dạng khuôn mặt(ứng dụng OpenCV) anh có thể cho em xin code PCA của anh tham khảo được không anh. Cảm ơn anh nhiều!
    Mail của em: nguyenvanduy2610@gmail.com

  57. Le Son Says:

    Mong nhận được source code của anh để tham khảo.
    Mail của em:lqqson@gmall.com
    Cảm ơn anh.

  58. Tr. Anh Says:

    Chào a !
    Hiện e đang định làm khóa luận tốt nghiệp liên quan đến xử lý ảnh , cụ thể là nhận dạng.
    E định làm chương trình nhận diện nấm độc, nhưng tìm hiểu mà vẫn chưa xác định được hướng để làm.
    A có thể cho e lời khuyên được không ạ !

    • 4fire Says:

      Thực ra vấn đề em định làm không phải là xử lý ảnh, là nhận dạng mẫu (pattern recognition). Nói chung trong một bài toán nhận dạng mẫu có mấy bước cơ bản sau: tiền xử lý và chuẩn hóa để các ảnh cần nhận dạng và các ảnh mẫu đã có có cùng kích thước và độ tương phản (ở mức độ nhất định nào đó), sau đó là học (learning), và cuối cùng là phân lớp (classification). Như vậy việc đầu tiên là em phải có CSDL về các loại nấm mà em muốn thực hiện nhận dạng, sau đó lựa chọn các thuật toán thích hợp cho các bước trên (không dễ). Em có thể tham khảo mấy cái đã làm về nhận dạng lá cây:
      http://www.jens-langner.de/lrecog/
      http://sourceforge.net/projects/lrecog/
      Chúc thành công và may mắn.

  59. Nhan Says:

    Chào a!
    E đang làm đồ án nhận dạng hình ảnh bằng PCA mô phỏng Matlad. A có thể giúp e dc k?
    Email: nhanx278@yahoo.com.vn
    Thanks a

    • 4fire Says:

      Em hỏi chung chung thế thì anh trả lời thế nào được? Nhận dạng hình ảnh là một thuật ngữ không đúng lắm, chính xác hơn là nhận dạng mẫu, nhưng có rất nhiều loại, em định làm với loại nào?

  60. Says:

    Chào anh, anh có thể cho em xin source về thuật toán PCA này được không ạ? em đang cần để tham khảo cho bài tập lớn!
    Anh gửi qua mail uocmobayxa.tmax60@gmail.com hộ em với ạ!
    Em cảm ơn nhiều!

  61. Lê Viết Tri Says:

    Chào bạn ! Mình cũng đang nghiên cứu về cái này !
    Bạn send cho mình với nhé !
    Chân thành cảm ơn !
    Email : triletrile@gmail.com

  62. Đức Says:

    Chào anh, anh có thể cho em xin source về thuật toán PCA này được không ạ? em đang cần để tham khảo cho bài tập lớn!
    Anh gửi qua mail duclm2406@gmail.com hộ em với ạ!
    Em cảm ơn nhiều!

  63. Duy Tu Says:

    Chào anh! Anh vui lòng gửi mail cho em với ẹ, em dang cần lắm đây.:)
    doduytu@gmail.com
    thanks a nhiều

  64. le thao Says:

    Bài viết của anh rất hay. Anh có thể gửi code qua mail: thaon469@gmail.com cho em xin được không ạ.
    Cảm ơn anh rất nhiều.

  65. Phương Trần Says:

    Anh cho em hỏi hiện tại em đang làm đề tài về 3D Detection, mà detect là bước đầu tiên trong regconition, anh có tài liệu nào về 3D Detection thì share cho em với, còn nữa anh có thể hướng dẫn cụ thể việc sử dụng Face DataBase như thế nào? Em cám ơn

    • 4fire Says:

      Thực sự là anh không làm tí gì về face detection nên không giúp em được. Riêng về phần detection thì có các databases riêng chứ không hoàn toàn giống với databases cho face recognition.

  66. Spi Says:

    Chào anh,
    Em đang muốn tìm hiểu về PCA, anh có thể gửi code cho em tham khảo được không ạ? Cảm ơn anh.
    Email: spinachco@gmail.com

  67. gianguyenle Says:

    bạn có thể send source code cho mình qua mail” gianguyen4391dn@gmail.com được không. Thanks bạn

  68. Nguyễn Xuân Lợi Says:

    chào anh! em đang làm đề tài xử lý ảnh về PCA , đọc được bài viết của anh em rất mừng. Email của em là nguyenxuanloi113@gmail.com. Anh có thể gởi source code cho em tham khảo với được không. Em cảm ơn anh rất nhiều.

  69. Xuan Nguyen Says:

    thanks. gui code cho minh voi

  70. ĐẶNG NGỌC TRUNG (@drzhongdang) Says:

    Chào anh, anh có thể sent source code matlab cho em tham khảo được ko?
    Email: drzhongdang@hotmail.com
    Cảm ơn anh

  71. Vân Huỳnh Says:

    Chào anh ! anh send cho e với! Thanks anh!
    htvan2505@gmail.com

  72. hoaianh Says:

    Chào Anh, em cũng đang làm về đề tài RPA
    anh có thể gởi giúp em code tham khảo được k? thank anh
    hoaianh2210@gmail.com

  73. Rikatori Torikachi Says:

    bạn có code matlab phát hiện và nhận dạng luôn không? Share mình với nha
    rikatori_pvnh_ddt@yahoo.com.vn

  74. thangleo18@gmail.com Says:

    Cảm ơn vì bài viết, rất mong bạn gửi cho mình vào mail : thangleo18@gmail.com chân thành cảm ơn

  75. Quang vinh Says:

    cảm ơn bài viết của anh. Mong anh có thể gửi code cho em vào mail: vinhquangnguyen0712@gmail.com
    Em đang làm nhận dạng oline bằng WC anh có tìm hiểu về phần đó không ah! Thân.

    • 4fire Says:

      Chào em, về nhận dạng mặt với webcam thì anh không rõ lắm, vì công việc hiện tại là phát triển các phương pháp nhận dạng mặt sau khi đã có ảnh ở dạng được chuẩn hóa nên chỉ có một vài ý thế này:
      + Webcam chỉ là một phương tiện thu nhận ảnh nên việc nói nhận dạng online với webcam có lẽ là không đúng, nhận dạng theo thời gian thực (real time) có lẽ đúng hơn.
      + Để nhận dạng đầu tiên cần có một tập ảnh để training, đây là một vấn đề khi nghiên cứu lý thuyết thì có vẻ hiển nhiên vì trong các CSDL ảnh đã có sẵn, nhưng triển khai thực tế thì cần phải tính tới yếu tố này, bao nhiêu ảnh là đủ cho tập training.
      + Thứ đến là tập tham chiếu, ảnh nào sử dụng cho tập tham chiếu và lấy ở đâu?
      + Thứ 3 là webcam ở khung cảnh nào? Có thể để demo đăng nhập chương trình chăng? Nếu thế thì bài toán sẽ là xác thực người dùng dựa trên ảnh mặt, cái này hoàn toàn khác với nhận dạng online mà em đặt ra ở ban đầu.
      Nói chung bài toán của em còn vu vơ lắm, chưa rõ là hệ thống (nếu xây dựng được thành công) sẽ chạy với dữ liệu gì, ở đâu và như thế nào.
      Dù sao cũng chúc em may mắn.

  76. Vũ Trần Nguyên Says:

    cảm ơn bài viết của anh. Mong anh có thể gửi code cho em vào mail: trannguyenvu91@gmail.com
    Em đang làm code về đóng khung các mặt (cho 1 nhóm người) và nhận dạng từng khuôn mặt.

    • Vũ Trần Nguyên Says:

      em muốn hỏi là tập ảnh huấn luyện cần bao nhiêu là đủ ạ?

      • 4fire Says:

        Cái này tùy vào phương pháp em sử dụng. Nếu có bước giảm số chiều thì sau khi chiếu vào không gian con (sinh bởi thuật toán giảm số chiều), các vector đặc điểm sẽ có số chiều bằng với số ảnh huấn luyện. Hiện nay người ta thường dùng tập Fa của CSDL FERET để làm tập huấn luyện nên theo anh chắc 1000 là OK. Tuy vậy để biết được chính xác còn cần phải test xem con số đó có là ổn đối với bài toán của em không.

  77. NGuyễn Thị Thúy A Says:

    Cảm ơn bài viết của tác giả rất nhiều. Tôi cũng đang nghiên cứu về EIGENFACE-PCA, xin tác giả cho tôi source code demo và các bài báo khoa học về vấn đề PCA. Thanks. email: thuya852003@yahoo.com

  78. hao ngô Says:

    anh có thể share source code demo cho em được ko em dang làm đồ án về lĩnh vực nhận dạng thank anh . email haopro10k@gmail.com

  79. thq Says:

    anh ơi cho em xin code thuật toán PCA bằng matlab dc không ạ? Mail: tohaiquan@gmail.com

  80. Thuy Says:

    Bài viết của anh rất hay,anh có thể gửi cho em source code bằng Matlab được không ạ.
    Email của e là :dinhthuy92hus@gmail.com

  81. NgọcKn Says:

    Em hiện đang làm đề án tốt nghiệp về nhận dạng gương mặt dùng OpenCV, em cũng đang tìm hiểu các thuật toán PCA, LBP,… nhưng vẫn không hiểu mấy, anh có thể gửi source code cho em tham khảo được ko ạ
    email: ngoc20091921@gmail.com

  82. Le Tuan Anh Says:

    Xin chào Thầy, xin thầy cho em xin tài liệu về bài viết trên và code. Email của em là tuananhtin@gmail.com, em xin cảm ơn Thầy,

  83. phúphúc Says:

    Em xin hỏi là e có đồ án là :USING SPEEDED UP ROBUST FEATURES FOR FACE RECOGNITION (SURF)
    Thầy có bài hướng dẫn về SURF không ạ.
    email: gauluxubu@gmail.com

  84. Dung Says:

    Em đang làm khóa luận về PCA, anh có thể gửi cho em source code của PCA (eigenface) được không? email của em trungdungt@gmail.com. Rất mong sự giúp đỡ của anh.

  85. nhật tuấn Says:

    E đang làm đồ án; anh có thể trợ giúp cho em phần code matlab của mục eye tracking được không ạ; email của em là:
    nguyennhattuandhbk@gmail.com

  86. phuc Says:

    Bài viết của anh rất hay,anh có thể gửi cho em source code bằng Matlab được không ạ.
    Email của em là : chqthang@gmail.com

  87. Huy Says:

    Chào anh, em đang làm đề tài nhận dạng mặt người bằng mạng neural và giảm số chiều của ảnh bằng PCA, em có 1 số câu hỏi như sau :
    1. Bộ dữ liệu ảnh học của PCA khác gì với bộ ảnh học của mạng neural ?
    2. Để chuyển 1 ảnh thành 1 vector có cần phép biến đổi tuyến tính đối với các trị pixel nào không ạ? Hay ta chỉ cần lấy giá trị pixel R hoặc G hoặc B vì R = G = B trong ảnh mức xám ?

    • 4fire Says:

      1. Theo hiểu biết của tôi, thì tập training chỉ được dùng để học, do đó dù là PCA hay neural network thì cũng sẽ như nhau.
      2. Ảnh trong nhận dạng mặt khi không có lưu ý đặc biệt, được hiểu là ảnh xám (grayscale image), do đó nếu ảnh input là ảnh màu thì cần chuyển thành ảnh xám trước khi tiến hành thuật toán. Còn việc chuyển một ảnh thành một vector thì nguyên bản của Eigenfaces là phép reshape (OpenCV và Matlab, hay bất cứ một công cụ xử lý ảnh nào khác đều có hàm này) một ma trận 2D thành 1 vector.

  88. Lê Thành Says:

    Anh ơi …e cũng đang làm về nhận dạng mẫu nè a…a có tài liệu hay source code về nhận dạng cho xin tham khào với a ơi…e thanks a nhìu nhìu……………..thanhlc1011@gmail.com

  89. Đinh Văn Hảo Says:

    hihi, mình thật sự biết ơn bài viết rất hay và bổ ích của bạn. Mình cũng đang bắt đầu nghiên cứu vấn đề PCA của matlab, có gì khuất mắt mình mong được bạn tham khảo nhiều hơn. 🙂

  90. Nguyễn Thoa Says:

    mong bạn gửi cho mình source code của bài này với 🙂

  91. Tuấn Says:

    Xin chào thầy, e đang làm đề tài nhận dạng mặt người bằng PCA và mạng neural, thầy cho e hỏi một vài câu được không ạ?

    Đầu tiên là phải sử dụng PCA để rút trích đặc trưng trước, sau đó chỉ dùng PCA để nhận dạng ảnh cũng được nhưng đề tài của e có sử dụng thêm phần neural, xin hỏi thầy là nếu muốn sử dụng neural thì đầu vào của neural là gì ạ, lấy dữ liệu gì từ đầu ra của PCA để làm đầu vào của neural?

    Thầy có source code nào về PCA kết hợp neural để nhận dạng không ạ? Thầy cho e xin với ạ.

    Cám ơn thầy ạ.
    Mail của e là: romeo3290@yahoo.com

    • 4fire Says:

      Chào em, tôi chưa bao giờ dùng neural network nên không có ý kiến gì sâu sắc, chỉ là theo như tôi được biết các hệ thống nhận dạng mặt hàng đầu (theo các công bố-qua các bài báo khoa học-không phải là các giải pháp phần mềm công nghiệp được giấu kín) thì đều không dùng neural network, mặc dù một số kết quả khác cho bài toán face verification (https://www.facebook.com/publications/546316888800776/) cho thấy việc training bằng một thuật toán deep learning với neural network mang lại kết quả rất tốt. Về bản chất thì neural network không cần phải dùng PCA và việc này có thể mang lại kết quả nhận dạng tồi hơn, nhưng lượng dữ liệu training sẽ giảm đi. Ngược lại nếu không dùng PCA trước thì dữ liệu training sẽ lớn nhưng kết quả có thể cao hơn. Kết luận là cần phải thử cả hai phương án và lấy cái tốt hơn.
      Em có thể xem tài liệu tham khảo này: http://ijssst.info/Vol-10/No-5/paper2.pdf.
      Một source code PCA neural network để tham khảo: https://github.com/txemaromero/facerecognition

      • Tuấn Says:

        Cám ơn thầy.

        Hình như có nhầm chút phải không ạ? Theo e được biết thì nếu ta dùng PCA trước thì sẽ làm giảm số chiều trong không gian ảnh nên dữ liệu training sẽ giảm. Còn nếu ta không dùng PCA trước thì dữ liệu training sẽ nhiều hơn phải không ạ?

  92. matlabviet Says:

    Mình cũng rất quan tâm lĩnh vực này, anh cho em xin code để học anh nhé,
    cảm ơn anh nhiều ạ.
    email của em: qthanh_le@hotmail,com

  93. Hồ Văn Điền Says:

    thank,mình cũng đang cần mail mình:dienhouit05@gmail.com

  94. Lê Quang Khanh Says:

    Chao ban, mình rất quan tâm tới vấn đề này. Bạn có thể email cho minh source này không. Cảm ơn ban trước nhé. Email của minh là: lkhanh022@gmail.com

  95. Lee Nguyen Says:

    Mình là công an..Đang nghiên cứu vấn đề này. Gửi tài liệu liên quan vấn đề này cho mình nhe. Có thể liên hệ trao đổi thì càng tốt. cám ơn trc nhe Email: matone2014@gmail.com

  96. Đinh Văn Hảo Says:

    ko biết nhận sang khuôn mặt dùng thuật toán Fast Hessian (SURF) đươc không bác, mình đang nhận diện đối tượng vật thể kết quả củng khá, nhưng ko được như ý muốn. Nếu có thể thì trao đổi 1 vài ý với mình haohao010100@yahoo.ca dvanhao@wgmail.com.

    • 4fire Says:

      Chào bạn Hảo. Đầu tiên cần phân biệt bài toán nhận dạng mặt (Face recognition) được chia thành 2 bài toán chính nhỏ hơn là face identification, đại loại là bài toán N-N, cần tìm danh tính cho một người trong ảnh và bài toán face verification, cần xác thực xem hai bức ảnh có thuộc về một người hay không. Ngoài ra còn có một loại khác nữa gọi là watch-list matching, tức là xác định xem một bức ảnh của một người có nằm trong một danh sách cho trước hay không, kiểu như để kiểm soát truy cập vào một khu vực hạn chế. Tùy vào bài toán cụ thể, sẽ có các phương pháp tối ưu khác nhau. Về SURF, hay các variant của nó (e.g. Fast Hessian), theo như tôi được biết thường hay dùng kết hợp với các descriptor hoặc một learning method khác, chứ tự bản thân nó không mang lại kết quả tốt, hoặc ít nhất là tương đương với các phương pháp hàng đầu khác, đặc biệt là cho bài toán face identification. Điều này là dễ hiểu vì SURF và các anh em của nó không được design cho bài toán nhận dạng mặt, một loại đối tượng khá đặc thù, mà để capture các image features nói chung. Vì vậy, để matching hai object cùng một category thì các descriptor như SIFT, SURF lại cho kết quả khá tốt. Một vài lời trao đổi như vậy. Tôi chỉ biết về face identification và facial feature extraction, trong trường hợp bạn cần trao đổi thêm gì đó, thì rất sẵn lòng.

  97. Đỗ Văn Dương Says:

    Chào anh. Em cũng đang tìm hiểu về matlab theo hướng nhận dạng đối tượng trên ảnh. Anh có thể gửi em xin source code của PCA này được không ạ. Xin anh gửi qua email em là: doduongtnmt@gmail.com
    Cảm ơn anh nhiều!

  98. Vũ Thị Lý Says:

    Em chào anh, em đang nghiên cứu về đề tài ‘Nghiên cứu phương pháp nhận dạng mặt người’ cụ thể em đang tìm hiểu về PCA và thử nghiệm trên matlab. Anh cho em hỏi anh đã tìm hiểu phương pháp PCA kết hợp mạng nơron không ạ, có hiệu quả hơn không ạ? Anh cho em xin tài liệu và code của anh nhé. Em cảm ơn anh ạ. Mail của em là: vuthily172@gmail.com

    • 4fire Says:

      Về cơ bản, PCA được dùng để giảm số chiều của các vector trong một không gian có số chiều lớn bằng cách giữ lại các đặc trưng quan trọng nhất. Do đó, trong bài toán nhận dạng mặt, có hai cách sử dụng PCA: một là dùng nó như một thuật toán trích chọn đặc điểm (chính là eigenfaces, một phương pháp dựa vào các đặc điểm toàn cục là các giá trị điểm ảnh của mỗi ảnh mặt), hai là dùng nó để giảm số chiều của các vector đặc điểm nhận được sau khi áp dụng một thuật toán trích chọn đặc điểm (cục bộ) như LBP, Gabor wavelets … Mạng nơron được dùng sau hai bước trên, trong bước phân lớp (hay nhận dạng, classification step). Nói dài dòng như vậy để em hiểu mạng nơron khi dùng với PCA thì có nghĩa là PCA được dùng để trích chọn đặc điểm, hiển nhiên là sẽ không có tác dụng nhiều với các điều kiện không có kiểm soát như ánh sáng, hướng, thay đổi cảm xúc khuôn mặt. Hơn nữa, mạng nơron chỉ có tác dụng rõ rệt khi số lượng ảnh trong tập training rất lớn (4.4 triệu như trong bài https://www.facebook.com/publications/546316888800776/ chẳng hạn), ở các trường hợn kích thước của tập training hạn chế, kết quả của nó còn tệ hơn SVM và k-NN. Mà đề tài của em chung chung thế thì biết làm cái gì? Có hàng chục nghìn bài báo về nhận dạng mặt. Nếu em là SV đại học thì có lẽ chỉ cần hiểu một thuật toán như PCA hay LDA, KPCA và cài đặt thành công là ổn nhỉ?
      Dù sao cũng chúc em may mắn và thành công.

      • Vũ Thị Lý Says:

        Em cảm ơn anh đã trả lời và gửi mail cho em, vì đề tài chung chung nên em đã hỏi lại giáo viên hướng dẫn để thay đổi tên đề tài cho cụ thể nhưng GVHD bảo không cần thiết, GVHD để đề tài chung chung như thế để sinh viên có thể tự chọn hướng nghiên cứu cho mình mà không bị ép buộc vào đề tài giáo viên cho, chính vì thế em cũng rất mông lung :). GVHD có gửi cho em 3 bài báo: Recognizing faces with PCA and ICA, nhận dạng khuôn mặt động, nhận dạng khuôn mặt sử dụng PCA và mạng nơron. Em đang trong quá trình tìm hiểu, anh có thể gửi cho em xin những tài liệu cơ bản về phương pháp nhận dạng mặt người được không ạ. Em cảm ơn anh!

        • 4fire Says:

          Nói chung là GVHD sẽ ngại sửa. Anh nghĩ rằng bài viết này khá đầy đủ cho cái gọi là cơ bản. Sau khi hiểu rõ eigenfaces và các bước của một hệ thống nhận dạng mặt, em có thể đọc về KPCA, LDA, LBP, và Gabor wavelets. Chọn một cái, thảo luận và chốt mục tiêu đề tài với giáo viên để thống nhất. Có lẽ thế là đủ cho một luận văn đại học rồi em ạ. Có gì không hiểu, em có thể hỏi.

  99. Bien Nguyen Says:

    bài viết rất hay. bạn có thể bớt chút thời gian gửi tài liệu và code tham khảo cho tớ theo địa chỉ mail: tannguyen1302@gmail.com được không? cảm ơn ban nhiều!

  100. Phong Nguyen Says:

    Chào bạn, mình đang tìm hiểu nhận dạng mặt người. Bạn có thể gửi source code Matlab cho mình tham khảo được không? mình mới làm quen với Matlab, cám ơn bạn nhiều. Email mình là kieuphong.master@gmail.com

  101. hoandv Says:

    Bài viết rất hay và dễ hiểu, em cũng đang nghiên cứu về vấn đề này, anh gửi giúp em phần code matlab vào mail: hoan.set.hut@gmail.com nhé, Em cảm ơn nhiều

  102. Thu Hà Says:

    em cũng đang nghiên cứu về vấn đề này, anh gửi giúp em phần code matlab vào mail: dothithuyk36cntt@gmail.com nhé, Em cảm ơn nhiều

  103. Đỗ Văn Mạnh Says:

    Chào a, em là sinh viên năm cuối bách khoa Hà Nội. Em cũng đang follow PCA để phục vụ cho đồ án tốt nghiệp của mình. Em rất muốn có phần code demo của a để có thể hiểu kỹ và cụ thể hơn vê PCA.
    Rất cảm ơn anh ak.
    Đây là gmail của e: domanhbk@gmail.com

  104. Đỗ Đình Lực Says:

    Cám ơn anh vì bài viết. Hiện tại em cũng đang nghiên cứu về nhận dạng khuôn mặt dựa trên pca,lda và mạng nơ ron. Anh có thể gửi em một số tài liệu và source code tham khảo được không ạ
    Email của em là: dodinhluck5e@gmail.com

  105. Hien Says:

    Bài viết của anh rất sâu sắc. Hiện tại em cũng đang nghiên cứu về nhận dạng khuôn mặt sử dụng pca, lda, nhưng viết băng opencv. Nhưng thực sự em cũng mới nghiên cứu, chưa hiểu nhiều. Theo ý định của em, thì đề tài của em cũng tập trung vào phần recognition chứ không phải detect (phát hiện khuôn mặt sử dụng hàm hỗ trợ của pencv), tức là ban đầu ảnh của em đưa vào từ camera, sau đấy phát hiện khuôn mặt, và xác thực khuôn mặt này của ai (tất nhiên cũng form cho nó học). Nhưng chưa biết vẽ sơ đồ khối như thế nào cho hợp lý. Anh có thể giúp em được không? và phần xác thực khuôn mặt thì nên dùng phương pháp nào được ạ?

    • 4fire Says:

      Chào em,
      Nếu em xem kỹ sẽ thấy có 1 link tới cài đặt bằng OpenCV cho nhận dạng mặt với video (https://github.com/MasteringOpenCV/code/tree/master/Chapter8_FaceRecognition). Tuy nhiên cài đặt này có một vài nhược điểm: độ chính xác không cao (LBP chỉ đạt được tỉ lệ nhận dạng đó) và chậm khi số ảnh của tập gallery nhiều (1000 chẳng hạn). Phần xác thực khuôn mặt (chưa hiểu rõ là em định làm identification hay verification), nếu là identification thì em có thể dùng k-NN (dễ, đơn giản và nhanh) hoặc SVM (phức tạp, chậm). Về sơ đồ thuật toán em hỏi, có 2 phần:
      Phần học:
      Input: Tập ảnh huấn luyện (training) và tập tham chiếu (gallery)
      Output: Ma trận không gian PCA và tập ảnh tham chiếu sau khi chiếu vào PCA.
      1. Đọc ảnh từ tập huấn luyện
      2. Tính ma trận A
      3. Dùng SVD để tính eigenvectors và eigenvalues của A
      4. Tính ma trận không gian con PCA
      5. Chiếu các ảnh thuộc tập gallery vào không gian con PCA
      Phần nhận dạng (với k-NN):
      Input: 1 frame của video (1 ảnh)
      Output: id của người có mặt trong ảnh
      1. Dùng haar-detector của OpenCV để phát hiện mặt người trong ảnh
      2. Nếu phát hiện có mặt người thì crop lấy phần mặt người.
      3. Chiếu ảnh cropped vào không gian PCA
      4. Tìm ảnh trong tập gallery gần với ảnh cần nhận dạng nhất
      5. Xuất id của ảnh trong tập gallery tìm được.

  106. Hien Says:

    Nếu được anh có thể gửi mail cho em: hiencntt85@gmail.com. Cám ơn anh nhiều!

  107. Hien Says:

    Cám ơn anh rất nhiều vì anh đã hồi đáp.
    Phần xác thực khuôn mặt em định làm về verification. Thực ra thì đã có code và chạy được chương trình rồi (chương trình em làm theo các bước hướng dẫn trên mạng thôi chứ không phải em viết ra nên không hiểu lắm).
    Chương trình của em gồm 2 form, 1 form chính, 1 form train, nếu ban đầu 1 người ngồi trước webcam thì nó sẽ detect khuôn mặt, nhưng nếu chưa bấm vào train form để đăng ký thì nó hiện ra tab no training data found, please train program using train menu option. Khi đấy ta bấm vào form train nó cho phép ta điền tên và add image (tức là mình có thể tạo những kiểu ảnh khác khác nhau), rồi tắt form này đi trở về form chính, ta có thể chọn menu nhận dạng theo Eigen hay Fisher. Và nó hiện tên mình đã điền hoặc unknow (Họ đặt ngưỡng là : 2000).
    Anh ơi, như bài của em thì phần verification làm theo phương pháp PCA, LDA được không ạ. Theo em hiểu thì họ chọn 1 ngưỡng sau đấy nhỏ hơn ngưỡng thì unknow, lớn hơn tên mình..
    Với lại anh giải thích hộ em:Tập ảnh huấn luyện (training) là tập ảnh mình cho vào cho hệt hống học, còn tập tham chiếu (gallery) có phải là ảnh của mình cho vào nhận dạng ko.
    Với yêu cầu nhận dạng như trên thì Sơ đồ khối tổng quát của hệ thống nhận dạng khuôn mặt của em là gì ạ.
    Chờ hồi đáp của Anh!

    • 4fire Says:

      Anh ơi, như bài của em thì phần verification làm theo phương pháp PCA, LDA được không ạ.
      Câu hỏi này có lẽ là do em chưa hiểu về PCA hay LDA lắm, cả hai phương pháp đều là trích chọn đặc điểm toàn cục (global method), ở bước sau mới là lúc mà verification được thực hiện.
      Theo em hiểu thì họ chọn 1 ngưỡng sau đấy nhỏ hơn ngưỡng thì unknow, lớn hơn tên mình…
      Đúng thế, vì đó là verification.
      Với lại anh giải thích hộ em:Tập ảnh huấn luyện (training) là tập ảnh mình cho vào cho hệt hống học, còn tập tham chiếu (gallery) có phải là ảnh của mình cho vào nhận dạng ko.
      Đúng thế, tập training là để học, tức là cho ra một mô hình, còn tập gallery là tập ảnh tham chiếu để nhận dạng.
      Sơ đồ tổng quát của hệ thống sẽ giống như phần 2 mà anh đã trả lời, chỉ có điều ở bước classification thay bằng verification:
      + Xác định độ tương đồng giữa hai ảnh (similarity)
      + So sánh độ tương đồng này với các ngưỡng để đưa ra kết luận.

  108. Hien Says:

    Vâng ạ. Em đã hiểu rồi ạ, cám ơn anh nhiều!

  109. Hien Says:

    Sau khi đọc những giải thích của anh, em đã hiểu ra về sơ đồ khối của chương trình nhận dạng. Nhưng trong quá trình tìm hiểu thêm thì em lại gặp một vài vướng mắc. Anh có thể giải thích hộ em được ko ạ?
    Đó là theo một số tài liệu em đọc về kỹ thuật nhận dạng, phân loại thì việc nhận dạng dựa trên công thức:
    ε =trị tuyệt đối ( ω −ωk)
    Nêu ε ≤ threshold , ta xác nhận là “đã được biết”.
    Nêu ε > threshold , ta xác nhận Γ là “chưa được biêt”.
    Nhưng em lại thấy nó trái ngược code của chương trình trong opencv đó là ở trên thì khoảng cách bé hơn ngưỡng thì được xác định. Nhưng dưới thì khoảng cách (Eigen- Distance)> ngưỡng thì gán tên còn không thì trả lời unknow. Cái này là mâu thuẫn nhau. Anh giải thích hộ em với ạ.
    if (Eigen_Distance > Eigen_threshold) return Eigen_label;
    else return “Unknown”;

    Cụ thể code:
    public string Recognise(Image Input_image, int Eigen_Thresh = -1)
    {
    if (_IsTrained)
    {
    FaceRecognizer.PredictionResult ER = recognizer.Predict(Input_image);

    …..
    //Only use the post threshold rule if we are using an Eigen Recognizer
    //since Fisher and LBHP threshold set during the constructor will work correctly
    switch (Recognizer_Type)
    {
    case (“EMGU.CV.EigenFaceRecognizer”):
    if (Eigen_Distance > Eigen_threshold) return Eigen_label;
    else return “Unknown”;
    case (“EMGU.CV.LBPHFaceRecognizer”):
    case (“EMGU.CV.FisherFaceRecognizer”):
    default:
    return Eigen_label; //the threshold set in training controls unknowns
    }
    }
    ……
    }

    Em cám ơn anh rất nhiều1
    Chờ hồi đáp của anh!

    • 4fire Says:

      Chào em,
      Ngưỡng được dùng như thế nào tùy thuộc vào việc em sử dụng hàm nào để đo khoảng cách: nếu càng lớn là càng giống nhau thì việc dùng theo kiểu như em sẽ bị sai, ngược lại nếu càng nhỏ là càng giống nhau thì dùng như em sẽ đúng (ngược lại em có thể thay một dấu trừ đứng trước thì sẽ làm theo cách ngược lại).

  110. Đại Says:

    Anh gửi cho em phần code matlab vào mail laphudaibk@gmail.com nhé! em cảm ơn Anh nhiều.

  111. Thành Says:

    em đang làm đề tài về nhận dạng khuôn mặt sử dụng PCA, mong anh giúp đỡ ạ. em cũng chỉ mới tìm hiểu về lĩnh vực này mong anh giúp đỡ ạ. em xin code c++/ matlab/ opencv vào mail thanhit.tdm@gmail.com
    em cảm ơn anh ạ.

  112. khang Says:

    em đang làm nhận dạng khuôn mặt và đang bị bí việc tạo cơ sở dữ liệu. a cho e xin code để tham khảo thêm. cảm ơn anh. nguyenvinhkhang1992@gmail.com

  113. DRAGON Says:

    Em đang làm về mảng đề tài này ạ. e có thể send tài liệu cho e tham khảo thêm được không ạ. e cảm ơn a nhiều ^^

  114. hung Says:

    em cũng đang làm đồ án về nhận dạng mặt người bằng PCA. a có thể gửi code cho em tham khảo được không ạ. cảm ơn a. tapchoia1@gmail.com

  115. Tấn Says:

    Chào anh,
    Em cũng đang nghiên cứu về xử lý ảnh nhận diện mặt người. Nếu không phiền anh vui lòng gửi code cho em tham khảo với nhé. Cảm ơn anh nhiều.
    Thanks,
    Tấn
    lequangtan1990@gmail.com

  116. Manh Do Says:

    Chào anh!
    E cũng dang bắt đầu tìm hiểu về vấn đề này, nó rất kích thích e, nhưng thực sự vẫn rất mơ hồ.
    Em rất mong nhận được code của a để e có thể tham khảo và nhận ra hướng đi đúng cho mình.
    Cảm ơn a nhiều ak

  117. Nhữ Hưng Says:

    Em chào anh! hiện tại e đang nghiện cứu dò tìm mặt người (face detection) bằng phương pháp PCA .em muốn viết bằng C# n,nhưng e chưa rỏ cách viết bằng C# .Em sử dụng thư viện Accord và Afroge .A có code hay code thuật toán có thể gửi e tham khảo được ko ạ .Em xin cảm ơn! gmail của e là: hungs2cntt@gmail.com

  118. Hien Says:

    Em chào anh. Hiện tại em cũng đang nghiên cứu về nhận dạng khuôn mặt sử dụng pca, lda, nhưng viết bằng opencv. Thực ra em đã có code, nhưng không hiểu lắm. Trong sơ đồ khối của em có phần Trích chọn đặc trưng, nhưng em ko hiểu phần trích chọn đặc trưng này thể hiện ở phần nào, và dùng phương pháp gì để trích chọn đặc trưng. Chương trình của em có gọi đến 2 hàm eigenface, fisherface thì có phải dùng 2 phương pháp này để trích chọn đặc trưng hay ko?Hay chỉ dùng để nhậnd dạng?
    Mong anh giải đáp giúp em. Em cám ơn anh nhiều!

    • 4fire Says:

      Chương trình của em có gọi đến 2 hàm eigenface, fisherface thì có phải dùng 2 phương pháp này để trích chọn đặc trưng hay ko?Hay chỉ dùng để nhậnd dạng?

      Đúng vậy, khi đó PCA và LDA được dùng để trích chọn đặc trưng, ở đây là các đặc trung toàn cục (global features) thể hiện ở điểm sau: ảnh ban đầu được biểu diễn dưới dạng vector cột, sau khi dùng PCA (hoặc LDA) sẽ chỉ còn các đặc điểm có tính phân biệt nhất (most discriminative features) được giữ lại.
      Nhận dạng là bước sau, còn gọi là phân lớp (classification), khi ta dùng các khái niệm khoảng cách để đo lường độ tương đồng giữa các ảnh mặt và gán cho ảnh cần nhận dạng định danh của ảnh có độ tương đồng lớn nhất với nó nằm trong tập tham chiếu (gallery set).

  119. Hien Says:

    Em cám ơn anh nhiều! Anh có code nhận dạng khuôn mặt từ ảnh vào bằng openCV ko ạ. Nếu có anh cho em xin với ạ. Em cám anh rất nhiều!

  120. Nguyen Says:

    Em chào anh, hiện tại em đang làm tracking trên Matlab, anh có thể gửi giúp em đoạn code trên Matlab được không ạ. Anh có tài liệu nào giúp giải thích thuật toán tracking trên Matlab không ạ. Nếu có mong anh có thể gửi giúp em được không ạ. Em cảm ơn anh rất nhiều, email của em là thanhnguyen.nguyen94@gmail.com

  121. Lê Nam Says:

    Em chào anh ! Thực sự em rất thích thú với vấn đề này. Hiện tại em chỉ mới bắt đầu đi vào tìm hiểu nó. Bài viết của anh thực sự rất bổ ích với em. Anh có thể cho em xin tài liệu liên quan và source code để em có thể tìm hiểu và nghiên cứu dễ dàng hơn được không ạ ? Em cảm ơn anh rất nhiều ! Rất mong nhiều bài viết từ anh hơn nữa ! Email của em : lenam.it.lc2@gmail.com

  122. Hoa Đá Says:

    a ơi. a cho e xin code nhận dạng khuôn mặt với ạ.
    gmail của e là: nguyenthethidung@gmail.com

  123. Nguyễn Văn Tấn Says:

    Dạ, em chào anh!
    Thật sự những ngày qua, em rất lo lắng về đề tài của em sắp tới, liên quan đến xử lý ảnh!
    Sau khi tìm hiểu xong bài viết của anh, em đã nhận ra được rất nhiều điều!
    Em hy vọng có thể được anh hỗ trợ trong thời gian tới!
    Nhưng, em chỉ mới chập chững biết về vấn đề xử lý ảnh, nên đầu tiên, em muốn xin anh một số tài liệu có liên quan đến đề tài này, và soures code được không ạ..?!!!
    Em cảm ơn anh nhiều ạ!!!
    Email của em là: nguyentan1608@gmail.com
    p/s: Em mong sẽ sớm nhận được hồi âm của anh!

  124. Đạt Says:

    Chào bạn mình đang tìm hiểu nhận dạng khuôn mặt bằng pp PCA bạn có source regconition bằng C#,C++ hay eclipse matlab thì gửi cho mình qua mail solitarywolf.uit@gmail.com nhé.Cám ơn bạn trước

  125. Mạnh Says:

    Chào anh hiện tại em cũng đang tìm hiểu về vấn đề này .Anh có thể gửi source code cho em để em tham khảo được không ạ. Gmail của em là: vuamuoi1@gmail.com . Cám ơn anh trước ạ

  126. Linh Says:

    Em chào anh, em đang tìm hiểu về vấn đề này nên mong anh cho em source code để em tham khảo với ạ.
    Trong quá trình tìm hiểu em được biết PCA chỉ có hiệu suất cao trong trường hợp csdl nhỏ, còn trong trường hợp csdl lớn thì hiệu suất không cao (đã có bài báo nghiên cứu cho kết quả nhưng em không thấy nói csdl nhỏ là bao nhiêu?). Hôm qua em mới tìm được một bài báo viết phương pháp cải tiến PCA (PCA có hiệu suất cao trên csdl lớn, giảm vấn đề hướng và ánh sáng của ảnh chụp). Anh có thể giúp em hiểu bài báo này hơn được không ạ? Em cám ơn anh rất nhiều!
    Link bài báo: http://www.waprogramming.com/download.php?download=50af181b2ee3e2.18535289.pdf
    Email của em: honglinh156@yahoo.com

    • 4fire Says:

      Chào em, PCA hay Improved PCA theo link em gửi đều là các phương pháp rất cơ bản nên không thể đòi hỏi có hiệu năng cao được. Tôi cũng đã đọc bài em gửi và không thấy có cái gì gọi là improved theo như tác giả đề xuất so với bản PCA nguyên gốc của Turk and Pentland. Tác giả chỉ đưa một kỹ thuật tiền xử lý vào PCA và goi đó là IPCA, điều này là không đúng vì tiền xử lý là một bước độc lập trong một hệ thống nhận dạng chứ không liên quan tới PCA, giảm số chiều hay trích xuất đặc điểm. Muốn đạt được hiệu năng cao và giảm ảnh hưởng của ánh sáng cần sử dụng các phương pháp mạnh hơn, nhưng các phương pháp này không đơn giản. Một gợi ý mà tôi nghĩ là vừa sức với em là sử dụng mẫu nhị phân cục bộ LBP (local Binary Patterns) và cân bằng histogram. Về LBP, em có thể tham khảo các links sau:
      Link 1
      Link 2
      Link 3

  127. Nguyễn Đức Dũng Says:

    Dear anh,
    Bài viết của anh rất hay, em cũng đang nghiên cứu về việc nhận dạng này. Anh có thể cho em xin source code Matlab được không ạ,
    Em cảm ơn anh.
    Email: dungduc75@gmail.com

  128. Tuan Says:

    Anh có thể gửi code cho em tham khảo với ạ!
    Anh cho em hỏi thêm là sao chương trình của em (Nhận dạng khuôn mặt bằng PCA và Eigen C#) khi đưa một khuôn mặt ko có trong CDSL (chưa được training) vào thì chương trình vẫn cho kết quả nhận diện của 1 người khác à?? (Em nghĩ do cái ngưỡng Threshold)
    Anh giúp em với ạ!
    Em cảm ơn anh nhiều!

    • Tuan Says:

      Email của em là: ttuant1@gmail.com

    • 4fire Says:

      Có 2 vấn đề với câu hỏi của em: một là ảnh của người cần nhận dạng không nhất thiết phải nằm trong tập huấn luyện, mà là tập tham chiếu. Hai là, ở tình huống đơn giản nhất, nếu ảnh của một người không nằm trong tập tham chiếu đưa vào nhận dạng thì kết quả sẽ là một ảnh của người giống với ảnh test nhất, mặc dù không đúng. Có thể khắc phục bằng việc chọn ngưỡng: chọn một khoảng ngưỡng để chỉ các độ tương đồng (hay khoảng cách) nằm trong khoảng đó thì mới kết luận đúng định danh, ngược lại thì thông báo không có trong tập tham chiếu. Nhưng việc tìm ngưỡng này thường được làm thủ công qua các test với các bộ dữ liệu thử nghiệm để fix ngưỡng, sau đó đem chạy thật (triển khai hệ thống) thì không fix nữa, hoặc vẫn thấy sai thì phải tính lại.

      • Tuan Says:

        Em cảm ơn anh đã giúp em. Nhưng anh có thể cho em hỏi cách để tính và đưa ra ngưỡng được ko à?
        Anh có ví dụ nào ko anh ơi! Em đang rất cần ạ!
        Em chân thành cảm ơn anh đã giúp đỡ!

        • 4fire Says:

          Cụ thể thế này: giả sử em có bộ dữ liệu để development, tức là nó gồm cả 3 tập training, gallery và test, em sẽ học, nhận dạng thử và tính ra được với các ảnh nhận dạng đúng (em biết được điều này vì đây là dữ liệu tường minh) thì giá trị nhỏ nhất (TH1) của độ tương đồng (hay khoảng cách) là bao nhiêu, tương tự là giá trị lớn nhất (TH2). Khi đó ngưỡng là khoảng [TH1, TH2]. Em mang ngưỡng này chạy với chương trình triển khai, nếu có lỗi thì lại điều chỉnh lại TH1 hoặc TH2 sao cho tỉ lệ nhận dạng là cao nhất có thể.

      • Tuan Says:

        Anh ơi, em dùng lớp EigenObjectRecognizer trong Emgu theo phương pháp PCA, trong đó em đã tính được AverageImage và các eigenDistance của ảnh đưa vào nhận dạng với các ảnh đã có trong CDSL. Vậy làm sao để em xác định được giá trị Ngưỡng Threshold anh ơi?
        Thật sự em đang bí chỗ này à anh. Mong anh giúp em giải đáp thắc mắc để em có thể sớm hoàn thành chương trình với ạ!
        Em chân thành cảm ơn anh!

        • 4fire Says:

          Anh giải thích lại thế này nhé: em đã nhận dạng được 1 ảnh, và nếu ảnh đó không có trong tập reference thì sẽ ra một ảnh gần với nó nhất, ảnh này trên thực tế là sai. Và để khắc phục thì phải đi tìm ngưỡng. Với tất cả các ảnh nhận dạng đúng, em tìm xem khoảng cách của chúng với các ảnh được nhận dạng trong tập reference nhỏ nhất là bao nhiêu:

          TH1 = 0;
          TH2 = INF;
          for mỗi cặp ảnh (test, reference) mà kết quả là nhận dạng đúng
          if(distance(test, reference) nhỏ hơn TH1)
          TH1 = distance(test, reference);
          if(distance(test, reference) lớn hơn TH2)
          TH2 = distance(test, reference);

          Ngưỡng bây giờ là [TH1, TH2]: nghĩa là đối với mỗi ảnh test mới, ảnh ref sẽ được gán là giá trị đúng của nó khi nhận dạng nếu đó là ảnh gần nhất và khoảng cách của 2 ảnh nằm trong khoảng [TH1, TH2].

          • Tuan Says:

            Anh ơi, em đã hiểu ý anh ạ. Nhưng anh ơi, trong chương trình của em làm là như thế này: Em có một Form cho người dùng bật WebCam và phát hiện khuôn mặt ở trước WC sau đó điền thông tin vào và add vào CSDL. Form thứ 2 là Nhận dạng 1 người trước WC.
            Như vậy thì CSDL của em chỉ có 1 tập ảnh được training thôi anh ơi. Vậy làm sao em tính được TH1 và TH2 như công thức anh đưa được à anh? Em đang thắc mắc ở đây anh ơi!
            Em cảm ơn anh nhiều!

          • 4fire Says:

            Trường hợp của em là trường hợp mà tập training=reference, về phần test thì em làm thế này: Sau khi đã có tập training, em có thể lấy bao nhiêu ảnh tùy ý-một người có thể nhiều hơn 1 ảnh-nhưng số lượng cần đủ lớn (vài trăm tới vài nghìn tùy vào qui mô hệ thống), em chọn tập reference từ đó với mỗi người chỉ có 1 ảnh- có thể có ảnh không nằm trong tập training. Tiếp đến, em lấy các ảnh (cũng capture từ webcam) của những người đã có trong tập reference để test và tính ngưỡng. Sau khi thiết lập ngưỡng thì chạy thử nghiệm xem đã ổn chưa, nếu chưa thì làm lại bước chọn ảnh vào tập training và ảnh của tập test để tăng hiệu năng nhận dạng (tập training lớn hơn sẽ có tỉ lệ nhận dạng tốt hơn) và ngưỡng (tập test nhiều hơn thì ngưỡng sẽ sát hơn).

          • Tuan Says:

            TH1 = 0;
            TH2 = INF;
            for mỗi cặp ảnh (test, reference) mà kết quả là nhận dạng đúng
            if(distance(test, reference) nhỏ hơn TH1)
            TH1 = distance(test, reference);
            if(distance(test, reference) lớn hơn TH2)
            TH2 = distance(test, reference);

            Anh ơi, distance(test, ref) có cái < 0 hả anh? do mình khởi tạo TH1 = 0 à?
            Anh cho em hỏi là tập test sẽ có số lượng ảnh bằng với tập reference hả anh?
            và khi mình thực hiện vòng lặp for cho mỗi cặp (test,ref) là lấy từng ảnh trong tập test tính toán với từng ảnh trong tập ref hả anh? (theo kiểu tổ hợp hả anh)?

          • 4fire Says:

            Em vẫn chưa thực sự hiểu, lúc nhận dạng 1 ảnh test, ta phải tìm ảnh nằm trong tập reference mà độ tương đồng của nó so với ảnh đó là cao nhất, độ tương đồng này được cụ thể hóa bằng 1 hàm khoảng cách, khoảng cách càng gần thì độ tương đồng càng cao và ngược lại. Thông thường thì giá trị khoảng cách nằm trong khoảng [0, 1], ví dụ em dùng hàm khoảng cách euclidean thì làm sao mà khoảng cách có thể <0 được, nhưng nếu dùng hàm negative angle distance thì khoảng cách sẽ âm. Tập test không nhất thiết phải có số lượng bằng với tập reference, mà có thể ít hơn hoặc nhiều hơn. Tất nhiên là để tìm giá trị distance(test, ref) min thì ta phải duyệt toàn bộ tập reference với mỗi ảnh test.

          • Tuan Says:

            Dạ anh ơi, do em dùng lớp EigenObjectRecognizer có hỗ trợ hàm tính Khoảng cách giữa ảnh input và các ảnh đã có trong CSDL như thế này à:

            ///
            /// Get the Euclidean eigen-distance between and every other image in the database
            ///
            /// The image to be compared from the training images
            /// An array of eigen distance from every image in the training images
            public float[] GetEigenDistances(Image image)
            {
            using (Matrix eigenValue = new Matrix(EigenDecomposite(image, _eigenImages, _avgImage)))
            return Array.ConvertAll<Matrix, float>(_eigenValues,
            delegate(Matrix eigenValueI)
            {
            return (float)CvInvoke.cvNorm(eigenValue.Ptr, eigenValueI.Ptr, Emgu.CV.CvEnum.NORM_TYPE.CV_L2, IntPtr.Zero);
            });
            }

            Kết quả cho ra là các giá trị rất lớn à anh, nếu ảnh input là 1 ảnh có trong CSDL thì giá trị khoảng cách này sẽ nhỏ hơn 1 tý (khoảng vài trăm à). Anh cho em hỏi em dùng hàm này để tính khoảng cách Euclidean được ko anh?
            Và anh ơi, ứng dụng của em chỉ là 1 đồ án thì em không chuẩn bị đủ vài trăm khuôn mặt để làm tập training thì em chọn vài chục được không anh?
            Em cảm ơn anh đã giải đáp thắc mắc!

          • 4fire Says:

            OK, do em dùng thư viện nên không kiểm soát được miền giá trị của các khoảng cách. Cũng không sao, nguyên tắc vẫn không đổi, và kết quả vẫn đúng, ảnh càng có độ tương đồng cao thì khoảng cách càng bé. Em vẫn dùng cách tìm ngưỡng như đã hướng dẫn, cái hàm này của em trả về 1 mảng thì em cần tìm giá trị min của mảng đó, với nhiều ảnh test thì có nhiều giá min khác nhau, em tìm max và min của các giá trị min đó, hai có đó chính là ngưỡng. Em lấy khoảng 100 là ổn. Còn nếu không thì đành vậy, lấy vài chục nhưng khi đó kết quả sẽ khá thấp đấy.

          • Tuan Says:

            Hi, em hiểu rồi à anh ơi. Giờ em sẽ làm thử à.
            Mà anh ơi, giờ do em ko có nhiều người để lấy ảnh dùng làm ảnh training thì em có thể dùng 1 ảnh người trên mạng (tức là em dùng ảnh tĩnh thay vì real time) được không anh? Rồi khi test em lại load ảnh tĩnh đó lên để test được ko anh? Nếu làm như vậy thì sau này test với ảnh người thật đứng trước Webcam có sai sót gì ko anh?

          • 4fire Says:

            Được, khi tập training không chứa ảnh của người sẽ nhận dạng thì tỉ lệ nhận dạng sẽ thấp đi một chút, nhưng không đáng kể (trong trường hợp tập training đủ lớn).

          • Tuan Says:

            Anh ơi, khi em add khoảng 100 khuôn mặt bằng ảnh tĩnh (tức là em đã có tập training là 100 ảnh), ở chương trình của em tập reference = tập training, nên tập refence em cũng lấy 100 ảnh đã được training đó.
            Bây giờ em tạo tập test bằng cách lấy vài chục ảnh trong tập reference (vì em chưa dùng ảnh capture từ WC nên em phải dùng ảnh tĩnh của người cần nhận dạng) ==>> Khi em thực hiện tính khoảng cách từng ảnh của tập test và tập reference thì min nó luôn bằng 0 anh ơi.(do lấy cùng 1 ảnh để so sánh à). Giờ em phải làm sao để tính ngưỡng à anh? Quá trình nhận dạng như trên có đúng chưa anh?
            Em cảm ơn anh đã hỗ trợ cho em!

          • 4fire Says:

            Em nhận được giá trị nhỏ nhất bằng 0 là đúng vì nếu ảnh nhận dạng lại trùng với ảnh training và reference thì điều này là hiển nhiên, khoảng cách bằng 0 nghĩa là độ tương đồng tuyệt đối. Việc đầu tiên là em phải lấy tập ảnh test khác hoàn toàn với tập training và reference, đây là việc bắt buộc. Sau đó mọi việc làm như anh đã nói.

  129. Phuong Says:

    Em chào anh!

    Em cũng đang làm đề tài về lĩnh vực Nhận dạng khuôn mặt bằng PCA Eigenface, em dùng Emgu trong C# ạ.
    Anh có thể trả lời giúp em về chỗ tạo tập training và tập test không ạ? Theo em hiểu là như vậy: Khi bắt đầu chương trình (chưa có dữ liệu gì hết) mình sẽ cho 1 người đứng trước WebCam và capture ảnh và điền thông tin ->lưu vào CSDL, tiếp tục lấy hết ảnh của những người cần nhận dạng (em làm ứng dụng Điểm danh nhân viên à anh). Lúc này mình đã được tập training = tập reference đúng không anh?
    Sau đó em lấy ảnh cũng của những người trong tập training (lấy 1 vài ảnh) để làm tập test. Em sẽ lần lượt tính distance(test, reference) rồi tính ra ngưỡng. Anh cho em hỏi ảnh trong tập test có phải lấy nguyên ảnh trong tập training ko anh? Hay là cũng của 1 người trong tập training mà ở góc độ ảnh khác. Nếu lấy ảnh ở góc độ khác thì khi mình training mình nên capture 1 người nhiều ảnh để phân ra 2 tập cho khỏe đúng không anh?
    Đó là suy nghĩ của em, nhờ anh xem có đúng không ạ?

    Cảm ơn anh!

    • 4fire Says:

      Suy nghĩ của em sai hoàn toàn. Tập training có thể trùng với tập reference (mặc dù các hệ thống hiện nay đều không khuyến khích điều này) nhưng tập test thì phải khác với hai tập này. Em có thể capture kiểu gì tùy ý, nhưng các ảnh của tập test/reference và test/training phải là khác nhau.

      • Phuong Says:

        Dạ, anh ơi, khác ở đây là cũng cùng 1 người ở tập training nhưng khác như về góc độ chụp (nghiêng sang trái, phải, cúi đầu…) phải ko anh? Nếu đúng thì khi em capture 1 người để tạo tập training thì em sẽ cho người đó nghiêng theo nhiều hướng để có được nhiều bức ảnh ở những góc độ khác như để mình tạo luôn tập test phải ko anh?
        Em cảm ơn anh!hi

        • 4fire Says:

          Đúng thế, khác về điều kiện ánh sáng, cảm xúc trên khuôn mặt (cười, la hét, cau có ..), hướng, thời gian chụp là được.

          • Phuong Says:

            Hi, em cảm ơn anh đã trả lời giúp em.
            Anh cho em hỏi thêm là với chương trình Điểm danh của em (một chương trình nhỏ) thì em cần số lượng ảnh training và test bao nhiêu là hợp lý à anh? Và mỗi khi add thêm 1 người mới và delete 1 người thì em có cần phải tính lại Ngưỡng ko anh?
            Em cảm ơn anh!

          • 4fire Says:

            Số lượng ảnh phụ thuộc vào qui mô chương trình của em theo nguyên tắc sau: số ảnh training ít nhất bằng số ảnh của số người sẽ nhận dạng, lưu ý là số ảnh của pha development này không nhất thiết phải là các ảnh của những người sẽ nhận dạng. Do vậy số ảnh test cũng tối thiểu bằng với số người sẽ nhận dạng khi hệ thống chạy. Về việc tính lại ngưỡng thì không phải lúc nào cũng cần thiết: nếu ảnh của người bị xóa có khoảng cách tới ảnh trong reference của nó nằm ở các chặn của ngưỡng thì tính lại sẽ tốt hơn, nhưng nếu nó nằm trong khoảng ngưỡng thì không cần thiết=> nếu chi phí tính toán của việc tính ngưỡng không quá cao (chậm) thì có thể tính lại ngưỡng.

          • Phuong Says:

            Hi, vậy chương trình của em khi mới bắt đầu vào sẽ cho những người cần nhận dạng (ví dụ ở đây là tất cả Nhân viên của công ty) đứng trước webcam để capture ảnh (capture nhiều hướng và cảm xúc, 5 ảnh mỗi người), em sẽ lấy 2 ảnh lưu cùng với thông tin vào CSDL (mỗi người 2 ảnh ở tập training) và cùng lúc em lưu 3 ảnh còn lại của người đó lưu file test để tạo tập Test. Nếu công ty có 50 người thì tập Training sẽ có 100 ảnh và tập Test có 150 ảnh.
            Sau đó em sẽ cho từng ảnh trong tập test đưa vào nhận dạng thử (làm bằng tay, thủ công phải ko anh?), lấy được khoảng Ngưỡng, sau đó đưa ngưỡng đó vào chương trình và chạy thử với người thật đúng ko anh?

            Anh giúp em xem lại cấu trúc chương trình như vậy đúng chưa anh ơi? Do em mới học môn này và đây là bài tập nên em cũng muốn hỏi lại anh cho chắc rồi bắt đầu làm ạ!
            Anh có code của bài dạng này có thể gửi cho em tham khảo được ko anh!hi
            Email của em là: nguyenvanphuong008@gmail.com
            Em cảm ơn anh nhiều ạ!

          • 4fire Says:

            Đúng vậy, việc capture ảnh và đưa vào các tập của em như thế là tạm ổn nhưng có thể không cần phải bắt người ta đứng trước webcam mà đặt một cái webcam ở chỗ mọi người hay qua lại rồi capture tự động để đưa vào tập test, còn ảnh ở tập training thì có thể scan từ ảnh hồ sơ cá nhân. Về code thì anh không có cái hệ thống chấm công nào như em muốn, anh chỉ có các code viết bằng Matlab hoặc OpenCV cho việc nghiên cứu của mình và chỉ có thể send cho em code Matlab nếu em cần. Code OpenCV em xem ở các link trong bài, có không dưới 2 cái đâu.

          • Phuong Says:

            Hi, dạ, theo anh nói ảnh training có thể scan từ ảnh từ hồ sơ cá nhân của 1 người thì cũng có nghĩa là trong tập training mỗi người có thể chỉ có 1 ảnh cũng được đúng ko anh?hi
            Anh có thể send code Matlab ko ạ?hi
            Em rất cảm ơn anh đã giúp đỡ em!

          • 4fire Says:

            Thường thì sẽ là như vậy, tập training có thể gồm 1 hoặc nhiều ảnh cho mỗi người, tập training càng lớn thì tỉ lệ nhận dạng đúng sẽ cao lên một chút nhưng cũng có giới hạn: dù có tăng số lượng ảnh training quá giới hạn thì tỉ lệ nhận dạng cũng không tăng. Code matlab sẽ được gửi qua email cho em.

          • Phuong Says:

            Hi anh!
            Anh cho em hỏi chỗ em test từng ảnh trong tập test để tìm ra ngưỡng đó anh? Hiện tại em làm bằng cách là load từng ảnh trong tập test vào chương trình để nhận dạng. Nếu nhận dạng đúng người trong CSDL (kết quả chính xác) thì em sẽ lấy khoảng cách nhỏ nhất đó, tương tự em làm với tất cả các ảnh còn lại và lấy được các khoảng cách nhỏ nhất đó. Và ngưỡng là cái nhỏ nhất và lớn nhất. Em muốn hỏi anh là khi em giao chương trình cho khách hàng (ở đây là ví dụ thôi à anh. :D) thì làm sao khách hàng có thể biết cách mà tính ngưỡng à anh. Vì thế em nghĩ em nên viết 1 tool tự động load tất cả các ảnh trong tập test vào tự động test và đưa ra Ngưỡng phải không anh?
            Và anh cho em hỏi khi em chạy thử chương trình thì đôi lúc chương trình nhận dạng nhầm 2 người với nhau (2 người này đều có trong CSDL) thì điều đó có sai gì ko anh? (em nghĩ là ở mỗi góc độ thì khuôn mặt của mỗi người sẽ khác nên tạo ra vấn đề này).

            Em cảm ơn anh!

          • 4fire Says:

            Về vấn đề tính ngưỡng thì có 2 lựa chọn: thường thì tính ngưỡng xong, người ta sẽ cố định và chuyển cho người sử dụng, cách thứ hai là nếu người sử dụng có cơ sở dữ liệu ảnh mặt khác hoàn toàn với khi phát triển hệ thống (tính ngưỡng, học, test) thì có thể yêu cầu họ cung cấp một phần dữ liệu thật nhưng không sử dụng ở pha triển khai để tính ngưỡng lại, nếu được. Còn về việc nhận dạng sai là bình thường vì eigenfaces chỉ cho kết quả nhận dạng đến như vậy, muốn chính xác hơn thì phải dùng các phương pháp mạnh hơn.

          • Phuong Says:

            Dạ anh, thế thì em nghĩ việc tính Ngưỡng thì người xây dựng hệ thống nên tự tính bằng tay, chứ làm tự động thì ko được vì có những trường hợp ảnh test của người này nhưng nhận dạng ra người khác cũng có đúng ko anh?–> anh trả lời giúp em với hi.^^
            Anh cho em hỏi nếu hệ thống của mình cần độ chính xác thì có thuật toán nào mạnh hơn vậy anh? Anh có thể gợi ý cho em với ạ!

            Em chân thành cảm ơn anh ạ!

          • 4fire Says:

            Không, thường thì người ta fix ngưỡng sau đó chỉ chạy thôi. Việc nhận dạng sai là do lỗi của thuật toán chứ không phải do cách tính ngưỡng. Về phương pháp tốt hơn thì gợi ý đầu tiên là LBP, sau đó là LPQ, và tiếp đến là LQP.

  130. sindhu Says:

    Hello currently i am working on face recognition project using PCA and KPCA. Can you send me the matlab code to saisindhu0123456@gmail.com ? Thank you in advance.

  131. nguyễn hoàng dương Says:

    Chào anh, em cũng đang tìm hiểu về chủ đề này, anh có thể giải đáp những thắc mắc cho e trong quá trình tìm hiều được không?
    mail của em hanhkhatxahoa@gmail.com

  132. Tan Huynh Says:

    Em chào anh! Để làm đồ án về lĩnh vực này phải đọc sách nào ah!
    Em chỉ còn 1 tháng và không biết phải học như thế nào? Về phần này thật sự rất khó! Các cuốn sách xử lí ảnh nói chung đều cung cấp các câu lênh căn bản về XLA (nén ảnh, nâng cao chất lượng ảnh,…) mà không đề cập tới nhận dạng mặt người hay PCA…
    Hay em nên học từ source code, anh có thể send cho e code được không ah! huynhtrieunhattan@gmail.com

  133. antoniophuocmien Says:

    Chào anh,
    Em đang muốn nghiên cứu làm đồ án nhận dạng gương mặt, nhờ anh tư vấn và anh có thể gửi code cho em được không anh?
    email của em là antonio86doan@gmail.com

  134. www.vlvc.edu.vn Says:

    Chao anh,
    Em dang lam luan van ve nhan dang khuon mat de dieu khien mo cong cho oto cung bang thuat toan 2D-PCA và 2D-LDA ket hop vơi mang noron RBF , nho anh cung cap them thong tin ve thuat toan cung nhu code giup em nhe, em mong nhan duoc hoi am tu anh. Cam on.
    Dia chi mail: “thanhtoan2902@gmail.com”

  135. Tan Says:

    Em chào anh, em đang làm đồ án về phần sử dụng thuật toán PCA để nhận dạng khuôn mặt.
    Em sử dụng thư viện Emgu trong C# và em làm như sau:
    1. Khi em nhận thông tin của 1 nhân viên: em lưu thông tin và đi kèm với 1 ảnh lưu vào csdl để sau này dựa vào đó nhận dạng, mỗi người 1 ảnh.
    2. Khi em tiến hành nhận dạng, em cho 1 người đứng trước camera và chụp hình, đem ảnh đó sử dụng emgu so sánh với các ảnh đã có trong csdl.

    Anh cho em hỏi cách em làm như vậy có đúng với thuật toán PCA nhận dạng khuôn mặt ko ạ?
    Anh có thể gửi code cho em tham khảo với được ko ạ?
    EM cảm ơn anh nhiều.
    Email của em là: nttuan3105@gmail.com

    • 4fire Says:

      Em nên đọc lại bài viết này để hiểu kỹ hơn về PCA.

      • tuan Says:

        Dạ em hiểu rồi a.
        Anh ơi, em làm theo class EigenObjectRegconizer trong Emgu cho bài toán điểm danh nhân viên ạ, vậy PCA trong class đó dùng để trích xuất đặc trưng và giảm số chiều đúng ko anh?
        Còn nhận dạng là dùng k-NN đúng ko ạ?
        Anh cho em hỏi thêm với bài toán điểm danh của em là loại nhận dạng Identification hay Veritication ạ?
        Em muốn tự code lại thuật toán PCA thì có đc ko ạ anh?
        Cảm ơn anh rất nhiều.

        • 4fire Says:

          Mô hình bài toán của em là thế này: em có N người, dùng PCA để trích xuất đặc điểm và học, lưu lại thông tin về mỗi người (thực ra là ảnh mặt và định danh-tên của họ) vào CSDL. Khi mỗi người cần điểm danh, chương trình sẽ chụp ảnh mặt của họ, tìm xem ảnh đó khớp với ai trong CSDL, khi đó k-NN sẽ được sử dụng cùng với 1 ngưỡng để xem người đó là ai. Phải dùng ngưỡng vì k-NN chỉ tìm ra người giống nhất với người được chụp, nghĩa là luôn có 1 kết quả, nhưng chưa chắc người đó đã ở trong CSDL, và đây là bài toán identification. Hy vọng em hiểu thêm được gì đó.

          • Tan Says:

            Dạ, thanks anh à.
            Anh cho em hỏi giờ em ko muốn dùng lớp hỗ trợ trong Emgu mà tự code xây dựng lại thuật toán PCA có được ko anh?
            Anh có thể gợi ý em được ko ạ?
            Em cảm ơn anh rất nhiều ạ!

          • 4fire Says:

            Với kinh nghiệm của anh thì việc code lại được hay không dựa vào hai yếu tố:
            + Em đã thực sự hiểu hết các chi tiết của thuật toán chưa?
            + Có một chỗ khó khi cài đặt eigenfaces là gọi hàm EIG (Eigenvalue decomposition) hoặc SVD (Singular Value Decomposition) để tìm eigenvectors và eigenvalues.
            Nếu hiểu hết thì em có thể tự cài đặt được, nhưng phải tìm hiểu xem dùng 2 cái hàm ở trên như thế nào (OpenCV có hàm pca thì chắc EMGU cũng có, hoặc em có thể dùng thư viện Eigen-http://eigen.tuxfamily.org/index.php?title=Main_Page).

    • Nghèo Mà Vui Says:

      t có 1 cái đồ án nhận diện khuôn mặt như p nói nè

  136. TA Says:

    Anh ơi, em đang làm một cái đánh giá ( thực nghiệm bằng dữ liệu tự chụp ) về PCA, em đang không biết nên đánh giá PCA theo những tiêu chí nào, và a có thể send em source code PCA matlab được không ạ. Em cảm ơn anh nhiều

  137. Nghèo Mà Vui Says:

    a ơi cho e hỏi.bjo e làm 1 đồ án về nhận diện khuôn mặt.dùng thuật toán eigenface và c# bjo thầy có hỏi e là cái eigenface nó được tính toán ntn để xử lý ảnh

  138. www.vlvc.edu.vn Says:

    Em đang nghiên cứu về đề tài nhận dạng mặt người. Em Nhờ giúp source code của thuật toán PCA với. Cảm ơn.

  139. Omachi Nấm Says:

    Em chào a!
    Hiện tại em cũng đang bắt đầu nghiên cứu về đề tài này. Anh có thể gửi cho em xin các tài liệu liên quan và code của đề tài này được không ạ !
    Mail của em là trangnt12@wru.vn
    Em cám ơn ạ.

  140. Hồ Quang Says:

    Anh có thể cho em để tham khảo được không ạ ! Cảm ơn anh nhiều !
    Email của em: qth190501@gmail.com

  141. Vũ Thái Anh Says:

    Anh có thể cho e xin source code và tài liệu tham khảo không ạ?
    Email của em: jihamidnight@gmail.com
    Cám ơn anh!

  142. Thu Tiny Says:

    em cũng đang nghiên cứu về cái này 😦 anh có thể send cho em ít tài liệu vào source code được không aj :d Em cám ơn anh trước .

  143. chí hảo Says:

    Gửi code cho mình với bạn.Mình cũng đang nguyen cứu nhận dạng mặt người trên eigenface.

  144. toan Says:

    bai viêt hay, em cũng đang cân có Source code của PCA, nho anh chi giúp với. Cam ơn. Email cua em là “thanhtoan2902@gmail.com”

  145. hoang an Says:

    xin nhờ bạn giúp đỡ hoanganf@gmail.com

  146. Bá Vũ Says:

    nguyenbavu1993@gmail.com
    hy vọng nhận được source code của bạn

  147. ducmanhkthd Says:

    Minh cũng đang nghiên cứu về lĩnh vực này , mọi tài liệu và source liên quan bạn có thể gửi qua mail cho mình được k ngtanquilong@gmail.com thanks nha

    • ducmanhkthd Says:

      Minh cũng đang nghiên cứu về lĩnh vực này , mọi tài liệu và source liên quan bạn có thể gửi qua mail cho mình được k ducmanhkthd@gmail.com thanks ad

      • 4fire Says:

        Thực ra thì tôi có làm một thời gian về nhận dạng mặt và giờ vẫn nghiên cứu tiếp nên khá nhiều tài liệu liên quan, chỉ riêng database để test cũng hơn 100 Gb, tài liệu cũng hơn 10 Gb nên không thể gửi cho bạn được. Tôi sẽ gửi cho bạn code của bài viết này qua email. Nếu bạn hứng thú và chọn muốn hướng nào đó để đi tiếp thì ta sẽ trao đổi tiếp.

  148. Gia Cát Lượng Says:

    cho em xin chương trình demo với các a , mail của e là trinhhd92@gmail.com
    em cảm ơn

  149. NZT48_gh0st Says:

    Mình đang tìm hiểu về lĩnh vực này , bạn có thể gửi source code và tài liệu cho mình được không ?
    vinhpc50@gmail.com

  150. Tinh Says:

    Mình đang tìm hiểu về lĩnh vực này , bạn có thể gửi source code và tài liệu cho mình được không ? cảm ơn bạn rất nhiều

  151. Hương Says:

    Cảm ơn bài viết của tác giả rất nhiều. Tôi cũng rất đang quan tâm đến vấn đề này có thể gởi tài liệu và source code trong phạm vi có thể được không ạ. Qua email t3hhaiquy@gmail.com

  152. ThanhPH Says:

    Cảm ơn tác giả. Quá hay, cho mình xin souce code tham thảo được không. Mail mình là legolas1990@gmail.com

  153. HieuNguyen Says:

    cảm ơn bạn vì bài viết rất chất lượng và tâm huyết.

  154. Phong Nguyễn Says:

    Admin có thể share source để cho mình đọc tìm hiểu được không ! mình đang làm đồ án có liên quan đến nhận diện để Login vào hệ thống đang dừng lại để tìm hiểu thuật toán 🙂 . Mail: Nguyenthanhphong2014@gmail.com

  155. doquockhoi Says:

    Mình đang làm tiểu luận có liên quan đến PCA mong nhận được sự giúp đỡ của bạn. Mail của mình là doquockhoi@gmail.com. Thanks bạn!

  156. Tinh Says:

    cho em xin code với ạ.em đang rất cần để tham khảo,cám ơn anh nhiều!

  157. Tinh Says:

    Mình đang tìm hiểu về lĩnh vực này , bạn có thể gửi source code và tài liệu cho mình được không ? cảm ơn bạn rất nhiều
    mail: hoangtuden1001@gmail.com

  158. Thái Phạm Says:

    Em cũng đang thực hiện luận văn tốt nghiệp và đang làm phần này nhưng chưa tìm ra được hướng, anh có thể cho em xin source code để em tham khảo và có thể một phần nào hướng dẫn những khuất mắt của em được không anh?
    Em cám ơn anh!
    Email: thai51104461@gmail.com

  159. Thái Phạm Says:

    Dạ đề tài em có liên quan đến giải thuật fuzzy extractor a có thể chỉ dẫn e phần đó được không anh? E cám ơn!

  160. hung_cao Says:

    Chào anh!

    Đầu tiên xin cảm ơn anh về bài viết vô cùng chất lượng này.

    Em cũng đang bước đầu tiếp xúc làm quen nghiên cứu về nhận dạng khuôn mặt nên em có mấy ý muốn hỏi anh thế này mong anh giúp đỡ. Đồ án em viết là làm một trang web nhận dạng khuôn mặt từ ảnh chụp lớp học trong giờ học nhằm mục đích phục vụ cho vệc điểm danh sinh viên hoặc học viên một cách tự động. Đồ án ứng dụng việc nhận dạng khuôn mặt và phương pháp học tăng cường trong học máy để nâng cao chất lượng điểm danh tự động. Em muốn hỏi anh vài ý như sau:

    1. Từ ảnh chụp học viên trong lớp học sẽ cho sinh viên vào crop ảnh khuôn mặt của họ để lấy data phục vụ cho việc nhận dạng khuôn mặt. Như em tìm hiểu thì có 3 cách để đưa ảnh về ảnh gray ( http://www.johndcook.com/blog/2009/08/24/algorithms-convert-color-grayscale/ ) thì theo anh cách nào là tốt nhất với lại khi resize ảnh crop về chuẩn khuôn mặt thì kích cỡ bao nhiêu là tốt nhất ? Anh có bài báo hay tài liệu gì về phần này thì cho em xin với.

    2. Thầy em bảo nhận dạng khuôn mặt bằng cách lưu trung bình cộng mỗi pixel ảnh của tất cả các ảnh của 1 sinh viên, học viên lưu vào database và sử dụng nó để so sánh với khoảng cách của nó với các ảnh cần so sánh, cái nào gần hơn thì chọn.Đó có phải là thuật toán PCA không anh?

    Em cảm ơn anh nhiều!

    Chúc anh một ngày vui vẻ!

    • 4fire Says:

      Chào em, với các câu hỏi của em:
      1. Để convert 1 ảnh màu về ảnh xám có nhiều cách nhưng anh vẫn hay dùng thuật toán của OpenCV (hay Matlab) thì là: Y = 0.299 R + 0.587 G + 0.114 B (tham khảo nguồn http://stackoverflow.com/questions/19181323/what-grayscale-conversion-algorithm-does-opencv-cvtcolor-use). Còn kích thước ảnh thì anh hay dùng 128×128, với OpenCV thì là phương pháp nội suy INTER_AREA.
      2. Cái em mô tả, anh không rõ là đã chính xác những lời thầy em nói chưa, nhưng không phải là PCA. PCA là cái mày anh viết trong bài này.

      • hung_cao Says:

        Cảm ơn anh đã trả lời!

        Em thấy đồ án mà em đang làm có ý tưởng khá giống với project java code anh để link ở bài viết đầu tiên. Với mỗi sinh viên sẽ có 1 tập ảnh training. Sinh viên A đầu tiên sẽ có tập n ảnh của họ và được lưu đặc điểm nhận dạng vào database với ma trận trung bình từng pixel ảnh, khi thêm ảnh B cũng của sinh viên A đó ta sẽ tính toán lại đặc điểm nhận dạng của sinh viên đó với công thức tính trung bình từng pixel mới là Aij mới = (n.Aij cũ +Bij)/(n+1). Giờ thêm ảnh cần so sánh vào ta tính toán khoảng cách của ảnh đó so với đặc điểm nhận dạng của từng sinh viên.

        Anh có tài liệu nào về ý tưởng như thế cho em xin để tham khảo với.

        Em cảm ơn anh!

  161. Nguyen Dinh Trung Says:

    anh ơi. anh cho em xin code được không ạ? mail của em: nguyendinhtrungspk@gmail.com. Em cảm ơn ạ.

  162. Son Says:

    Chào bạn, mình cũng đang nghiên cứu lĩnh vực này. Tuy nhiên mình sử dụng Gabor kết hợp với PCA. Bạn có nghiên cứu phương pháp lai này không.

    • 4fire Says:

      Chào bạn, tôi có biết và có làm về Gabor. Kết quả của Gabor+PCA khá hạn chế nếu so sánh với các phương pháp mới công bố gần đây. Thường thì Gabor hay sử dụng như một kỹ thuật tạo nguồn trước khi áp dụng một thuật toán trích chọn đặc trưng khác (như LBP) chẳng hạn thì sẽ hiệu quả hơn. Tuy nhiên nếu code không khéo thì chạy Gabor sẽ khá mất thời gian.

      • Son Says:

        Nếu vậy, bạn có thể cho mình hỏi vấn đề này không?
        Sau khi áp bộ lọc Gabor lên hình ảnh, thì mỗi ảnh sẽ có một ma trận đặc trưng, vấn đề là các ma trận đặc trưng này có kích thước khác nhau. Như vậy thì làm sao để áp dụng PCA lên các ma trận đặc trưng này?

        • 4fire Says:

          Theo tôi hiều thì với ns tỉ lệ và or hướng khi áp dụng lên một bức ảnh input sẽ cho ra ns * or bức ảnh có kích thước bằng với ảnh input (và bằng nhau). Vì vậy để áp dụng PCA thì có 1 cách đơn giản là ghép tất cả các vector cột của các ma trận con (tương ứng với các ảnh thành phần) thành 1 vector đại diện cho mỗi ảnh mặt và áp dụng PCA (tuy nhiên cần lưu ý là các vector này sẽ có kích thước khá lớn).

  163. Son Says:

    Cám ơn bạn đã chia sẻ.
    Tuy nhiên, tôi muốn áp dụng PCA ma trận đặc trưng sau khi đã áp dụng bộ lọc Gabor. Ví dụ ta có 40 bộ lộc (8 hướng * 5 tỉ lệ), thì từ 40 bộ lọc này ta sẽ trích được đặc trưng của khuôn mặt (ma trận đặc trưng này rất nhỏ so với ma trận ảnh). Vấn đề là các ma trận đặc trưng lại có kích thước khác nhau.

    • 4fire Says:

      Tôi chưa hiểu từ kết quả của các bộ lọc thì bạn làm thế nào để tính được ma trận đặc trưng? Các ma trận đặc trưng có kích thước khác nhau nhưng khi ghép lại thì sẽ thành các vector có kích thước bằng nhau với các bức ảnh input ban đầu cùng độ phân giải?

      • Son Says:

        Cách làm là tại mỗi pixel ta sẽ dùng một thuật toán để xem đó có là điểm đặc trưng không. Nếu là điểm đặc trưng thì lấy giá trị của 40 bộ lọc tại vị trí đó. Sau khi xem xét hết ảnh ta sẽ có được ma trận đặc trưng.
        Mà tôi nghĩ rằng bây giờ tôi đã có hướng làm rồi. Tôi sẽ test thử xem có được không.

  164. nganct22 Says:

    em chào anh ạ??? e chuẩn bị làm đồ án tốt nghiệp có liên quan đến lĩnh vực này..a có thể cho e xin source code để e tham khảo thêm đc k ạ? mail của e là nganct22@wru.vn em cảm ơn a trước nhé @@

  165. Phạm Văn Says:

    Chào tác giả.
    Bài viết của bạn khá hay. Bạn có thể cho tôi xin nội dụng vào email: pvmanhspkt@gmail.com. Thanks

  166. Pham Quang Phuc Says:

    Em cung đang nghiên cứu vấn đề này. quangphucmatter@gmail.com
    A có thể cho em source.
    Em cảm ơn nhiều

  167. thinh Says:

    Anh có thể gửi source code cho em để em tham khảo được không ạ. Nếu được anh gửi qua Gmail của em là : thinhphatla@gmail.com nhé.Cám ơn anh trước ^.^

  168. duong nguyen Says:

    Anh còn giữ code nhận dạng khuôn mặt bằng Matlab không cho em xin. Em cảm ơn!
    duongnguyen8990@gmail.com

  169. Nguyễn Tường Lam Says:

    Làm ơn gửi cho mình code nhận diện khuôn mặt với. Nếu có vấn đề gì thì mình sẽ gửi qua email để hỏi thêm. Cảm ơn nhiều. email mình là: tuonglamn@gmail.com

  170. quý huỳnh Says:

    Thanks tác giả rất là nhiều.Mình cũng quan tâm đến code nhận diện khuôn măt, mong được nhận mail từ tác giả
    quyhuynh1296@gmail.com.

  171. hung pham van Says:

    Chao a ạ.Hiện e đang tim hiểu về đề tài này,áp dụng mạng neuron de nhan dạng,e có thể xin code và chương trình của a để tham khảo không ạ,e xin chân thành cảm ơn.mail của e là hung12a1chuyenthaibinh@gmail.com

  172. Trần Mậu Says:

    Xin cảm ơn tác giả, tôi mới bắt đầu học và nghiên cứu về pattern recognition, tất cả với mình đang bắt đầu, nếu tác giả có code PCA matlap có thể cho mình xin để nghiên cứu cho rõ về phần coder, thực ra mình đang tìm hiểu và sử dụng python, nếu có code python thì tuyệt vời hơn. Xin cảm ơn tác giả.
    mail: mautc12@qq.com

  173. trang Says:

    gửi cho mình với ạ. hiện tại mình đang làm tiểu luận về cái này. mong bạn giúp đỡ.thanks. mail mình đây: dangthuytrang02091996@gmail.com

  174. ngoc hau Says:

    anh có thể gửi code cho em tham khảo được không, cảm ơn anh email: ngochau1608@gmail.com

  175. toan Says:

    co the cho minh sin code duoc khong a nguyenmanhtoan1501@gmail.com

  176. Thuy Diem Says:

    Em chào anh !
    Bài viết của anh thực sự rất bổ ích với em.
    Em mới đăng kí đề tài : Điểm danh tự động dựa trên nhận dạng khuôn mặt. Chẳng biết bắt đầu từ đâu nữa, nếu có thời gian anh có thể cho em 1 số lời khuyên, cho em xin tài liệu liên quan đến vần đề trên. Em đi học có nghe cô giáo nói: nhận dạng khuôn mặt bằng PCA. Nhưng em ko hiểu lắm. email của em: misa19792000@yahoo.com . Mong nhận được mail tư vấn của anh.

  177. Khôi Says:

    Em đang bắt đầu nghiên cứu đề tài này.Anh cho em xin code với.mail của em là: levankhoi22297@gmail.com ,Em cảm ơn anh.

  178. Tran Xuan Bach Says:

    Em cũng đã làm thử, nhưng sau đó việc quét chọn mặt ảnh không đúng như mong muốn, nên anh có thể gửi code cho em tham khảo được không ạ! Em cảm ơn.

  179. Dq Thien Says:

    Anh có thể gửi source code cho em để em tham khảo được không ạ. thiendq215@gmail.com

  180. Vu Dang Tuan Says:

    Chào anh,
    Anh có thể gửi cho em xin source code qua email vudangtuanbk@gmail.com được không ạ? Cảm ơn anh.

  181. NguyenTheLuc Says:

    Cảm ơn bạn. Mình đang bắt đầu làm quen với nhận dạng khuôn mặt. Bạn gửi code cho mình thang khảo được không ạ!!! Gmail của mình là nguyentheluc2@gmail.com. Thank!!

  182. Bui Duc Says:

    Anh cho em xin code project này với ạ Buihuuduc1997@gmail.com. Em cũng đang muốn tìm hiểu về đề tài này cho đồ án. Cám ơn anh

  183. hiep Says:

    em đang học môn máy học và đang tìm hiểu về vấn đề này trên matlab, a gởi cho em code matlab tham khảo anh nhé, cám ơn a nhiều và chúc a sức khỏe

    • hiep Says:

      em đang học môn máy học và đang tìm hiểu về vấn đề này trên matlab, a gởi cho em code matlab tham khảo vào mail hiep0109@yhaoo.com anh nhé, cám ơn a nhiều và chúc a sức khỏe

  184. minh Says:

    ad còn ol cho mình xin code project này với ạ email : Zumvkl@gmail.com. xin cảm ơn trước.

  185. trinh Says:

    cho em xin code project này với. email: trinhmadrid@gmail.com. xin cam on a

  186. Phong Says:

    cho mình xin code tham khảo với bạn oi phongtsdtvt2018@gmail.com. Cám ơn bạn nhìu

  187. Đức Trung Says:

    CHo mình xin code với bạn ơi truongductrung1997@gmail.com Cảm ơn bạn nhiều

  188. Hoàng Quý Says:

    Anh có thể cho mình xin code được không ạ; địa chỉ mail của mình: minhquy1208@gmail.com

  189. Trọng Nguyên Says:

    Chào anh, anh cho em xin source code để em tham khảo ạ. Email của em: ngtrongnguyen1903@gmail.com

  190. Tấn Phước Says:

    Chào anh ,
    Điều trước tiên , em xin gởi đến anh lời cảm ơn vì bài viết của anh đã giúp đỡ em rất nhiều
    và em xin source code để giải đáp những vấn đề chưa hiểu và làm về đề tài nhận dạng cảm xúc khuôn mặt
    (email : hotanphuocdh2017@gmail.com). Cám ơn anh

  191. Dung Says:

    e đang học về Eigenfaces-PCA anh cho em xin code để em tự nghiên cứu với ạ. mail của em là ledungnbhn@gmail.com. em cảm ơn ạ

  192. Quỳnh Says:

    Dạ em chào anh. Em đang học và nghiên cứu về PCA và nhận dạng khuôn mặt. Em muốn xin code của bài tập này để em nghiên cứu thêm ạ. Địa chỉ email của em là khanhquynh2003@gmail.com. Em xin cảm ơn ạ.

  193. PhungLy Says:

    em đang làm đồ án về Nhận dạng khuôn mặt với PCA mà không biết nên làm sao phần code nên anh cho e xin code về này để tham khảo được ko ạ (Email của em là phungly099@gmail.com). Em xin cảm ơn và chúc anh nhiều sức khỏe ạ


Leave a reply to Vũ Thái Anh Cancel reply