Tài liệu Báo cáo đồ án đồ họa máy tính đề tài ứng dụng opencv & camera

  • Số trang: 40 |
  • Loại file: DOCX |
  • Lượt xem: 2002 |
  • Lượt tải: 0
thucaothi349968

Tham gia: 25/12/2016

Mô tả:

Báo cáo đồ án đồ họa máy tính đề tài ứng dụng opencv & camera
ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN KHOA KHOA HỌC MÁY TÍNH ------o0o------ BÁO CÁO ĐỒ ÁN ĐỒ HỌA MÁY TÍNH ĐỀ TÀI ỨNG DỤNG OPENCV & CAMERA Giảng viên hướng dẫn: Mai Tiến Dũng TP Hồ Chí Minh, ngày 21 tháng 12 năm 2012 Báo cáo Đồ Án ĐỒ HỌA MÁY TÍNH - ỨNG DỤNG OPENCV & CAMERA MỤC LỤC LÝ DO CHỌN ĐỀ TÀI................................................................................................................................................................................................................. 4 I. II. MÔ HÌNH THỰC HIỆN:......................................................................................................................................................................................................... 4 III. TIẾN ĐỘ THỰC HIỆN:........................................................................................................................................................................................................... 5 IV. NỘI DUNG THỰC HIỆN......................................................................................................................................................................................................... 5 Tìm hiểu sơ lược OpenCV2.1................................................................................................................................................................................................... 6 A. 1. Giới thiệu OpenCV:.............................................................................................................................................................................................................. 6 2. Ai sẽ sử dụng OpenCV?........................................................................................................................................................................................................ 6 3. Sử dụng OpenCV để làm gì?................................................................................................................................................................................................ 6 4. Các chức năng cơ bản:.......................................................................................................................................................................................................... 6 5. Tổ chức :................................................................................................................................................................................................................................ 7 6. Cài đặt OpenCV:................................................................................................................................................................................................................... 7 NHẬN DIỆN KHUÔN MẶT:................................................................................................................................................................................................. 13 B. 1. Thư viện nhận diện:............................................................................................................................................................................................................ 13 2. Thuật toán Principal Component Analysis (PCA):...........................................................................................................................................................14 CHƯƠNG TRÌNH THỰC HIỆN:.......................................................................................................................................................................................... 17 C. 1. XỬ LÝ OPEN CAMERA & NHẬN DIỆN KHUÔN MẶT:.................................................................................................................................................17 1.1 Xử lý Open Camera:....................................................................................................................................................................................................... 17 1.2 Nhận diện khuôn mặt:..................................................................................................................................................................................................... 17 1.3 Huấn luyện khuôn mặt:.................................................................................................................................................................................................. 19 2. 2.1 2.1.1 XỬ LÝ OPEN IMAGES & HIỆU CHỈNH TRÊN HÌNH ẢNH:........................................................................................................................................21 Các hàm cơ bản trên OpenCV:......................................................................................................................................................................................... 21 Đọc và hiển thị ảnh:..................................................................................................................................................................................................... 22 Page 2 Báo cáo Đồ Án ĐỒ HỌA MÁY TÍNH - ỨNG DỤNG OPENCV & CAMERA D. 2.1.2 Lưu ảnh ở dạng đuôi khác từ ảnh được chụp từ camera:..........................................................................................................................................22 2.1.3 Load video hay capture từ webcam.............................................................................................................................................................................. 23 2.1.4 Phân kênh màu bằng cvSplitPan của ảnh................................................................................................................................................................... 23 2.1.5 Chuyển ảnh qua hệ màu gray...................................................................................................................................................................................... 27 2.1.6 Chuyền ảnh gray qua BlackWhite............................................................................................................................................................................... 28 2.1.7 Chuyển ảnh gray qua nhị phân.................................................................................................................................................................................... 29 2.1.8 Căn bằng mức xám (Histogram Equalization)............................................................................................................................................................30 2.1.9 Phát hiện biên của ảnh, ăn mòn, làm mỏng ảnh:.......................................................................................................................................................34 2.1.10 Thay đổi kích thước ảnh(phóng to, thu nhỏ), lập ảnh, đối xứng ảnh, thông tin chi tiết về hình..............................................................................37 ĐÁNG GIÁ CHƯƠNG TRÌNH VÀ HƯỚNG PHÁT TRIỂN..................................................................................................................................................40 1. Đánh giá chương trình:........................................................................................................................................................................................................... 40 + Ưu điểm:.................................................................................................................................................................................................................................... 40 + Nhược điểm:.............................................................................................................................................................................................................................. 40 2. E. Hướng phát triển chương trình:............................................................................................................................................................................................. 41 TÀI LIỆU THAM KHẢO........................................................................................................................................................................................................... 41 Page 3 Báo cáo Đồ Án ĐỒ HỌA MÁY TÍNH - ỨNG DỤNG OPENCV & CAMERA I. LÝ DO CHỌN ĐỀ TÀI Ngày nay vấn đề an ninh được đặt lên hàng đầu và việc ứng dụng công nghệ thông tin trong quản công tác giám xác và theo dõi được coi trọng. Vì vậy các phần mềm liên quan cũng được ra đời và trở nên quan trong. Một trong những phần mềm đó là theo dõi là nhận diện khôn mặt người thông qua các đặc trưng. Chính vì vậy nhóm em đã chọn đề tài nghiên cứu là ứng dụng OpenCV trong giám sát và quản lý bắng thuật giải PCA (Principal Component Analysis- phân tích thành phấn chinh) kèm theo phân xử lý ảnh đầu vào được thu từ camera để giúp quá trình xử lý cũng như máy học được thực hiện nhanh hơn. Tuy nhiên thời gian còn hạn chế nên chúng em chưa tìm hiểu sâu về phần máy học giúp máy tính có thể nhận biết đối tượng nên ứng dụng chỉ mang tính tương đối. Và cuối cùng chúng em cảm ơn thầy đã hướng dẫn và định hướng cho chúng em trong suốt quá trình thực hiện đề tài này. II. MÔ HÌNH THỰC HIỆN: OpenCV2.1 + Camera Open video Chụp Ảnh Xử lý trên Ảnh Chuyển Ảnh Sang Hệ Màu Nhị Phân, trắng đen. Zoom ảnh, lập ảnh, làm dày, ăn mòn. Lấy biên ảnh, phân kênh màu Page 4 Mở Ảnh chụp được Sử dụng sơ đồ histogram giảm bớt độ tương phản Nhận diện khuôn mặt Xuất thông tin ảnh, đối xứng ảnh Huấn luyện khuôn mặt Báo cáo Đồ Án ĐỒ HỌA MÁY TÍNH - ỨNG DỤNG OPENCV & CAMERA III. TIẾN ĐỘ THỰC HIỆN: Tuần 1 2 3 4 5 IV. Nội dung - Tìm hiểu OpenCV - Chọn đề tài - Phân công công việc cho mỗi thành viên - Thực hiện được 1 số chức năng cơ bản của đề tài + Kết nối Webcam với chương trình C++ thông qua OpenCV + Chụp lại ảnh thu được từ webcam. + Mở một ảnh bằng OpenCV. + Nhận diện được khuôn mặt trên video, webcam, trên ảnh. - Tiếp tục tìm hiểu về thuật toán nhận diện khuôn mặt và xử lý ảnh + Tìm hiểu về cách: máy nhận diện được khuôn mặt đã có và ‘học tiếp’ khuôn mặt mới. + Tìm hiểu về cách xử lý trên ảnh để hỗ trợ cho nhận diện khuôn mặt và hỗ trợ tìm ra đặc trưng của ảnh. - Đã hoàn thành thêm ứng dụng nhận diện các khuôn mặt có trong dữ liệu có trước. - Chưa hoàn thực hiện được nhận diện trên khuôn mặt mới. - Chưa hoàn thành xử lý trên ảnh. - Hoàn thành việc nhận diện và máy ‘học’ một khuôn mặt mới, tìm ra được độ tin tưởng của khuôn mặt cần kiểm tra với dữ liệu có trước. - Hoàn thành chức năng xử lý, biến đổi trên ảnh: + zoom ảnh. + lấy thông tin các tham số ảnh( kích thước, hệ màu, ...) + Các hiệu ứng trên ảnh + Xoay ảnh + Tạo ảnh đối xứng. + Phân kênh màu ảnh. + Histogramequalization + lấy biên của ảnh + Chuyển ảnh màu sang ảnh trắng đen + Chuyển ảnh sang hệ màu nhị phân - Hoàn thành chức năng nhận dạng ảnh, và chức năng máy ‘học’ được nhiều khuôn mặt mới. - Hoàn thành báo cáo Đồ Án. NỘI DUNG THỰC HIỆN A. Tìm hiểu sơ lược OpenCV2.1 Page 5 Ghi chú Báo cáo Đồ Án ĐỒ HỌA MÁY TÍNH - ỨNG DỤNG OPENCV & CAMERA 1. Giới thiệu OpenCV: OpenCV là mã nguồn mở do Intel sáng chế. OpenCV là thư viện mã nguồn phục vụ cho nghiên cứu và ‘thị giác’ máy tính. OpenCV giúp việc xây dựng các ứng dụng về xử lý ảnh, thị giác máy tính một cách nhanh chóng. OpenCV có khoảng hơn 500 hàm, phục vụ cho nhiều công việc khác nhau: xử lý hình ảnh, an ninh, camera quan sát, nhận diện, robots... Tối ưu hóa và xử lí các ứng dụng trong thời gian thực. 2. Ai sẽ sử dụng OpenCV?  Đầu tiên chúng ta phải hiểu: OpenCV là mã nguồn mở và chúng ta không phải trả bất cứ một đồng nào cho nó.  Tất cả chúng ta đều có thể sử dụng OpenCV tùy theo việc chúng ta sử dụng nó nhưthế nào vào việc gì.  Xử lí ảnh, quan sát, an ninh, robots, ... Tất cả những gì mà bạn nghĩ rằng liên quan đến thị giác máy tính thì bạn có thể sử dụng OpenCV để làm. 3. Sử dụng OpenCV để làm gì?  Xử lí ảnh, quan sát, an ninh, robots, ... Tất cả những gì mà bạn nghĩ rằng liên quanđến thị giác máy tính thì bạn có thể sử dụng OpenCV để làm.  Thay vì lập trình cho các thuật toán xử lí ảnh thì bạn đã có sẵn trong tay một thư việnvề các hàm đó. Công việc của bạn chỉ là sử dụng nó. Và bạn có thể lập trình cho cácthiết bị máy móc để cho nó có thể “nhìn” 4. Các chức năng cơ bản: 4.1 General computer-vision and image-processing algorithms: Sử dụng interface để thể hiện ‘thị giác’ của máy tính, thông qua các hàm có sẵn để thể hiện các cạnh, đường, phát hiện góc hình elip, ... 4.2 High-level computer-vision modules: Ngoài các tính năng nhận diện, theo dõi , OpenCv còn bao gồm dòng chảy quang học ( sử dụng máy ảnh chuyển động để xác định cấu trúc 3D). 4.3 AI and machine-learning methods: OpenCV kết hợp với các phương pháp trí tuệ nhân tạo khác để nâng cao hiệu quả trong thuật toán, cũng như nâng cao khả năng ‘học hỏi’ của máy tính. 4.4 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. 4.5 Graphics: Interface này cho phép người lập trình có thể viết hay vẽ trên hình ảnh. Ứng dụng này rất hữu ích cho việc chú thích, tạo nhãn, đánh dầu vị trí trên hình ảnh. 4.6 GUI methods: Page 6 Báo cáo Đồ Án ĐỒ HỌA MÁY TÍNH - ỨNG DỤNG OPENCV & CAMERA 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. 5. Tổ chức : + 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. + 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. + 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. 6. Cài đặt OpenCV:  Cài đặt OpenCV trên Visual Studio 2010: Ở bài báo cáo này em sử dụng phiên bản OpenCV 2.1 cài đặt và chạy các ứng dụng trên Visual Studio 2010 của Win 7 32 bit để cài đặt nó thì chúng ta phải download : a. Thư viện OpenCV 2.1 trên trang: opencv.org, hiện nay thì đã bản mới nhất của OpenCV 2.4.3 được cập nhật thêm rất nhiều tính năng mới về xử lý ảnh số và thị giác máy tính… b. CMake: phiên bản OpenCV 2.x chỉ cung cấp mã nguồn chứ không tích hợp tập thực thi và cấu hình dự án cho từng mội trường phát triển. Vì thế ta sử dụng CMake để tạo, cấu hình dự án cho phù hợp với môi trường phát triển, cụ thể ở đây là tạo project để build file .dll và .lib để sử dụng OpenCV trong Visual Studio 2010 trên Windows x32. Download file cài đặt trên trang: http://www.cmake.org/cmake/resources/software.html Các bước cài đặt OpenCV: 1. Chạy file OpenCV-2.1.0-win32-vs2008.exe để cài đặt OpenCV. Lưu ý khi cài đặt lựa chọn: Add OpenCV to the system PATH. Đường dẫn mặc định của chương trình là: C:\OpenCV2.1 Page 7 Báo cáo Đồ Án ĐỒ HỌA MÁY TÍNH - ỨNG DỤNG OPENCV & CAMERA 2. Cài đặt CMake. 3. Tiếp theo, ta sẽ sử dụng CMake tạo project để build file thư viện OpenCV phù hợp với Visual Studio 2010. Vào C:\OpenCV2.1, tạo thư mục build để chứa project. 4. Click nút Configure để lựa chọn môi trường phát triển, ở đây lựa chọn Visual Studio 10 Win32. Click Finish. Page 8 Báo cáo Đồ Án ĐỒ HỌA MÁY TÍNH - ỨNG DỤNG OPENCV & CAMERA 5. Nhấn chọn tiếp nút Configure lần nữa, sau đó nhấn nút Generate để hoàn tất việc tạo project: 6. Vào C:\OpenCV2.1\build, mở file OpenCV.sln vừa tạo: 7. Khi biên dịch file .dll và .lib cho OpenCV, nên lưu ý chế độ của project là debug hay release. Riêng trong trường hợp này, biên dịch để sử dụng trong Visual Studio 2010 trên Windows 7 x32, để tránh xảy ra lỗi : the application was unable to start correctly 0xc0150002 về sau, nên để chế độ là release. Page 9 Báo cáo Đồ Án ĐỒ HỌA MÁY TÍNH - ỨNG DỤNG OPENCV & CAMERA 8. Biên dịch chương trình, sau khi biên dịch, ta sẽ có các file OpenCV dll trong C:\OpenCV2.1\build\bin\Release và OpenCV lib trong C:\OpenCV2.1\build\lib\Release. Ngoài ra, các tập tin header .h nằm ở địa chỉ: C:\OpenCV2.1\include\opencv o 9. Tiếp theo, ta sẽ tạo thử một project chạy thử sử dụng thư viện vừa biên dịch trên. Tạo mới Project, đặt tên là OpenCV Demo: Page 10 Báo cáo Đồ Án ĐỒ HỌA MÁY TÍNH - ỨNG DỤNG OPENCV & CAMERA 10. Cấu hình Visual Studio 2010 để reference các đường dẫn đến các file .h, .dll, .lib. Với phiên bản cũ hơn, chẳng hạn như Visual Studio 2008, khi cấu hình sẽ vào Tools-> Options-> VC++ Directories để cấu hình cho tất cả các project, tuy nhiên, ở Visual Studio 2010 thì chỉ cho phép cấu hình riêng với từng project. Click chuột phải vào project, chọn Properties: 11. Cấu hình VC++ Directories: o Include Directories... add: 'C:\OpenCV2.1\include\opencv;' o Library Directories: o Debug Builds.. add: 'C:\OpenCV2.1\build\lib\Debug’, ‘C:\OpenCV2.1\build\bin\Debug’ o Release Builds.. add: 'C:\OpenCV2.1\build\lib\Release’, ‘C:\OpenCV2.1\build\bin\Release’ o Source Directories... add: 'C:\OpenCV2.1\src\cv; C:\OpenCV2.1\src\cvaux; C:\OpenCV2.1\src\cxcore; C:\OpenCV2.1\src\highgui; C:\OpenCV2.1\src\ml;' o Linker -> Input -> Additional Dependencies... o Debug Builds.. add: 'cv210d.lib; cxcore210d.lib; highgui210d.lib;' o Release Builds.. add: 'cv210.lib; cxcore210.lib; highgui210.lib;' Page 11 Báo cáo Đồ Án ĐỒ HỌA MÁY TÍNH - ỨNG DỤNG OPENCV & CAMERA 12. Nội dung file OpenCVDemo.cpp: #include "stdafx.h" #include #include #include int _tmain(int argc, _TCHAR* argv[]) { IplImage *img = cvLoadImage("test.jpg"); cvNamedWindow("Image:",1); cvShowImage("Image:",img); Page 12 Báo cáo Đồ Án ĐỒ HỌA MÁY TÍNH - ỨNG DỤNG OPENCV & CAMERA cvWaitKey(); cvDestroyWindow("Image:"); cvReleaseImage(&img); return 0; }  Ghi chú: Trong phần cài đặt OpenCV ở các bản về sau ta không cần download thêm phần CMake để tạo và cấu hình phù hợp với môi trường máy nữa mà chỉ cần download thư viện trên opencv.org về giải nén và đặt vào thư mục mặc định của mình. Khi sử dụng chỉ cần tham chiếu tới thư mục đó, trong thư mục của OpenCV mà ta giải nén thì có chứa thư mục bin ta sao chép toàn bộ vào thư mục hệ thống system32. Và nên nhớ các địa chỉ phải thật chính xác. B. NHẬN DIỆN KHUÔN MẶT: 1. Thư viện nhận diện: 1.1 Các thư viện: OpenCv sử dụng thư viên Haar Cascade để nhận diện. Trong thư viện này có nhiều thư viện con để phục vụ theo từng mục đích sử dụng như: thư viện nhận dạng mắt HaarCascade_eye.xml, thư viện nhận dạng khuôn mặt HaarCascade_frontalface, hay các thư viện khác như : HaarCascade_fullbody, haarcascade_mcs_nose, haarcascade_mcs_mouth, haarcascade_profileface, haarcascade_upperbody,... Page 13 Báo cáo Đồ Án ĐỒ HỌA MÁY TÍNH - ỨNG DỤNG OPENCV & CAMERA 1.2 Thư viện HaarCascade_frontalface: Đây là thư viện mô phỏng mô hình khuôn mặt được định dạng dưới dạng các vector dựa trên các pixels của ảnh đưa vào. Thư viện này cho phép người dùng có thể nhận biết được đâu là khuôn mặt trong ảnh, mặc dù ảnh đó là lớn hay nhỏ. Thư viện này giúp người sử dụng có thể phân loại, phát hiện khuôn mặt trên quy mô lớn. Cơ chế phân loại này được sử dụng các dữ liệu 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. OpenCv bao gồm bốn loại dữ liệu XML nhận diện khuôn mặt phía trước, và một cho khuôn mặt hồ sơ cá nhân. Và 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. VD: 2. Thuật toán Principal Component Analysis (PCA): 2.1 Giới thiệu: PCA( Phân tích thành phần chính) là một trong các phương pháp phân tích dữ liệu nhiều biến đơn giản nhất. Như trong thống kê, người ta thường xử lý dữ liệu trên dữ liệu có sô chiều lớn, rất khó biến đổi dữ liệu thành các dữ liệu nhỏ hơn trong không gian 2 chiều hay 3 chiều. Thuật toán PCA được ra đời, giúp giải quyết vấn đề này. Các tính của PCA:  Giảm số chiều của dữ liệu.  PCA xây dựng một không gian mới dựa trên không gian cũ để biểu diễn dữ liệu tốt hơn.  Khi không gian mới ra sinh ra, các liên kết tiềm ẩn cũng được sinh ra, mà ở không gian cũ khó phát hiện được. 2.2 Ứng dụng PCA trong nhận diện: Page 14 Báo cáo Đồ Án ĐỒ HỌA MÁY TÍNH - ỨNG DỤNG OPENCV & CAMERA Theo đánh giá PCA là kỹ thuật thành công nhất trong giải quyết vấn đề nhận dạng hình ảnh và nén hình. Dự trên đặc trưng của PCA là giảm thiểu số chiều lớn của không gian tính năng, nên PCA sẽ thực hiện công việc dự đoán , loại bỏ dư thừa , khai thác tính năng nén dữ liệu.... Và nhận diện khuôn mặt có nhiều điểm có thể áp dụng PCA. PCA có thể phân tích, phân loại vào nhận diện khuôn mặt, hoặc xác định giới tính. PCA được sử dụng theo ý tưởng là: sử dụng PCA nhận dạng khuôn mặt là thể hiện vector 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ính năng. Điều này có thể được gọi là eigenspace. Eigenspace được tính bằng cách xác định các vector riêng của ma trận hiệp phương sai bắt nguồn từ một tập hợp các hình ảnh trên khuôn mặt. 2.3 Thuật toán PCA:  Bước 1: ta có tập hợp các hình ảnh mẫu là : I1, I2, I3, ....,IM.  Bước 2: Biến đổi mỗi hình mẫu thành một vector. Ii ---> Vi. N 2x1 vector NxN  Bước 3: Ta tính vector trung bình: TB   1 M Vi M∑ i 1 Bước 4: Tính vector lệch của mỗi bức ảnh so với vector trung bình ∆ iV i−TB Bước 5: Tính ma trận hiệp phương sai: 1 M C  ∑ ∆i ∆ i Tn  A AT với A ∆1 ∆2 ….. ∆ M  M i 1  Bước 6: Tính vector riêng ui của ma trận hiệp phương sai AAT. Do ma trận hiệp phương sai có kích thước lớn nên ta không tính trực tiếp đươc mà thông qua ma trận đảo của ma trận hiệp phương sai là: ATA. Page 15 Báo cáo Đồ Án ĐỒ HỌA MÁY TÍNH - ỨNG DỤNG OPENCV & CAMERA Tính vector riêng vi của ma trận ATA. ATAvi = μ i vi => AATAvi = μ i Avi =>Cavi = μ i Avi hoặc Cui= μ i ui khi ui= Avi. Bổ sung: Ma trận AAT có NxN trị riêng và vector riêng. Ma trận ATA có M trị riêng và vector riêng. Bước 7: Giữ lại K vector riêng( là vector có giá trị riêng lớn nhất được tính theo công thức: u i= Av). Bước 8: Mỗi ảnh sau khi trừ đi giá trị trung bình sẽ là một sự kết hợp tuyến tính của K vector riêng tốt nhất. Minh họa: Ảnh đưa vào: Ảnh Sau khi xử lý để lưu vào dữ liệu: 2.4 Giải thuật phân nhóm khuôn mặt: Khi ta đưa một số ảnh vào để nhận diện( ảnh có khuôn mặt người). Bước 1: Đưa từng khuôn mặt vào nhận diện so với ảnh gốc. Bước 2: Dựa trên phân tích PCA đối với các khuôn mặt mẫu,so sánh với khuôn mặt đưa vào nhận diện. Bước 3: Tìm ra khuôn mặt gần giống với khuôn mặt mẫu nhất, để đưa ra nhận định( dựa vào độ tim cậy khi tính toán). Bước 4: Sau khi phân nhóm xong tiếp tục đưa ảnh tiếp theo vào, quay lại bước 3. Bước 5: Đưa ra kết luận cuối cùng. C. CHƯƠNG TRÌNH THỰC HIỆN: 1. XỬ LÝ OPEN CAMERA & NHẬN DIỆN KHUÔN MẶT: 1.1 Xử lý Open Camera:  Phương pháp: Hình ảnh hiện thị từ camera ( webcam) lên màng hình được xử lý theo phương pháp lấy từng frame từ ảnh camera nhận được.  Hàm trong chương trình: Page 16 Báo cáo Đồ Án ĐỒ HỌA MÁY TÍNH - ỨNG DỤNG OPENCV & CAMERA  IplImage* getCameraFrame(void) Thực hiện: - Mở camera bằng hàm cvCaptureFromCAM(). - Tạo cửa sổ sẽ hiện thị video bằng hàm cvSetCaptureProperty(). - Thực hiện lấy frame bằng hàm cvQueryFrame(). 1.2 Nhận diện khuôn mặt:  Sơ đồ thực hiện: Xử lý ảnh thu được từ camera hay webcam Biếến đổi ảnh đưa vào thành ảnh nhị phân. Bướ ước 1 Kiểm tra ảnh đưa vào có khuôn mặt hay không., nếếu có thì tếếp tục thực hiện Hiệu chỉnh ảnh lại : crop lâếy khuôn mặt, resize ảnh với size 120x90. Bướ ước 2 Đỉnh lại độ sáng và độ tương phản cho ảnh. Dựa vào thuật toán gom nhóm ảnh để tm ra độ tn tưởng. Hiện thị độ tn tưởng và kếết luận lến màng hình. Bướ ước 3  Hàm thực hiện trong chương trình: //Hàm chuyển ảnh sang hệ màu nhị phân IplImage* ChuyenMauAnh(const IplImage *CMA); //Hàm xác định có khuôn mặt trong ảnh hay không CvRect ViTriKhuonMat(const IplImage *AnhDaChuyen, const CvHaarClassifierCascade* cascade ); // Cân bằng lại hình khi độ sáng or tương phản quá thấp. equalizedImg = cvCreateImage(cvGetSize(sizedImg), 8, 1); cvEqualizeHist(sizedImg, equalizedImg); //Hàm chỉnh kích thước hình ảnh IplImage* resizeImage(const IplImage *origImg, int newWidth, int newHeight); Page 17 Báo cáo Đồ Án ĐỒ HỌA MÁY TÍNH - ỨNG DỤNG OPENCV & CAMERA //Hàm cắt crop vi trí khuôn mặt IplImage* cropImage(const IplImage *img, const CvRect region); //Hàm kiểm tra người có khả năng gần giống với người cần nhận dạng trước int NguoiGanGiongNhat(float * sprojectedTestFace); //Hàm đưa ra độ tin tưởng float KiemTraGiongKhuonMat(float * projectedTestFace, float *SuThat);  Thực hiện: - Sau khi đã thu được ảnh (có khuôn mặt) từ camera và biến đổi theo ảnh quy định là ảnh có hệ màu nhị phân ,chỉ lấy vị trí có khuôn mặt, và kích thước 120x90. Ta tiếp tục thực hiện đến công đoạn so sánh ảnh mẫu với dữ liệu có trước. - Sử dụng hàm int NguoiGanGiongNhat(float * sprojectedTestFace) , bằng cách tính khoảng cách từ ảnh đưa vào đến ảnh có trong dữ liệu qua công thức tính khoảng cách Euchile, ta sẽ tìm được ảnh nào trong dữ liệu gần giống nhất với ảnh đang kiểm tra. - Sử dụng hàm float KiemTraGiongKhuonMat(float * projectedTestFace, float *SuThat); đã sẽ tìm được độ tin tưởng giữa ảnh đang kiểm tra và ảnh mẫu. Độ tin tưởng này được tính dựa vào kết quả phân tích theo thuật toán PCA. - Dựa vào độ tin tưởng, ta sẽ đưa ra được kết luận phù hợp. 1.3 Huấn luyện khuôn mặt:  Sơ đồ thực hiện: Bước 1 Bước 2 Bước 3  Nếu không tìm thấy khuôn mặt nào trong cơ sở dữ liệu, thì tiến hành huấn luyện khuôn mặt mới. Sử dụng phím điều khiển theo quy định của chương trình. Phím 'T', thì bắt đầu quá trình huấn luyện. Thực hiện quá trình lưu ảnh huấn luyện vào bộ nhớ. Phím 'Q', kết thúc quá trình lưu ảnh. Thực hiện quá trình xử lý ảnh và lưu dữ liệu mới. Hàm thực hiện trong chương trình: Page 18 Báo cáo Đồ Án ĐỒ HỌA MÁY TÍNH - ỨNG DỤNG OPENCV & CAMERA // Lưu ảnh huấn luyện vào thư mục LuuTru sprintf(cstr, "LuuTru/%d_%s%d.jpg", SoNguoi+1, newHoTen, newNguoi+1); //Biến đổi ảnh thành các mảng int loadFaceImgArray(char * filename); // Thực hiện viêc biến đổi ảnh đưa vào thành vector và lưu vào dữ liệu void MayHoc(char *zfiletrain); // Thuật giải PCA trong việc biến ảnh thành vector void thuatgiaiPCA(); //Save dữ liệu vào file dữ liệu khuôn mặt void SaveFaceData();  Thực hiện: Khi không tìm thấy khuôn mặt nào hợp với dữ liệu thì người dùng bấm phím ‘T’ để bắt đầu qua trình huấn luyện. Lúc này yêu cầu nhập tên của Người chuẩn bị huấn luyện. Và biến cờ hiệu cho phép quá trình huấn luyện ảnh được kích hoạt . saveNextFaces = TRUE. Lúc này thì hàm sprintf được thực hiện và bắt đầu quá trình chụp ảnh của người cần huấn luyện để lưu vào thư mục LuuTru. (ảnh được lưu vào đã qua quá trình thực hiện có bước hiệu chỉnh ảnh như ở qua trình nhận diện) . Để kết thúc qua trình ấn phím ‘Q’, lúc này biến cờ hiệu . saveNextFaces =FALSE kết thúc quá trình lưu ảnh vào CSDL, tiếp tục thực hiện tới quá trinh Huấn Luyện Ảnh. Trong qua trình huấn luyện ảnh áp dụng phương pháp PCA để thu được ảnh theo yêu cầu, sau đó chuyển các ảnh thu được thành các vector và lưu vào file DuLieuKhuonMat. ** Kết quả: Trước khi máy học: Page 19 Sau khi máy học: Báo cáo Đồ Án ĐỒ HỌA MÁY TÍNH - ỨNG DỤNG OPENCV & CAMERA 2. XỬ LÝ OPEN IMAGES & HIỆU CHỈNH TRÊN HÌNH ẢNH: Ở phần này em xin trình bày phần xử lý và hiệu chình hình ảnh góp phần vào việc phục vụ cho quá trình máy học được thực hiện nhanh chóng với các phép biến đổi như: thay đổi kích cỡ ảnh cho phù hợp với ảnh khuôn mặt mà lúc máy chụp lưu vào cơ sở dữ liệu, chuyển ảnh từ ảnh màu sang ảnh màu xám 8bit để dễ phù hợp với thuật giải, ngoài ra thêm cần bằng mức xám (Histogram Equalization) giúp cân bằng sáng tối, giảm bớt độ tương phản ảnh bằng lược đồ Histogram. Mặt khác thì trong phần xử lý ảnh kèm theo một số chứ năng phụ như: o Xuất thông tin của ảnh khi load vào giúp người dùng hiểu rỏ hơn cấu trúc ảnh o Các thao tác cơ bản trên ảnh như:  Phóng to, thu nhỏ  Lập hình nếu hình bị lệch 1800  Chuyển hình ảnh đối xứng  Phân kênh màu của ảnh RGB thành 3 kênh : R, G, B  Chuyển ảnh xám sang dạng nhi phân  Chuyển ảnh xám sang dạng trắng đen  Phát hiện biên ảnh, ăn mòn, làm mỏng ảnh 2.1 Các hàm cơ bản trên OpenCV: 2.1.1 Đọc và hiển thị ảnh: Chúng ta sử dụng hàm cvLoadImage() trong module HighGui: Sử dụng cvReleaseImage() để giải phóng bộ nhớ khi không sử dụng để tiết kiệm tài nguyên hệ thống Page 20
- Xem thêm -