32
Xnh  Lê Xuân Bách -Phm Kiên Giang-Nguyn Đình Nam-  Đồng ThTâm 1 Trường đại hc Bách Khoa Hà Ni Vin công nghthông tin và truyn thông B môn kĩ thut máy tính Bài tp lớ n môn xnh: Extract face sequences from video Nhóm thự c hin:  Lê Xuân Bách Kĩ thut máy tính K52  Phm Kiên Giang Kĩ thut máy tính K52  Nguyn Đình Nam Kĩ thut máy tính K52  Đồng ThTâm Kĩ thut máy tính K52 Giáo viên hướ ng dn : Gv. Hoàng Văn Hip.

74973184-Xử-lý-ảnh

Embed Size (px)

Citation preview

5/17/2018 74973184-X -l - nh - slidepdf.com

http://slidepdf.com/reader/full/74973184-xu-ly-anh 1/32

Xử lý ảnh  Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam- Đồng Thị Tâm 

1

Trường đại học Bách Khoa Hà Nội

Viện công nghệ thông tin và truyền thôngBộ môn kĩ thuật máy tính

Bài tập lớ n môn xử lý ảnh: Extract face sequences from video

Nhóm thự c hiện: 

 Lê Xuân Bách Kĩ thuật máy tính K52 Phạm Kiên Giang Kĩ thuật máy tính K52

 Nguyễn Đình Nam  Kĩ thuật máy tính K52

 Đồng Thị Tâm Kĩ thuật máy tính K52

Giáo viên hướ ng dẫn : Gv. Hoàng Văn Hiệp.

5/17/2018 74973184-X -l - nh - slidepdf.com

http://slidepdf.com/reader/full/74973184-xu-ly-anh 2/32

Xử lý ảnh  Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam- Đồng Thị Tâm 

2

Mục lục

1.  Giới thiệu về OpenCV .......................................................................................................................... 3

1.1.  Tổng quan OpenCV ...................................................................................................................... 3

1.1.1. Các tính năng......................................................................................................................... 4

1.1.2. T ổ chức .................................................................................................................................. 6

1.2.  Cài đặt OpenCV ............................................................................................................................ 7

1.2.1. Cài đặt cơ bản ....................................................................................................................... 7

1.2.2. Tùy chỉnh khi cài đặt Windows ............................................................................................. 7

1.2.3. Sau khi cài đặt ....................................................................................................................... 7

1.3.  Lập trình với OpenCV: Một số vấn đề cơ bản .............................................................................. 8

1.3.1. V ề tiêu đề và thư viện ........................................................................................................... 8

1.3.2. Đọc và Ghi ảnh ...................................................................................................................... 81.3.3. Live Video nhập vào ............................................................................................................ 10

1.3.4. Chuy ển đổi Color ................................................................................................................. 11

1.3.5. OpenCV Iplimage................................................................................................................. 13

1.3.6. Truy cập giá trị Pixel ............................................................................................................ 13

2.  Face Detection. ................................................................................................................................... 15

2.1.  Background and Preliminaries.................................................................................................... 15

2.2.  Thực hiện nhận diện khuôn mặt, từng bước ............................................................................... 17

3.   Nhận dạng khuôn mặt ......................................................................................................................... 19

3.1.  Introduction PCA. ....................................................................................................................... 19

3.2.  Mathematics of PCA................................................................................................................... 20

3.3.  Nhận dạng khuôn mặt. ................................................................................................................ 22

4.  Giải thuật phân nhóm khuôn mặt. ....................................................................................................... 23

5.  Chương trình. ...................................................................................................................................... 24

5.1.  Chương trình có các hàm xử lý sau: ........................................................................................... 24

5.2.  Các lớ p xử lý vớ i ảnh:................................................................................................................. 25

5.3.  Chức năng chương trình.............................................................................................................. 27

5.4.  Chi tiết chương trình. .................................................................................................................. 29

6.  Đánh giá chương trình. ....................................................................................................................... 31

7.  Tài liệu tham khảo ............................................................................................................................. 32

5/17/2018 74973184-X -l - nh - slidepdf.com

http://slidepdf.com/reader/full/74973184-xu-ly-anh 3/32

Xử lý ảnh  Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam- Đồng Thị Tâm 

3

1. Giới thiệu về OpenCV 

OpenCV là mã nguồn mở của Intel, nó là một thư viện có khả năngnhúng vào trong các chương trình có khả năng nhận diện hình ảnh củamáy tính .Nó bao gồm khả năng tiên tiến như phát hiện khuôn mặt, theodõi khuôn mặt, nhận diện khuôn mặt…..  Ngoài ra, nó cung cấp rất nhiềucác thuật toán xử lý ảnh thông qua các hàm API. 

1.1.  Tổng quan OpenCV

Intel phát hành phiên bản đầu tiên của OpenCV vào năm 1999. Banđầu, nó yêu cầu như là thư viện xử lý hình ảnh của Intel.  Nhưng các vấn

đề phụ thuộc đã được gỡ bỏ và  bây giờ bạn có thể sử dụng OpenCV làmột thư viện độc lập. 

OpenCV hỗ trợ  đa nền tảng.  Nó hỗ trợ cả Windows và Linux, và gầnđây hơn là MacOSX. Với giao diện của nó là nền tảng độc lập. 

 Hình 1. Các khả năng của OpenCV có thể là nhận diện khuôn mặt (trêncùng bên trái), phát hiện đường đồng mức (trên bên phải), và phát hiệncạnh (phía dưới) 

5/17/2018 74973184-X -l - nh - slidepdf.com

http://slidepdf.com/reader/full/74973184-xu-ly-anh 4/32

Xử lý ảnh  Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam- Đồng Thị Tâm 

4

1.1.1.Các tính năng 

Dưới đây là một bản tóm tắt của các loại chức năng quantrọng trong OpenCV, phiên bản 1.0: 

  General computer-vision and image-processing algorithms

(mid- and low-level APIs).

Sử dụng các interface này, bạn có thể thử nghiệm nhiều tiêu

