7. Những nội dung và kết quả nghiên cứu được trong đề tài
2.7.2. Sử dụng JavaCV và thuật toán PCA để nhận dạng khuôn mặt
Nhận dạng khuôn mặt là quán trình tìm kiếm để gán một tên vào một khuôn mặt nào đó. Sau khi chúng ta dò tìm khuôn mặt bằng thuật toán Adaboost bây giờ chúng ta sẽ tìm chủ nhân của khuôn mặt đó là ai. Trước khi đi vào phần chính chúng ta hãy tìm hiểu một số khái niệm sau:
2.7.2.1. Eigenface là gì?
Eigenface là thuật toán đơn giản để nhận dạng khuôn mặt mà có thể dễ dàng được cài đặt (implements).
2.7.2.2. Cách nhận dạng khuôn mặt như thế nào?
Dưới đây sẽ cho thấy “nhận dạng khuôn mặt” làm việc như thế nào. Cho một ví dụ ta có một vài khuôn mặt và một số người, các bước để nhận dạng được tiến hành như sau:
1. Tính toán một khoảng cách “distance” giữa khuôn mặt cần nhận dạng với những khuôn mặt trong tập dữ liệu đã được học (training).
2. Chọn khuôn mặt trong tập dữ liệu đã học mà gần giống nhất với khuôn mặt cần nhận dạng (khuôn mặt này đã biết rõ thông tin).
3. Nếu khoảng cách nằm trong khoảng có thể chấp nhận được, kết luận khuôn mặt đã được nhận dạng, ngược lại khuôn mặt không được nhận dạng.
2.7.2.3. Làm thế nào để tính khoảng cách giữa 2 hình ảnh?
Khoảng cách trong các eigenface ban đầu là thước đo như là điểm tới điểm (point-to-point). Đây cũng có thể được gọi là khoảng cách Euclidean. Trong 2D (two dimensions), khoảng cách Euclidean giữa hai điểm P1 và P2 là:
SVTH: Phan Thanh Ngọc Trang 43/ 103
Trong 3D (three dimensions) khoảng cách đó là sqrt(dx2 + dy2 + dz2). Hình bên dưới cho chúng ta thấy khoảng cách trong 2D.
Hình 2.12 Khoảng cách Euclidean, d12, cho 2 điểm trong 2D
Trong không gian 2 chiều như hình trên, kích thước gồm trục x và trục y. Để trở thành 3D ta chỉ cần thêm trục tạo độ z vào.Nhưng cái gì là kích thước của khuôn mặt? Câu trả lời đơn giản nhất là eigenface, nó sẽ xem sét vị trí của từng pixel để phân chia kích thước.
2.7.2.4. Giảm kích thước bằng PCA (Dimensionality Reduction by PCA)
Có nhiều cách để giảm kích thước, trong số đó là sử dụng eigenface, nó được gọi là Principal Components Analysis (PCA). Chi tiết về thuật toán PCA đã được trình bày cụ thể trong phần trên.
2.7.2.5. Dòng phù hợp tối thiểu (Line Fitting and PCA)
Để có một trực giác về những gì mà PCA làm, hãy nhìn vào cách đặc biệt của PCA mà nó được gọi là “dòng phù hợp tối thiểu”. Ở hình thứ 1 bên tay trái cho chúng ta thấy một ví dụ gắn một dòng tới 3 điểm: vị trí bản đồ 2D cho Los Angeles, Chicago và Newyork.
Ba điểm của bản đồ là gần như giống nhau, nhưng không hoàn toàn trên một dòng duy nhất. Nếu bạn đang lập kế hoạch cho một chuyến đi, mối quan hệ đó sẽ là thông tin hữu ích cho bạn. Trong ý nghĩa đó một dòng duy nhất thể hiện một cái gì đó cần thiết về mối quan hệ của chúng. Một đường thẳng chỉ có một
SVTH: Phan Thanh Ngọc Trang 44/ 103
chiều, vì vậy nếu chúng ta thay thế vị trí 2D của điểm với các địa điểm dọc theo một đường duy nhất, chúng ta sẽ giảm được chiều của chúng.
Bởi vì chúng gần như là nằm trên một hàng, chúng có thể được nối với nhau bởi một đường thẳng với một lỗi nhỏ. Lỗi trên đường thẳng nối chúng là với nhau là thước đo dùng để thêm khoảng cách của hình vuông tới mỗi điểm của đường thẳng. Đường thẳng mà tốt nhất “best-fit line” là đường thẳng có lỗi nhỏ nhất.
Hình 2.13 Bên phải: đường thẳng nối ba điểm là cách đặc biệt của PCA. Bên trái: để chiếu những điểm từ bảng đồ 2D đến đường 1D, điểm của những nơi trên đường thẳng mà gần nhất đến điểm 2D. Bên đưới: không gian con 1D và khoảng cách giữa những điểm tới không gian con này.
2.7.2.6. Định nghĩa không gian con (Defining a Subspace)
Mặc dù dòng tìm thấy ở trên là một đối tượng 1D, nó nằm bên trong một không gian 2D lớn hơn, và có một định hướng (độ dốc). Độ dốc của dòng thể hiện một cái gì đó quan trọng về ba điểm. Nó chỉ ra hướng mà chúng đang trải ra nhiều nhất.
Nếu chúng ta định vị trí hình chữ nhật (x, y) để cho rằng nguồn gốc của nó là một nơi nào đó trên dòng này, chúng ta có thể viết phương trình đường một cách đơn giản y = mx, trong đó m là độ dốc của dòng: dy / dx. Khi chúng ta mô tả theo cách này, đường thẳng là một không gian con của không gian 2D xác định bởi hệ trục tọa độ (x, y). Mô tả này nhấn mạnh khía cạnh của dữ liệu chúng ta đang quan tâm, cụ thể là hướng giữ những điểm này tách ra khỏi nhau.
SVTH: Phan Thanh Ngọc Trang 45/ 103 2.7.2.7. Không gian con PCA(The PCA Subspace)
Hướng tách tối đa được gọi là thành phần chính thứ nhất của một tập dữ liệu. Hướng với sự tách biệt lớn tiếp theo là vuông góc. Đó là thành phần chính thứ hai.Trong một tập dữ liệu 2D, chúng ta có thể có nhiều nhất là hai thành phần chính.
Kích thước của hình ảnh càng lớn, chúng ta có thể có nhiều thành phần chính trong một tập dữ liệu của hình ảnh.
Tuy nhiên, số lượng các thành phần chính chúng ta có thể tìm thấy hầu như được giới hạn bởi số lượng các điểm dữ liệu. Để xem lý do tại sao, hãy nghĩ về một tập dữ liệu bao gồm chỉ một điểm. Hướng tách tối đa cho số liệu này là gì? Là không có gì, bởi vì không có gì để tách. Bây giờ hãy xem xét một tập dữ liệu với chỉ hai điểm. Các đường kết nối hai điểm này là thành phần chủ yếu đầu tiên. Tuy nhiên, không có thành phần chính thứ hai, bởi vì không có gì nhiều hơn để tách biệt: cả hai điểm hoàn toàn trên đường thẳng.
Chúng ta có thể mở rộng ý tưởng này xa hơn nữa. Ba điểm xác định một máy bay, mà là một đối tượng 2D. Do đó, một tập dữ liệu với ba điểm dữ liệu không bao giờ có thể có nhiều hơn hai thành phần chính, thậm chí nếu nó trong một hệ thống 3D, hoặc cao hơn, phối hợp,…
Trong eigenface, mỗi hình ảnh khuôn mặt 50x50 được coi là một điểm dữ liệu (trong một "không gian" chiều 2500).Vì vậy, số lượng các thành phần chính chúng ta có thể tìm thấy sẽ không bao giờ nhiều hơn số hình ảnh khuôn mặt trừ đi một.
Mặc dù đó là quan trọng để có một sự hiểu biết khái niệm của các thành phần chính là gì, chúng không cần phải biết các chi tiết làm thế nào để tìm thấy chúng thực hiện eigenface. Một phần đó là được thực hiện cho bạn có trong JavaCV.
2.7.2.8. Chiếu dữ liệu đến không gian con (Projecting Data Onto a Subspace)
Trong khi, trình bày về cách giảm kích thước bằng PCA chúng ta đã có, quay trở lại bảng đồ ở hình 2.13, bây giờ chúng ta sẽ tìm thấy một không gian con 1D, điều mà chúng ta cần là làm thế nào để chuyển đổi những điểm 2D đến
SVTH: Phan Thanh Ngọc Trang 46/ 103
những điểm 1D. Quá trình đó được phép chiếu. Khi bạn chiếu một điểm đến một không gian con, bạn chỉ định vị trí không gian con mà gần nhất tới vị trí của nó trong không gian chiều cao hơn. Nghe thì có vẽ lộn xộn và phước tạp nhưng nó lại không như vậy.Để chiếu một điểm bảng đồ 2D đến đường thẳng ở hình 2.12, bạn nên tìm điểm trên đường thẳng mà gần nhất với điểm 2D. Đó là phép chiếu ở đây.
Có một chức năng trong OpenCV cho chiếu vào không gian con, vậy một lần nữa, bạn chỉ cần một sự hiểu biết về khái niệm. Bạn có thể bỏ qua chi tiết về thuật toán và chỉ quan tâm đến thư viện.
2.7.2.9. Tính toán khoảng cách giữa hai khuôn mặt (Computing Distances Between Faces)
Trong eigenface, khoảng cách giữa hai khuôn mặt là khoảng cách Euclidean giữa phép chiếu những điểm trong không gian con PCA, chứ không phải là khoảng cách trong không gian ban đầu 2.500. Tính toán khoảng cách giữa các khuôn mặt trong không gian con chiều này thấp hơn là kỹ thuật mà eigenface sử dụng để cải thiện tỷ lệ tín hiệu nhiễu (signal-to-noise).
Như đã đề cập ở trên, ý tưởng cơ bản - giảm chiều tiếp theo đó tính toán khoảng cách trong không gian con - được sử dụng rộng rãi trong công việc tầm nhìn máy tính. Nó cũng được sử dụng trong các ngành khác của trí tuệ nhân tạo. Trong thực tế, nó là một trong những công cụ chính để quản lý phức tạp và cho việc tìm kiếm các mô hình ẩn trong phạm vi số lượng lớn dữ liệu thế giới thực (RealWorld).
2.7.2.10. Thành phần chính của hình ảnh (Picturing The Principal Components)
Trong định nghĩa của chúng ta về một dòng như là một không gian con 1D, chúng ta sử dụng cả hai tọa độ x và y để xác định m và độ dốc 2D của nó. Khi m là một thành phần chính cho một tập hợp các điểm, nó sẽ có một tên khác. Đây là một eigenvector. Khi bạn không có nghi ngờ gì nữa, đây là tên cơ sở cho "eigenface". Eigenvectors là một khái niệm đại số tuyến tính. Đó là khái niệm quan trọng đối với chúng ta, ở đây chỉ là một tên thay thế cho các thành phần chính mà thôi.
SVTH: Phan Thanh Ngọc Trang 47/ 103
Đối với nhận dạng khuôn mặt trên hình ảnh 50x50, eigenvector từng đại diện cho độ dốc của một dòng trong một không gian 2500 chiều. Như trong trường hợp 2D, chúng ta cần tất cả các kích thước đến 2.500 để xác định độ dốc của mỗi dòng. Trong khi nó không thể hình dung một dòng trong đó nhiều kích thước, chúng ta có thể xem các eigenvectors theo các cách khác nhau. Chúng ta có thể chuyển đổi 2500 chiều của chúng "dốc" đến một hình ảnh đơn giản bằng cách đặt mỗi giá trị trong vị trí tương ứng là mỗi điểm ảnh pixel. Khi chúng ta làm điều đó, chúng ta sẽ nhận được hình ảnh facelike gọi là eigenfaces.
Eigenfaces rất thú vị, và cung cấp cho chúng tôi một số trực giác về các thành phần chính cho các tập dữ liệu của chúng ta. Phía bên trái của Hình 2.14 cho thấy hình ảnh khuôn mặt cho mười người. Nó chứa các hình ảnh của khuôn mặt theo một loạt các điều kiện ánh sáng. Tôi đã sử dụng bảy hình ảnh cho mỗi người trong số mười người để tạo ra một không gian con PCA.
Phía bên tay phải của hình 2.14 cho thấy sáu thành phần chính của số liệu này, hiển thị như eigenfaces. Các eigenfaces thường xuyên có một cái nhìn ma quái, bởi vì chúng kết hợp các yếu tố từ một số khuôn mặt. Điểm ảnh sáng nhất và tối nhất điểm ảnh trong mỗi dấu eigenface là các khu vực mặt góp phần tạo nên thành phần chính.
Hình 2.14 Bên phải: hình ảnh cho 10 người. Bên trái: 6 hình đầu tiên là thành phần chính được xem như là eigenfaces.
SVTH: Phan Thanh Ngọc Trang 48/ 103 2.7.3. Nhận xét về phương pháp PCA
- Tiết kiệm được không gian lưu trữ (đi từ không gian n vector sang không gian k vector thấp hơn).
- Chỉ lưu lại những thành phần cơ bản nhưng vẫn giữ được bản chất đặc trưng.
- Khi lấy số đặc trưng càng về sau thì khả năng biến động càng thấp, có nghĩa mối quan hệ giữa các phần tử càng cao thì sự giao nhau giữa các lớp mẫu trong tập tin càng lớn.
- Nhưng nếu lấy không đủ số lượng thành phần chính, thì khả năng phân tán của tập mẫu càng cao (có thể tăng vượt ngoài số lớp mẫu cần thiết trong tập mẫu).
SVTH: Phan Thanh Ngọc Trang 49/ 103 CHƯƠNG 3: XÂY DỰNG HỆ THỐNG NHẬN DIỆN TỘI PHẠM
3.1. Phân tích yêu cầu, đặc tả chức năng của hệ thống 3.1.1. Yêu cầu về chức năng 3.1.1. Yêu cầu về chức năng
Phần mềm này được áp dụng cho các cơ quan an ninh để nhận diện tội phạm và quản lý thông tin của các người dân trong một nước nên trước hết nó phải mang tính bảo mật cao và đáp ứng được các yêu cầu sau:
- Có khả năng dò tìm khuôn mặt của một người trong một tấm hình bất kỳ.
- Nhận diện khuôn mặt vừa tìm được và liệt kê những khuôn mặt trong cơ sở dữ liệu mà gần giống với nó nhất và bạn có thể xem thông tin của những khuôn mặt gần giống đó để tìm ra thông tin cần thiết.
- Đối với người có quyền cao nhất trong hệ thống sẽ có thể thao tác với cơ sở dữ liệu:
Tìm kiếm thông tin của một người.
Thêm một người mới vào cở sở dữ liệu.
Sửa thông tin của một người.
Xóa thông tin của người nào đó.
- Kết nối được với điện thoại để nhận ảnh cần nhận diện và gửi trả thông tin của người trong tấm ảnh đó về điện thoại. Như vậy sẽ làm cho việc nhận diện trở nên linh hoạt hơn, tiện lợi hơn.
3.1.2. Yêu cầu về phần cứng
- Hệ điều hành: Chạy trên Fedora 15 (32-bit). - RAM: 516MB hoặc hơn.
- Đồ họa: Intel® G33.
- Độ phân giải: 1024x768 pixels.
3.1.3. Yêu cầu về phần mềm
- Ngôn ngữ lập trình: Java. - Cơ sở dữ liệu: DB2.
SVTH: Phan Thanh Ngọc Trang 50/ 103 3.1.4. Đặc tả chức năng phần mềm
Sơ đồ Use case tổng quát
Hình 3.1 Sơ đồ Use case tổng quát
Phần mềm này bao gồm 2 tác nhân đó là user và admin. User có tên đăng nhập và mật khẩu sẽ được đăng nhập vào hệ thống. Sau đó họ có thể nhận diện khuôn mặt từ đó có thể xem các khuôn mặt gần giống nhất với khuôn mặt được đưa vào nhận diện và thông tin về các khuôn mặt đó như: tên, ngày sinh, địa chỉ, giới tính, nơi cư trú… Admin là người có quyền cao nhất trong phần mềm này. Người đó vừa có thể thực hiện các chức năng trên, vừa có thể quản lý cơ sở dữ liệu như: thêm một người mới, sửa, xóa thông tin hoặc tìm kiếm thông tin.
SVTH: Phan Thanh Ngọc Trang 51/ 103
Đặc tả Use case:
UC001 - Use case Login
- Tên: Login.
- Tác nhân: User và admin.
- Điều kiện tiên quyết: User phải có tên đăng nhập và mật khẩu trước khi đăng nhập vào phần mềm, nếu đăng nhập không thành công thì nó sẽ báo lỗi.
- Điều kiện kéo theo: Sau khi đăng nhập thành công, giao diện chính của phần mềm sẽ xuất hiện.
- Mô tả: Use case Login chấp nhận user và admin đăng nhập vào phần mềm.
UC002 - Use case Recognize face
- Tên: Recognize face. - Tác nhân: User và admin.
- Điều kiện tiên quyết: User đăng nhập vào phần mềm. User tải tấm hình có người cần nhận diện lên.
- Điều kiện kéo theo: Bạn sẽ xem được những khuôn mặt gần giống nhất với khuôn mặt trong tấm hình và thông tin của những khuôn mặt đó.
- Mô tả: User đăng nhập vào phần mềm, tải ảnh lên rồi bắt đầu cho nhận diện.
Các luồng chính:
1. Tải tấm hình lên.
2. Dò tìm khuôn mặt trong tấm hình. 3. Nhận diện khuôn mặt đó.
4. Liệt kê những khuôn mặt gần giống với khuôn mặt được đưa vào nhận diện nhất.
SVTH: Phan Thanh Ngọc Trang 52/ 103
UC003 - Use case Search information
- Tên: Search information. - Tác nhân: Admin.
- Điều kiện tiên quyết: Đăng nhập vào phần mềm với quyền của một admin.
- Điều kiện kéo theo: Tìm kiếm thông tin của một người theo tên hoặc id.
- Mô tả: Admin muốn xem thông tin về một người nào đó.
Các luồng chính:
1. Đăng nhập vào phần mềm.
2. Điền tên hoặc id của người cần tìm kiếm. 3. Kích vào nút “Search”.
UC004 - Use case Add information
- Tên: Add information. - Tác nhân: Admin.
- Điều kiện tiên quyết: Đăng nhập vào phần mềm với quyền của một admin. Admin cần phải có các thông tin chính xác của người cần