Skip to main content

Face Recognition Using Firebase ML Kit In Android Studio 2020 (Complete Guide) | Step By Step Tutorial

Today, in this post we are going to make an android app that recognizes facial features from an image using a firebase ml kit in the android studio.

                                                    

After doing all the steps the output will look like this:


Step 1: Add Firebase to your android project:

I recommend you to see how to add firebase to the android project in 5minutes to know how to add it or if you already add it then you can move on to 2nd Step.     

Step 2:  Add this dependency for the ml kit android libraries to your app-level build.gradle file:
  implementation 'com.google.firebase:firebase-ml-vision:24.0.1'
  // If you want to detect face contours (landmark detection and classification
  // don't require this additional model):
  implementation 'com.google.firebase:firebase-ml-vision-face-model:19.0.0'


Step 3: Design the layout of the activity:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout     xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"     android:layout_height="match_parent">
    <ImageView        android:id="@+id/image"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_above="@+id/selectImage"        android:layout_marginBottom="20dp" />
    <Button        android:id="@+id/selectImage"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_centerInParent="true"        android:text="Select Image !" />
    <TextView        android:id="@+id/text"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_below="@id/selectImage"        android:layout_centerHorizontal="true"        android:layout_marginTop="20dp"        android:textColor="@android:color/black"        android:textSize="16sp" /></RelativeLayout>


Step 4: Select Image from the device:

I recommend you to first go through the post on how to select or capture an image from the device before going further.

So now, let's open the image cropping activity to select the image on button click:


and now get the image by overriding onActivityResult method :


Step 5:  Extract face data from the image :

private void detectFaceFromImage(Uri uri) {
    try {
              // Preparing the input image
        image = FirebaseVisionImage.fromFilePath(MainActivity.this, uri);
              // For high accuracy option
        FirebaseVisionFaceDetectorOptions highAccuracyOpts =
                new FirebaseVisionFaceDetectorOptions.Builder()
                        .setPerformanceMode(FirebaseVisionFaceDetectorOptions.ACCURATE)
                        .setLandmarkMode(FirebaseVisionFaceDetectorOptions.ALL_LANDMARKS)
                        .setClassificationMode(FirebaseVisionFaceDetectorOptions.ALL_CLASSIFICATIONS)
                        .setContourMode(FirebaseVisionFaceDetectorOptions.ALL_CONTOURS)
                        .build();
      // Create the detector object
        FirebaseVisionFaceDetector detector = FirebaseVision.getInstance()
                .getVisionFaceDetector(highAccuracyOpts);
     // Pass the vision image object in detector
detector.detectInImage(image) .addOnSuccessListener(new OnSuccessListener<List<FirebaseVisionFace>>() { @Override public void onSuccess(List<FirebaseVisionFace> faces) { for (FirebaseVisionFace face : faces) {
                            Rect bounds = face.getBoundingBox();
                            // coordinate of face
                            textView.append("Bounding Polygon "+ "("+bounds.centerX()+","+bounds.centerY()+")"+"\n\n");                                // angle of rotation
                            float rotY = face.getHeadEulerAngleY();  // Head is rotated to the right rotY degrees                            float rotZ = face.getHeadEulerAngleZ();  // Head is tilted sideways rotZ degrees                            textView.append("Angles of rotation " + "Y:"+rotY+","+ "Z: "+rotZ+ "\n\n");                            // If landmark detection was enabled (mouth, ears, eyes, cheeks, and                            // nose available):                            // If face tracking was enabled:                            if (face.getTrackingId() != FirebaseVisionFace.INVALID_ID) {
                                int id = face.getTrackingId();                                textView.append("id: " + id + "\n\n");                            }
                           // Left Ear Position
                            FirebaseVisionFaceLandmark leftEar = face.getLandmark(FirebaseVisionFaceLandmark.LEFT_EAR);                            if (leftEar != null) {
                                FirebaseVisionPoint leftEarPos = leftEar.getPosition();                                textView.append("LeftEarPos: " + "("+leftEarPos.getX()+"," + leftEarPos.getY()+")"+"\n\n");                            }
                           // Right Ear Position
FirebaseVisionFaceLandmark rightEar = face.getLandmark(FirebaseVisionFaceLandmark.RIGHT_EAR); if (rightEar != null) { FirebaseVisionPoint rightEarPos = rightEar.getPosition(); textView.append("RightEarPos: " + "("+rightEarPos.getX()+","+rightEarPos.getY() +")"+ "\n\n"); } // If contour detection was enabled: List<FirebaseVisionPoint> leftEyeContour = face.getContour(FirebaseVisionFaceContour.LEFT_EYE).getPoints();

                            List<FirebaseVisionPoint> upperLipBottomContour =
                                    face.getContour(FirebaseVisionFaceContour.UPPER_LIP_BOTTOM).getPoints();
                            // If classification was enabled:
                           // Similing Probability
if (face.getSmilingProbability() != FirebaseVisionFace.UNCOMPUTED_PROBABILITY) { float smileProb = face.getSmilingProbability(); textView.append("SmileProbability: " + ("" + smileProb * 100).subSequence(0, 4) + "%" + "\n\n"); }
                           // Right eye open Probability                           
                            if (face.getRightEyeOpenProbability() != FirebaseVisionFace.UNCOMPUTED_PROBABILITY) {
                                float rightEyeOpenProb = face.getRightEyeOpenProbability();                                textView.append("RightEyeOpenProbability: " + ("" + rightEyeOpenProb * 100).subSequence(0, 4) + "%" + "\n\n");                            }
                           // Left eye open Probability
if (face.getLeftEyeOpenProbability() != FirebaseVisionFace.UNCOMPUTED_PROBABILITY) { float leftEyeOpenProbability = face.getLeftEyeOpenProbability(); textView.append("LeftEyeOpenProbability: " + ("" + leftEyeOpenProbability * 100).subSequence(0, 4) + "%" + "\n\n"); } }
                    }
                })
                .addOnFailureListener(
                        new OnFailureListener() {
                            @Override                            public void onFailure(@NonNull Exception e) {
                                // Task failed with an exception                                // ...                            }
                        });
    } catch (IOException e) {
        e.printStackTrace();    }
}

