android 人脸识别追踪

MainActivity.java

package com.ispring.facedetection;

import android.media.AudioManager;
import android.media.MediaParser;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.media.SoundPool;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.FrameLayout;

import com.google.mediapipe.components.TextureFrameConsumer;
import com.google.mediapipe.framework.TextureFrame;
import com.google.mediapipe.solutioncore.CameraInput;
import com.google.mediapipe.solutioncore.SolutionGlSurfaceView;
import com.google.mediapipe.solutioncore.VideoInput;
import com.google.mediapipe.solutions.facedetection.FaceDetection;
import com.google.mediapipe.solutions.facedetection.FaceDetectionOptions;
import com.google.mediapipe.solutions.facedetection.FaceDetectionResult;
import com.google.mediapipe.solutions.facedetection.FaceKeypoint;
import com.google.mediapipe.formats.proto.LocationDataProto.LocationData.RelativeKeypoint;
import com.ispring.gameplane.R;
import com.ispring.gameplane.game.GameView;

public class MainActivity extends AppCompatActivity {
   
    private FaceDetection faceDetection;
    private CameraInput cameraInput;
    private SolutionGlSurfaceView<FaceDetectionResult> glSurfaceView;
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        stopCurrentPipeline();
        setupStreamingModePipeline(InputSource.CAMERA); 

    }

    private void setupStreamingModePipeline() {
   

        faceDetection = new FaceDetection(this,FaceDetectionOptions.builder().setStaticImageMode(false).setModelSelection(0).build());
        faceDetection.setErrorListener((message, e) -> Log.e(TAG, "面部识别错误:" + message));
  
        cameraInput = new CameraInput(this);
        cameraInput.setNewFrameListener(textureFrame -> faceDetection.send(textureFrame));
        
        glSurfaceView = new SolutionGlSurfaceView<>(
                this, faceDetection.getGlContext(), faceDetection.getGlMajorVersion());
        glSurfaceView.setSolutionResultRenderer(new FaceDetectionResultGlRenderer());
        glSurfaceView.setRenderInputImage(true);
        faceDetection.setResultListener(
                faceDetectionResult -> {
   
                    logNoseTipKeypoint(faceDetectionResult, /*faceIndex=*/ 0, /*showPixelValues=*/ false);
                    glSurfaceView.setRenderData(faceDetectionResult);
                    glSurfaceView.requestRender();
                });

        glSurfaceView.post(this::startCamera);
    
        FrameLayout frameLayout = findViewById(R.id.frl);
        frameLayout.removeAllViewsInLayout();
        frameLayout.addView(glSurfaceView);
        glSurfaceView.setVisibility(View.VISIBLE);
        frameLayout.requestLayout();
    }
    private void startCamera() {
   
        cameraInput.start(
                this,
                faceDetection.getGlContext(),
                CameraInput.CameraFacing.FRONT,
                glSurfaceView.getWidth(),
                glSurfaceView
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Atomic_space

你的鼓励就是我创作最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值