Nhận diện khuôn mặt sử dụng Core Image & UIImagePickerController

110

Trong bài viết hôm nay, IDE Academy sẽ giới thiệu đến các bạn kỹ thuật làm app có nhận diện khuôn mặt sau khi đã chụp hoặc chọn hình xong. Chúng ta sẽ sử dụng Core Image, 1 API cực kỳ mạnh mẻ được xây dựng trong Cocoa Touch. Và trong bài viết này, chúng ta sẽ sử dụng tính năng nhận diện khuôn mặt của Core Image, XCode 8 Swift 3.0.

Như các bạn đã biết vào ngày 14/09/2016, phiên bản XCode 8 và Swift 3.0 đã được Apple release, cho nên trong bài hướng dẫn này chúng ta cũng sẽ sử dụng chúng để lập trình ứng dụng lần này của chúng ta.

XCode 8 Create New Project Layout

Giao diện Create new Project của XCode đã có thêm mục Sticker PackiMessage Application, và chúng ta sẽ chọn Single View Application. Tiếp theo, chúng ta sẽ kéo UIImageView, UIButton và ánh xạ chúng vào file ViewController quản lý.

UIImageView & UIButton

TIẾN HÀNH NHẬN DIỆN:

 Để bắt đầu bài viết hôm nay, các bạn cần xem qua bài viết UIImagePickerController.

Sau khi lấy được hình, chúng ta sẽ thêm vào func addFaceFounder(image: UIImage) để bắt đầu.

Tiếp theo, chúng ta cần chuyển image nhận được thành kiểu ciImage.

 

Các dòng lệnh trên giúp ta thiết lập loại và độ chính xác của bộ nhận diện, và để sử dụng các dòng lệnh trên bạn cần import CoreImage

Biến foundFaces là 1 mảng các khuôn mặt được tìm thấy trong hình, và để xét duyệt từng khuôn mặt, chúng ta sẽ sử dụng For loop 

Dưới đây là một số thuộc tính của CIFaceFeature :

LÀM NỔI BẬT KHUÔN MẶT ĐÃ NHẬN DIỆN:

Chúng ta sẽ vẽ 1 hình vuông lên khuôn mặt đã nhận diện, bằng các dòng lệnh sau:

Wrong position detector highlight

Sau những dòng code trên, chúng ta nhận thấy rằng indicator của chúng ta không nằm đúng vị trí chúng ta mong muốn. Điều đó là hiển nhiên, vì hệ thống toạ độ của CIImageUIView khác nhau. Nên công việc tiếp theo chúng ta sẽ chuyển hệ thống toạ độ của CIImage thành hệ thống toạ độ của UIView

Sau đó, chúng ta sẽ tính toán lại bounds của indicator 

Right position detector highlight

 

Vậy là mình đã hướng dẫn xong cho các bạn cách detect khuôn mặt trên image với CoreImage. Hy vọng thông qua bài viết này, bạn có thể hiểu thêm về cơ chế hoạt động của chúng.

P/s: Với các bạn không nhận được khung hình nhận diện, các bạn cần thêm loạt code sau:

Nguồn: IDE Academy via Vishalvirodhia