chuẩn thuật toán tầm nhìn máy tính mà không cần phải codechúng. Bao gồm các việc như : phát hiện cạnh, đường, và pháthiện góc, hình elip, kim tự tháp ….và nhiều hơn nữa . 

   High-level computer-vision modules 

OpenCV bao gồm một số khả năng cao cấp.   Ngoài việc pháthiện khuôn mặt, nhận diện, và theo dõi, nó còn  bao gồm dòngchảy quang học (bằng cách sử dụng máy ảnh chuyển động để

xác định cấu trúc 3D), hiệu chuẩn máy ảnh.

   AI and machine-learning methods.

Ứng dụng tầm nhìn máy tính thường đòi hỏi máy học hoặc sửdụng phương thức AI khác. Một số trong số này là có sẵn tronggói phần mềm OpenCV's Machine Learning

   Image sampling and view transformations.

Thường hữu ích để xử lý một nhóm các điểm ảnh như mộtkhối . OpenCV bao gồm giao diện cho tiểu vùng trích xuất hìnhảnh, lấy mẫu ngẫu nhiên, thay đổi kích thước, cong vênh, xoay,và các hiệu ứng quan điểm áp dụng . 

5/17/2018 74973184-X -l - nh - slidepdf.com

http://slidepdf.com/reader/full/74973184-xu-ly-anh 5/32

Xử lý ảnh  Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam- Đồng Thị Tâm 

5

   Methods for creating and analyzing binary (two-valued)

images 

Ảnh nhị phân thường được sử dụng trong các hệ thống kiểm

tra mà quét phát hiện các khuyết tật hoặc trong các bộ đếm. Ảnh nhị phân cũng thuận tiện khi định vị trí một đối tượng để nắm

 bắt . 

   Methods for computing 3D information.

Các chức năng này rất hữu ích để lập bản đồ và nội địa hoá

hoặc với nhiều quan góc nhìn từ một máy ảnh. 

   Math routines for image processing, computer vision, and 

image interpretation.

OpenCV bao gồm các thuật toán toán học thường được sửdụng trong đại số tuyến tính, thống kê, và hình học tính toán. 

  Graphics.

Các interface này cho phép bạn viết văn bản và vẽ trên hìnhảnh. Ngoài ra, các chức năng này rất hữu ích cho việc ghi nhãnvà đánh dấu . Ví dụ, nếu bạn viết một chương trình phát hiệnđối tượng, nó rất hữu ích để nhãn hình ảnh với kích cỡ và vị trícủa họ. 

  GUI methods 

OpenCV bao gồm các interface windown riêng củanó. Trong khi đây là những hạn chế so với những gì có thể đượcthực hiện trên các nền tảng khác, họ cung cấp một đơn giản, đanền tảng API để hiển thị hình ảnh, chấp nhận đầu vào ngườidùng thông qua con chuột hoặc bàn phím, và thực hiện kiểmsoát thanh trượt . 

5/17/2018 74973184-X -l - nh - slidepdf.com

http://slidepdf.com/reader/full/74973184-xu-ly-anh 6/32

Xử lý ảnh  Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam- Đồng Thị Tâm 

6

   Datastructures and algorithms 

Với các interface, bạn có thể thực hiệu quả hơn các việc như: tìm kiếm, lưu, và thao tác các danh sách lớn, bộ sưu, đồ thị và

cây .

   Data persistence 

 Những phương pháp này cung cấp giao diện thuận tiện để lưutrữ các loại dữ liệu vào ổ lưu trữ và lấy chúng sau này . 

1.1.2.Tổ chức 

Chức năng OpenCV được chứa trong một số module: 

  CXCORE chứa các định nghĩa kiểu dữ liệu cơ bản.  Ví dụ, cấu

trúc dữ liệu điểm cho hình ảnh, hình chữ nhật và được quy địnhtại cxtypes.h.   CV bao gồm xử lý hình ảnh và các phương pháp hiệu chỉnh máy

ảnh. Các chức năng tính toán hình học cũng nằm ở đây.   CVAUX được mô tả trong tài liệu hướng dẫn của OpenCV có

chứa mã  thử nghiệm và thực nghiệm.Tuy nhiên, các giao diệnđơn giản nhất để nhận dạng khuôn mặt trong mô-đun này. 

  ML chứa machine-learning interfaces. 

Các chức năng còn lại được chứa trong HighGUI vàCVCAM. Cả hai đều nằm trong một thư mục có tên là"otherlibs. Nó chứa các cửa sổ đa nền tảng, đa chức năng.

  CVCAM chứa các giao diện để truy cập video thông quaDirectX trên nền tảng Windows 32-bit. Tuy nhiên, HighGUIcũng chứa các giao diện video. 

5/17/2018 74973184-X -l - nh - slidepdf.com

http://slidepdf.com/reader/full/74973184-xu-ly-anh 7/32

Xử lý ảnh  Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam- Đồng Thị Tâm 

7

1.2.  Cài đặt OpenCV 

1.2.1.Cài đặt cơ bản 

OpenCV cho Linux hoặc MacOSX là các bản đóng gói như là

một kho lưu trữ mã nguồn. Bạn sẽ cần phải xây dựng các thư việntĩnh và thư viện chia sẻ đối tượng. Bạn có thể xây dựng một RPMđầu tiên, và cài đặt từ đó, hoặc biên dịch và cài đặt nó trực tiếp. 

Với Windows thì được đóng gói như là một thực thi cài đặtOpenCV và bạn cần chạy nó.  Nó đặt các file OpenCV vào một thưmục tùy bạn chọn, thay đổi đường dẫn hệ thống của bạn để có thểinclude những chương trình OpenCV. 

1.2.2.Tùy chỉnh khi cài đặt Windows 

Kể từ khi OpenCV là một bộ công cụ nhà phát triển, không phảilà một chương trình, bạn có thể muốn xác định vị trí nó ở đâu đókhác hơn so với thư mục Program Files của bạn.  Nếu bạn thích đểxác định vị trí nó ở nơi khác, quyết định rằng trước khi bạn chạytrình cài đặt, và nhập vào vị trí đó khi được hỏi. 

