文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

在Android 开发中使用camera怎么实现一个人脸识别功能

2023-05-31 14:07

关注

这篇文章将为大家详细讲解有关在Android 开发中使用camera怎么实现一个人脸识别功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

Android camera实时预览 实时处理,面部认证。

预览操作是网友共享的代码,我在继承SurfaceView 的CameraSurfaceView 中加入了帧监听事件,每次预览监听前五个数据帧,在处理做一个面部识别。

先看目录关系

在Android 开发中使用camera怎么实现一个人脸识别功能

CameraSurfaceView.Java

package com.centaur.camera.preview;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.ImageFormat;import android.graphics.Matrix;import android.graphics.PixelFormat;import android.graphics.Rect;import android.graphics.YuvImage;import android.hardware.Camera;import android.util.AttributeSet;import android.util.Log;import android.view.SurfaceHolder;import android.view.SurfaceView;import com.centaur.camera.camera.CameraInterface;import java.io.ByteArrayOutputStream;public class CameraSurfaceView extends SurfaceView implements SurfaceHolder.Callback, Camera.PreviewCallback{  private static final int FACENUM = 5;  private static final String TAG = "yanzi";  CameraInterface mCameraInterface;  Context mContext;  SurfaceHolder mSurfaceHolder;  private boolean isFinish;  //传输五个bitmap数组  Bitmap [] bitmaps = new Bitmap[5];  int number = 0;//作为计数器用  OnFaceCollectListener onFaceCollectListener = null;  public CameraSurfaceView(Context context, AttributeSet attrs) {    super(context, attrs);    mContext = context;    mSurfaceHolder = getHolder();    mSurfaceHolder.setFormat(PixelFormat.TRANSPARENT);//translucent半透明 transparent透明    mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);    mSurfaceHolder.addCallback(this);  }  @Override  public void surfaceCreated(SurfaceHolder surfaceHolder) {    Log.i(TAG, "surfaceCreated...");  }  @Override  public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {    Log.i(TAG, "surfaceChanged...");  }  @Override  public void surfaceDestroyed(SurfaceHolder surfaceHolder) {    Log.i(TAG, "surfaceDestroyed...");    CameraInterface.getInstance().doStopCamera();  }  public SurfaceHolder getSurfaceHolder(){    return mSurfaceHolder;  }    public static interface OnFaceCollectListener {        void OnFaceCollected(Bitmap[] bitmaps);        void OnFaceCollectStart(boolean isStart);  }    public void setOnFaceCollectListener(OnFaceCollectListener onFaceCollectListener){    if(onFaceCollectListener!=null){      this.onFaceCollectListener = onFaceCollectListener;    }  }    @Override  public void onPreviewFrame(byte[] bytes, Camera camera) {    if(number<FACENUM){      //收集      //判断监听器 开始      if(onFaceCollectListener!=null){        onFaceCollectListener.OnFaceCollectStart(true);        //有byte数组转为bitmap        bitmaps[number] = byte2bitmap(bytes,camera);        Log.d("ceshiTian","********收集了"+number+"个************");        number = number+1;        if(number==5){          Log.d("ceshiTian","********收集够5个************");          //提交          onFaceCollectListener.OnFaceCollected(bitmaps);        }      }    }else {      //不做操作      onFaceCollectListener.OnFaceCollectStart(false);      onFaceCollectListener.OnFaceCollected(null);    }  }  private Bitmap byte2bitmap(byte[] bytes, Camera camera) {    Bitmap bitmap = null;    Camera.Size size = camera.getParameters().getPreviewSize(); // 获取预览大小    final int w = size.width; // 宽度    final int h = size.height;    final YuvImage image = new YuvImage(bytes, ImageFormat.NV21, w, h,        null);    ByteArrayOutputStream os = new ByteArrayOutputStream(bytes.length);    if (!image.compressToJpeg(new Rect(0, 0, w, h), 100, os)) {      return null;    }    byte[] tmp = os.toByteArray();    bitmap = BitmapFactory.decodeByteArray(tmp, 0, tmp.length);    Matrix matrix = new Matrix();    matrix.setRotate(-90);    bitmap = Bitmap.createBitmap(bitmap,0,0,bitmap.getWidth(),bitmap.getHeight(),matrix,true);    return bitmap;  }}

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 资料下载
  • 历年真题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