这篇文章将为大家详细讲解有关在Android 开发中使用camera怎么实现一个人脸识别功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
Android camera实时预览 实时处理,面部认证。
预览操作是网友共享的代码,我在继承SurfaceView 的CameraSurfaceView 中加入了帧监听事件,每次预览监听前五个数据帧,在处理做一个面部识别。
先看目录关系
- 自定义控件CameraSurfaceView.java
- 自定义接口方法CameraInterface.java
- CameraActivity预览界面。
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
软考中级精品资料免费领
- 历年真题答案解析
- 备考技巧名师总结
- 高频考点精准押题
- 资料下载
- 历年真题
193.9 KB下载数265
191.63 KB下载数245
143.91 KB下载数1142
183.71 KB下载数642
644.84 KB下载数2755
相关文章
发现更多好内容猜你喜欢
AI推送时光机在Android 开发中使用camera怎么实现一个人脸识别功能
后端开发2023-05-31
怎么在python中使用LBPH实现人脸识别
后端开发2023-06-14
使用python怎么实现一个人脸识别打卡系统
后端开发2023-06-14
怎么在Android中利用orc实现一个文字识别功能
后端开发2023-05-31
怎么在Android应用中实现一个手势操作识别功能
后端开发2023-05-31
在Android 开发中使用Activity怎么实现一个隐式跳转功能
后端开发2023-05-31
怎么在HTML5中使用tracking.js实现一个刷脸支付功能
后端开发2023-06-09
Android中怎么实现一个图片文字识别功能
后端开发2023-06-20
怎么在C++中使用opencv实现一个车道线识别功能
后端开发2023-06-06
Android开发中怎么实现一个分享功能
后端开发2023-05-31
怎么在Android开发中实现一个正则匹配功能
后端开发2023-05-31
Android开发中怎么实现一个应用调试功能
后端开发2023-05-31
在Android开发中利用ViewPager实现一个轮播功能
后端开发2023-05-31
在Android开发中利用MediaRecorder实现一个录音功能
后端开发2023-05-31
Android开发中使用PHP服务器怎么实现一个登录功能
后端开发2023-05-31
Android开发中怎么实现一个手势密码功能
后端开发2023-05-31
Android开发中怎么实现一个静默安装功能
后端开发2023-05-31
Android开发中怎么实现一个图片下载功能
后端开发2023-05-31
Android开发中怎么实现一个图片上传功能
后端开发2023-05-31
Android开发中怎么在App中实现一个内语言切换功能
后端开发2023-05-31
咦!没有更多了?去看看其它编程学习网 内容吧