Bạn có thể thay đổi các biến PATH hệ thống của bạn bao gồmvị trí của họ, hoặc bạn có thể di chuyển chúng, sau khi cài đặt, từthư mục "bin"  của  OpenCV vào thư mục SYSTEM_ROOT của

 bạn. 

 Nếu bạn muốn di chuyển các file dll, nhưng không chắc chắnthư mục SYSTEM_ROOT của bạn, bạn có thể xác định vị trí nó

 bằng cách chạy các tiện ích có sẵn ở www.cognotics.com/utilities.

 Nếu bạn muốn thay đổi PATH, chứ không phải là di chuyển các fiel dll, bạn có thể cài đặt làm điều đó cho bạn bằng cách chọn hộpkiểm tra "Thêm thư mục bin vào PATH." 

1.2.3.Sau khi cài đặt 

5/17/2018 74973184-X -l - nh - slidepdf.com

http://slidepdf.com/reader/full/74973184-xu-ly-anh 8/32

Xử lý ảnh  Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam- Đồng Thị Tâm 

8

OpenCV chứa nhiều thư mục con. Các tài liệu thư mục chứa tàiliệu html cho tất cả các chức năng và kiểu dữ liệu OpenCV. 

Các tập tin tiêu đề  bạn sẽ cần phải bao gồm khi bạn biên dịch

chương trình sử dụng OpenCV được phân phối giữa các mô-đunOpenCV.

Trên cả hai Linux và Windows, bạn có thể xác định vị trí cáctiêu đề bằng cách tìm kiếm thư mục cài đặt và thư mục con cho têntập tin phù hợp với mô hình *. h, *. HPP. 

1.3.  Lập trình với OpenCV: Một số vấn đề cơ bản 

1.3.1.Về tiêu đề và thư viện 

Hầu hết các chương trình OpenCV cần bao gồm cv.h vàhighgui.h. Sau đó, nhận diện khuôn mặt, chúng tôi cũng sẽ baogồm cvaux.h. Các tập tin tiêu đề còn lại được bao gồm bởi nhữngtiêu đề cấp cao nhất. 

Mối liên kết của bạn sẽ cần cả hai con đường thư viện và têncủa các thư viện tĩnh để sử dụng. Các thư viện tĩnh, bạn cần phải

liên kết với file thư viện cxcore.lib, cv.lib, và highgui.lib. Sau đó,nhận diện khuôn mặt, bạn cũng sẽ liên kết cvaux.lib. Đây là những file trong thư mục "lib" của OpenCV.

1.3.2.Đọc và Ghi ảnh 

Hình ảnh I / O dễ dàng với OpenCV.Chương trình dưới đây làđể đọc một hình ảnh từ tập tin và viết nó như là một tập tin thứ hai,trong một định dạng nén khác nhau . 

o  // ImageIO.c

o  // Example showing how to read and write images

5/17/2018 74973184-X -l - nh - slidepdf.com

http://slidepdf.com/reader/full/74973184-xu-ly-anh 9/32

Xử lý ảnh  Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam- Đồng Thị Tâm 

9

o  #include "cv.h"

o  #include "highgui.h"

o  #include <stdio.h>

o  int main(int argc, char** argv)

o  {o  IplImage * pInpImg = 0;

o  // Load an image from file

o  pInpImg = cvLoadImage("my_image.jpg",

CV_LOAD_IMAGE_UNCHANGED);

o  if(!pInpImg)

o  {

o  fprintf(stderr, "failed to load input image\n");

o  return -1;o  }o  // Write the image to a file with a different name,

o  // using a different image format -- .png instead of .jpg

o  if( !cvSaveImage("my_image_copy.png", pInpImg) )

o  {

o  fprintf(stderr, "failed to write image file\n");

o  }o 

 // Remember to free image memory after using it!o  cvReleaseImage(&pInpImg);

o  return 0;

o  }   Để đọc một tập tin hình ảnh, chỉ cần gọi cvLoadImage (), và

truyền vào trong hàm đường dẫn fle.OpenCV hỗ trợ các địnhdạng hình ảnh phổ biến nhất, bao gồm JPEG, PNG, vàBMP. Bạn không cần phải cung cấp thông tin định dạng.  cvLoadImage () xác định định dạng tập tin bằng cách đọc phầnđầu tập tin. 

  Để viết một hình ảnh tập tin, hãy gọi cvSaveImage ().  Chứcnăng này quyết định định dạng tập tin để sử dụng từ phần mở rộng tập tin. 

  Cả hai cvLoadImage () và cvSaveImage () trong moduleHighGUI.

5/17/2018 74973184-X -l - nh - slidepdf.com

http://slidepdf.com/reader/full/74973184-xu-ly-anh 10/32

Xử lý ảnh  Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam- Đồng Thị Tâm 

10

1.3.3.Live Video nhập vào 

o  // Capture.c

o  // Example showing how to connect to a webcam and 

capture

o  // video frames

o  #include "stdio.h"

o  #include "string.h"

o  #include "cv.h"

o  #include "highgui.h"

o  int main(int argc, char ** argv)

o  {

o  CvCapture * pCapture = 0;

o  IplImage * pVideoFrame = 0;

o  int i;

o  char filename[50];

o  // Initialize video captureo  pCapture = cvCaptureFromCAM( CV_CAP_ANY );

o  if( !pCapture )

o  {

o  fprintf(stderr, "failed to initialize video capture\n");

o  return -1;

o  }o  // Capture three video frames and write them as files

o  for(i=0; i<3; i++)o  {

o  pVideoFrame = cvQueryFrame( pCapture );

o  if( !pVideoFrame )

o  {

o  fprintf(stderr, "failed to get a video frame\n");

5/17/2018 74973184-X -l - nh - slidepdf.com

http://slidepdf.com/reader/full/74973184-xu-ly-anh 11/32

Xử lý ảnh  Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam- Đồng Thị Tâm 

11

o  }o  // Write the captured video frame as an image file

o  sprintf(filename, "VideoFrame%d.jpg", i+1);

o  if( !cvSaveImage(filename, pVideoFrame) )

o  {o  fprintf(stderr, "failed to write image file %s\n", filename);

o  }o  // IMPORTANT: Don't release or modify the image returned 

o  // from cvQueryFrame() !

o  }o  // Terminate video capture and free capture resources

o  cvReleaseCapture( &pCapture );

o  return 0;o  }

  Giao diện chụp được khởi tạo   bằng cách gọicvCaptureFromCAM(). Chức năng này trả về một con trỏ đếnmột cấu trúc CvCapture. Bạn sẽ lưu trữ con trỏ để sử dụng cvQueryFrame () để lấy frame. 

  Khi bạn hoàn tất bằng cách sử dụng đầu vào video, gọi

