Đề tài đếm số lượng người trong một bức ảnh nhờ phương pháp phát hiện khuôn mặt là để tài rất hay và khá phổ biến trong đời sống, chọn đề tài này là vì phần lớn các thiết bị điện tử đều
Trang 1Học viện Công nghệ Bưu chính Viễn thông
Báo cáo đề tài Môn Đồ án Xử lí tín hiệu số
Đề tài: Đếm số người trong một bức ảnh
Sinh viên thực hiện: Nguyễn Quang Quân
Nguyễn Văn Toàn Phạm Xuân Trường Phạm Hồng Sơn
B17DCDT146 B17DCDT182 B17DCDT162 B17DCDT194
Trang 2Lời nói đầu
Công nghệ thông tin càng ngày càng phát triển và có vai trò hết sức quan trọng không thể thiếu trong cuộc sống hiện đại Con người ngày càng tạo ra những
cố máy thông minh cà khả năng tự nhận biết và xử lý đươc các công việc một cách
tự động, phục vụ cho lợi ích của con người Trong những năm gần đây, một trong những bài toàn nhận được nhiều sự quan tâm và tốn nhiều công sức nhất của lĩnh vực công nghệ thông tin, đó chính là bài toán nhận dạng Tuy mới xuất hiện chưa lâu nhưng nó đã rất được quan tâm vì tính ứng dụng thực tế của bài toàn cũng như
sự phức tạp của nó
Đề tài đếm số lượng người trong một bức ảnh nhờ phương pháp phát hiện khuôn mặt là để tài rất hay và khá phổ biến trong đời sống, chọn đề tài này là vì phần lớn các thiết bị điện tử đều dần phát triển theo xu hướng tự động hóa, thông minh, càng hiểu ý con người, chúng giao tiếp với con người mà không cần đến một thiết bị trung gian nào, các thiết bị sử dụng thuật toán xử lý ảnh được sử dụng ngày càng rộng rãi với nhiều mục đích khác nhau như Dùng cho các hệ thống bảo mật như vẫn tay, giọng nói …
Trang 3Mục lục
Chương 1: Giới thiệu chung về đề bài phát hiện khuôn mặt 4
1.1 Giới thiệu chung: 4
1.2 Tầm quan trọng của hệ thống phát hiện khuôn mặt 4
Chương 2: Giới thiệu kỹ thuật Haar Cascade 5
2.1 Haar Cascade là gì? 5
2.2 Đặc trưng Haar 5
2.3 Cách thức nhận dạng khuôn mặt 7
2.4 Sơ đồ nhận diện 9
Chương 3: Code và ảnh demo 9
Trang 4Chương 1: Giới thiệu chung về đề bài phát hiện khuôn mặt
1.1 Giới thiệu chung:
Trong chương này em trình bày về tầm quan trọng của hệ thống phát hiện khuôn mặt trong đời sống con người, những khó khắn và hệ thông gặp phải trong thực tế và khái quát về quy trình phát hiện khuôn mặt
1.2 Tầm quan trọng của hệ thống phát hiện khuôn mặt
Phát hiện khuôn mặt rất cần thiết trong nhiều hệ thống trong đời sống con người, Chúng ta có thể sử dụng phát hiện khuôn mặt trong vấn đề an ninh như nhận biết tên tuổi cũng như hành vì đã gây ra của tội phạm để đề phòng, chúng ta cũng có thể sử dụng phát hiện khuôn mặt trong vấn đề quản lý nhân sự của các tổ chức hay là sử dụng khuôn mặt đẻ bảo mật đồ dùng các nhân như máy tính điện thoại ô tô hay văn phòng làm việc Vì vậy việc phát hiện khuôn mặt có thể làm giảm thời gian và đảm bảo tính an ninh bảo mật tốt
Phát hiện khuôn mặt còn được ứng dụng vào các phần mềm chụp ảnh hay quay video trên smartphone
Trang 5Chương 2: Giới thiệu kỹ thuật Haar Cascade
2.1 Haar Cascade là gì?
Về cơ bản là sử dụng các đặc trưng loại Haar và sau đó sử dụng thật nhiều đặc trưng đó qua nhiều lượt (cascade) để tạo thành một cỗ máy nhận diện hoàn chỉnh.
2.2 Đặc trưng Haar
a) là các bộ lọc bắt các cạnh trong ảnh, b) bắt các đường thẳng trong ảnh Ngoài
ra, còn có các bộ lọc Haar khác, như ví dụ c) về đặc trưng 4-hình vuông dưới đây:
hoặc đặc trưng nằm gọn trong trung tâm một vùng như ví dụ 3 trong ảnh dưới đây:
Trang 6Tuy nhiên, cách áp dụng các bộ lọc này khác một chút so với các cửa sổ bộ lọc bên CNN Ở CNN, bộ lọc chiếm toàn bộ cửa sổ trượt, trong khi ở đặc trưng Haar, bộ lọc chỉ chiếm một phần trong cửa sổ trượt thôi Điều đó được minh hoạ trên ảnh sau:
Trong hình trên, cửa sổ trượt được đặt ngay ngắn vừa gọn để nhìn được toàn bộ ảnh Có thể nhận ra rằng bộ lọc đầu trong đó đang tìm một "cạnh" phân cách giữa mắt/lông mày với mũi, vì ở đoạn đọc có chênh lệch về màu đáng kể; và ở bộ lọc sau, mô hình đang tìm đường sống mũi, vì ở đó sẽ có màu sáng hơn so với 2 bên (vì
Trang 7nó cao hơn dễ bắt sáng) Và như đã nói trên, bộ lọc Haar chỉ nhìn cụ thể vào một vùng trong cửa sổ để tìm thôi: trong khuôn mặt thì mũi lúc nào cũng ở chính giữa chứ không ở các góc, nên không cần nhìn các góc để làm gì cả
2.3 Cách thức nhận dạng khuôn mặt
Các bộ lọc Haar như trên vẫn chỉ bắt được những đặc trưng rất cơ bản, và để nhận
ra một khuôn mặt thì chúng ta cần tầm 6000 các đặc trưng như vậy! Vậy chúng ta cần có một cách để vote xem cửa sổ đó có chứa mặt không, mà vẫn phải xử lý đủ
nhanh cho cả 6000 đặc trưng đó: câu trả lời là Cascade of Classifiers, được đề xuất
bởi Paul Viola và Michael Jones vào năm 2001
Việc cascade đó được thiết kế như sau: trong 6000+ đặc trưng đó, chia chúng ra
thành rất nhiều bước Trong đó, mỗi lần cửa sổ trượt qua một vùng bước ảnh, từng bước một sẽ được xử lý: nếu bước 1 nhận đó là mặt, chúng ta chuyển qua bước 2;
và nếu không thì chúng ta bỏ qua vùng đó và trượt cửa sổ đi chỗ khác Nếu một vùng pass toàn bộ các bước test mặt đó thì cửa sổ đó có chứa mặt người
Các vùng không chứa mặt sẽ bị vứt vào hộp đỏ kia và không bao giờ được nhớ tới nữa, và các vùng có mặt sẽ được đưa vào hộp xanh để xử lý tiếp
Chúng ta có thể chia kết quả ra làm 4 loại:
Trang 8Tên Đáp án đúng Đáp án
Trong đó, nếu dự đoán đúng rồi thì không cần bàn cãi, nhưng nếu chúng ta dự đoán sai một bước sẽ có thể không qua các bước còn lại Vì vậy, trong quá trình train, mô
hình sẽ lựa chọn các classifier tốt nhất với độ tự tin hợp lý để ưu tiên việc false negative không được phép tồn tại — vì nếu chúng ta gặp false positive, các bước
sau sẽ loại ví dụ đó cho chúng ta sau Trong mô hình nhận mặt người, bước đầu tiên đúng có 2 bộ lọc trên, với tỉ lệ false negative rất gần 0, và tỉ lệ false positive là 40%
Sau đó các cửa sổ nằm trong ô xanh sẽ được trả lại làm các ô chứa mặt: nếu có các
ô đè lên nhau cùng chứa một mặt, các toạ độ các góc sẽ được cộng vào lấy trung bình
Trang 92.4 Sơ đồ nhận diện
Chương 3: Code và ảnh demo
import cv2
import numpy as np
img = cv2.imread('img1.jpg')
face_cascade =
cv2.CascadeClassifier('./haar-cascade-files-master/haarcascade_frontalface_alt.xml')
faces =
Trang 10face_cascade.detectMultiScale(img, scaleFactor=1.3, minNeighbors=6) print('Tim duoc {0} khuon mat'.format(len(faces)))
for (x,y,w,h) in faces:
cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),3)
cv2.imshow('anh moi',img) c = cv2.waitKey(1)
cv2.imwrite('img2.png',img)
cv2.waitKey()
cv2.destroyAllWindows()