Extract face sequences from video

31 680 3
Extract face sequences from video

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Extract face sequences from video

Xử lý ảnh Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam-Đồng Thị Tâm Trường đại học Bách Khoa Hà Nội Viện công nghệ thông tin và truyền thông Bộ 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. 1 Xử lý ảnh Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam-Đồng Thị Tâm Mục lục 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ăng nhúng vào trong các chương trình có khả năng nhận diện hình ảnh của máy tính .Nó bao gồm khả năng tiên tiến như phát hiện khuôn mặt, theo dõi khuôn mặt, nhận diện khuôn mặt… Ngoài ra, nó cung cấp rất nhiều cá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. 2 Xử lý ảnh Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam-Đồng Thị Tâm Hình 1. Các khả năng của OpenCV có thể là nhận diện khuôn mặt (trên cùng bên trái), phát hiện đường đồng mức (trên bên phải), và phát hiện cạnh (phía dưới) 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 quan trọ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 code chúng. Bao gồm các việc như : phát hiện cạnh, đường, và phát hiệ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át hiện khuôn mặt, nhận diện, và theo dõi, nó còn bao gồm dòng chả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. 3 Xử lý ảnh Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam-Đồng Thị Tâm • 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 trong gó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ột khố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 . • 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ãn và đá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ủa nó. Trong khi đây là những hạn chế so với những gì có thể được thực hiện trên các nền tảng khác, họ cung cấp một đơn giản, đa nền tảng API để hiển thị hình ảnh, chấp nhận đầu vào người dùng thông 4 Xử lý ảnh Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam-Đồng Thị Tâm qua con chuột hoặc bàn phím, và thực hiện kiểm soát thanh trượt . • 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ưu trữ 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 định tạ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 qua DirectX trên nền tảng Windows 32-bit. Tuy nhiên, HighGUI cũng chứa các giao diện video. 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ện 5 Xử lý ảnh Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam-Đồng Thị Tâm tĩ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 đặt OpenCV 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ải là 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ạy trì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ồm vị 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ắn thư 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ộp kiểm tra "Thêm thư mục bin vào PATH." 1.2.3. Sau khi cài đặt OpenCV chứa nhiều thư mục con. Các tài liệu thư mục chứa tài liệ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ô-đun OpenCV. Trên cả hai Linux và Windows, bạn có thể xác định vị trí các tiêu đề bằng cách tìm kiếm thư mục cài đặt và thư mục con cho tên tậ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 6 Xử lý ảnh Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam-Đồng Thị Tâm 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ẽ bao gồm cvaux.h. Các tập tin tiêu đề còn lại được bao gồm bởi những tiê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ên củ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 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) ) 7 Xử lý ảnh Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam-Đồng Thị Tâm 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 định dạ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ức nă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 module HighGUI. 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]; 8 Xử lý ảnh Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam-Đồng Thị Tâm o // Initialize video capture o 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"); 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ọi cvCaptureFromCAM(). Chức năng này trả về một con trỏ đến một cấu trúc CvCapture. Bạn sẽ lưu trữ con trỏ để sử dụng cvQueryFrame () để lấy frame. 9 Xử lý ảnh Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam-Đồng Thị Tâm • 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ới cvReleaseImage (), 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ạn cần phải sửa đổi dữ liệu hình ảnh, tạo một bản sao để làm việc vớ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 sau khi sử dụng cvReleaseImage (& pImgToChange ); 1.3.4. Chuyển đổi Color o // ConvertToGray.c 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 10 [...]... // 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... đú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ặt người, và danh sách các ảnh khuôn mặt người trong toàn video • Bước 2:Thực hiện khởi tạo mẫu ảnh 26 Xử lý ảnh Lê Xuân Bách-Phạm Kiên Giang-Nguyễn... findNearestNeighbor(float * projectedTestFace, float *pConfidence); // xác định khuôn mặt gần đúng nhất, với độ tin cậy 23 Xử lý ảnh           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);... dữ liệu vào là 1 đoạn video chúng ta có kết quả sau:   Input : Video o Đọc được 51 frame o 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ết o Output: Group Face o Nhận biết được 6 group o Trong đó có 2 nhóm group giống khuôn mặt 30 Xử lý ảnh    7 Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam-Đồng Thị Tâm Thời gian chạy lâu ~ 2ph đối với video trên Đánh giá : o... 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 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... 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ì đọc các ảnh (frame) từ video ta đọc các ảnh(frame) trực tiếp thu từ camera o 27 Xử lý ảnh Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam-Đồng Thị Tâm 5.4 Chi tiết chương trình 5.4.1 Nhận dạng trực tiếp từ camera: Gom nhóm từ video: 28 Xử lý ảnh Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam-Đồng Thị Tâm Gom nhóm trực tiếp từ camera:... • Bước 2: Nhận dạng ảnh từ camera: o showCameraRecogniton ();thực hiện việc nhận dạng ảnh trự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  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... haarcascade_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ện mắ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 sai lệ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ậy như mong muốn Thực tế OpenCV cung cấp file haarcascade_frontalface_alt.xml... thỉnh thoảng vẫn nhận diện lỗi khuôn mặt Tài liệu tham khảo Bà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 31

Ngày đăng: 26/04/2013, 14:55

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan