视频捕捉人脸检测-安卓

     2023-03-16     172

关键词:

【中文标题】视频捕捉人脸检测-安卓【英文标题】:Video Capturing Face Detection- Android 【发布时间】:2016-02-25 06:38:08 【问题描述】:

为了在视频捕获期间跟踪/检测面部。我已经达到能够捕获和存储视频。现在我在其中添加人脸检测。我现在正在视频捕获期间检测面部。 如何检查面部检测是否正常工作。我可以做出哪些改变

public class AndroidVideoCaptureExample extends Activity 
private Camera mCamera;
private int vWidth, vHeight;
private CameraPreview mPreview;
private MediaRecorder mediaRecorder;
private Button capture, switchCamera;
private Context myContext;
private LinearLayout cameraPreview;
private boolean cameraFront = false;
private int desiredwidth = 640, desiredheight = 360;

@Override
public void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

    myContext = this;
    initialize();


private int findFrontFacingCamera() 
    int cameraId = -1;
    // Search for the front facing camera
    int numberOfCameras = Camera.getNumberOfCameras();
    for (int i = 0; i < numberOfCameras; i++) 
        CameraInfo info = new CameraInfo();
        Camera.getCameraInfo(i, info);
        if (info.facing == CameraInfo.CAMERA_FACING_FRONT) 
            cameraId = i;
            cameraFront = true;
            break;
        
    
    return cameraId;


public void onResume() 
    super.onResume();
    if (!hasCamera(myContext)) 
        Toast toast = Toast.makeText(myContext, "Sorry, your phone does not have a camera!", Toast.LENGTH_LONG);
        toast.show();
        finish();
    
    if (mCamera == null) 
        // if the front facing camera does not exist
        if (findFrontFacingCamera() < 0) 
            Toast.makeText(this, "No front facing camera found.", Toast.LENGTH_LONG).show();
            switchCamera.setVisibility(View.GONE);
        
        mCamera = Camera.open(findFrontFacingCamera());
        mCamera.setFaceDetectionListener(new FaceDetectionListener());
        mCamera.setDisplayOrientation(90);
        mPreview.refreshCamera(mCamera);
        startFaceDetection();
    


public void initialize() 
    cameraPreview = (LinearLayout) findViewById(R.id.camera_preview);

    mPreview = new CameraPreview(myContext, mCamera);
    cameraPreview.addView(mPreview);

    capture = (Button) findViewById(R.id.button_capture);
    capture.setOnClickListener(captrureListener);





@Override
protected void onPause() 
    super.onPause();
    // when on Pause, release camera in order to be used from other
    // applications
    releaseCamera();


private boolean hasCamera(Context context) 
    // check if the device has camera
    if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)) 

        return true;
     else 
        return false;
    


boolean recording = false;
OnClickListener captrureListener = new OnClickListener() @Override
    public void onClick(View v) 
        if (recording) 
            // stop recording and release camera
            mediaRecorder.stop(); // stop the recording
            releaseMediaRecorder(); // release the MediaRecorder object
            Toast.makeText(AndroidVideoCaptureExample.this, "Video captured!", Toast.LENGTH_LONG).show();

            Toast.makeText(AndroidVideoCaptureExample.this, vWidth + "BY" + vHeight, Toast.LENGTH_LONG).show();

            recording = false;
         else 
            if (!prepareMediaRecorder()) 
                Toast.makeText(AndroidVideoCaptureExample.this, "Failed in prepareMediaRecorder()!\n - Ended -", Toast.LENGTH_LONG).show();
                finish();
            
            // work on UiThread for better performance
            runOnUiThread(new Runnable() 
                public void run() 
                    // If there are stories, add them to the table

                    try 
                        mediaRecorder.start();

                     catch (final Exception ex) 
                        // Log.i("---","Exception in thread");
                    
                
            );

            recording = true;
        
    
;

private void releaseMediaRecorder() 
    if (mediaRecorder != null) 
        mediaRecorder.reset(); // clear recorder configuration
        mediaRecorder.release(); // release the recorder object
        mediaRecorder = null;
        mCamera.lock(); // lock camera for later use
    


private boolean prepareMediaRecorder() 

    List < Camera.Size > videosizes = mCamera.getParameters().getSupportedVideoSizes();
    Camera.Size videosize = videosizes.get(1);
    //Camera.Size optimalPreviewSize = getOptimalPreviewSize(previewsizes, desiredwidth, desiredheight);
    Camera.Size optimalVideoSize = getOptimalPreviewSize(videosize, desiredwidth, desiredheight);
    vWidth = optimalVideoSize.width; //mCamera.getParameters().getPreviewSize().width;
    vHeight = optimalVideoSize.height; //mCamera.getParameters().getPreviewSize().height;

    mediaRecorder = new MediaRecorder();
    mCamera.unlock();
    mediaRecorder.setCamera(mCamera);

    //startFaceDetection();
    //mPreview.setPreviewSize(optimalPreviewSize.width, optimalPreviewSize.height);
    //mCamera.unlock();
    //mMediaRecorder = new MediaRecorder();
    //mMediaRecorder.setCamera(mCamera);
    //mMediaRecorder.setVideoSize(optimalVideoSize.width, optimalVideoSize.height);
    //myCamera.setParameters(p);
    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
    mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
    mediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_LOW));
    mediaRecorder.setVideoEncodingBitRate(512 * 1000);
    mediaRecorder.setVideoFrameRate(15);
    mediaRecorder.setVideoSize(optimalVideoSize.width, optimalVideoSize.height);
    mediaRecorder.setOutputFile("/sdcard/myvideo.mp4");
    mediaRecorder.setMaxDuration(600000); // Set max duration 60 sec.
    mediaRecorder.setMaxFileSize(50000000); // Set max file size 50M

    try 
        mediaRecorder.prepare();
     catch (IllegalStateException e) 
        releaseMediaRecorder();
        return false;
     catch (IOException e) 
        releaseMediaRecorder();
        return false;
    
    return true;



private void releaseCamera() 
    // stop and release camera
    if (mCamera != null) 
        mCamera.release();
        mCamera = null;
    


private Camera.Size getOptimalPreviewSize(Camera.Size sizes, int w, int h) 
    final double ASPECT_TOLERANCE = 0.2;
    double targetRatio = (double) w / h;
    if (sizes == null) return null;

    Camera.Size optimalSize = null;
    double minDiff = Double.MAX_VALUE;

    int targetHeight = h;

    // Try to find an size match aspect ratio and size
    Camera.Size size = sizes;

    Log.d("Camera", "Checking size " + size.width + "w " + size.height + "h");
    double ratio = (double) size.width / size.height;
    if (Math.abs(ratio - targetRatio) <= ASPECT_TOLERANCE) if (Math.abs(size.height - targetHeight) < minDiff) 
        optimalSize = size;
        minDiff = Math.abs(size.height - targetHeight);
    

    // Cannot find the one match the aspect ratio, ignore the
    // requirement
    if (optimalSize == null) 
        minDiff = Double.MAX_VALUE;
        if (Math.abs(size.height - targetHeight) < minDiff) 
            optimalSize = size;
            minDiff = Math.abs(size.height - targetHeight);
        

    
    return optimalSize;



public void startFaceDetection() 
    // Try starting Face Detection
    Camera.Parameters params = mCamera.getParameters();

    // start face detection only *after* preview has started
    if (params.getMaxNumDetectedFaces() > 0) 
        // camera supports face detection, so can start it:
        mCamera.startFaceDetection();
    

这里是人脸检测监听类:

public class FaceDetectionListener implements Camera.FaceDetectionListener 

@Override
public void onFaceDetection(Camera.Face[] faces, Camera c)

    if (faces.length > 0)
    Log.d("FaceDetection", "face detected: " + faces.length +
            " Face 1 Location X: " + faces[0].rect.centerX() +
            "Y: " + faces[0].rect.centerY());

    

