Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 23 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
23
Dung lượng
309,66 KB
Nội dung
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN ĐIỆN ĐỒ ÁN I NGÀNH ĐIỀU KHIỂN VÀ TỰ ĐỘNG HÓA ĐỀ TÀI: PHÁT HIỆN KHN MẶT VỚI THUẬT TỐN ADABOOST Sinh viên thực : Nguyễn Trí Thành Lớp ĐK-TĐH 04 Giáo viên hướng dẫn : TS Nguyễn Văn Ánh HÀ NỘI – 2015 MỞ ĐẦU Công nghệ thông tin ứng dụng lĩnh vực sống Với hệ thống máy tính, làm nhiều việc, tiết kiện thời gian cơng sức Điển cơng việc nhận dạng mặt người Ngày xưa, muốn tìm kiếm kẻ tình nghi siêu thị hay sân bay, nhân viên an ninh phải tìm kiếm hình camera theo dõi Ngày nay, công việc làm tự động nhờ hệ thống nhận dạng mặt người Phát mặt người ảnh phần quan trọng hệ thống nhận dạng mặt người đó, giải tốt việc phát hiên mặt người giúp tiết kiệm thời gian nâng cao độ xác việc nhận dạng khuôn mặt Phát mặt người toán nhận dạng đơn giản, hệ thống cần phân loại đối tượng đưa vào có phải mặt người hay mặt người Ở mức độ cao hơn, sau phát khuôn mặt, khn mặt so sánh với khn mặt có liệu để nhận dạng xem khn mặt (thường áp dụng nhận dạng khuôn mặt người tiếng tội phạm bị truy nã) Với mục tiêu tìm hiểu thuật tốn Adaboost, đặc trưng haar-like, mơ hình Cascade of Classifiers, đồng thời áp dụng vào tốn phát mặt người ảnh, khóa ln trình bày ba chương với bố cục sau: Chương I: Cơ sở lý thuyết: tìm hiểu phương pháp học máy Adaboost Giới thiệu đặc trưng Haar-like cách tính giá trị đặc trưng Tiếp theo giới thiệu mơ hình cascade of classifiers cách áp dụng cơng cụ vào tốn phát mặt người ảnh Chương II: Ứng dụng thực nghiệm: sở thư viện mã nguồn mở OpenCV, xây dựng chương trình phát mặt người ảnh video, với phân tích chương trình Chương III: Kết luận hướng phát triển: đánh giá kết hướng phát triển nghiên cứu CHƯƠNG I: CƠ SỞ LÝ THUYẾT I Mở đầu phương pháp phát khuôn mặt Haar-like – Adaboost Tổng quan Có nhiều phương pháp để giải tốn xác định khn mặt người ảnh 2D dựa hướng tiếp cận khác Phương pháp Haar-like – Adaboost(viết tắt HA) hai tác giả Paul Viola Michael J.Jones phương pháp xác định mặt người dựa theo hướng tiếp cận diện mạo Hướng tiếp cận diện mạo tức hệ thống nhận dạng khuôn mặt học mẫu khuôn mặt từ tập ảnh mẫu Sau trình học hay trình huấn luyện (training) thực xong, hệ thống rút tham số để phục vụ cho trình nhận dạng.Vì tiếp cận diện mạo biết đến với tên gọi tiếp cận theo phương pháp học máy Bài báo cáo tập trung chủ yếu vào trình nhận dạng(sau thực trình học) Về tổng quan, phương pháp HA xây dựng dựa kết hợp, lắp ghép thành phần, là: - Các đặc trưng Haar-like: đặc trưng đặt vào vùng ảnh để tính tốn giá trị đặc trưng, từ giá trị đặc trưng đưa vào phân loại Adaboost ta xác định ảnh có khn mặt hay khơng - Ảnh tích hợp(Integral Image): thực cơng cụ giúp việc tính toán giá trị đặc trưng Haar-like nhanh - Adaboost(Adaptive Boost): phân loại (bộ lọc) hoạt động dựa nguyên tắc kết hợp phân loại yếu để tạo lên phân loại mạnh Adaboost sử dụng giá trị đặc trưng Haar-like để phân loại ảnh mặt hay mặt - Cascade of Classifiers: phân loại tầng với tâng phân loại Adaboost, có tác dụng tăng tốc độ phân loại Như toán xác định mặt người ảnh tốn phân loại ảnh thành hai lớp mặt mặt Tiền xử lý Một lưu ý nhỏ phương pháp HA thực ảnh xám (gray image) Mỗi điểm ảnh(pixel) có giá trị mức xám từ đến 255(không gian màu bit) Như phương pháp HA không khai thác đặc điểm màu sắc khuôn mặt để nhận dạng song hiệu Ảnh màu chuyển ảnh xám để nhận dạng, việc chuyển đổi đơn giản, thực hàm chuyển đổi sử dụng với câu lệnh Opencv nên báo cáo chưa đề cập tới Sau chuyển thành ảnh xám, ảnh lại tiếp tục chuyển thành “ảnh tích hợp” (sẽ trình bày phần sau) bước trình nhận dạng, đặc trưng Haar-like làm việc trực tiếp ảnh tích hợp II Đặc trưng Haar-like Đối tượng nhận dạng Trên ảnh, vùng khuôn mặt tập hợp điểm ảnh có mối quan hệ khác biệt so với vùng ảnh khác, mối quan hệ tạo lên đặc trưng riêng khn mặt Tất khn mặt người có chung đặc điểm sau chuyển qua ảnh xám, ví dụ như: - Vùng hai mắt tối vùng má vùng chán, tức mức xám vùng cao vượt trội so với hai vùng lại Vùng sống mũi tối vùng hai bên mũi … Và nhiều đặc điểm khác khuôn mặt đặc trưng Haar like dựa vào đặc điểm để nhận dạng Về tổng quát, đặc trưng Haar like không sử dụng để nhận dạng khn mặt mà dùng để nhận dạng đối tượng ảnh( thân người, tay, chân, ô tô, đồ vật,….) Bởi giống khn mặt, đối tượng có đặc điểm riêng biệt đặc trưng vùng điểm ảnh, công việc đặc trưng Haar-like tính tốn giá trị tương quan vùng ảnh Đây bước ban đầu cách áp dụng đặc trưng để phân loại cửa sổ con, chi tiết cách phân loại Adaboost Cascade of Classifiers trình bày mục sau Các đặc trưng Haar-like Mỗi đặc trưng Haar-like miền hình chữ nhật chia thành 2,3 hình chữ nhật nhỏ phân biệt quy ước màu trắng đen Như hình vẽ loại đặc trưng Haar-like gồm 2,3 hình chữ nhật hợp thành Từ đặc trưng mở rộng thành tập đặc trưng: o Đặc trưng cạnh: o Đặc trưng đường: o Đặc trưng tâm – xung quanh: Giá trị đặc trưng Haar-like khác biệt tổng giá trị xám pixel vùng “đen” với tổng giá trị xám pixel vùng “trắng”: f(x) = Tổngvùng đen(pixel) - Tổngvùng trắng(pixel) (1) Vậy đặt lên vùng ảnh, đặc trưng Haar-like tính tốn đưa giá trị đặc trưng h(x) vùng ảnh Cách áp dụng đặc trưng Haar-like để phát khn mặt ảnh Như trình bày báo cáo 1, để phát khuôn mặt, hệ thống cho cửa sổ con(sub-window) có kích thước cố định quét lên toàn ảnh đầu vào Như có nhiều ảnh ứng với cửa sổ con, đặc trưng Haar-like đặc lên cửa sổ để từ tính giá trị đặc trưng Sau giá trị phân loại xác nhận xem khung hình có phải khn mặt hay khơng Hình ví dụ: khung màu xanh cửa sổ con, đặc trưng Haarlike với kích thước vị trí đặt hình vẽ Ứng với đặc trưng trên, phân lớp yếu(weak classifier) hk(x) định nghĩa sau: (2) Trong đó: X : cửa sổ cần xét : ngưỡng fk: giá trị đặc trưng Haar-like pk: hệ số định chiều bất phương trình Ta hiểu cơng thức đơn giản sau: giá trị đặc trưng Haar-like k:fk cửa sổ x vượt qua ngưỡng phân lớp hk(x) kết luận cửa sổ x khn mặt(hk(x)=1), cịn fk khơng vượt qua ngưỡng khơng khn mặt Ngưỡng giá trị rút sau qua trình huấn luyện phân lớp, trình bày sau Như phần đối tượng nhận dạng, ta thấy đặc trưng Haar-like k có kích thước vị trí đặt cửa sổ x hình có giá trị fk lớn(vì mức xám vùng mắt lớn nhiều vùng má ) Giá trị fk lớn nhiều với hầu hết giá trị fk khác ta di chuyển cửa sổ x sang vị trí khác(qt tồn ảnh đầu vào), với nhưỡng phù hợp, kết phân lớp hk(x) cho cửa sổ vị trí khn mặt cịn vị trí khác khơng Đương nhiên có vị trí khác ảnh đầu vào vơ tình cho f k vượt ngưỡng phân lớp yếu hk(x) kết luận khuôn mặt, ta không dùng đặc trưng Haar-like mà dùng nhiều đặc trưng vị trí kích thước khác cửa sổ làm giảm trùng hợp ngẫu nhiên Số lượng đặc trưng Haar-like Việc xác định cửa sổ có phải mặt hay khơng phải sử dụng nhiều đặc trưng Haar-like Ứng với kích thước, kiểu đặc trưng vị trí đặt cửa sổ cho ta đặc trưng ứng với phân lớp yếu x Vì tập hợp đầy đủ số lượng đặc trưng cửa sổ lớn Theo tính tốn hai tác giả, với cửa sổ kích thước 2424 pixel số lượng đầy đủ đặc trưng Haar-like 160000.Có hai vấn đề đặt đây: Thứ giá trị đặc trưng Haar-like tính tổng giá trị điểm ảnh vùng đen trừ tổng điểm ảnh vùng trắng, với số lượng lớn đặc trưng tạo khối lượng tính tốn khổng lồ Điều khơng phù hợp để đáp ứng thời gian thực thời gian xử lý lâu Thứ hai số hàng trăm nghìn đặc trưng khơng phải đặc trưng có ích cho cơng việc phân loại Nếu khơng tìm cách loại bổ đặc trưng khơng có ích để tập trung vào đặc trưng có hiệu cao thời gian xử lý cách vơ ích Những phần sau tìm cách giải vấn đề III Ảnh tích hợp Định nghĩa ảnh tích hợp( Integral image) Như trình bày phần trên, số lượng đặc trưng Haar-like nhiều khối lượng tính tốn giá trị đặc trưng lớn Vì ảnh tích hợp đưa nhằm tính tốn nhanh chóng đặc trưng, giảm thời gian xử lý Ảnh tích hợp định nghĩa theo cơng thức: ii ( x, y ) = ∑ i ( x' , y ' ) x '≤ x , y '≤ y (3) Giá trị ảnh tích hợp vị trí (x,y) tổng điểm ảnh thuộc hình chữ nhật xác định góc trái (0,0) góc phải (x,y) Trên thực tế chuyển ảnh thành ảnh tích hợp ta dùng cơng thức truy hồi sau: (4) Ví dụ chuyển ảnh 33 có giá trị xám bên thành ảnh tích hợp: Sau chuyển ảnh cần nhận dạng thành ảnh tích hợp, viêc tính tốn giá trị đặc trưng Haar-like đơn giản Áp dụng tính tốn đặc trưng Haar-like Để tính giá trị đặc trưng Haar-like,ta phải tính tổng giá trị điểm ảnh vùng hình chữ nhật ảnh Ví dụ vùng D hình vẽ: Với :A,B,C,D tổng giá trị điểm ảnh vùng P1,P2,P3,P4 giá trị ảnh tích hợp đỉnh D Nếu ảnh xám bình thường để tính D ta phải tính tổng tất giá trị điểm ảnh D, miền D lớn số phép cộng nhiều Nhưng với ảnh tích hợp dù miền D có kích thước D cần tính thơng qua giá trị đỉnh Ta có: P1 = A, P2 = A + B, P3 = A + C, P4 = A + B + C + D Suy ra: P1+ P4–P2–P3= A + (A + B + C + D) – (A + B) – (A + C) = D Vậy ta có: D = P1 + P4 – P2 – P3 Khi áp dụng vào tính tốn giá trị đặc trưng ta thấy: Đặc trưng hai hình chữ nhật(đặc trưng cạnh) tính thơng qua giá trị điểm ảnh tích hợp Đặc trưng ba hình chữ nhật(đặc trưng đường) đặc trưng tâm-xung quanh tính thơng qua giá trị điểm ảnh tích hợp Đặc trưng hình chữ nhật(đặc trưng chéo) tính thơng qua giá trị điểm ảnh tích hợp Trong tính định nghĩa giá trị cần tính tốn lên tới hàng trăm Điều làm tăng tốc độ xử lý cách đáng kể IV Adaboost Khái quát Adaboost Kỹ thuật Boosting: nguyên tắc Boosting kết hợp phân lớp yếu (hay phân lớp sở) để tạo nên phân lớp mạnh Các phân lớp yếu chí cần nhỉnh phương pháp random chút Bằng cách này, ta nói phân lớp “boost.” Adaboost thuật toán sử dụng kỹ thuật Boosting đưa Freund Schapire vào 1996 Thuật toán sử dụng phổ biến cho tốn phát khn mặt Điểm cải tiến Adaboost ta gán cho mẫu trọng số Ý nghĩa việc gán trọng số sau: Ở vòng lặp trình huấn luyện, phân lớp yếu y i xây dựng, ta tiến hành cập nhật trọng số cho mẫu Việc cập nhật tiến hành sau: ta tăng trọng số mẫu bị phân lớp sai phân lớp yếu y i giảm trọng số mẫu phân lớp y i Bằng cách này, vòng lặp kế, ta xây dựng phân lớp yếu y i+1 theo hướng: tập trung vào mẫu bị phân lớp sai phân lớp yếu trước Cuối cùng, để có phân lớp mạnh, ta kết hợp tuyến tính phân lớp yếu tìm lại với Mỗi phân lớp yếu đánh trọng số tương ứng với độ tốt phân lớp yếu Chi tiết thuật tốn Cho tập ảnh huấn luyện (x1, t1), …, (xn, tn) với ti { 0, 1} Khởi tạo hệ số trọng cho mẫu huấn luyện: với n = 1, 2, …, N For m = 1, …, M: (a)Xây dựng phân lớp yếu hm: + Với đặc trưng j, xây dựng phân lớp hjvới độ lỗi: (1.0) với = ngược lại + Chọn phân lớp hj với độ lỗi nhỏ ta hm (b) Cập nhật trọng số: + Tính: (1.1) và: (1.2) + Cập nhật trọng số: (1.3) Bộ phân lớp mạnh cuối cùng: (1.4) Thuật toán bắt đầu việc khởi tạo trọng số cho mẫu huấn luyện Các trọng số khởi tạo Các trọng số cho thuật toán biết độ quan trọng mẫu Ở vòng lặp, ta làm việc: 10 • Thứ 1: tìm phân lớp yếu ymdựa vào độ lỗi nhỏ Cơng thức tính độ lỗi: với = ngược lại Công thức đơn giản tính tổng trọng số mẫu bị phân lớp sai • Thứ 2: cập nhật trọng số theo nguyên tắc: ta tăng trọng số cho mẫu bị phân lớp sai giảm trọng số cho mẫu phân lớp Bằng cách này, vòng lặp kế ta xây dựng phân lớp yếu theo hướng tập trung giải mẫu bị phân lớp sai phân lớp yếu trước Trong đó: với: 11 Ta nhận thấy mẫu phân lớp trọng số khơng thay đổi; mẫu bị phân lớp sai thì: Thấy Thật vậy, giả sử , nghĩa tỉ lệ phần sai lớn phần Điều mâu thuẫn với điều kiện phân lớp yếu tối ưu (có độ lỗi nhỏ nhất) cần đổi chiều mặt phẳng phân lớp lại ta có phân lớp yếu tốt Và nên : trọng số mẫu bị phân lớp sai tăng lên Để trực quan, ta quan sát thuật tốn thơng qua chuỗi hình vẽ đây: • Khởi tạo trọng số cho mẫu: • Vịng lặp thứ 1: • Vòng lặp thứ 2: 12 • Vòng lặp thứ 3: • Kết hợp phân lớp yếu lại: Cuối cùng, kết hợp tuyến tính phân lớp yếu lại ta phân lớp mạnh: Nhận thấy mức độ đóng góp phân lớp yếu vào phân lớp mạnh định : 13 Dễ thấy tỉ lệ nghịch với mà thể độ lỗi ứng với phân lớp hm Như vậy, độ lỗi thấp, tức phân lớp tốt mức độ đóng góp vào phân lớp mạnh cuối nhiều Nói thêm điều kiện dừng: thực tế cài đặt, người ta sử dụng giá trị ngưỡng tỉ lệ nhận dạng sai tối đa (max false positive) để làm điều kiện dừng Qua vòng lặp, tỉ lệ nhận dạng sai phân lớp mạnh giảm dần Đến lúc đó, tỉ lệ nhỏ tỉ lệ nhận dạng sai tối đa ta dừng thuật toán V Cascade of classifier Đặt vấn đề Sau hiểu thuật toán Adaboost, suy nghĩ ta dùng thuật toán Adaboost để huấn luyện phân lớp mạnh Sau đó, ta rải cửa sổ (sub window), chứa phân lớp mạnh này, khắp ảnh đưa vào để phát khuôn mặt Tuy nhiên, cách làm tốn chi phí Giả sử, Adaboost ta có phân lớp mạnh gồm 10 phân lớp yếu Nếu làm trên, tất cửa sổ ảnh ta phải dùng 10 phân lớp yếu Trong đó, ta thấy: cửa sổ thật khn mặt cửa sổ khuôn mặt ta loại bỏ mà cần dùng phân lớp mạnh gồm 10 phân lớp yếu Người ta giải vấn đề chuỗi phân lớp (Cascade of classifier) Khái quát Cascade of classifier Ta có chuỗi phân lớp, phân lớp xây dựng thuật toán Adaboost Bây giờ, ta đưa tất cửa sổ qua chuỗi phân lớp này: Bộ phân lớp loại bỏ phần lớn cửa sổ khuôn mặt (nagative sub window) cho qua cửa sổ cho khuôn mặt (positive sub window) Ở đây, phân lớp đơn giản đó, độ phức tạp tính tốn thấp Tất nhiên, đơn giản nên số cửa sổ nhận dạng khn mặt có số lượng lớn cửa sổ bị nhận dạng sai (khơng phải khn mặt.) • 14 Những cửa chỗ cho qua phân lớp đầu xem xét phân lớp sau đó: phân lớp cho khơng phải khn mặt ta loại bỏ; phân lớp cho khn mặt ta lại cho qua chuyển đến phân lớp phía sau • Những phân lớp sau phức tạp hơn, địi hỏi tính tốn nhiều Người ta gọi cửa sổ (mẫu) mà phân lớp khơng loại bỏ mẫu khó nhận dạng Những mẫu sâu vào chuỗi phân lớp khó nhận dạng Chỉ cửa sổ qua tất phân lớp ta định khn mặt • Tóm lại, chuỗi phân lớp xử lý mẫu (cửa sổ con) vào theo nguyên tắc sau: phân lớp cho khơng phải mặt người ta loại bỏ ngay; phân lớp cho khn mặt ta chuyển đến phân lớp sau Nếu mẫu trót lọt hết tất phân lớp ta định khuôn mặt 15 CHƯƠNG II: ỨNG DỤNG THỰC NGHIỆM I Sử dụng Opencv chương trình đơn giản phát khuôn mặt python 1.Phương pháp Haar like- Adaboost Opencv Phương pháp nhận diện khuôn mặt dựa vào đặc trưng Haar like kết hợp Adaboost cài sẵn thư viện Opencv Để sử dụng phương pháp Opencv ta sử dụng hàm detectMultiScale Phát khuôn mặt ảnh, cách thức chương trình tạo khung cửa sổ có kích thước xác định chứa phần ảnh, khung cửa sổ “ảnh đầu vào” mà phương pháp Haar like dùng để tính tốn Khi qt khung cửa sổ toàn ảnh ta nhận vô số “ảnh đầu vào”, với ảnh đầu vào chương trình xác nhận xem có phải mặt người hay không với bước phần I Bằng cách thay đổi tỉ lệ vị trí khung cửa sổ phát tất khn mặt có ảnh( tất nhiên cịn phụ thuộc vào độ xác phương pháp) Minh họa cho cách thức phát mặt người Opencv qua video: https://vimeo.com/12774628 Chi tiết cách thức trinh bày mục sau Chương trình đơn giản phát khn mặt python *Đây chương trình phát khn mặt đơn giản với đối tượng ảnh ABC.jpg: import numpy as np 16 import cv2 face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml') 10 11 12 13 14 img = cv2.imread('ABC.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.3, 5) for (x,y,w,h) in faces: img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2) roi_gray = gray[y:y+h, x:x+w] roi_color = img[y:y+h, x:x+w] eyes = eye_cascade.detectMultiScale(roi_gray, 1.3, 5) for (ex,ey,ew,eh) in eyes: cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2) 15 cv2.imshow('ABC',img) 16 cv2.waitKey(0) 17 cv2.destroyAllWindows() Trước phân tích chương trình ta tìm hiểu hàm detectMultiScale phần tìm kiếm khn mặt, hàm(hay phương thức) thuộc lớp CascadeClassifier(lớp phụ vụ tìm kiếm đối tượng Opencv), hàm có nguyên mẫu với tham số sau: Tham số cascade phân lớp đề cập phần I, phân lớp lưu vào file xml xây dựng sẵn sở liệu chuẩn Dưới số phân loại thư viện Opencv 17 Như bảng cần phát đối tượng khác ta sử dụng phân lớp khác nhau, tức load file xml tương ứng vào chương trình Opencv hỗ trợ tự xây dựng phân lớp riêng cho đối tượng khác hàm cvCreateHidHaarClassifierCascade, xây dưng phân loại để phát đối tượng khác ôtô, chó, mèo… Quay lại hàm detectMultiScale, tham số image ảnh cần phát khn mặt scale_factor tỉ lệ tăng kích thước khung cửa sổ tìm kiếm Ví dụ scale_factor=1.1 sau quét hết ảnh lần, khung cửa sổ tăng kich thước lên 10% thực lần quét Tham số ảnh hưởng đến tốc độ xử lý độ tin cậy chương trình Nếu để q lớn tốc độ chương trình tăng lên số lần quét giảm đi, nhiên chương trình bỏ qua khơng phát số khn mặt có kích thước nằm khung cửa sổ liên tiếp độ tăng kích thước khung lớn Nếu để q thấp ta khơng bỏ sót khn mặt chương trình tốn thời gian tăng số lần quét lên min_neighbors giá trị tối thiểu số hình chữ nhật lân cận gộp lại sau trình quét xong, tham số giải thích rõ phần sau min_size kích thước nhỏ khung cửa sổ phát khuôn mặt, khung bắt đầu qt từ kích thước này, khn mặt có diện tích vượt qua kích thước khung khơng phát Đó tham số quan trọng hàm Chuyển sang phân tích chương trình: Dịng 1,2 phần khai báo chương trình sử dụng thư viện Numpy Opencv 2.x 18 Dòng 3,4 ta tạo đối tượng thuộc lớp CascadeClassifier face_cascade eye_cascade để tìm kiếm mặt mắt, đồng thời load flie xml cho đối tượng Dịng đọc ảnh cần tìm khn mặt vào biến img Dòng tạo biến ảnh gray ảnh vào chuyển sang dạng xám để thực tìm kiếm Dịng sử dụng hàm detectMultiScale để tìm kiếm khuôn mặt ảnh xám gray với tham số scale_factor=1.3 min_neighbors=5 phân lớp face_cascade Dịng 8,9 hàm detectMultiScale sau tìm kiếm xong trả giá trị gồm tọa độ gốc khung chứa khuôn mặt x,y ; chiều dài, rộng khung w,h Các giá trị nằm mảng faces Cấu trúc for….in duyệt qua toàn giá trị này, với giá trị ta dùng hàm rectangle để vẽ hình chữ nhật lên ảnh ban đầu img với tọa độ điểm trái phải dưới: (x,y),(x+w,y+h) (0,255,0) màu vẽ hình chữ nhật Như xác định xong khn mặt có ảnh Dịng 10,11 ta tạo roi_gray = gray[y:y+h, x:x+w] roi_color = img[y:y+h, x:x+w] biến ảnh màu ảnh xám khuôn mặt tìm thấy Và việc tìm kiếm mắt thực khn mặt tìm thấy khơng phải qt tồn ảnh ban đầu tìm kiếm mặt Dịng 12,13,14 tương tự tìm kiếm vẽ khung hình chữ nhật chứa mắt với màu khác Dòng 15 dùng hàm hiển thị ảnh vẽ xong lên cửa sổ window có tên ABC Dịng 16,17 đợi ấn nút để chương trình, xóa cửa sổ hiển thị Kết chương trình: 19 Quay lại với tham số min_neighbors: giá trị tối thiểu số hình chữ nhật lân cận gộp lại sau trình quét xong Trong trình tìm kiếm khn mặt chương trình tìm nhiều khung hình chữ nhật chứa khn mặt cho dù khn mặt có trường hợp nhận diện nhầm Nếu ta để tham số min_neighbors=0 cho hàm tìm khn mặt tức để ngun tìm sau quét kết quả: Như tham số gộp lại hình chữ nhật chứa khuôn mặt hình chữ nhật cho khn mặt Đồng thời loại bỏ bớt kết sai kết sai cho khung hình chữ nhật cịn kết có nhiều khung hình lân cận bao lấy Ví dụ hình chữ nhật nhỏ tường hình Việc phát khuôn mặt video hay camera tương tự ảnh, video chuỗi liên tiếp hình ảnh hiển thị (frame hình) Ta làm vịng lặp để thực phát khn mặt frame hình liên tiếp đưa kết liên tiếp Dưới chương trình phát khn mặt lấy đối tượng hình ảnh từ camera máy tính hiển thị: import numpy as np import cv2 face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') 20 video_capture = cv2.VideoCapture(0) while True: ret, frame = video_capture.read() gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) faces =face_cascade.detectMultiScale(gray, 1.3, 5) for (x,y,w,h) in faces: cv2.rectangle(frame, (x,y),(x+w,y+h),(255,0,0),2) cv2.imshow('video',frame) if cv2.waitKey(1) & 0xFF == ord('q'): break video_capture.release() cv2.destroyAllWindows() Trong chương trình này, lớp video_capture = cv2.VideoCapture(0) lớp xử lý frame hình lấy từ webcam mặc định máy tính Trong vịng lặp, thực lấy ảnh đầu vào frame hình từ webcam hàm frame = video_capture.read() Sau việc phát khn mặt frame hình thực tương tự ảnh bình thường chương trình Sau kết hiển thị, chương trình tiếp tục nhận frame hình tiếp theo, phát hiển thị.Vòng lặp thực liên tục cho video với khuôn mặt phát 21 CHƯƠNG III: KẾT LUẬN A, Kết Trên sở nghiên cứu toán phát mặt người ảnh Đặc biệt thuật toán Adaboost, đặc trưng haar-like mơ hình Cascade of Classifier, áp dụng thành cơng mơ hình Cascade of Classfier vào toán phát mặt người ảnh Tuy kết đạt chưa cao, bước đầu để phát triển toán nhận dạng mặt (face recognition) người sau B, Hướng phát triển Có nhiều hướng phát triển cho chương trình này, phát triển mặt ứng dụng mặt thuật toán (để cải thiện hiệu phát mặt người) Có thể xây dựng ứng dụng cần đến phát mặt người mà khơng cần nhận dạng Ví dụ hệ thống ghép hình, ghép khn mặt phát vào ảnh khác (chẳng hạn ghép khuôn mặt người sử dụng cho khuôn mặt người tiếng) Ngồi phát triển chương trình theo hướng nhận dạng khn mặt, xây dựng hệ thống để học đặc trưng người cần nhận dạng Khi thực hiện, ta đưa qua ảnh qua chương trình phát mặt người để phát nhanh khn mặt có ảnh, sau so sách khn mặt với khn mặt mà chương trình “học” từ trước, so sánh đặc trưng hai khuôn mặt, trùng đưa thơng tin khn mặt nhận dạng 22 TÀI LIỆU THAM KHẢO - Robust Real-Time Face Detection – Paul Viola, Michal J.Jone Phát khn mặt với thuật tốn AdaBoost – nhóm Lotus Phát mặt người ảnh ứng dụng – Lê Mạnh Tuấn MỤC LỤC 23 ... phát triển mặt ứng dụng mặt thuật toán (để cải thiện hiệu phát mặt người) Có thể xây dựng ứng dụng cần đến phát mặt người mà khơng cần nhận dạng Ví dụ hệ thống ghép hình, ghép khn mặt phát vào... chương trình phát mặt người để phát nhanh khn mặt có ảnh, sau so sách khn mặt với khn mặt mà chương trình “học” từ trước, so sánh đặc trưng hai khn mặt, trùng đưa thông tin khuôn mặt nhận dạng... dạng mặt người Phát mặt người ảnh phần quan trọng hệ thống nhận dạng mặt người đó, giải tốt việc phát hiên mặt người giúp tiết kiệm thời gian nâng cao độ xác việc nhận dạng khn mặt Phát mặt người