cvReleaseCapture() để giải phóng tài nguyên. VớicvReleaseImage (), bạn thông qua địa chỉ của con trỏ CvCaptuređể cvReleaseCapture ().

  Ảnh (IplImage) bạn nhận được từ cvQueryFrame()!  Nếu bạncần phải sửa đổi dữ liệu hình ảnh, tạo một bản sao để làm việcvới:  //Sao chép các khung hình video:IplImage * pImgToChange = cvCloneImage (pVideoFrame);

/ / Chèn mã xử lý hình ảnh của bạn ở  đây ... / / sao chép saukhi sử dụng cvReleaseImage (& pImgToChange ); 

1.3.4. Chuyển đổi Color 

o  // ConvertToGray.c

5/17/2018 74973184-X -l - nh - slidepdf.com

http://slidepdf.com/reader/full/74973184-xu-ly-anh 12/32

Xử lý ảnh  Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam- Đồng Thị Tâm 

12

o  // Example showing how to convert an image from color 

o  // to grayscale

o  #include "stdio.h"

o  #include "string.h"

o  #include "cv.h"o  #include "highgui.h"

o  int main(int argc, char** argv)

o  {

o  IplImage * pRGBImg = 0;

o  IplImage * pGrayImg = 0;

o  // Load the RGB image from file

o  pRGBImg = cvLoadImage("my_image.jpg",

CV_LOAD_IMAGE_UNCHANGED);o  if(!pRGBImg)

o  {

o  fprintf(stderr, "failed to load input image\n");

o  return -1;

o  }o  // Allocate the grayscale image

o  pGrayImg = cvCreateImage

o ( cvSize(pRGBImg->width, pRGBImg->height), pRGBImg->depth, 1 );

o  // Convert it to grayscale

o  cvCvtColor(pRGBImg, pGrayImg, CV_RGB2GRAY);

o  // Write the grayscale image to a file

o  if( !cvSaveImage("my_image_gray.jpg", pGrayImg) )

o  {

o  fprintf(stderr, "failed to write image file\n");

o  }o  // Free image memory

o  cvReleaseImage(&pRGBImg);

o  cvReleaseImage(&pGrayImg);

o  return 0;

o  }

5/17/2018 74973184-X -l - nh - slidepdf.com

http://slidepdf.com/reader/full/74973184-xu-ly-anh 13/32

Xử lý ảnh  Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam- Đồng Thị Tâm 

13

Lưu ý rằng chức năng chuyển đổi, cvCvtColor (), yêu cầu haihình ảnh trong danh sách đầu vào của nó. Đầu tiên, pRGBImg, làhình ảnh nguồn. Thứ hai, pGrayImg, là hình ảnh đích.  Nó sẽ chứakết quả chuyển đổi khi cvCvtColor () trả về. 

1.3.5.OpenCV Iplimage.

OpenCV lưu trữ hình ảnh như là một cấu trúc C,IplImage. IPL là viết tắt của Thư viện xử lý hình ảnh.

Các kiểu dữ liệu IplImage được định nghĩa trongCXCORE. Ngoài dữ liệu pixel liệu, nó có chứa một số lĩnh vực môtả, gọi chung là Header Image. Chúng bao gồm 

  Chiều rộng - chiều rộng hình ảnh theo pixel.  Chiều cao  –  hình ảnh chiều cao tính bằng pixel.   Chiều sâu - một trong những hằng số được xác định trước

cho biết số bit cho mỗi điểm ảnh trên một kênh   nChannels - số lượng của các kênh dữ liệu (1-4). Mỗi

kênh có chứa một loại dữ liệu pixel.Ví dụ, hình ảnh RGBcó ba kênh màu đỏ, màu xanh lá cây, và cường độ màu

xanh.

1.3.6. Truy cập giá trị Pixel 

 Nó có thể tạo ra nhiều loại chức năng sử dụng OpenCV màkhông trực tiếp truy cập vào các dữ liệu pixel liệu. Ví dụ, cácchương trình nhận diện khuôn mặt, theo dõi, và công nhận không

 bao giờ thao tác dữ liệu pixel liệu trực tiếp. Tuy nhiên, nếu bạn viết

các thuật toán xử lý hình ảnh của riêng bạn, bạn có thể cần truy cậpvào các giá trị pixel liệu. Dưới đây là hai cách để làm điều đó: 

  Pixel truy cập đơn giản   Cách dễ nhất để đọc điểm ảnh cá nhân với cvGet2D (): 

5/17/2018 74973184-X -l - nh - slidepdf.com

http://slidepdf.com/reader/full/74973184-xu-ly-anh 14/32

Xử lý ảnh  Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam- Đồng Thị Tâm 

14

CvScalar cvGet2D (const CvArr *, int row, int col);Chứcnăng này có ba thông số: một con trỏ đến một thùng chứa dữliệu (CVArr *) và mảng chỉ số hàng và vị trí cột. Các thùngchứa dữ liệu có thể là một cấu trúc IplImage. Hàng trên cùng

của điểm ảnh là hàng = 0, và dưới cùng là = chiều cao-1hàng.

  CvGet2D () chức năng trả về một cấu trúc C, CvScalar, đượcđịnh nghĩa là:

CvScalar typedef struct{

double val [4];}

CvScalar;  Các giá trị pixel cho mỗi kênh trong val [i]. Đối với màu xám

hình ảnh, val [0] chứa độ sáng điểm ảnh. Ba giá trị khác đượcthiết lập là 0. Đối với một kênh ba, BGR hình ảnh, màu xanh= val [0], xanh lá cây = val [1], và màu đỏ = val [2]. 

  Các chức năng bổ sung, cvSet2D () cho phép bạn chỉnh sửacác giá trị pixel. Đó là định nghĩa: cvSet2D khoảng trống(CvArr *, int row, int col, CvScalar);

 Truy cập nhanh Pixel    Mặc dù cvGet2D () và cvSet2D () là dễ sử dụng, nếu bạn

