Nhận diện khuôn mặt dùng Core Image
Xây dựng ứng dụng nhận diện khuôn mặt đơn giản sử dụng Core Image Bắt đầu Project, các bạn hãy download starter project tại đây Tiếp theo viết phương thức để nhận ra đâu là khuôn mặt ` func detect() { guard let personciImage = CIImage(image: personPic.image!) else { return } let accuracy = ...
Xây dựng ứng dụng nhận diện khuôn mặt đơn giản sử dụng Core Image Bắt đầu Project, các bạn hãy download starter project tại đây Tiếp theo viết phương thức để nhận ra đâu là khuôn mặt ` func detect() {
guard let personciImage = CIImage(image: personPic.image!) else { return } let accuracy = [CIDetectorAccuracy: CIDetectorAccuracyHigh] let faceDetector = CIDetector(ofType: CIDetectorTypeFace, context: nil, options: accuracy) let faces = faceDetector.featuresInImage(personciImage) for face in faces as! [CIFaceFeature] { print("Found bounds are (face.bounds)") let faceBox = UIView(frame: face.bounds) faceBox.layer.borderWidth = 3 faceBox.layer.borderColor = UIColor.redColor().CGColor faceBox.backgroundColor = UIColor.clearColor() personPic.addSubview(faceBox) if face.hasLeftEyePosition { print("Left eye bounds are (face.leftEyePosition)") } if face.hasRightEyePosition { print("Right eye bounds are (face.rightEyePosition)") } }
}` tiếp theo ta chạy project và sẽ đc kết quả như sau và ở console output sẽ hiển thị vị trí
Found bounds are (177.0, 415.0, 380.0, 380.0)
Rồi thay thế phương thức detect đó bằng đoạn code sau
func detect() { guard let personciImage = CIImage(image: personPic.image!) else { return } let accuracy = [CIDetectorAccuracy: CIDetectorAccuracyHigh] let faceDetector = CIDetector(ofType: CIDetectorTypeFace, context: nil, options: accuracy) let faces = faceDetector?.features(in: personciImage) // Convert Core Image Coordinate to UIView Coordinate let ciImageSize = personciImage.extent.size var transform = CGAffineTransform(scaleX: 1, y: -1) transform = transform.translatedBy(x: 0, y: -ciImageSize.height) for face in faces as! [CIFaceFeature] { print("Found bounds are (face.bounds)") // Apply the transform to convert the coordinates var faceViewBounds = face.bounds.applying(transform) // Calculate the actual position and size of the rectangle in the image view let viewSize = personPic.bounds.size let scale = min(viewSize.awidth / ciImageSize.awidth, viewSize.height / ciImageSize.height) let offsetX = (viewSize.awidth - ciImageSize.awidth * scale) / 2 let offsetY = (viewSize.height - ciImageSize.height * scale) / 2 faceViewBounds = faceViewBounds.applying(CGAffineTransform(scaleX: scale, y: scale)) faceViewBounds.origin.x += offsetX faceViewBounds.origin.y += offsetY let faceBox = UIView(frame: faceViewBounds) faceBox.layer.borderWidth = 3 faceBox.layer.borderColor = UIColor.red.cgColor faceBox.backgroundColor = UIColor.clear personPic.addSubview(faceBox) if face.hasLeftEyePosition { print("Left eye bounds are (face.leftEyePosition)") } if face.hasRightEyePosition { print("Right eye bounds are (face.rightEyePosition)") } } }
rồi ta sẽ nhận được kết quả như sau
một bài tutorial đơn giản để các bạn có thể nhận diện khuôn mặt bằng chính Core Image. Từ ứng dụng đơn giản này các bạn có thể tuỳ biến để dùng với camera hay nhiều ứng dụng khác nữa
Bài viết có sử dụng hình ảnh cũng như nguồn từ APPCODA Peaceeeeee!