【问题讨论】:

如果我在 Google 上正确搜索,该 API 自 API 级别 21 以来似乎已被弃用。 好的,保持视频捕获代码不变。如何实现人脸检测部分。 FaceDetectionListener 可用于视频捕获(请参阅Camera 类)。并且它由有限的设备集支持,因为它取决于硬件。对于软件人脸检测或本地文件,您必须使用外部库,如 OpenCV 嗨!我也在做同样的事情。我使用了你的代码,但无法捕捉到面部检测到的视频。 logcat 什么的?没有它我不能告诉你原因。 【参考方案1】:

我使用 Mobile Vision API 从实时视频中进行人脸检测,您可以搜索 Mobile Vision API 进行人脸检测,它可以正常工作, 但我没有任何方法可以捕获检测到的面部并将检测到的面部从实时视频中保存到图库中

【讨论】:

很抱歉回复晚了..,请访问此链接了解 Mobile Vision API,arjunu.com/2015/08/face-detection-with-android-vision-api 我觉得你给的网站没用

在检测到人脸时显示圆圈 - Android [重复]

...发布时间】:2016-02-2702:22:41【问题描述】:我已经制作了视频捕捉和人脸检测应用程序。我想在检测到的人脸上显示一个圆圈,并在Myview类中有以下方法,检查它是否有效:protectedvoidonDraw(Canvascanvas)super.onDraw(canv 查看详情

avfoundation学习笔记:媒体捕捉读取及写入

...捉捕捉会话捕捉设备捕捉设备的输入捕捉的输出捕捉预览视频捕捉创建捕捉会话坐标转换摄像头切换调整对焦调整曝光调整闪光灯和手电筒模式拍摄静态图片视频录制高级捕捉功能视频缩放是否支持缩放缩放实现人脸检测AVMetadat... 查看详情

视频人脸检测——dlib版(代码片段)

往期目录视频人脸检测——Dlib版(六)OpenCV添加中文(五)图片人脸检测——Dlib版(四)视频人脸检测——OpenCV版(三)图片人脸检测——OpenCV版(二)OpenCV环境搭建(一)更多更新,欢迎访问我的github:https://github.com/vipstone/... 查看详情

无法从 emgucv 中的视频中检测到人脸

】无法从emgucv中的视频中检测到人脸【英文标题】:Notabletodetectfacefromvideoinemgucv【发布时间】:2018-10-1501:59:00【问题描述】:通过在C#中使用Emgucv,我能够从图像中检测人脸,但无法从视频中检测人脸。在我的解决方案中,视频... 查看详情

iPhone上相机视频输入的人脸检测

】iPhone上相机视频输入的人脸检测【英文标题】:FaceDetectiononCameravideoinputoniPhone【发布时间】:2011-09-2410:20:10【问题描述】:我正在开展一个需要对摄像头视频输入(如安全摄像头)进行人脸检测的项目。我设法通过AVFoundation框... 查看详情

数码相机中的人脸检测有啥作用?使用人脸对焦的技巧和方法是啥?

...进行对焦,可以更好地拍摄到人物的静态和动态,快门在捕捉人脸十更具人性化,可以进行瞬间的笑容拍摄,使得数码相机在配置上得到新的跟进。使用人脸对焦的方法和技巧,就是通过数码相机快速识别,让摄影者的精力集中... 查看详情

图像处理项目——人脸检测—视频(代码片段)

...使用的是opencv中的Haart特征分类器,harrCascades*检测对象为视频中的人脸 一:主要步骤1.加载分类器,将人脸检测分类器和笑脸检测分类器放在项目目录中去2.调用detecMutiScale()函数检测,对函数中相关的参数进行修改调整, ... 查看详情

人脸检测安卓

】人脸检测安卓【英文标题】:FaceDetectionAndroid【发布时间】:2021-09-0819:17:37【问题描述】:我在使用Google的MLKit人脸检测器时遇到了问题,因为即使人脸被某物覆盖了一半,它也会返回一张人脸,这使得我使用的人脸识别模型... 查看详情

视频直播美颜sdk算法代码解析

随着短视频、直播软件一类app的流行,美颜sdk的应用也越来越广泛。所谓“美颜”,简单解释下,就是通过视频(图片)技术对人脸进行美化。但是就“美化”这个词,却牵扯到众多深度学习、图像处理、... 查看详情

使用 Vision 框架跟踪本地视频中的人脸 [关闭]

】使用Vision框架跟踪本地视频中的人脸[关闭]【英文标题】:TrackfacesinLocalvideousingVisionframework[closed]【发布时间】:2017-12-0210:52:22【问题描述】:我正在尝试使用Vision框架检测本地录制视频中的人脸。提供的大多数示例都是在Livec... 查看详情

视频检测人脸添加帽子完美方案(代码片段)

Python版本可参考以下链接:https://github.com/crossin/snippet/tree/master/face_detect//人脸宽度//im为原始视频帧 conststd::stringstrPath=AppPath.substr(0,AppPath.rfind("\\"))+"\\"+"hat8.png"; Matm_hatImg=imread(strPat 查看详情

基于opencv的视频处理-人脸检测(代码片段)

...脸进行检测,防止痴呆后忘了Quiet。目录基于OpenCV的视频处理-人脸检测拍摄影片检测人脸保存面孔和摘要视频输出运行中的管道作者有言基于OpenCV的视频处理-人脸检测目前可依靠模块化方式实现图像处理管道,检测一堆... 查看详情

dlib库包的介绍与使用,opencv+dlib检测人脸框opencv+dlib进行人脸68关键点检测,opencv+dlib实现人脸识别,dlib进行人脸特征聚类dlib视频目标跟踪(代码片段)

...pencv+dlib进行人脸识别4.3人脸识别总结5dlib人脸聚类6dlib视频目标跟踪1dlib库介绍dlib官网:http://dlib.net/dlib模型文件和源码下载:http://dlib.net/files/dlib介绍dlib人脸检测与人脸识别2dlib人脸检测:绘制出人脸检测框2.1dlib... 查看详情

视频中减去帧的人脸跟踪

】视频中减去帧的人脸跟踪【英文标题】:Facetrackingwithsubtractingframesinvideo【发布时间】:2015-10-1217:52:16【问题描述】:是否可以在不使用人脸识别的情况下通过减帧来跟踪视频中的人脸?如果下一帧的人脸发生变化会怎样?有... 查看详情

c#usb视频人脸检测

此程序基于虹软人脸识别进行的开发SDK下载地址:https://ai.arcsoft.com.cn/ucenter/user/reg?utm_source=csdn1&utm_medium=referral**前提条件**从虹软官网下载获取ArcFace引擎应用开发包,及其对应的激活码(App_id,SDK_key)将获取到的开发包导入到您... 查看详情

利用机器学习(mediapipe)进行人脸468点的3d坐标检测--视频实时检测(代码片段)

...的图片检测代码实现过程,我们我们介绍一下如何在实时视频中,进行人脸468点的坐标检测。importcv2importmediapipeasmpmp_drawing=mp.solutions.drawing_utilsmp_face_mesh=mp.solutions.face_meshface_mesh=mp_face_mesh.FaceMesh(min_detection_confidence=0.5,min_tracking_con... 查看详情

基于dlib人脸检测(图像视频)demo(代码片段)

1、Dlib是一个深度学习开源工具,基于C++开发,也支持Python开发接口2、由于Dlib对于人脸特征提取支持很好,很多训练好的人脸特征提取模型提供开发者使用,所以Dlib人脸识别开发很适合做人脸项目开发官网... 查看详情

基于dlib人脸检测(图像视频)demo(代码片段)

1、Dlib是一个深度学习开源工具,基于C++开发,也支持Python开发接口2、由于Dlib对于人脸特征提取支持很好,很多训练好的人脸特征提取模型提供开发者使用,所以Dlib人脸识别开发很适合做人脸项目开发官网... 查看详情