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 cho chúng một lớp dựa trên quy luật và mẫu chuẩn Có hai phương pháp nhận dạng: nhận dạng có giám sát (supervised learning) dựa trên mẫu học biết trước và nhận dạng không có giám sát (non supervised learning) khi không sử dụng mẫu học Đây là một bài toán quan trọng trong ngành 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ệ, việc quản lý và xử lý thông tin chính xác đã vượt quá khả năng của con người Do đó, cần thiết phải sử dụng máy móc để giảm tải hoặc thay thế những công việc nặng nhọc và đòi hỏi độ chính xác cao Việc trang bị cho máy móc khả năng nhận dạng, thu thập và phân loại thông tin giống như con người sẽ giúp nâng cao hiệu quả hoạt động với độ chính xác vượt trội.
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 một giải pháp hiệu quả cho việc chấm công và điểm danh, đồng thời được ứng dụng làm khóa an toàn cho các loại cửa sắt và máy tính xách tay.
Việc sử dụng công nghệ nhận diện vân tay không chỉ mang lại sự tiện lợi mà còn đảm bảo an toàn cho người dùng Thay vì phải nhập mã PIN trên máy ATM, bạn chỉ cần đặt ngón tay trỏ lên cảm biến và giao dịch sẽ được thực hiện ngay lập tức.
Nhận dạng giọng nói là công nghệ đượ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 bằng tay, như trong mô hình nhà thông minh và trên điện thoại Một ví dụ điển hình là ứng dụng Jibbigo, có 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 quy 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ố xe thông qua video, thiết bị ghi hình và hình ảnh.
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 đã xác định mô hình biểu diễn đối tượng, quá trình nhận dạng sẽ 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 đối tượng thành các lớp Mục tiêu của việc học là tìm ra quy luật và thuật toán để gán đối tượng vào một lớp cụ thể, hay nói cách khác, 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, với một thư viện mẫu chuẩn để so sánh Kỹ thuật này cho phép xác định loại đối tượng trong ảnh viễn thám, như đồng lúa, rừng hay đất hoang, dựa trên mô tả có sẵn Điều quan trọng là thiết kế hệ thống có khả năng đối chiếu đối tượng trong ảnh với mẫu chuẩn để phân loại chính xác Quá trình đối sánh được thực hiện thông qua các thủ tục ra quyết định sử dụng hàm phân lớp.
Học không có giám sát (non-supervised learning) là kỹ thuật yêu cầu 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ừ trước Khó khăn trong phương pháp này đến từ việc số lượng lớp và các đặc trưng của chúng đều không được biết trước Kỹ thuật này tập trung vào việc thực hiện nhiều phương pháp gộp nhóm khác nhau để tìm ra cách tối ưu nhất Quá trình bắt đầu từ tập dữ liệu, với nhiều thủ tục xử lý nhằm phân lớp và cải tiến dần để đạt được một phương án phân loại hiệu quả.
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, chắc chắn bạn sẽ chia sẻ nhiều sở thích và tận hưởng những trải nghiệm tương tự Điều này thể hiện mối quan hệ gần gũi giữa hai người, giống như KNN với K.
Nếu bạn thường xuyên giao du 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 thiết lập 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 kết quả lớp của dữ liệu dựa vào lớp chiếm ưu thế trong 5 điểm lân cận, trong khi hồi quy KNN tính toán giá trị trung bình của 5 điểm 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 để thực hiện việc này, 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 xem như là cạnh huyền của tam giác, và sự khác biệt giữa tọa độ x và y của hai điểm dữ liệu tương ứng với hai cạnh vuông góc.
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 KNN Ưu điểm
Đơ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 của 5000 khách hàng có khoản vay tiêu dùng, trong đó có 3895 khách hàng thanh toán đúng hạn và 1105 khách hàng không thanh toán đúng hạn Nếu xét nợ quá hạn là sau 3 tháng từ thời điểm thanh toán, thì 1105 khách hàng này đang trong tình trạng nợ quá hạn Ngân hàng sẽ tổng hợp dữ liệu và phân loại khách hàng theo 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 Xi bao gồm ví dụ các biến sau:
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
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 được xếp hạng dựa trên khoảng cách nhỏ nhất, với khoảng cách gần nhất được đánh số 1.
Khi chọn K = 1, khách hàng mới với ID 16 sẽ đượ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 Nếu chọn K = 2, hai điểm gần nhất là ID 6 và ID 11 có giá trị khả năng nợ xấu khác nhau, do đó không thể phân loại cho ID 16 Tuy nhiên, khi chọn K = 3, ba điểm gần nhất là ID 13, ID 11 và ID 6, trong đó hai điểm có khả năng nợ xấu bằng 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 số cho Nợ xấu = 0 hoặc Nợ xấu = 1, ví dụ với K = 7, ta sẽ tìm 7 ID gần nhất với ID 16, bao gồm ID 6, ID 11, ID 13, ID 2, ID 4 và ID 1.
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ì để đạt được kết quả chính xác, cần phải xác định đúng vùng chứa khuôn mặt.
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 xung quanh 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 định dạng 100x100, chúng ta thu được ma trận 100x100 với tổng cộng 10.000 pixel Tiếp theo, tiến hành gán nhãn và lưu trữ các hình ảnh đặc trưng cùng với 10.000 điểm ảnh vào tệp 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