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 tên cho chúng dựa trên quy luật và mẫu chuẩn Có hai loại nhận dạng: nhận dạng có giám sát (supervised learning) dựa vào mẫu học biết trước và nhận dạng không có giám sát (non supervised learning) không dựa vào mẫu Đây là một bài toán 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ệ, việc quản lý và xử lý thông tin chính xác trở nên ngày càng quan trọng, 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, đòi hỏi độ chính xác cao và có tính chất nhàm chán Việc giúp máy móc nhận dạng, thu thập và phân loại thông tin như con người sẽ nâng cao hiệu quả hoạt động của chúng, đồng thời đạt được độ 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 phương pháp hiệu quả trong việc chấm công và điểm danh, đồng thời được áp 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 mang lại sự tiện lợi và an toàn cao 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 để bắt đầu giao dịch.
Nhận dạng giọng nói là công nghệ tiên tiến được tích hợp trên 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 trực tiếp Công nghệ này đặc biệt hữu ích trong các mô hình nhà thông minh và trên điện thoại di động Một ví dụ điển hình là ứng dụng Jibbigo, có khả năng dịch tiếng nói sang 8 ngôn ngữ khác nhau, bao gồm tiếng Anh, Pháp, Đức, Nhật, Hàn Quốc, Philipin, 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: phát hiện khuôn mặt, căn chỉnh khuôn mặt, trích xuất các đặc điểm và cuối cùng là 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 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, đây là giai đoạn quan trọng nhằm cải thiện và điều chỉnh 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à các thuật toán để gán đối tượng vào một lớp cụ thể, tức là gán cho đối tượng một tên.
Học có giám sát (supervised learning) là kỹ thuật 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 nhận diện các đối tượng như đồng lúa, rừng hay đất hoang trong ảnh viễn thám bằng cách đối chiếu với các mẫu đã được mô tả Mục tiêu chính là thiết kế hệ thống để so sánh đối tượng trong ảnh với mẫu chuẩn, từ đó quyết định phân loại chúng vào các lớp khác nhau Quá trình đối sánh diễn ra nhờ các thủ tục ra quyết định, sử dụng 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à một kỹ thuật yêu cầu tự định nghĩa các lớp khác nhau và xác định 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 không biết trước số lượng lớp cũng như các đặc trưng của chúng Mục tiêu của học không có giám sát là thực hiện nhiều phương pháp gộp nhóm khác nhau và chọn ra phương án tốt nhất Quá trình bắt đầu từ tập dữ liệu và trải qua 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 pháp phân loại hiệu quả Hệ thống nhận dạng có thể được tóm tắt qua một sơ đồ cụ thể.
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, bạn sẽ chia sẻ sở thích và tận hưởng những trải nghiệm tương đồng Điều này tương tự như khái niệm KNN trong học máy, nơi K biểu thị số lượng hàng xóm gần nhất được xem xét.
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 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 lớp của điểm dữ liệu được thực hiện dựa vào lớp chiếm ưu thế trong 5 điểm gần nhất, trong khi hồi quy KNN tính toán giá trị trung bình từ 5 điểm lân cận.
Để xác định các điểm dữ liệu gần nhau, 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 trình bày 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 là cạnh huyền của tam giác, trong khi 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 với cá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 Sau 3 tháng không thanh toán, những khách hàng này được coi là nợ quá hạn Ngân hàng tiến hành 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.
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.
Các giá trị khoảng cách được tính theo công thức Euclidean được liệt kê ở trên, với các đối tượng được xếp hạng dựa trên khoảng cách nhỏ nhất, trong đó đối tượng gần nhất được xếp hạng là 1.
Khi chọn K = 1, khách hàng 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ị 1 Nếu K = 2, chúng ta lấy hai điểm gần nhất là ID 6 và ID 11, nhưng mỗi điểm có hai giá trị khả năng nợ xấu khác nhau, do đó không thể phân loại cho ID 16 Khi K = 3, ba điểm gần nhất là ID 13, ID 11 và ID 6, trong đó có 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
Bên trên là cách thức chọn K và giá trị vote có được cho Nợ xấu = 0, Nợ xấu =
1, ví dụ K = 7, có 7 điểm gần nhất so với ID 16 là ID 6, ID 11, ID 13, ID 2, ID 4, ID
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:
Python 3.9 Link download: https://www.python.org/downloads/
Phần mềm Pycharm 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à rất quan trọng trong cả quá trình huấn luyện và kiểm thử, vì nó đảm bảo độ chính xác cần thiết để đạt được kết quả tốt nhấ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 để nhận diện và kiểm tra độ chính xác của thuật toán.
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 có được 10.000 pixel tương ứng với ma trận 100x100 Tiếp theo, chúng ta 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