Firebase ML Kit: Nhận diện khuôn mặt ( Face Detection) trong Android
API nhận diện khuôn mặt của ML Kit được thiết kế để hoạt động trên chính thiết bị giúp thiết bị nhanh, chính xác và có khả năng phát hiện khuôn mặt trong thời gian thực.
-
Giới thiệu
Nhận diện khuôn mặt là quá trình phát hiện khuôn mặt trong ảnh.
Ngày nay, tất cả các ứng dụng xã hội phổ biến như Instagram , Snapchat , Facebook , v.v ... đều sử dụng một số loại công nghệ nhận diện khuôn mặt. Nó giúp họ tăng sự tham gia của người dùng và cải thiện trải nghiệm ứng dụng tổng thể.
API nhận diện khuôn mặt của ML Kit cung cấp các tính năng:
- Phát hiện khuôn mặt trong một hình ảnh.
- Xác định các đặc điểm chính trên khuôn mặt như mắt, mũi, miệng, hạnh phúc, v.v.
- Lấy đường nét của khuôn mặt được phát hiện và các đặc điểm khuôn mặt của họ.
API nhận diện khuôn mặt của ML Kit được thiết kế để hoạt động trên chính thiết bị giúp thiết bị nhanh, chính xác và có khả năng phát hiện khuôn mặt trong thời gian thực.
-
Nhận diện khuôn mặt của ML Kit
API nhận diện khuôn mặt của ML Kit cung cấp các tính năng chính sau.
- Nhận biết và xác định vị trí các đặc điểm trên khuôn mặt
Lấy tọa độ của mắt, tai, má, mũi và miệng của mọi khuôn mặt được phát hiện.
- Lấy các đường nét của các đặc điểm trên khuôn mặt
Lấy các đường nét của khuôn mặt được phát hiện và mắt, lông mày, môi và mũi của chúng.
- Nhận biết nét mặt
Xác định xem một người đang cười hay nhắm mắt lại.
- Xử lý các khung hình video trong thời gian thực
Phát hiện khuôn mặt được thực hiện trên thiết bị và đủ nhanh để được sử dụng trong các ứng dụng thời gian thực, chẳng hạn như thao tác video.
3. Cài đặt
Bước 1: Thêm Firebase vào ứng dụng của bạn
Bạn có thể thêm Firebase vào ứng dụng của mình bằng cách làm theo các bước được đề cập ở đây .
Bước 2: Thêm các phụ thuộc
Trong build.gradle thêm các phụ thuộc
dependencies {
// ...
implementation 'com.google.firebase:firebase-ml-vision:19.0.2'
implementation 'com.google.firebase:firebase-ml-vision-face-model:17.0.2'
}
Bước 2.5: Chỉ định các mô hình ML (tùy chọn)
Đối với API trên thiết bị, bạn có thể định cấu hình ứng dụng của mình để tự động tải xuống các mô hình ML sau khi được cài đặt từ Cửa hàng Play. Nếu không, mô hình sẽ được tải xuống trong lần đầu tiên bạn chạy trình phát hiện trên thiết bị.
Để bật tính năng này, trong AndroidManifest.xml
<application ...>
...
<meta-data
android:name="com.google.firebase.ml.vision.DEPENDENCIES"
android:value="face" />
<!-- To use multiple models: android:value="face,model2" -->
</application>
Bước 3:
ML Kit cung cấp một cách dễ dàng để phát hiện khuôn mặt từ nhiều loại hình ảnh thích Bitmap, media.Image, ByteBuffer, byte[], hoặc một tập tin trên thiết bị. Bạn chỉ cần tạo một đối tượng FirebaseVisionImage từ các loại hình ảnh được đề cập ở trên và chuyển nó vào mô hình.
Trong ví dụ này, tôi đã sử dụng byte[]và Bitmap tạo FirebaseVisionImagecác đối tượng.
byte[]
val metadata = FirebaseVisionImageMetadata.Builder()
.setWidth(width)
.setHeight(height)
.setFormat(FirebaseVisionImageMetadata.IMAGE_FORMAT_NV21)
.setRotation(rotation)
.build()
val image = FirebaseVisionImage.fromByteArray(byteArray, metadata)
Bitmap
val image = FirebaseVisionImage.fromBitmap(bitmap)
Để tạo FirebaseVisionImage
từ các loại hình ảnh khác, vui lòng tham khảo tài liệu .
Bước 4:
Chuẩn bị mô hình Nhận diện khuôn mặt .
val detector = FirebaseVision.getInstance().visionFaceDetector
Nếu bạn muốn định cấu hình mô hình nhận diện khuôn mặt theo nhu cầu của mình, bạn có thể làm điều đó với một đối tượng FirebaseVisionFaceDetectorOptions
// face classification and landmark detection
val options = FirebaseVisionFaceDetectorOptions.Builder()
.setPerformanceMode(FirebaseVisionFaceDetectorOptions.ACCURATE)
.setLandmarkMode(FirebaseVisionFaceDetectorOptions.ALL_LANDMARKS)
.build()
// contour detection
val options = FirebaseVisionFaceDetectorOptions.Builder()
.setContourMode(FirebaseVisionFaceDetectorOptions.ALL_CONTOURS)
.build()
val detector = FirebaseVision.getInstance().getVisionFaceDetector(options)
Đây là danh sách tất cả các cài đặt bạn có thể định cấu hình trong mô hình nhận diện khuôn mặt của mình.
Bước 5:
Chuyển hình ảnh của mình cho model để Nhận diện khuôn mặt.
detector.detectInImage(image)
.addOnSuccessListener {
// Task completed successfully
}
.addOnFailureListener {
// Task failed with an exception
}
Bước 6: Trích xuất thông tin
Nếu phát hiện khuôn mặt thành công, ta sẽ nhận được một danh sách các FirebaseVisionFace
. Mỗi FirebaseVisionFace
đại diện cho một khuôn mặt được phát hiện và chứa tất cả thông tin liên quan đến nó.
detector.detectInImage(image)
.addOnSuccessListener {
// Task completed successfully
}
.addOnFailureListener {
// Task failed with an exception
}
Nếu phát hiện khuôn mặt thành công, ta sẽ nhận được một danh sách các FirebaseVisionFace
. Mỗi FirebaseVisionFace
đại diện cho một khuôn mặt được phát hiện và chứa tất cả thông tin liên quan đến nó.
Bạn có thể trích xuất tất cả thông tin như thế này.
for (face in faces) {
// Landmarks
val leftEye = face.getLandmark(FirebaseVisionFaceLandmark.LEFT_EYE)
val rightEye = face.getLandmark(FirebaseVisionFaceLandmark.RIGHT_EYE)
val nose = face.getLandmark(FirebaseVisionFaceLandmark.NOSE_BASE)
val leftEar = face.getLandmark(FirebaseVisionFaceLandmark.LEFT_EAR)
val rightEar = face.getLandmark(FirebaseVisionFaceLandmark.RIGHT_EAR)
val leftMouth = face.getLandmark(FirebaseVisionFaceLandmark.MOUTH_LEFT)
val bottomMouth = face.getLandmark(FirebaseVisionFaceLandmark.MOUTH_BOTTOM)
val rightMouth = face.getLandmark(FirebaseVisionFaceLandmark.MOUTH_RIGHT)
// Classification
val smilingProbability = face.smilingProbability
val leftEyeOpenProbability = face.leftEyeOpenProbability
val rightEyeOpenProbability = face.rightEyeOpenProbability
// Contours
val faceContours = face.getContour(FirebaseVisionFaceContour.FACE).points
val leftEyebrowTopContours = face.getContour(FirebaseVisionFaceContour.LEFT_EYEBROW_TOP).points
val leftEyebrowBottomContours = face.getContour(FirebaseVisionFaceContour.LEFT_EYEBROW_BOTTOM).points
val rightEyebrowTopContours = face.getContour(FirebaseVisionFaceContour.RIGHT_EYEBROW_TOP).points
val rightEyebrowBottomContours = face.getContour(FirebaseVisionFaceContour.RIGHT_EYEBROW_BOTTOM).points
val leftEyeContours = face.getContour(FirebaseVisionFaceContour.LEFT_EYE).points
val rightEyeContours = face.getContour(FirebaseVisionFaceContour.RIGHT_EYE).points
val upperLipTopContours = face.getContour(FirebaseVisionFaceContour.UPPER_LIP_TOP).points
val upperLipBottomContours = face.getContour(FirebaseVisionFaceContour.UPPER_LIP_BOTTOM).points
val lowerLipTopContours = face.getContour(FirebaseVisionFaceContour.LOWER_LIP_TOP).points
val lowerLipBottomContours = face.getContour(FirebaseVisionFaceContour.LOWER_LIP_BOTTOM).points
val noseBridgeContours = face.getContour(FirebaseVisionFaceContour.NOSE_BRIDGE).points
val noseBottomContours = face.getContour(FirebaseVisionFaceContour.NOSE_BOTTOM).points
}
Đây là những gì bạn có thể đạt được với API nhận diện khuôn mặt của ML Kit.
Mã nguồn đầy đủ:
Theo dõi VnCoder trên Facebook, để cập nhật những bài viết, tin tức và khoá học mới nhất!