muốn truy cập nhiều hơn một vài giá trị pixel, và các vấn đềhiệu suất, bạn sẽ muốn đọc các giá trị trực tiếp từ bộ đệm dữliệu thô, IplImage.imageData. 

  Đối với lý do hiệu suất, dữ liệu pixel được liên kết, và đệmnếu cần thiết, sao cho mỗi hàng bắt đầu vào ngày một nhiều

 bốn-byte. Một lĩnh vực thứ hai, IplImage.widthStep, cho biếtsố lượng các byte giữa sự bắt đầu của dữ liệu mỗi điểm ảnhcủa hang: IplImage.imageData +i*IplImage.widthStep.

  IplImage.imageData được định nghĩa là kiểu char *, vì vậy bạn có thể cần phải bỏ kiểu dữ liệu.Ví dụ, nếu dữ liệu của bạn hình ảnh byte unsigned (các loại đầu vào phổ biến nhất),

5/17/2018 74973184-X -l - nh - slidepdf.com

http://slidepdf.com/reader/full/74973184-xu-ly-anh 15/32

Xử lý ảnh  Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam- Đồng Thị Tâm 

15

 bạn muốn bỏ mỗi giá trị để * char unsigned trước khi giao,hoặc sử dụng nó. 

   Nếu bạn đang truy cập dữ liệu từ một màu xám (một kênh)hình ảnh, và độ sâu dữ liệu là tám bit (một byte cho mỗi điểm

ảnh), bạn muốn truy cập điểm ảnh [hàng] [col] với:pixel [row] [col] =

(uchar *) (pImg-> imageData + row * pImg-> widthStep +col);

  Cuối cùng, nếu chiều sâu hình ảnh lớn hơn tám bit (ví dụ,IPL_DEPTH_32S), bạn sẽ cần phải chuyển các byte nhiều,hoặc diễn viên đệm để một kiểu dữ liệu đa-byte. Bạn cũng sẽcần phải nhân bước rộng bằng số lượng các byte dữ liệu để

tạo độ sâu hình ảnh của bạn. (Ví dụ, IPL_DEPTH_32S bạnmuốn bỏ bộ đệm (int *) và nhân widthStep.)

2. Face Detection.

2.1.  Background and Preliminaries.

OpenCV sử dụng một loại phát hiện khuôn mặt được gọi là HaarCascade classifie.Sidebar "nhận diện khuôn mặt hoạt động như thếnào" giải thích miếng này có nghĩa là gì. Hình 1 cho thấy một ví dụvề phát hiện phải đối mặt với hành động của OpenCV. 

5/17/2018 74973184-X -l - nh - slidepdf.com

http://slidepdf.com/reader/full/74973184-xu-ly-anh 16/32

Xử lý ảnh  Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam- Đồng Thị Tâm 

16

Phân loại giả định một tỷ lệ cố định cho khuôn mặt, nói rằng cácđiểm ảnh 50x50. Kể cả khi các khuôn mặt trong một hình ảnh có thểlà nhỏ hơn hoặc lớn hơn, phân loại chạy trên hình ảnh nhiều lần, đểtìm kiếm các khuôn mặt trên một loạt các quy mô.  Điều này có vẻ là

một số lượng lớn xử lý, nhưng nhờ  thuật toán nên đã  phân loại là rấtnhanh, ngay cả khi nó áp dụng ở quy mô lớn hơn. 

 Hình 1. Phát hiện khuôn mặt với OpenCV, bằng cách sử dụng các

thông số mặc định. 

Phân loại này sử dụng các dữ liệu được lưu trữ trong một tập tinXML để quyết định làm thế nào để phân loại từng vị trí hìnhảnh. Trong bản OpenCv tải bao gồm bốn loại dữ liệu XML nhận diệnkhuôn mặt phía trước, và một cho khuôn mặt hồ sơ cá nhân.   Nó cũng

 bao gồm ba file phát hiện khuôn mặt dạng XML - một cho phát hiện cơ thể , một cho phần trên cơ thể, và một cho cơ thể thấp hơn. 

Bạn cần xác định loại tập tin dữ liệu mà bạn muốn chương trình sửdụng. Ví dụ là haarcascade_frontalface_default.xml.Bạn cũng sẽ cần một hình ảnh để xử lý. Lena.jpg là một ảnh tốt để

thử nghiệm. 

5/17/2018 74973184-X -l - nh - slidepdf.com

http://slidepdf.com/reader/full/74973184-xu-ly-anh 17/32

Xử lý ảnh  Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam- Đồng Thị Tâm 

17

2.2.  Thực hiện nhận diện khuôn mặt, từng bước 

  Initializing the detector.

Biến CvHaarClassifierCascade * pCascade (2) nắm giữ cácdữ liệu từ file XML bạn đặt trước đó. Để tải dữ liệu XML vào

 pCascade, bạn có thể sử dụng cvLoad(). cvLoad () là một chức

5/17/2018 74973184-X -l - nh - slidepdf.com

http://slidepdf.com/reader/full/74973184-xu-ly-anh 18/32

Xử lý ảnh  Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam- Đồng Thị Tâm 

18

năng có mục đích chung để tải dữ liệu từ các tập tin.Phải mấtđến ba thông số đầu vào. Đối với ví dụ này, bạn sẽ chỉ cần thamsố đầu tiên. Đây là đường dẫn đến một file XML có chứa mộtCascade Haar hợp lệ. 

Trước khi phát hiện khuôn mặt trong hình ảnh, bạn cũng sẽcần phải tạo một đối tượng CvMemStorage. Đây là một bộ nhớ đệm mở rộng tự động, khi cần thiết. Phát hiện khuôn mặt sẽ đưadanh sách các khuôn mặt vào bộ đệm này.  Kể từ khi bộ đệmđược mở rộng, bạn sẽ không cần phải lo lắng về tràn bộ nhớ .

  Running the detector. 