Now, run the app.

You will see the required output.

You can see the full source code at GitHub.

If you face any problem or have any suggestion please comment it down we love to answer it.

Comment down what next topic you need a guide on? or Drop a message on our social media handle

 Happy coding and designing : )



Comments

Popular posts from this blog

How To Add Firebase To Android Project Within 5 Minutes 2021 (Complete Guide) | Step By Step Tutorial

In this post, we're going to add firebase to an android project.                                                                                        Step 1: Go to Firebase Console after sign in to your google account and click on add project . Step 2: Enter your android project name and click continue.  Again click continue. Now, click on the create project and the last click on continue. Our firebase project is ready now and now we have to link it with our android project. So let's follow this remaining step for linking the android project to the firebase project. Step 3: Click on the android icon (2nd one). Step 4: Enter the application id (package name) in the Android package name. You can find your application...

Make Barcode Scanner App Using Firebase ML Kit In Android Studio 2020(Complete Guide) With Source Code | Step By Step Tutorial

In this post, we're going to develop an android app that scans the barcode from the image and produce the required output. This is the output after doing all the steps: You can create your own QR Code from a  barcode generator  with custom data like putting a URL or a mail message etc. The above one is a simple text QR Code. The highlighted text in the above screenshot is the same output you get if you scan the above QR Code with Google Lens. As I show it below: So, Now let's make it. Step 1: Add Firebase to your android project: I recommend you to see  how to add firebase to the android project in 5minutes  to know how to add it or if you already add it then you can move on to 2nd Step.    Step 2: Add this dependency for the ml kit android libraries to your app-level build.gradle file: implementation 'com.google.firebase:firebase-ml-vision:24.0.1' implementation 'com.google.firebase:firebase-ml-vision-barcode-model:16.0.2' ...

Select (or Capture) and Crop Image In Android Studio 2020 (Complete Guide) | Step By Step Guide

In, this post we're going to make an app that captures or selects an image and then displays in an image view using a third party library - android image cropper by ArthurHub at Github. Step 1: Add Dependency : Open android studio and paste this dependency in app-level build.gradle file as shown below: implementation 'com.theartofdev.edmodo:android-image-cropper:2.7.+' and then click on Sync Now. Step 2: Design the main activity layout : Add a Button and an ImageView to select and display image respectively as shown below: Step 3: Modify AndroidMainfest.xml by adding the CropImageActivity : <activity android:name="com.theartofdev.edmodo.cropper.CropImageActivity" android:screenOrientation="portrait" android:theme="@style/Base.Theme.AppCompat"/>  as shown below- Step 4: Open CropImageActivity on Click of a button : Step 5: Lastly, override the On Activity Result and update ImageView : ...



DMCA.com Protection Status

Copywrite © 2021 The MindfulCode