Firebase ML Kit: Nhận diện khuôn mặt ( Face Detection) trong Android

Đăng bởi: Admin | Lượt xem: 3834 | Chuyên mục: 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.


  1. 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.

  1. 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 Bitmapmedia.ImageByteBufferbyte[], 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ó.

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 đủ:

https://github.com/hitanshu-dhawan/FirebaseMLKit/tree/master/app/src/main/java/com/hitanshudhawan/firebasemlkitexample/facedetection

vncoder logo

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!



Khóa học liên quan

Khóa học: Android

Học Kotlin cơ bản
Số bài học:
Lượt xem: 17095
Đăng bởi: Admin
Chuyên mục: Android

Học lập trình Flutter cơ bản
Số bài học:
Lượt xem: 55192
Đăng bởi: Admin
Chuyên mục: Android

Lập trình Android cơ bản
Số bài học:
Lượt xem: 22231
Đăng bởi: Admin
Chuyên mục: Android