Phương thức cvHaarDetectObjects() để dò khuôn mặt.Chứcnăng này có đến bảy thông số . Đầu tiên là con trỏ hình ảnh, dữliệu XML, và bộ nhớ đệm. Bốn thông số còn lại được thiết lậpđể C + + mặc định . 

  Show Result. 

Một cách nhanh chóng để kiểm tra xem chương trình của bạn

hoạt động là để hiển thị các kết quả trong một cửa  sổOpenCV. Bạn có thể tạo ra một cửa sổ hiển thị bằng cách sửdụng cvNamedWindow () chức năng,

Để một hình ảnh cho màn hình hiển thị, hãy gọicvShowImage () với tên trước đây bạn chỉ định cửa sổ, và hìnhảnh mà bạn muốn nó để hiển thị. Gọi cvWaitKey() để tạm dừngviệc áp dụng cho đến khi bạn đóng cửa sổ.  Ngoài ra, hãy chắcchắn rằng chương trình của bạn gọi cvDestroyWindow ()  đểđóng cửa sổ. 

Phát hiện khuôn mặt được lưu trữ như một danh sách cácCvRect con trỏ struct. 

  Releasing resources.

5/17/2018 74973184-X -l - nh - slidepdf.com

http://slidepdf.com/reader/full/74973184-xu-ly-anh 19/32

Xử lý ảnh  Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam- Đồng Thị Tâm 

19

Bạn cần trả tài nguyên khi sau khi sử dụng các biến và khôngcần sử dụng lại nữa. 

3. Nhận dạng khuôn mặt 

3.1.  Introduction PCA.

Phân tích phần chính (PCA) là một trong những kỹ thuật thànhcông nhất đã đượ c sử dụng trong nhận dạng hình ảnh và nén. PCA làmột  phương pháp thống kê theo tiêu đề  factor analysis. Mục đíchcủa PCA là giảm số chiều lớ n của không gian dữ liệu (các biến quan

sát) các chiều nhỏ  hơn nội tại của không gian tính năng (biến độclập), đó là cần thiết để mô tả các dữ liệu kinh tế.Đây là trườ ng hợ pkhi có một sự tương quan mạnh mẽ giữa các biến quan sát. 

Các công việc mà PCA có thể làm là dự đoán, loại bỏ dư thừa, khaithác tính năng nén dữ liệu…. Bở i vì PCA là một kỹ thuật cổ điển màcó thể làm một cái gì đó  trong lĩnh vực tuyến tính, các ứngdụng có mô hình tuyến tính phù hợ p, chẳng hạn như xử lý tín hiệu, xử 

lý hình ảnh, hệ thống và lý thuyết điều khiển, truyền thông, .v.v.. Nhận dạng khuôn mặt có nhiều điểm áp dụng. Hơn nữa, nó có

thể đượ c phân loại vào nhận diện khuôn mặt, phânloại khuôn mặt, hoặc xác định giớ i tính. Các ứng dụng hữu íchnhất bao gồm giám sát đám đông, lập chỉ mục nội dung video, nhậndạng cá nhân (ví dụ: lái xe giấy phép), lối vào an ninh…. Ý tưở ngchính của việc sử dụng PCA cho nhận dạng khuôn mặt là thể hiệnvector 1-D lớ n các điểm ảnh xây dựng từ 2-D hình

ảnh khuôn mặt vào các thành phần chủ yếu nhỏ gọn của khoảng tínhnăng. Điều này có thể  đượ c gọi là eigenspace .Eigenspace đượ c tínhbằng cách xác định các vector riêng của ma trận hiệp phươngsai bắt nguồn từ một tập hợ p các hình ảnh trên khuôn mặt (vector).

5/17/2018 74973184-X -l - nh - slidepdf.com

http://slidepdf.com/reader/full/74973184-xu-ly-anh 20/32

Xử lý ảnh  Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam- Đồng Thị Tâm 

20

3.2.  Mathematics of PCA

  Bướ c 1: Tập hợ p các bức ảnh mẫu: I1, I2,..., IM.

  Bướ c 2: coi các bức ảnh Ii như các vector Γi 

  Bướ c 3: Tính vector trung bình:

  Bướ c 4: Tính vector lệch của mỗi bức ảnh so vớ i vector trungbình.

Φi=Γi−Ψ 

  Bướ c 5: Tính ma trận hiệp phương sai : 

  Bướ c 6: tính vector riêng ui của ma trận hiệp phương sai AAT.

5/17/2018 74973184-X -l - nh - slidepdf.com

http://slidepdf.com/reader/full/74973184-xu-ly-anh 21/32

Xử lý ảnh  Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam- Đồng Thị Tâm 

21

o  Do ma trận hiệp phương sai có kích thướ c lớ n nên rakhông tính trực tiếp mà thông qua ma trận dảo của ma

trận hiệp phương sai là  

o  Tính vector riêng vi của ma trận .

o  Chú ý: Ma trận có NxN trị riêng và vector riêng.

 Ma trận có M trị riêng và vector riêng.

 M trị riêng,vector riêng của ma trận tương ứnglà M trị riêng và vector riêng của .

o  Tính M vector riêng:

  Bướ c 7: Giữ lại K vector riêng (có trị riêng lớ n nhất)

  Mỗi ảnh khuôn mặt(sau khi đã trừ đi giá trị trung bình ) Φi cóthể  đượ c biểu diễn như là một sự kết hợ p tuyến tính của K

5/17/2018 74973184-X -l - nh - slidepdf.com

http://slidepdf.com/reader/full/74973184-xu-ly-anh 22/32

Xử lý ảnh  Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam- Đồng Thị Tâm 

22

vector riêng tốt nhất.

  Mỗi ảnh khuôn mặt Φi đượ c thể hiển bở i vector:

3.3.  Nhận dạng khuôn mặt.

  Bước 1: Tính: Φ= Γ− Ψ   Bướ c 2: dự đoán không gian riêng: 

  Bướ c 3: thể hiện Φ là vector : 

5/17/2018 74973184-X -l - nh - slidepdf.com

http://slidepdf.com/reader/full/74973184-xu-ly-anh 23/32

Xử lý ảnh  Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam- Đồng Thị Tâm 

