BÀI TOÁN NHẬN DIỆN KHUÔN MẶT
Tổng quan về nhận dạng
1.1.1 Tính chất và sự cần thiết của bài toán nhận dang.
Nhận dạng là quá trình phân loại các đối tượng theo mô hình và gán chúng vào lớp dựa trên quy luật và mẫu chuẩn Quá trình này có thể được thực hiện thông qua học có giám sát (supervised learning) hoặc học không có giám sát (non supervised learning) Nhận dạng đóng vai trò quan trọng trong lĩnh vực thị giác máy tính.
Với sự phát triển không ngừng của kinh tế xã hội và công nghệ, nhu cầu quản lý và xử lý thông tin chính xác ngày càng cao, vượt quá khả năng của con người Do đó, việc sử dụng máy móc để giảm tải hoặc thay thế công việc nặng nhọc và đòi hỏi độ chính xác cao là cần thiết Giúp máy móc nhận dạng và phân loại thông tin như con người sẽ nâng cao hiệu quả hoạt động và độ chính xác, đáp ứng tốt hơn yêu cầu trong công việc.
Một số ứng dụng của bài toán nhận dạng:
Nhận dạng dấu vân tay tại Việt Nam đã trở thành công nghệ phổ biến trong việc chấm công, điểm danh và bảo mật cho cửa sắt, máy tính xách tay Công nghệ này mang lại sự tiện lợi và an toàn, cho phép người dùng thực hiện giao dịch nhanh chóng chỉ bằng cách đặt ngón tay trỏ lên cảm biến, thay vì phải nhập mã PIN trên máy ATM.
Nhận dạng giọng nói là công nghệ tiên tiến được tích hợp trong nhiều sản phẩm, cho phép người dùng điều khiển thiết bị bằng giọng nói thay vì thao tác thủ công Ứng dụng Jibbigo trên điện thoại di động là một ví dụ điển hình, cung cấp khả năng dịch tiếng nói của người sử dụng sang 8 ngôn ngữ khác nhau, bao gồm tiếng Anh, Pháp, Đức, Nhật, Hàn Quốc, Philippines, Tây Ban Nha và Trung Quốc.
Nhận dạng khuôn mặt là một quá trình bao gồm bốn bước chính: đầu tiên là phát hiện khuôn mặt, tiếp theo là căn chỉnh khuôn mặt, sau đó là trích xuất các đặc điểm và cuối cùng là thực hiện nhận dạng khuôn mặt.
Hệ thống nhận dạng biển số xe là công nghệ tiên tiến có khả năng phân tích hình ảnh và xác định biển số của phương tiện giao thông Hệ thống này hoạt động thông qua video, thiết bị ghi hình và hình ảnh, giúp tăng cường an ninh và quản lý giao thông hiệu quả.
1.1.2 Bản chất của quá trình nhận dạng.
Quá trình nhận dạng gồm 3 giai đoạn chính:
Lựa chọn mô hình biểu diễn đối tượng.
Lựa chọn luật ra quyết định (phương pháp nhận dạng) và suy diễn quá trình học.
Khi mô hình biểu diễn đối tượng đã được xác định, quá trình nhận dạng chuyển sang giai đoạn học, là giai đoạn quan trọng nhằm cải thiện việc phân hoạch tập đối tượng thành lớp Học giúp tìm ra quy luật và thuật toán để gán đối tượng vào một lớp, tức là gán cho đối tượng một tên.
Học có giám sát (supervised learning) là phương pháp phân loại dựa trên kiến thức đã biết, được gọi là học có thầy Kỹ thuật này sử dụng một thư viện mẫu chuẩn để so sánh với mẫu cần nhận dạng, nhằm xác định loại của nó Ví dụ, trong ảnh viễn thám, việc phân biệt giữa cánh đồng lúa, rừng cây và đất hoang dựa trên mô tả trước đó là một ứng dụng thực tiễn Điều quan trọng là thiết kế hệ thống để so sánh đối tượng trong ảnh với mẫu chuẩn và phân loại chúng Quá trình này dựa vào các thủ tục ra quyết định thông qua hàm phân lớp hoặc hàm ra quyết định.
Học không có giám sát (non supervised learning) là kỹ thuật mà hệ thống tự xác định các lớp khác nhau và các tham số đặc trưng cho từng lớp mà không có sự hướng dẫn từ bên ngoài Kỹ thuật này gặp khó khăn do số lượng lớp và đặc trưng của chúng không được biết trước, đòi hỏi phải thử nghiệm nhiều phương pháp gộp nhóm khác nhau để tìm ra cách tối ưu Quá trình bắt đầu từ tập dữ liệu và thực hiện nhiều thủ tục xử lý nhằm phân lớp và cải thiện dần để đạt được kết quả phân loại tốt nhất.
Nhìn chung, một hệ thống nhận dạng có thể tóm tắt sơ đồ sau:
Hình 1 Sơ đồ tổng quan một hệ nhận dạng
NHẬN DIỆN KHUÔN MẶT VỚI KNN
Thuật toán KNN
2.1.1 Giới thiệu về thuật toán KNN
K- Nearest Neighbors (KNN) là một thuật toán học máy có giám sát (supervised learning) có thể được sử dụng trong cả phân loại (classification) và hồi quy (regression) Có thể nói KNN là một thuật toán xuất phát từ thực tế cuộc sống. Mọi người có xu hướng bị ảnh hưởng bởi những người xung quanh họ Hành vi của chúng ta được hướng dẫn bởi những người bạn mà chúng ta đã lớn lên cùng Cha mẹ chúng ta cũng hình thành nhân cách của chúng ta theo một số cách Nếu bạn lớn lên với những người yêu thể thao, rất có thể bạn sẽ yêu thể thao, tất nhiên cũng có những ngoại lệ.
KNN hoạt động với nguyên lý tương tự Giá trị của một điểm dữ liệu được xác định bởi các điểm dữ liệu xung quanh nó.
Nếu bạn có một người bạn thân thiết và thường xuyên dành thời gian bên nhau, điều này sẽ tạo ra những sở thích chung và trải nghiệm tương đồng Đó chính là mối quan hệ giữa KNN và K.
Nếu bạn thường xuyên giao lưu với một nhóm 5 người, mỗi thành viên trong nhóm sẽ tác động đến hành vi của bạn, và bạn sẽ trở thành trung bình của 5 người đó Đây chính là khái niệm KNN với K = 5.
Bộ phân loại KNN xác định lớp của một điểm dữ liệu dựa trên nguyên tắc biểu quyết đa số Khi K được đặt là 5, lớp của 5 điểm gần nhất sẽ được xem xét để đưa ra quyết định.
Dự đoán lớp cho một điểm dữ liệu được thực hiện bằng cách xác định lớp chiếm ưu thế trong 5 điểm gần nhất Đối với hồi quy KNN, giá trị dự đoán được tính bằng cách lấy trung bình của 5 điểm lân cận gần nhất.
Để xác định sự gần gũi giữa các điểm dữ liệu, trước tiên cần đo khoảng cách giữa chúng Có nhiều phương pháp đo khoảng cách, trong đó phép đo khoảng cách Euclid là một trong những phương pháp phổ biến nhất Hình ảnh minh họa dưới đây thể hiện cách tính khoảng cách Euclid giữa hai điểm trong không gian hai chiều.
Khoảng cách Euclid được tính toán bằng công thức sau: d= √ (x 2−x 1) 2 +( y 2− y 1) 2
Khoảng cách Euclide trong không gian hai chiều liên quan chặt chẽ đến định lý Pytago, trong đó khoảng cách giữa hai điểm được coi là cạnh huyền của tam giác, và sự chênh lệch giữa tọa độ x, y của hai điểm dữ liệu chính là hai cạnh góc vuông.
2.1.2 Quy trình của thuật toán KNN
Bước 1: Xác định tham số K = số láng giềng gần nhất.
Bước 2: Tính toán khoảng cách đối tượng cần phân lớp với tất cả các đối tượng trong training data.
Bước 3: Sắp xếp khoảng cách theo thứ tự tăng dần và xác định K láng giềng gần nhất với đối tượng cần phân lớp.
Bước 4: Lấy tất cả các lớp của K láng giềng gần nhất.
Bước 5: Dựa vào phần lớn lớp của K để xác định lớp cho đối tượng cần phân lớp.
2.1.3 Ưu điểm và nhược điểm của thuật toán
Đơn giản và dễ giải thích.
Không dựa trên bất kỳ giả định nào, vì thế nó có thể được sử dụng trong các bài toán phi tuyến tính.
Hoạt động tốt trong trường hợp phân loại với nhiều lớp.
Sử dụng được trong cả phân loại và hồi quy.
Trở nên rất chậm khi số lượng điểm dữ liệu tăng lên vì mô hình cần lưu trữ tất cả các điểm dữ liệu.
Nhạy cảm với các dữ liệu bất thường (nhiễu).
2.1.4 Ví dụ về thuật toán KNN
Một ngân hàng đã phân tích dữ liệu từ 5000 khách hàng vay tiêu dùng và phát hiện có 3895 khách hàng thanh toán đúng hạn, trong khi 1105 khách hàng không thanh toán đúng hạn, dẫn đến tình trạng nợ quá hạn sau 3 tháng Ngân hàng sẽ tổng hợp và phân loại khách hàng dựa trên khả năng nợ xấu, với Y đại diện cho khả năng nợ xấu, trong đó Y = 0 là không có khả năng nợ xấu và Y = 1 là có khả năng nợ xấu.
Với các biến đầu vào X i bao gồm ví dụ các biến sau:
Giới tính (nam, nữ) Độ tuổi
Thu nhập hàng tháng (trong ví dụ này sẽ không xét đến nghề nghiệp do quá đa dạng)
Tình trạng sở hữu bất động sản Khoản vay
Giả định là lãi suất là như nhau đối với các khoản vay tiêu dùng (vay thế chấp).
Nhân viên ngân hàng lấy mẫu 15 khách hàng đã được phân loại khả năng nợ xấu để phân tích cho một khách hàng mới mở khoản vay.
Hình 4 Dữ liệu ví dụ ban đầu
Chúng ta chuẩn hóa dữ liệu định lượng theo phương pháp Min – Max để có được bảng dữ liệu như sau:
Hình 5 Dữ liệu sau khi được chuẩn hóa
Tiếp theo chúng ta sẽ tính khoảng cách giữa các điểm dữ liệu:
Ví dụ: d(ID 16, ID 1) = căn bậc hai của (0.3 – 0) 2 + 0 2 + 0 2 + 1 2 + 1 2 + (0.67 – 0.13) 2 + (0.33 – 0.11) 2 + (0.5 – 0.5) 2 = 1.557
Lưu ý ở các biến định tính, nếu giá trị bằng nhau thì sẽ là 0, ngược lại là 1.
Hình 6 Kết quả tính toán
Các giá trị khoảng cách được tính theo công thức Euclidean cho thấy sự phân loại dựa trên khoảng cách, trong đó khoảng cách nhỏ nhất được xếp hạng là 1, biểu thị cho sự gần gũi nhất.
Khi chọn K = 1, khách hàng mới với ID 16 được phân loại khả năng nợ xấu giống như khách hàng ID 6, với giá trị là 1 Tuy nhiên, khi K = 2, việc phân loại không thể thực hiện do ID 6 và ID 11 có hai giá trị khả năng nợ xấu khác nhau Khi K = 3, ba điểm gần nhất được chọn là ID 13, ID 11 và ID 6, trong đó hai điểm có khả năng nợ xấu là 0, dẫn đến việc ID 16 được phân loại khả năng nợ xấu là 0.
Hình 7 Dữ liệu sau khi sắp xếp
Để chọn giá trị K và xác định điểm vote cho Nợ xấu = 0 và Nợ xấu = 1, ví dụ với K = 7, các ID gần nhất so với ID 16 bao gồm ID 6, ID 11, ID 13, ID 2, ID 4 và ID 8.
1, ID 15, trong đó có 5 khách hàng được phân loại nợ xấu bằng 0, có 2 khách hàng được phân loại nợ xấu bằng 1.
Vậy ID 16 sẽ được phân loại nợ xấu là 0.
THỰC NGHIỆM NHẬN DIỆN KHUÔN MẶT VỚI KNN
Thiết kế chương trình
Các phần mềm cần thiết để xây dựng chương trình:
Link download: https://www.python.org/downloads/
Link download: https://www.jetbrains.com/pycharm/download/
Các thư viện cần thiết để chạy chương trình:
Model nhận diện khuôn mặt Haarcascade OpenCV Link download: https://github.com/opencv/opencv
Thư viện OpenCV, numpy, pandas trong Python Cài đặt: pip install opencv-python, numpy, pandas
Các bước để thực hiện chương trình nhận diện khuôn mặt:
Xác định vùng chứa khuôn mặt sử dụng Haarcascade OpenCV.
Sử dụng OpenCV để chuyển đổi làm xám hình ảnh khuôn mặt, trích chọn đặc trưng và lưu trữ dưới dạng ma trận 100 x 100.
Xây dựng một model KNN để phân loại khuôn mặt (faces classification).
Kết quả thực nghiệm sau khi chạy chương trình.
Xác định vùng chứa khuôn mặt sử dụng Haarcascade OpenCV
Việc xác định vùng chứa khuôn mặt là yếu tố quan trọng trong cả quá trình huấn luyện và kiểm thử, vì chỉ khi xác định chính xác vùng chứa khuôn mặt, chúng ta mới có thể đạt được kết quả đáng tin cậy.
Hình 11 Khởi tạo mô hình Haarcascade OpenCV để nhận diện khuôn mặt
Sau khi xác định vị trí khuôn mặt, bước tiếp theo là kẻ khung khuôn mặt để nhận diện và kiểm tra độ chính xác của thuật toán.
Hình 12 Xác định vị trí của khuôn mặt
Xử lý hình ảnh và trích chọn đặc trưng bằng OpenCV
Các bước xử lý ảnh trong chương trình gồm có:
Làm xám hình ảnh khuôn mặt bằng OpenCV
Hình 13 Xác định vị trí và làm xám khuôn mặt
Hình 14 Kết quả sau khi làm xám khuôn mặt
Thay đổi kích thước khuôn mặt về dạng hình vuông kích cỡ 100px * 100px.
Hình 15 Thay đổi kích thước về dạng 100*100
Hình 16 Kết quả sau khi thay đổi kích thước
Lưu ma trận pixel vào cơ sở dữ liệu
Sau khi chuyển đổi hình ảnh thành dạng 100x100, chúng ta thu được 10,000 pixel tương ứng với ma trận 100x100 Tiến hành gán nhãn và lưu trữ hình ảnh đặc trưng cùng với 10,000 điểm ảnh vào tập tin CSV.
Hình 17 Chương trình lưu trữ điểm ảnh
Hình 18 Hình ảnh trích chọn đặc trưng và làm xám
Xây dựng model KNN để phân loại khuôn mặt
Xây dựng mô hình KNN bao gồm các hàm khởi tạo giá trị K ( init ), hàm huấn luyện (fit) và hàm dự đoán (predict) Bên cạnh đó, cần có hàm tính khoảng cách Euclid (euc_dist) để áp dụng trong thuật toán KNN.
Hình 19 Nội dung model KNN
Hình 20 Hàm tính khoảng cách Euclid