1. Trang chủ
  2. » Luận Văn - Báo Cáo

Lập trình với OpenCV giải thuật phân nhóm khuôn mặt

33 747 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 33
Dung lượng 0,92 MB

Nội dung

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 3 Xử lý ảnh Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam-Đồng Thị Tâm 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. • 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. 4 Xử lý ảnh Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam-Đồng Thị Tâm 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 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 5 Xử lý ảnh Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam-Đồng Thị Tâm 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 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 đó 6 Xử lý ảnh Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam-Đồng Thị Tâm 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 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 7 Xử lý ảnh Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam-Đồng Thị Tâm 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, 8 Xử lý ảnh Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam-Đồng Thị Tâm 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 đị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" 9 Xử lý ảnh Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam-Đồng Thị Tâm 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 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 } 10 [...]... khuôn mặt người trong toàn video 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... dạng như là khuôn mặt l trong số ảnh mẫu • 4 Bước 4: tìm Chú ý: 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... Preliminaries OpenCV sử dụng một loại phát hiện khuôn mặt được gọi là Haar Cascade 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 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. .. 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ất nhanh, 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 tin XML để quyết định làm thế nào để phân loại từng vị trí hình ảnh Trong bản OpenCv. .. 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ân loại khuôn mặt, hoặc xác định giới tính Các ứng dụng hữu ích nhất bao gồm giám sát đám đông, lập chỉ mục nội dung video, nhận dạng cá nhân (ví dụ: lái xe giấy phép), lối vào an ninh… Ý tưởng chính của việc sử dụng PCA cho nhận dạng khuôn mặt là thể hiện vector 1-D lớn các... quay trở lại bước 3 xét ảnh tiếp theo 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ẫu và tạo cho nó một nhóm mới quay trở lại bước 2 để phân tích lại tập ảnh mẫu sau đó xét ảnh tiếp theo 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 25 Xử lý ảnh    ... đố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: 24 Xử lý ảnh Lê Xuân Bách-Phạm Kiên Giang-Nguyễn Đình Nam-Đồng Thị Tâm o o 5 Chương trình 5.1   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... 4: thực hiện show các bức ảnh (frame) có khuôn mặt trong cù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ì đọc cá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:... 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 cho việc nhận diện khuôn mặt chưa thực sự phù hợp vì 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... 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ẽ đưa danh 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ức năng này có đến bảy thông . đối mặt với hành động của OpenCV. 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. 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. 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

Ngày đăng: 23/04/2014, 15:36

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w