23

  Bướ c 4: tìm

  Bướ c 5: Nếu er < Tr thì Γ là nhận dạng như là khuôn mặt l trong số ảnh mẫu.

  Chú ý:

4. Giải thuật phân nhóm khuôn mặt.

Mặc định đầu vào ta có một số bức ảnh(có thể là danh sách các fileảnh, hoặc ảnh trích từ video, từu camera.. ).

Chú ý: ta chỉ xét các bức ảnh có mặt ngườ i, những bức ảnh ko cómặt ngườ i sẽ ko xử lý.

  Bước 1: Đưa một khuôn mặt vào làm mẫu nhận dạng.  Bước 2: Phân tích PCA đối vớ i các ảnh khuôn mặt mẫu.  Bướ c 3: Xét một khuôn mặt bất kì, dự đoán theo phân tích PCA

xem nó gần vớ i ảnh khuôn mặt mẫu nào nhất(nearest), tính toánđộ tin cậy của dự đoán theo trị riêng(confidence)

  Bướ c 4:

5/17/2018 74973184-X -l - nh - slidepdf.com

http://slidepdf.com/reader/full/74973184-xu-ly-anh 24/32

Xử lý ảnh  Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam- Đồng Thị Tâm 

24

o  nếu confidence>Tngưỡ ng thì đưa ảnh vừa xét vào nhóm vớ iảnh dự đoán gần nhất vừa tìm đượ c, quay trở  lại bướ c 3xét ảnh tiếp theo.

o  nếu không thì khuôn mặt trên chưa có trong tập hợ p ảnh

mẫu, đưa ảnh khuôn mặt xét vào tập ảnh khuôn mặt mẫuvà tạo cho nó một nhóm mớ i. quay trở lại bước 2 để phântích lại tập ảnh mẫu. sau đó xét ảnh tiếp theo.

5. Chương trình. 

5.1.  Chương trình có các hàm xử lý sau:

 void learn(); // chuẩ n bị d ữ liệu cho việc chuẩn đoán  void doPCA(); // phân tích d ữ liệu chuẩn đoán 

5/17/2018 74973184-X -l - nh - slidepdf.com

http://slidepdf.com/reader/full/74973184-xu-ly-anh 25/32

Xử lý ảnh  Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam- Đồng Thị Tâm 

25

 int findNearestNeighbor(float * projectedTestFace, float 

*pConfidence);

 // xác định khuôn mặt gần đúng nhấ t, với độ tin

cậ y

 void getArrayImageFromListTrainHistrogram() // load ảnh t ừ list sang array

 int defindFaceTrainFormCamera ();

 // Xác định d ữ liệu ảnh mẫ u t ừ camera

 void showCameraRecogniton ();

 // Nhận d ạng tr ự c tiế  p t ừ camera

 void createFaceAndImageFromCamera(const char *

 fileListFrame);

 // T ạo d ữ liệu ảnh cần gom nhóm t ừ camera void createFaceAndImageFormVideo();

 // Xác định d ữ liệu ảnh cần xử lý t ừ video

 void groupFace();// Gom nhóm ảnh có cùng khuôn mặt.

 void initGroup ();//Khở i t ạo d ữ liệu mẫ u void addNewFaceInListTrain(IplImage *face,int indexImage);

 // Thêm ảnh mớ i vào d ữ  liệu mẫ u, t ạo nhóm

mớ i 

void addFaceInListTrain(IplImage *face,int indexImage); // Thêm ảnh đã gom nhóm ảnh vào dữ liệu mẫu void initShowGroup();

 // Thự c hiện việc xem ảnh t ừ ng nhóm.

5.2.  Các lớ p xử lý vớ i ảnh:

 class ImageProcess{

   public:

   ImageProcess(void);  //hàm t ạo

  ~ImageProcess(void); //Hàm hủ y  void showImage(IplImage * img); // Xem ảnh trên của sổ  

5/17/2018 74973184-X -l - nh - slidepdf.com

http://slidepdf.com/reader/full/74973184-xu-ly-anh 26/32

Xử lý ảnh  Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam- Đồng Thị Tâm 

26

  char *saveImage(const char *folder,int index,IplImage *img);

o  //Save image vào thư mục có tên tương ứ ng vớ i vị trí 

   IplImage*convertFloatImageToUcharImage(const IplImage

*srcImg);

o  // Conver image sang d ữ liệu float 

   IplImage*rotateImage(const IplImage *src, float angleDegrees);

o  // xoay ảnh theo góc

   IplImage*cropImage(const IplImage *img, const CvRect region);

o  // cắ t ảnh theo khung

   IplImage*resizeImage(const IplImage *origImg, int newWidth,int 

newHeight); // thay đổi kích thướ c ảnh

  CvSeq *detectFace(IplImage* img); // phát hiện danh sách

khuôn mặt 

   IplImage*detect_and_draw(IplImage* img); // Xác định và vẽ  khuôn mặt 

   IplImage*histogram(IplImage *imageSrc); //Tính histrogram ảnh

   IplImage*convertImageToGreyscale(const IplImage *imageSrc);

 // convert image sang d ữ  liệu

Greyscale  };

Thực hiện việc xử lý, các thao tác vớ i ảnh.

 class MyImage  {

   public:

   IplImage * image;

   MyImage(void);

   MyImage(IplImage * img);

   };

Tạo đối tượng để xử lý vớ i List<T>.

5/17/2018 74973184-X -l - nh - slidepdf.com

http://slidepdf.com/reader/full/74973184-xu-ly-anh 27/32

Xử lý ảnh  Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam- Đồng Thị Tâm 

27

5.3.  Chức năng chương trình. 

Chương trình gồm có 3 chức năng chính:  Chức năng 1: nhận dạng trực tiếp từ camera. Chức năng 2: gom nhóm từ video. Chức năng 3: gom nhóm trực tiếp từ camera.

Chức năng 1: nhận dạng trực tiếp từ camera: 

  Bướ c 1: thiết lập dữ liệu mẫu cho chương trình o  void defindFaceTrainFormCamera () Thực hiện xác định

