Công nghệ nhận diện khuôn mặt đã được phát triển và ứng dụng rộng rãi trong cuộc sống hằng ngày của con người.. - Đến năm 1997 hệ thống được phát triển bởi Christoph von der Malsburg và
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
CƠ SỞ TP.HỒ CHÍ MINH KHOA CÔNG NGHỆ THÔNG TIN
Trang 2Nhờ sự phát triển của nền khoa học kỹ thuật Công nghệ nhận diện khuôn mặt đã được phát triển và ứng dụng rộng rãi trong cuộc sống hằng ngày của con người Tiêu biểu như các hệ thống camera quan sát trong các tòa nhà, trung tâm mua sắm, sân bay nhằm quản lý an ninh, chống trộm, bảo vệ sự an toàn cho mọi người Ngoài ra nó còn áp dụng nhằm bảo mật thông tin như xác thực danh tính, chấm công vv Với mong muốn tìm hiểu sơ lược về phương pháp nhận diện
khuôn mặt nên em chọn đề tài “Nhận diện khuôn mặt”
1 Lịch sự công nghệ nhận diện khuôn mặt
- Những người tiên phong trong lĩnh vực nhận dạng khuôn mặt bao
gồm: Woody Bledsoe Helen Chan Wolf, và Charles Bisson Trong năm
1964 – 1965 ba nhà khoa học đã bắt đầu ý tưởng sử dụng máy tính để nhận ra khuôn mặt của con người Với dự án mang tên “man-machine”,
họ đã trích xuất các tọa độ một tập hợp các đặc điểm từ hình ảnh , sau
đó đưa máy tính nhận dạng.[1]
- Năm 1966 công việc nghiên cứu được tiếp tục tại viện nghiên cứu
Standford
- Đến năm 1997 hệ thống được phát triển bởi Christoph von der
Malsburg và các sinh viên sau đại học của trường Đại học Bochum ở Đức và Đại học Nam California tại Mỹ đã thể hiện vượt trội so với hầu hết các hệ thống khác
- Năm 2006 các thuật toán nhận diện khuôn mặt mới đã phát triển Hình ảnh scan gương mặt 3D với kết quả chính xác gấp 10 lần so với các thuật toán năm 2002 và gấp 100 lần vào năm 1995
2 Bài toán nhận diện khuôn mặt
- Nhận diện khuôn mặt là phương pháp sinh trắc nhằm xác minh một người nào đó bằng cách so sánh dữ liệu là hình ảnh của người đó với bản ghi đã được lưu trữ
- Các hệ thống nhận diện khuôn mặt đã áp dụng rộng rãi trong cuộc sống vào các mục đích như an ninh, phát hiện tội phạm …
- Một số khó khăn trong việc nhận diện khuôn mặt như: độ sáng, hướng nghiêng, kích thước hình ảnh, diện mạo, biểu hiện cảm xúc và môi
trường
- Để xây dựng hệ thống nhận diện khuôn mặt với đầu vào là hình ảnh kỹ thuật số hoặc một số khung hình video, đầu ra là danh tính của người đó chúng ta thường chia làm 3 bước để thực hiện: phát hiện khuôn mặt, rút trích đặc trưng và nhận diện khuôn mặt.[2]
Trang 3• Phát hiện khuôn mắt: phát hiện có khuôn mặt nào xuất hiện trong tấm hình hoặc video hay không? đây là bước cực kỳ quan trọng để đảm bảo các bước sau của bạn có đạt được độ chính xác hay không
• Rút trích đặc trưng: Sau khi phát hiện khuôn mặt ta bắt đầu biểu diễn thành các vector đặc trưng đại diện cho một khuôn mặt
• Nhận diện khuôn mặt: Đây là bước cuối cùng của bài toán đem các đặc trưng vừa tìm được đem so sánh với các đặc trưng nằm trong
cơ sở dữ liệu
2.1.Nhận diện khuôn mặt cơ bản:
• Tiền sử lý: quá trình này giúp nâng cao chất lượng hình ảnh, chuẩn
hóa dữ liệu giúp cho việc rút trích đặc trưng chính xác hơn
• Rút trích đặc trưng: là sử dụng các thuật toán để lấy ra những thông
tin là riêng biệt, đặc trưng của mỗi người Thuật toán Principle Components Analysis (PCA) là thuật toán tạo ra hình ảnh mới có kích thước nhỏ hơn rất nhiều so với ảnh ban đầu
2.2.Thuật toán PCA
- Không gian mới được tạo ra từ thuật toán PCA gồm K vector đơn vị
có chiều dài N Mỗi vector được gọi là Eigenfaces
Trang 4[3]
[4]
Trang 5[3]
3.Ưu và nhược điểm của công nghệ nhận diện khuôn mặt:
• So với các công nghệ khác: khi đem so sánh với các công nghệ khác thì nhận diện khuôn mặt có thể không đáng tin cậy và hiệu quả nhất
• Nhược điểm: nhận dạng khuôn mặt là khó thực hiện chính xác trong một điều kiện nhất định, trở ngại còn liên quán đến góc chụp, điều kiện ánh sáng, thời tiết và khi khuôn mặt bị che
• Ưu điểm: không đòi hỏi sự hợp tác đến từ người dùng
• Vấn đề riêng tư:các tổ chức quyền công dân bày tỏ sự lo ngại về quyền riêng tư đang bị tổn hạị bằng cách sử dụng các công nghệ dám sát Điều này có thể khiến dữ liệu người dùng bị lạm dụng cho một mục đích riêng nào đó nhằm kiếm lợi nhuận hoặc hành vi xấu xa nào đó
Trang 64.Bài thực hành : ( Thực hiện theo bài hướng dẫn của anh Trung Sơn tại Viblo
)[2]
thuật toán HNSW
• Nhẹ, nhanh ít dụng lượng
• Có suport C++, python và R
• Hỗ trợ thêm và xóa phần tử mà không giải phóng bộ nhớ (annoy không làm được)
• Có thể tự định nghĩa hàm tìm kiếm khoảng cách riêng (C++)
Các thư viện cần cài đặt:
• Dlib: là bộ toolkit viết bằng C++ chứa các thuật toán machine
learning, deep learning xử lý các vấn đề của computer vison đặc biệt với bài toán nhận diện khuôn mặt với độ chính xác không cần quá cao
• OpenCV: là thư viện mã nguồn mở trong lĩnh vực computer vison và machine learning
• Face_Recognition: thư viện nhận dạng khuôn mặt được viết bằng python đơn giản sử dụng deep learning
Thu thập dữ liệu:
- Trước hết ta import các thư viện cần thiết vào
Trang 7• Khởi tạo face object detection với function get_frontal_face_detector
• Detect face landmarks và trả về các key points trên khuôn mặt, ở đây dlib
sẽ trả về 62 points
• Align các khuôn mặt bằng cách sử dụng phép biến đổi affine bằng
function FaceAligner, các bạn có thể đọc thêm tại đây
• Sau đó khởi tạo hàm VideoCapture để capture video, tham số '0' là dùng cho những thiết bị camera cắm ngoài vào
• frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) Chuyển kênh màu RGB sang thang đo độ xám
• number_of_images < MAX_NUMBER_OF_IMAGES
set MAX_NUMBER_OF_IMAGES = 40 , vòng sẽ lặp qua từng frame và dừng lại khi detect và cap đủ 40 images
• (x, y, w, h) = face_utils.rect_to_bb(face) Lấy các tọa độ của face trên frame
• face_img = frame_gray[y-50:y + h+100, x-50:x + w+100] Trả về face đã được cut từ các tọa độ lấy ở trên, các tham số 50, 100 chỉ là để căn chỉnh thêm cho khuôn mặt( có thể thêm vào hoặc không)
Trang 8• face_aligned = face_aligner.align(frame, frame_gray, face) Align face nhờ Function FaceAligner đã nói ở trên
Kết quả:
Đánh Index:
• p = hnswlib.Index(space = 'l2', dim = DIM) Khởi tạo không gian với DIM là
số chiều cần khởi tạo trong không gian (không gian này sẽ là chỗ lưu trữ các index để tìm kiếm)
• p.init_index(max_elements = NUM_ELEMENTS, ef_construction =
EF_CONSTRUCTION, M = M) khởi tạo các index rỗng vào trong space,
Trang 9với max_elements là số lượng phần tử tối đa có thể được lưu trữ trong cấu trúc, ef_construction là thời gian khởi tạo/đánh đổi accuracy vs speed khi search, M là số lượng node kết nối với nhau để tạo nên small world graphs trong graph
• detector = MTCNN() Sử dụng MTCNN để kiểm tra và trích xuất face một lần nữa trước khi đánh index
Ta sử dụng thư viện face_recognition để encode image ra vector 128 chiều thì mới đánh index được, function image_encoding sẽ encode face images ra thành vector 128 chiều cho chúng ta
Trang 10Khởi tạo vòng lặp để ecode từng images và đánh index
• p.add_items(np.expand_dims(img_emb[0], axis = 0), i) expand
dimension sau đó add vào space
• p.save_index("images.bin") space sẽ được lưu dưới dạng file
là "images.bin" có thể coi nó là một database và chúng ta search trên nó
Search face với Hnswlib
NUM_ELEMENTS) Load index từ file images.bin , max_elementsĐặt lại
số lượng phần tử tối đa trong cấu trúc file
Trang 11• rgb_small_frame = small_frame[:, :, ::-1] Chuyển về kênh màu RGB
• face_locations = face_recognition.face_locations(rgb_small_frame) Trả về tọa độ của face có trong frame
• face_encodings = face_recognition.face_encodings(rgb_small_frame, face_locations) Kết hợp giữa cut face từ frame với tọa độ cho trước và encode nó ra thành vector 128 chiều
• labels, distances = p.knn_query(np.expand_dims(face_encoding, axis = 0), k = 1) Với face_encoding vừa lấy ra được từ frame ta sẽ thực hiện query
nó trong DB
• if distances < 0.13: Nếu euclidean distance của face vừa trích xuất ra với face trong DB mà nhỏ hơn 0.13 thì xuất ra tên đã tìm được nếu ko trả về
"unknown"
Kết quả:
Trang 12Kết Luận:
Ta đã tìm hiểu sơ qua về công nghệ nhận diện khuôn mặt, các ứng dụng của nó vào trong cuộc sống hằng ngày
Ưu, nhược điểm và vấn đề về đạo đức cũng như quyền riêng tư
Thực hiện theo và làm một ứng dụng nhỏ về nhận diện khuôn mặt
Tài liệu tham khảo:
1 Wikipedia Hệ thống nhận dạng khuôn mặt https://vi.wikipedia.org/wiki/
Hệ_thống_nhận_dạng_khuôn_mặt
2 Mai Xuân Phú, (2017) Nghiên cứu kỹ thuật nhận dạng khuôn mặt người Xây dựng hệ thống camera chống trộm http://tainguyenso.dut.udn.handle/DUT/3
Trang 1322
3 Tiep Vu Huu,(2017) Principal Component Analysis (phần 1/2) https://machi nelearningcoban.com/2017/06/15/pca/
4 Tiep Vu Huu, (2017) Principal Component Analysis (phần 2/2) https://machi nelearningcoban.com/2017/06/21/pca2/
5 trungson077, (2020) Xây dựng hệ thống nhận diện khuôn mặt real time – Phần 2: xây dựng hệ thống hoàn chỉnh nhận dạng khuôn mặt với Hnswlib https: //viblo.asia/p/xay-dung-he-thong-nhan-dang-khuon-mat-real-time-phan-2-xay-
dung-he-thong-hoan-chinh-nhan-dang-khuon-mat-voi-hnswlib-gAm5y1Jw5db#_cac-thu-vien-can-cai-dat-7
6 Jain, Anil K., Flynn, Patrick, Ross, Arun A, (2008) Handbook-of-Biometrics