如何利用Android实现人脸识别技术?

网站运维2个月前发布 未希
138 0

在Android平台上实现人脸识别技术,通常需要使用Google的ML Kit库,以下是一个简单的示例代码,展示如何在Android应用中实现人脸识别功能。

准备工作

android实现人脸识别技术的示例代码

确保你已经在build.gradle文件中添加了必要的依赖项:

dependencies {
    implementation 'com.google.mlkit:face-detection:16.0.2'
}

权限配置

AndroidManifest.xml文件中添加相机权限:

<uses-permission android:name="android.permission.CAMERA"/>

布局文件

创建一个简单的布局文件activity_main.xml,包含一个用于显示摄像头预览的SurfaceView和一个按钮来启动人脸识别:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <SurfaceView
        android:id="@+id/surfaceView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    <Button
        android:id="@+id/btnStartFaceDetection"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Start Face Detection"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="16dp"/>
</RelativeLayout>

MainActivity代码

MainActivity.java中编写代码以初始化相机并处理人脸识别:

package com.example.facedetection;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.Button;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import com.google.mlkit.vision.camera.CameraSource;
import com.google.mlkit.vision.common.InputImage;
import com.google.mlkit.vision.face.Face;
import com.google.mlkit.vision.face.FaceDetector;
import com.google.mlkit.vision.face.FaceDetectorOptions;
import java.io.IOException;
import java.util.List;
public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";
    private static final int CAMERA_PERMISSION_CODE = 100;
    private SurfaceView surfaceView;
    private CameraSource cameraSource;
    private FaceDetector faceDetector;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        surfaceView = findViewById(R.id.surfaceView);
        Button btnStartFaceDetection = findViewById(R.id.btnStartFaceDetection);
        // Check for camera permissions
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, CAMERA_PERMISSION_CODE);
        } else {
            startCamera();
        }
        btnStartFaceDetection.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                detectFaces();
            }
        });
    }
    private void startCamera() {
        FaceDetectorOptions options = new FaceDetectorOptions.Builder()
                .setPerformanceMode(FaceDetectorOptions.PERFORMANCE_MODE_FAST)
                .setLandmarkMode(FaceDetectorOptions.LANDMARK_MODE_NONE)
                .setClassificationMode(FaceDetectorOptions.CLASSIFICATION_MODE_NONE)
                .build();
        faceDetector = FaceDetection.getClient(options);
        cameraSource = new CameraSource.Builder(this, faceDetector)
                .setFacing(CameraSource.CAMERA_FACING_FRONT) // Use front camera for better detection in portrait mode
                .setRequestedPreviewSize(1280, 720)
                .setAutoFocusEnabled(true)
                .build();
        surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
            @Override
            public void surfaceCreated(@NonNull SurfaceHolder holder) {
                try {
                    cameraSource.start(holder);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            @Override
            public void surfaceChanged(@NonNull SurfaceHolder holder, int format, int width, int height) {}
            @Override
            public void surfaceDestroyed(@NonNull SurfaceHolder holder) {
                cameraSource.stop();
            }
        });
    }
    private void detectFaces() {
        if (cameraSource != null) {
            cameraSource.takePicture(new CameraSource.ShutterCallback() {
                @Override
                public void onShutter() {}
            }, new CameraSource.PictureCallback() {
                @Override
                public void onPictureTaken(byte[] bytes) {
                    InputImage image = InputImage.fromByteArray(bytes, 90); // Rotate the image to correct orientation
                    faceDetector.process(image)
                            .addOnSuccessListener(faces -> {
                                for (Face face : faces) {
                                    Log.d(TAG, "Face detected!");
                                }
                            })
                            .addOnFailureListener(e -> Log.e(TAG, "Face detection failed!", e));
                }
            });
        }
    }
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == CAMERA_PERMISSION_CODE) {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                startCamera();
            } else {
                Log.e(TAG, "Camera permission denied");
            }
        }
    }
}

运行应用

现在你可以运行你的应用,点击“Start Face Detection”按钮,应用将开始检测人脸并在日志中输出检测结果,如果检测到人脸,会在控制台打印“Face detected!”。

通过以上步骤,你可以在Android应用中实现基本的人脸识别功能,这个示例使用了Google ML Kit库,可以快速集成并使用强大的机器学习模型进行人脸检测,根据实际需求,你可以进一步扩展和优化这个示例,例如增加更多的UI元素、处理不同的设备方向、或者结合其他功能如表情识别等。

以上内容就是解答有关“android实现人脸识别技术的示例代码”的详细内容了,我相信这篇文章可以为您解决一些疑惑,有任何问题欢迎留言反馈,谢谢阅读。

© 版权声明

相关文章

暂无评论

none
暂无评论...