ảnh khuôn mặt mẫu. o  Vớ i mỗi ảnh mẫu sẽ được đặt tên theo thứ tự ảnh khuôn

mặt đượ c nhận biết.  Bướ c 2: Nhận dạng ảnh từ camera: 

o  showCameraRecogniton ();thực hiện việc nhận dạng ảnhtrực tiếp từ camera:  chứa hàm int defindFaceTrainFormCamera () ở  

 bướ c 1  chưa hàm void learn() để phân tích dữ liệu mẫu

5/17/2018 74973184-X -l - nh - slidepdf.com

http://slidepdf.com/reader/full/74973184-xu-ly-anh 28/32

Xử lý ảnh  Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam- Đồng Thị Tâm 

28

  Chứa hàm int findNearestNeighbor(float *

 projectedTestFace, float *pConfidence) để xác địnhảnh gần đúng nhât trong dữ liệu mẫu và trả về  độ chính xác tương ứng. 

o  Vớ i mỗi ảnh cần xác định sẽ  tính toán đưa ra giá trị dự đoán, sau đó xác định ảnh mẫu gần đúng nhất và hiển thị kết quả cùng độ chính xác đạt đượ c. 

Chức năng 2 :gom nhóm từ video.

  Bướ c 1: Thực hiện dọc video:o  void createFaceAndImageFormVideo(char*

 fileNameVideo); đọc dữ liệu từ file video truyền vào, trả về danh sách các ảnh(frame) đọc từ  video có chưa mặtngườ i, và danh sách các ảnh khuôn mặt ngườ i trong toànvideo.

  Bướ c 2:Thực hiện khở i tạo mẫu ảnh. o  initGroup (); Khở i tạo ban đầu có ít nhất 3 nhóm để phân

biệt. o  Ban đầu mỗi nhóm chỉ có 1 ảnh duy nhất, 3 ảnh khuôn

mặt đầu tiên sẽ  tương ứng với 3 nhóm đầu tiên(có thể 3ảnh khuôn mặt có thể  là 1 ngườ i).

  Bướ c 3: Thực hiện việc nhóm ảnh:o  void groupFace(); gom nhóm các ảnh khuôn mặt lại vớ i

nhau, thực hiện xác định ảnh khuôn mặt tương ứng vớ iảnh frame của video. 

o  Thực hiện trình tự xử lý giống bướ c 2 của chức năng 1,tuy nhiên vớ i mỗi bức ảnh sau khi xác định đượ c ảnh mẫu

gần đúng và độ  chính xác tương ứng thì sẽ đượ c so sánhvới độ chính xác Tngưỡ ng . Nếu độ chính xác >Tngưỡ ng thìxác nhận ảnh vào nhóm vớ i ảnh gần nhất tìm đượ c, nếukhông thì xác nhận ảnh này là thuộc 1 nhóm mớ i, thêmảnh này vào bộ dữ liệu mẫu và tính toán lại dữ liệu mẫu. 

5/17/2018 74973184-X -l - nh - slidepdf.com

http://slidepdf.com/reader/full/74973184-xu-ly-anh 29/32

Xử lý ảnh  Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam- Đồng Thị Tâm 

29

  Bướ c 4: thực hiện show các bức ảnh (frame) có khuôn mặt trongcùng 1 nhóm : o  Vớ i mỗi nhóm ta thực hiện void initShowGroup() để show

ảnh từng nhóm theo chỉ số, trả về số ảnh có trong nhóm. 

Chức năng 3 :gom nhóm từ camera.

Giống như chức năng 2; chỉ khác ở bước thứ 1: thay vì đọccác ảnh (frame) từ video ta đọc các ảnh(frame) trực tiếp thu từcamera.

5.4.  Chi tiết chương trình.

5.4.1.Nhận dạng trự c tiếp từ camera:

5/17/2018 74973184-X -l - nh - slidepdf.com

http://slidepdf.com/reader/full/74973184-xu-ly-anh 30/32

Xử lý ảnh  Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam- Đồng Thị Tâm 

30

Gom nhóm từ video:

Gom nhóm trự c tiếp từ camera:

5/17/2018 74973184-X -l - nh - slidepdf.com

http://slidepdf.com/reader/full/74973184-xu-ly-anh 31/32

Xử lý ảnh  Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam- Đồng Thị Tâm 

31

6. Đánh giá chương trình.

Sau khi chạy thử chương trình vớ i dữ liệu vào là 1 đoạn video chúngta có kết quả sau:

 Input : Videoo  Đọc đượ c 51 frameo  Nhận diện đượ c 103 face trong 51 fram trên.o  Thực tế có 4 khuôn mặt đượ c nhận biếto  .

 Output: Group Faceo  Nhận biết đượ c 6 groupo  Trong đó có 2 nhóm group giống khuôn mặt

5/17/2018 74973184-X -l - nh - slidepdf.com

http://slidepdf.com/reader/full/74973184-xu-ly-anh 32/32

Xử lý ảnh  Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam- Đồng Thị Tâm 

32

 Thờ i gian chạy lâu ~ 2ph đối vớ i video trên. Đánh giá : 

o  Mớ i chỉ thực hiện nhận diện qua filehaarcascade_frontalface_alt.xml nên chỉ  đưa ra kết quả 

không thực sự chuẩn xác có thể kết hợ p vớ i việc nhận diệnmắt, mắt có kính….. 

o  Do việc thực hiện lâu nên chưa thực hiện quay ảnh nên sailệch bị lớ n.

o  Thực tế cho thấy việc phân nhóm chưa thực sự chuẩn xác vớ iđộ tin cậy 40%;

o  Hàm findNearestNeighbor(…..) chưa thực sự cho độ tin cậynhư mong muốn.

 Thực tế OpenCV cung cấp file haarcascade_frontalface_alt.xmlcho việc nhận diện khuôn mặt chưa thực sự phù hợ p vì thỉnhthoảng vẫn nhận diện lỗi khuôn mặt. 

7. Tài liệu tham khảoBài giảng xử lý ảnh –  gv Hoàng Văn Hiệp

http://www.cognotics.com/opencv/servo_2007_series

http://www.shervinemami.co.cc/faceRecognition.html

ww.codeproject.com/KB/audio-video.