Luận văn Ứng dụng kit Raspberry nhận dạng mặt người (Phần 1)

pdf 22 trang phuongnguyen 40
Bạn đang xem 20 trang mẫu của tài liệu "Luận văn Ứng dụng kit Raspberry nhận dạng mặt người (Phần 1)", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfluan_van_ung_dung_kit_raspberry_nhan_dang_mat_nguoi_phan_1.pdf

Nội dung text: Luận văn Ứng dụng kit Raspberry nhận dạng mặt người (Phần 1)

  1. BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP.HCM KHOA ĐIỆN - ĐIỆN TỬ ĐỒ ÁN TỐT NGHIỆP NGÀNH CÔNG NGHỆ KỸ THUẬT ĐIỀU KHIỂN VÀ TỰ ĐỘNG HÓA ỨNG DỤNG KIT RASPBERRY NHẬN DẠNG MẶT NGƯỜI GVHD: ThS. NGUYỄN DUY THẢO SVTH : HUỲNH CÔNG THÀNH NGUYỄN TRUNG VINH S KL 0 0 4 3 4 8 Tp. Hồ Chí Minh, năm 2016
  2. LỜI CAM DOAN Chúng tôi cam đoan ĐATN là công trình nghiên cứu của bản thân chúng tôi dưới sự hướng dẫn của thạc sỹ Nguyễn Duy Thảo. Các kết quả công bố trong ĐATN là trung thực và không sao chép hoàn toàn từ công trình nào khác. Người thực hiện đề tài Huỳnh Công Thành Nguyễn Trung Vinh v
  3. LỜI CẢM ƠN Chúng em xin gửi lời cảm ơn sâu sắc đến ThS.Nguyễn Duy Thảo, đã tận tình hướng dẫn, chỉ bảo, định hướng cho chúng em trong suốt thời gian thực hiện đề tài. Thầy đã cho chúng em những lời khuyên quý báu giúp chúng em hoàn thành tốt khóa luận. Chúng em xin cảm ơn các thầy cô trong khoa Điện-Điện tử trường Đại Học Sư phạm Kỹ thuật Tp.HCM đã tận tình giảng dạy, truyền đạt cho chúng em những kiến thức quý báu trong những năm học vừa qua, giúp cho chúng em có một nền tảng kiến thức vững chắc để thực hiện khóa luận cũng như nghiên cứu học tập sau này. Cuối cùng, chúng em xin gửi lời cảm ơn đến cha mẹ, tất cả anh chị, bạn bè, những người đã giúp đỡ, khích lệ cũng như phê bình, góp ý, giúp chúng em hoàn thành khóa luận một cách tốt nhất. Xin chân thành cảm ơn! Người thực hiện đề tài Huỳnh Công Thành Nguyễn Trung Vinh vi
  4. MỤC LỤC TRANG BÌA i PHIẾU GIAO NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP ii LỊCH TRÌNH THỰC HIÊN ĐỒ ÁN TỐT NGHIỆP iii PHIẾU ĐÁNH GIÁ KHÓA LUẬN TỐT NGHIỆP iv LỜI CAM DOAN v LỜI CẢM ƠN vi MỤC LỤC vii LIỆT KÊ HÌNH ix LIỆT KÊ BẢNG xi TÓM TẮT xii CHƯƠNG 1. TỔNG QUAN 1 1.1. ĐẶT VẤN ĐỀ 1 1.2. MỤC TIÊU 1 1.3. NỘI DUNG NGHIÊN CỨU 1 1.4. GIỚI HẠN 2 1.5. BỐ CỤC 2 CHƯƠNG 2. CƠ SỞ LÝ THUYẾT 4 2.1. GIỚI THIỆU VỀ KIT RASPBERRY PI VÀ MODULE CAMERA PI 4 2.2. GIỚI THIỆU VỀ THƯ VIỆN OPENCV 7 2.3. ĐẶC TRƯNG HAAR-LIKE 9 2.4. ADABOOST 12 2.5. CHUỖI CÁC BỘ PHÂN LỚP (CASCADE OF CLASSIFIER) 15 2.5.1. Ý tưởng 15 2.5.2. Huấn luyện một cascade 16 CHƯƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ 19 3.1. GIỚI THIỆU 19 3.1.1. Thiết kế sơ đồ khối hệ thống 19 3.1.2. Tính toán và thiết kế 22 a. Thiết kế khối đầu vào 22 b. Thiết kế khối xử lý đầu vào 23 c. Thiết kế khối phát hiện khuôn mặt 24 vii
  5. d. Thiết kế khối xử lý khuôn mặt được phát hiện 24 e. Thiết kế khối cơ sở dữ liệu 25 f. Thiết kế khối so sánh 25 g. Thiết kế khối kết luận 25 3.1.3. Sơ đồ nguyên lý phần cứng 26 CHƯƠNG 4. THI CÔNG HỆ THỐNG 28 4.1. GIỚI THIỆU 28 4.2. THI CÔNG MÔ HÌNH 28 4.3. LẬP TRÌNH HỆ THỐNG 29 4.3.1. Lưu đồ giải thuật 29 4.3.2. Phần mềm lập trình cho hệ thống 34 4.4. VIẾT TÀI LIỆU HƯỚNG DẪN SỬ DỤNG, THAO TÁC 35 4.4.1. Tài liệu hướng dẫn sử dụng 35 4.4.2. Quy trình thao tác 36 CHƯƠNG 5. KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ 37 5.1. KẾT QUẢ 37 5.1.1. Tổng quan kết quả đạt được 37 5.1.2. Kết quả thực tế 37 CHƯƠNG 6. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 42 6.1. KẾT LUẬN 42 6.2. HƯỚNG PHÁT TRIỂN 42 TÀI LIỆU THAM KHẢO 44 PHỤ LỤC 45 viii
  6. LIỆT KÊ HÌNH Hình 2.1 Cấu tạo của Raspberry Pi 3 model B 4 Hình 2.2 Các chân GPIO của Raspberry Pi 3 model B 6 Hình 2.3 Module Camera. 6 Hình 2.4 Cách kết nối module camera với kit raspberry PI. 7 Hình 2.5 Cấu trúc cơ bản của OpenCV 8 Hình 2.6 Minh họa kiểu dữ liệu của toán tử mat 8 Hình 2.7 Bốn đặt trưng Haar-like cơ bản 9 Hình 2.8 Các đặc trưng mở rộng của các đặc trưng Haar-like cơ sở 9 Hình 2.9 Cách tính Integral Image của ảnh 10 Hình 2.10 Cách tính nhanh tổng các điểm ảnh của vùng D trên ảnh 11 Hình 2.11 Cách tính nhanh tổng điểm ảnh của vùng D với các đặc trưng xoay 45o 11 Hình 2.12 Mô hình phân tần kết hợp các bộ phân loại yếu để xác định khuôn mặt 12 Hình 2.13 Kết hợp các bộ phân loại yếu thành bộ phân loại mạnh 13 Hình 2.14 Mô hình Cascade Classifier 16 Hình 3.1 Sơ đồ khối quá trình huấn luyện 20 Hình 3.2 Sơ đồ khối quá trình nhận dạng 21 Hình 3.3 Sơ đồ nguyên lý phần cứng khối đầu vào 23 Hình 3.4 Sơ đồ nguyên lý phần cứng khối kết luận 25 Hình 3.5 Sơ đồ nguyên lý phần cứng 26 Hình 4.1 Mô hình trong quá trình thực hiện 28 Hình 4.2 Lưu đồ chương trình. 29 Hình 4.3 Lưu đồ chương trình huấn luyện. 30 Hình 4.4 Lưu đồ chương trình nhận dạng. 31 Hình 4.5 Lưu đồ chương trình xử lý cơ sở dữ liệu. 32 Hình 4.6 Lưu đồ chương trình xử lý ảnh chụp 33 Hình 4.7 Một số hệ điều hành chạy trên kit Raspberry PI. 34 Hình 4.8 Giao diện hệ điều hành raspbian. 34 Hình 4.9 Thiết lập để sử dụng camera pi. 35 Hình 4.10 Quy trình thao tác 36 Hình 5.1 Phát hiện khuôn mặt trường hợp nhìn sang trái. 37 Hình 5.2 Phát hiện khuôn mặt trường hợp nhìn sang phải. 38 ix
  7. Hình 5.3 Phát hiện khuôn mặt trường hợp nhìn thẳng. 38 Hình 5.4 Nhận dạng khuôn mặt trường hợp nhìn sang trái 39 Hình 5.5 Nhận dạng khuôn mặt trường hợp nhìn sang phải. 39 Hình 5.6 Nhận dạng khuôn mặt trường hợp nhìn thẳng. 40 x
  8. LIỆT KÊ BẢNG Bảng 1 Kết quả quá trình huấn luyện ở độ sáng 45 lux. 40 Bảng 2 Kết quả phát hiện nhiều khuôn mặt. 40 Bảng 3 Kết quả quá trình nhận dạng với độ sáng 40 lux và ngưỡng 4000. 41 Bảng 4 Kết quả nhận dạng với độ sáng 110 lux và ngưỡng 4000. 41 xi
  9. TÓM TẮT Nhận diện mặt người là bài toán xuất hiện cách đây không lâu, trong khoảng vài thập niên trở lại đây, nhưng đã có rất nhiều nghiên cứu về nó. Các nghiên cứu ban đầu rất đơn giản, ảnh là đen trắng và chỉ có một khuôn mặt chụp thẳng, sau này mở rộng ra cho ảnh màu, ảnh có nhiều khuôn mặt với nhiều góc độ khác nhau, môi trường xung quanh cũng đi từ đơn giản đến phức tạp Ngày nay các hệ thống nhận dạng mặt người đang được ứng dụng trong nhiều lĩnh vực, đặc biệt là an ninh và bảo mật. Trong đề tài “Ứng dụng kit Raspberry nhận dạng mặt người” này nhóm thực hiện đã xây dựng được một hệ thống phát hiện và nhận dạng khuôn mặt khá nhanh và tương đối chính xác. Các nội dung nghiên cứu bao gồm: Tìm hiểu kit Raspberry, tìm hiểu các giải thuật nhận dạng và phát hiện khuôn mặt, xây dựng các thuật toán nhận dạng khuôn mặt, áp dụng thư viện mã nguồn mở OpenCV vào bài toán nhận dạng khuôn mặt. Sau khi tìm hiểu nhiều phương pháp khác nhau nhóm thực hiện đề tài chọn phương pháp phân tích thành phần đặc trưng Haar- like kết hợp phương pháp học máy Adaboost, chuỗi các bộ phân lớp Cascade of Classifers. Đề tài sẽ được xây dựng trên nền tảng Visual Studio C++ của Microsoft và được thực hiện trên kit Raspberry Pi, xử lý trực tiếp ảnh nhận từ Camera Pi. Mô hình do nhóm thực hiện đã đạt được khoảng 85% mục tiêu do nhóm đặt ra. Tỉ lệ phát hiện khuôn mặt cao khoảng 96%, ít phụ thuộc vào góc nhìn của người trong camera. Tỉ lệ nhận dạng ra đúng người đạt khoảng 90% phụ thuộc vào góc nhìn và độ sáng. Mô hình có thể phát hiện được nhiều khuôn mặt cùng lúc, tuy nhiên vì chỉ so sánh với một thư mục ảnh nên chỉ có thể nhận dạng được một người trong cùng một thời gian. Ngoài ra, mô hình hoạt động còn hơi giật lag do camera pi, cấu hình của kit Raspberry không cao và đoạn chương trình chưa được tối ưu tốt. xii
  10. CHƯƠNG 1. TỔNG QUAN TỔNG QUAN 1.1. ĐẶT VẤN ĐỀ Nhận dạng mặt người được nghiên cứu từ những năm 1980, là một lĩnh vực nghiên cứu của ngành thị giác máy tính, và cũng được xem là một lĩnh vực nghiên cứu của ngành sinh trắc học tương tự như nhận dạng vân tay, hay nhận dạng mống mắt. Trong khi nhận dạng vân tay và mống mắt có thể áp dụng trên thực tế một cách rộng rãi thì nhận dạng mặt người vẫn còn nhiều thách thức. So với nhận dạng vân tay và mống mắt, nhận dạng mặt có nguồn dữ liệu phong phú hơn và ít đòi hỏi sự tương tác có kiểm soát hơn. Bài toán nhận dạng mặt người còn nhiều thách thức nên hàng năm trong và ngoài nước vẫn có nhiều nghiên cứu về các phương pháp nhận dạng mặt người. Nhiệm vụ đặt ra cho bài toán nhận dạng mặt người là nghiên cứu và xây dựng một chương trình sử dụng phương pháp nhận dạng có độ chính xác cao mà khối lượng và thời gian tính toán lại ít. Để giải quyết vấn đề trên nhóm thực hiện đề tài nhận thấy phương pháp phân tích các thành phần đặc trưng của khuôn mặt sẽ giảm bớt số thành phần không cần thiết tạo ra hiệu quả tính toán nhanh mà vẫn đảm bảo được độ chính xác. Do đó, nhóm thực hiện chọn đề tài: “Ứng dụng kit Raspberry nhận dạng mặt người” dựa trên đặc trưng Haar-like viết bằng ngôn ngữ C++ được thực hiện kit Raspberry Pi. 1.2. MỤC TIÊU Mục tiêu của đề tài là xây dựng một hệ thống nhận dạng mặt người với đầu vào là ảnh khuôn mặt người, hệ thống sẽ xử lý và tìm kiếm xem người này có trong cơ sở dữ liệu hay không và cho đầu ra là thông tin liên quan đến người được nhận dạng. 1.3. NỘI DUNG NGHIÊN CỨU Với mục tiêu xây dựng hệ thống nhận dạng mặt người như trên thì nhóm sẽ nghiên cứu các nội dung như sau: NỘI DUNG 1: Tìm hiểu các giải thuật phát hiện và nhận dạng khuôn mặt. NỘI DUNG 2: Xây dựng thuật toán phát hiện và nhận dạng khuôn mặt. NỘI DUNG 3: Áp dụng mã nguồn thư viện mở OpenCV vào thuật toán. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 1
  11. CHƯƠNG 1. TỔNG QUAN NỘI DUNG 4: Xây dựng chương trình phát hiện và nhận dạng khuôn mặt dựa trên mã nguồn thư viện mở Open CV và được thực hiện trên Kit Raspberry Pi. NỘI DUNG 5: Đánh giá kết quả. 1.4. GIỚI HẠN Trong đề tài này, nhóm nghiên cứu tập trung vào việc xác định khuôn mặt từ camera. Từ đó theo dõi và xử lý khuôn mặt được phát hiện. Sau đó so sánh ảnh khuôn mặt với cơ sở dữ liệu đã có sẵn. Vì thế trong luận văn này nhóm nghiên cứu đưa ra những giả định và ràng buộc sau làm giảm độ phức tạp của bài toán như sau: Các khuôn mặt được quay thẳng hoặc góc nghiêng không đáng kể (bé hơn 200). Phông nền không quá phức tạp, không bị che khuất. Camera được quay trong điều kiện ánh sáng khoảng 90 LUX, ngưỡng nhận dạng khoảng 4000. Đối với camera quá kém chương trình sẽ không thực hiện được tốt nhất có thể. 1.5. BỐ CỤC Với mục tiêu chính là tìm hiểu giải thuật AdaBoost, các đặc trưng Haar-like, chuỗi các bộ phân lớp (Cascade of Classifiers) đồng thời áp dụng vào bài toán phát hiện và nhận dạng mặt người từ camera, đồ án được trình bày trong sáu chương với bố cục như sau: Chương 1: Tổng quan Chương này trình bày đặt vấn đề dẫn nhập lý do chọn đề tài, mục tiêu, nôi dung nghiên cứu, các giới hạn thông số và bố cục đồ án. Chương 2: Cơ sở lý thuyết Giới thiệu về kit Raspberry Pi và module Camera Pi. Tiếp đến giới thiệu về thư viện mã nguồn mở OpenCV. Đi sâu vào hướng tiếp cận dựa theo thuật toán học máy AdaBoost. Giới thiệu về các đặc trưng Haar-like của khuôn mặt, cách tính các đặc trưng Haar-like, chuỗi các bộ phân lớp (cascade of classifeers) và cách áp dụng vào bài toán phát hiện mặt người. Chương 3: Thiết kế và tính toán Xây dựng một chương trình về phát hiện và nhận dạng mặt người được viết trên nền Visual C ++ của Microsoft, sử dụng thư viện mã nguồn mở OpenCV của Intel trên BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 2
  12. CHƯƠNG 1. TỔNG QUAN kit Raspberry Pi. Nêu lên các phân tích, thiết kế về chương trình, sơ đồ khối của hệ thống, sơ đồ nguyên lý phần cứng. Chương 4: Thi công hệ thống Các bước xây dựng chương trình, tạo tập tin huấn luyện, các hàm, lưu đồ, chương trình được sử dụng. Viết tài liệu hướng dẫn sử dụng, quy trình thao tác. Chương 5: Kết quả, Nhận xét và Đánh giá Nêu các kết quả đạt được khi thực thi chương trình, sau đó phân tích, nhận xét, đánh giá các kết quả thực thi được. Chương 6: Kết luận và hướng phát triển Tóm tắt những kết quả đạt được, những hạn chế và nêu lên các hướng phát triển trong tương lai. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 3
  13. CHƯƠNG 2. CƠ SỞ LÝ THUYẾT CƠ SỞ LÝ THUYẾT 2.1. GIỚI THIỆU VỀ KIT RASPBERRY PI VÀ MODULE CAMERA PI Raspberry Pi–Chiếc máy tính mini bắt đầu được sản xuất bởi Quỹ Raspberry Pi vào tháng 12/2011. Chiếc máy tính này chỉ có kích cỡ bằng một chiếc thẻ tín dụng với đầy đủ các kết nối và tuỳ dung lượng RAM mà người mua lựa chọn. Trong một cuộc phỏng vấn mới đây, người đứng đầu của quỹ này là David Braben cho biết mặc dù có giá rẻ và kích cỡ nhỏ gọn nhưng máy tính của họ hoàn toàn có thể chơi những game như Quake III Arena hay chơi video độ phân giải Full-HD. Hình 2.1 Cấu tạo của Raspberry Pi 3 model B Trái tim của Pi là chip SOC (System-On-Chip) Broadcom BCM2837 chạy ở tốc độ 1.2GHz. Chip này tương đương với nhiều loại được sử dụng trong smartphone phổ thông hiện nay, và có thể chạy được hệ điều hành Linux. Tích hợp trên chip này là nhân đồ họa (GPU) Broadcom VideoCore IV. GPU này đủ mạnh để có thể chơi 1 số game phổ thông và phát video chuẩn full HD. 40 chân GPIO (General Purpose Input Output): đúng như tên gọi của nó, từ đây có thể kết nối và điều khiển rất nhiều thiết bị điện tử/cơ khí khác. Ngõ HDMI: dùng để kết nối Pi với màn hình máy tính hay tivi có hỗ trợ cổng HDMI. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 4
  14. CHƯƠNG 2. CƠ SỞ LÝ THUYẾT Ngõ RCA Video (analog): khi thiết kế Pi người ta cũng tính đến trường hợp người sử dụng ở các nước đang phát triển không có điều kiện sắm một chiếc tivi đời mới tích hợp cổng HDMI. Vì vậy cổng video analog này được thêm vào, giúp bạn có thể kết nối với chiếc tivi đời cũ mà không phải lo lắng. Ngõ audio 3.5mm: kết nối dễ dàng với loa ngoài hay headphone. Đối với tivi có cổng HDMI, ngõ âm thanh được tích hợp theo đường tín hiệu HDMI nên không cần sử dụng ngõ audio này. Cổng USB: một điểm mạnh nữa của Pi là tích hợp 4 cổng USB 2.0. Bạn có thể kết nối với bàn phím, chuột hay webcam, bộ thu GPS, qua đó có thể mở rộng phạm vi ứng dụng. Vì Pi chạy Linux nên hầu hết thiết bị chỉ cần cắm-và-chạy (Plug-n-Play) mà không cần cài driver phức tạp. Cổng Ethernet: cho phép kết nối Internet dễ dàng. Cắm dây mạng vào Pi, kết nối với màn hình máy tính hay tivi và bàn phím, chuột là bạn có thể lướt web dễ dàng. Khe cắm thẻ SD: Pi không tích hợp ổ cứng. Thay vào đó nó dùng thẻ SD để lưu trữ dữ liệu. Toàn bộ hệ điều hành Linux sẽ hoạt động trên thẻ SD này vì vậy nó cần kích thước thẻ nhớ tối thiểu 4 GB và dung lượng hỗ trợ tối đa là 32 GB. Đèn LED: trên Pi có 5 đèn LED để hiển thị tình trạng hoạt động. Jack nguồn micro USB 5V, tối thiểu 700mA: nhờ thiết kế này mà bạn có thể tận dụng hầu hết các sạc điện thoại di động trên thị trường để cấp nguồn điện cho Pi. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 5
  15. CHƯƠNG 2. CƠ SỞ LÝ THUYẾT Hình 2.2 Các chân GPIO của Raspberry Pi 3 model B Đề tài sử dụng module camera làm thiết bị chụp ảnh đầu vào. Hình 2.3 Module Camera. Module camera có kích thước 25mm x 20mm x 9mm và nặng 3g. Nó được kết nối trực tiếp vào cổng CSI (Camera Serial Interface) trên kit Raspberry PI thông qua cáp tín hiệu. Module sử dụng cảm biến hình ảnh CMOS QSXGA 5 Mpixel với công nghệ OmniBSI do hãng OmniVision chế tạo, có tiêu cự cố định. Nó hỗ trợ quay video với độ phân giải full HD tốc độ 30 fps, độ phân giải HD là 60 fps và VGA là 60/90 fps BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 6
  16. CHƯƠNG 2. CƠ SỞ LÝ THUYẾT Hình 2.4 Cách kết nối module camera với kit raspberry PI. 2.2. GIỚI THIỆU VỀ THƯ VIỆN OPENCV OpenCV (Open Computer Vision library) hoàn thiện thành phiên bản 1.0 năm 2006. Phiên bản mới nhất hiện nay là 3.0. Thư viện OpenCV lúc đầu được viết bằng ngôn ngữ lập trình C, về sau đã được mở rộng sang các ngôn ngữ khác như Python, C++ và tương thích với các hệ điều hành Windows, Linux, Mac OS Trước OpenCV không có một công cụ chuẩn nào cho lĩnh vực CV. Các đoạn code đơn lẻ do các nhà nghiên cứu tự viết thường không thống nhất và không ổn định. Các bộ công cụ thương mại như Matlab, Simulink, Halcon, v.v lại có giá cao chỉ thích hợp cho các công ty phát triển các ứng dụng lớn. Ngoài ra còn có các giải pháp kèm theo thiết bị phần cứng mà phần lớn là mã đóng và được thiết kế riêng cho từng thiết bị, rất khó khăn cho việc mở rộng ứng dụng. OpenCV là công cụ hữu ích cho việc nghiên cứu, ứng dụng CV vì các ưu điểm sau: OpenCV là công cụ chuyên dụng: Được Intel phát triển theo hướng tối ưu hóa cho các ứng dụng xử lí và phân tích ảnh, với cấu trúc dữ liệu hợp lý, thư viện tạo giao diện, truy xuất thiết bị phần cứng được tích hợp sẵn. OpenCV thích hợp để phát triển nhanh ứng dụng. OpenCV là công cụ mã nguồn mở: Không chỉ là công cụ miễn phí (với BSD license), việc được xây dựng trên mã nguồn mở giúp OpenCV trở thành công cụ thích hợp cho nghiên cứu và phát triển, với khả năng thay đổi và mở rộng các mô hình, thuật toán. Cấu trúc thư viện OpenCV [3] : BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 7
  17. CHƯƠNG 2. CƠ SỞ LÝ THUYẾT CV MLL HighGUI Các hàm về xử lý Các thuật toán học Các hàm và thủ tục ảnh và giải thuật về máy, bao gồm các làm việc với file thị giác máy tính bộ phân cụm, phân ảnh và file video loại thống kê CXCORE Các cấu trúc dữ liệu cơ bản, cấu trúc XML, các hàm về đồ họa Hình 2.5 Cấu trúc cơ bản của OpenCV Ban đầu, phiên bản OpenCV 1.0 được viết bằng ngôn ngữ C, dữ liệu ảnh được lưu trữ trên RAM sử dụng cấu trúc C được gọi là lplImage. Điều này đem lại một bất tiện là chúng ta phải tự giải phóng vùng nhớ lưu trữ dữ liệu ảnh sau khi sử dụng. Sau đó, OpenCV 2.0 ra đời, kế thừa những ưu điểm đã có từ phiên bản 1.0, sử dụng ngôn ngữ C++ và toán tử cv::Mat ra đời. Kể từ đây, tất cả các kiểu dữ liệu ảnh, các ma trận đều được lưu dưới dạng cv::Mat. Từ đây việc giải phóng vùng nhớ sau khi sử dụng được thực hiện một cách tự động. Về cơ bản, Mat là một lớp gồm 2 phần dữ liệu: hằng số header ma trận (chứa các thông tin như kích thước ma trận, phương thức sử dụng để lưu trữ và địa chỉ lưu trữ ma trận ) và con trỏ ma trận chứa giá trị các pixel. Hình 2.6 Minh họa kiểu dữ liệu của toán tử mat BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 8
  18. CHƯƠNG 2. CƠ SỞ LÝ THUYẾT 2.3. ĐẶC TRƯNG HAAR-LIKE Viola và Jones dùng 4 đặc trưng cơ bản để xác định khuôn mặt người. Mỗi đặc trưng Haar–like là sự kết hợp của hai hay ba hình chữ nhật "trắng" hay "đen" như trong hình sau [5]: Hình 2.7 Bốn đặt trưng Haar-like cơ bản Để áp dụng các đặt trưng này vào việc bài toán xác định mặt người, 4 đặt trưng Haar-like cơ bản được mở rộng ra, và được chia làm 3 tập đặc trưng như sau: 1. Đặc trưng cạnh (edge features) 2. Đặc trưng đường (line features) 3. Đặc trưng xung quanh tâm (center-surround features) Hình 2.8 Các đặc trưng mở rộng của các đặc trưng Haar-like cơ sở Lợi ích của các đặc trưng Haar-like là nó diễn đạt được tri thức về các đối tượng trong ảnh (bởi vì nó biểu diễn mối liên hệ giữa các bộ phận của đối tượng), điều mà bản thân từng điểm ảnh không diễn đạt được. Để tính giá trị các đặc trưng Haar-like, ta tính sự chênh lệch giữa tổng của các pixel của các vùng đen và các vùng trắng như trong công thức sau [5]: f(x) = Tổngvùng đen(pixel) - Tổngvùng trắng(pixel) (2.1) Sử dụng giá trị này, so sánh với các giá trị của các giá trị pixel thô, các đặc trưng Haar-like có thể tăng/giảm sự thay đổi in-class/out-of-class (bên trong hay bên ngoài lớp khuôn mặt người), do đó sẽ làm cho bộ phân loại dễ hơn. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 9
  19. CHƯƠNG 2. CƠ SỞ LÝ THUYẾT Như vậy ta có thể thấy rằng, để tính các giá trị của đặc trưng Haar-like, ta phải tính tổng của các vùng pixel trên ảnh. Nhưng để tính toán các giá trị của các đặc trưng Haar-like cho tất cả các vị trí trên ảnh đòi hỏi chi phí tính toán khá lớn, không đáp ứng được cho các ứng dụng đòi hỏi tính run-time. Do đó Viola và Jones đưa ra một khái niệm gọi là Integral Image để tính toán nhanh cho khác feature cơ bản. Sau này, Lienhart kế thừa gọi Integral Image là SAT – Summed Area Table và đưa ra thêm khái niệm RSAT – Rotated Summed Area Table dùng để tính toán nhanh cho các đặc trưng xoay 1 góc 450 . Integral Image là một mảng 2 chiều với kích thước bằng với kích của ảnh cần tính các đặc trưng Haar-like, với mỗi phần tử của mảng này được tính bằng cách tính tổng của điểm ảnh phía trên (dòng-1) và bên trái (cột-1) của nó. Bắt đầu từ vị trí trên, bên trái đến vị trí dưới, phải của ảnh, việc tính toán này đơn thuần chỉ đựa trên phép cộng số nguyên đơn giản, do đó tốc độ thực hiện rất nhanh [5]. P(x,y) (2.2) Pxyixy(,)(',')  xx',' yy Hình 2.9 Cách tính Integral Image của ảnh Sau khi đã tính được Integral Image, việc tính tổng điểm ảnh của một vùng bất kỳ nào đó trên ảnh thực hiện rất đơn giản theo cách sau: (Giả sử ta cần tính tổng điểm ảnh của vùng D như trong hình 2.9) [5]. D = A + B + C + D – (A+B) – (A+C) + A (2.3) Với A + B + C + D chính là giá trị tại điểm P4 trên Integral Image, tương tự như vậy A+B là giá trị tại điểm P2, A+C là giá trị tại điểm P3, và A là giá trị tại điểm P1. Vậy ta có thể viết lại biểu thức tính D ở trên như sau [5]: Dx (,)(,)(,)(,) yx yx yx y 4 42 23 31 1 (2.4) ()()A B C DA BA ()AC BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 10
  20. CHƯƠNG 2. CƠ SỞ LÝ THUYẾT Hình 2.10 Cách tính nhanh tổng các điểm ảnh của vùng D trên ảnh A B 1 C 2 D 3 RSAT(x,y 4 ) (a) (b) Hình 2.11 Cách tính nhanh tổng điểm ảnh của vùng D với các đặc trưng xoay 45o Với các đặc trưng Haar-like xoay 45o Integral Image tại một điểm (x, y) được tính theo công thức [5]: PxyIxy(,)(',')  (2.5) x x, x xyy Tổng pixel của một vùng bất kỳ trên ảnh vẫn được tính theo cách sau [5]: D = A + B + C + D – (A+B) – (A+C) + A (2.6) Như vậy tổng các điểm ảnh trong một hình chữ nhật (kể cả trường hợp xoay 45º) bất kì đều có thể được tính nhanh dựa trên integral image tại 4 đỉnh của nó [5]: Sum (D ) = 4 - 2 – 3 + 1 (2.7) Tiếp theo, để chọn các đặc trưng Haar-like dùng cho việc thiết lập ngưỡng, Viola và Jones sử dụng một phương pháp máy học được gọi là AdaBoost. AdaBoost sẽ kết hợp các bộ phân loại yếu để tạo thành một bộ phân loại mạnh. Với bộ phân loại yếu chỉ cho ra câu trả lời chính xác chỉ hơn việc đoán một cách ngẫn nhiên một chút, còn bộ phân loại mạnh có thể đưa ra câu trả lời chính xác trên 60%. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 11
  21. CHƯƠNG 2. CƠ SỞ LÝ THUYẾT 2.4. ADABOOST AdaBoost ( Adaptive Boost ) là một bộ phân loại mạnh phi tuyến phức dựa trên hướng tiếp cận boosting được Freund và Schapire đưa ra vào năm 1995. AdaBoost hoạt động trên nguyên tắc kết hợp tuyến tính các bộ phân loại yếu dựa trên các đặc trưng Haar- like để hình thành một bộ phân loại mạnh [2]. Để có thể kết hợp các bộ phân loại yếu, AdaBoost sử dụng một trọng số (weight) để đánh dấu các mẫu khó nhận dạng. Trong quá trình huấn luyện, cứ mỗi weak classifier (bộ phân loại yếu) được xây dựng, thuật toán sẽ tiến hành cập nhật lại trọng số để chuẩn bị cho việc xây dựng weak classifier tiếp theo: tăng trọng số của các mẫu bị nhận dạng sai và giảm trọng số của các mẫu được nhận dạng đúng bởi weak classifier vừa xây dựng. Bằng cách này, các weak classifier sau có thể tập trung vào các mẫu mà các weak classifier trước đó chưa thực hiện tốt. Sau cùng các weak classifier sẽ được kết hợp tùy theo mức độ ‘tốt’ của chúng để tạo nên một strong classifier (bộ phân loại mạnh) [2]. Viola và Jones dùng AdaBoost kết hợp các bộ phân loại yếu sử dụng các đặc trưng Haar-like theo mô hình phân tầng (cascade) như sau: Vùng ảnh con cần xét Không là h1 khuôn mặt Không là h2 khuôn mặt Không là khuôn mặt Không là h3 khuôn mặt ⋮ h Không là N khuôn mặt Là khuôn mặt Khuôn mặt Hình 2.12 Mô hình phân tần kết hợp các bộ phân loại yếu để xác định khuôn mặt BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 12
  22. S K L 0 0 2 1 5 4