CameraFace

Android Camera 内置人脸识别的Demo

通过Android源生API支持的人脸识别FaceDetection,获取到脸部矩形坐标,左右眼坐标,嘴坐标通过View动态实摄像头实时装饰功能

主要方法

//人脸识别设置监听

mCamera.setFaceDetectionListener(mFaceDetectionListener);

//人脸识别监听启动

mCamera.startFaceDetection();

class FaceDetectionListener implements Camera.FaceDetectionListener{

@Override

public void onFaceDetection(Camera.Face[] faces, Camera camera) {

Message m = mHandler.obtainMessage();

m.what = MainActivity.AC_DRAW;

if (null == faces || faces.length == 0) {

m.obj = null;

Log.d("face", "onFaceDetection : There is no face found.");

} else {

Log.d("face", "onFaceDetection : face found.");

m.obj = faces;

for (int i = 0; i < faces.length; i++) {

Camera.Face face = faces[i];

if (face == null)return;

Rect rect = face.rect;

Log.i("face","face.score="+face.score);

Log.i("face","rect.left="+rect.left+"\nrect.top="+rect.top+"\nrect.right="+rect.right+"\nrect.bottom="+rect.bottom);

Log.i("face","id="+face.id+" \nface.leftEye.x="+face.leftEye.x+" \nface.leftEye.y"+face.leftEye.y+" \nface.mouth.x="+face.mouth.x+" \nface.mouth.y="+face.mouth.y);

}

}

m.sendToTarget();

}

}

//faces 识别出的人脸特征数据

public static class Face {

public int id;//对应id

public Point leftEye;//左眼

public Point mouth;//嘴

public Rect rect;//脸部坐标

public Point rightEye;//右眼

public int score;//识别分数

}

//绘制对应的装饰图片

protected void onDraw(Canvas canvas) {

if (mFaces == null || mFaces.length < 1) {

return;

}

boolean isMirror = false;

// int Id =CameraInterface.getInstance().getCameraId();

// if(Id == CameraInfo.CAMERA_FACING_BACK){

// isMirror = false; //后置Camera无需mirror

// }else if(Id == CameraInfo.CAMERA_FACING_FRONT){

isMirror = true; //前置Camera需要mirror

// }

// Util.prepareMatrix(mMatrix, isMirror, 90, mCameraW, mCameraH);

Util.prepareMatrix(mMatrix, isMirror, 90, getWidth(), getHeight());

canvas.save();

mMatrix.postRotate(0); //Matrix.postRotate默认是顺时针

canvas.rotate(-0); //Canvas.rotate()默认是逆时针

if (mFaces == null){

mFaceIndicatorDraw.draw(canvas);

mLeftEyeDraw.draw(canvas);

mRightEyeDraw.draw(canvas);

mMouthDraw.draw(canvas);

}else {

for (int i = 0; i < mFaces.length; i++) {

Camera.Face face = mFaces[i];

mRect.set(face.rect);

mMatrix.mapRect(mRect);//计算出在父布局的真是坐标

//识别的Rect 系数,使装饰图片根据人脸与摄像头的距离放大或者缩小

float dx = mRect.bottom - mRect.top;

if (isHeadShow){

Log.i(TAG, "FaceView dx=" +dx );

float h = dx * 0.4f;

mHeadDraw.setBounds(Math.round(mRect.left), Math.round(mRect.top - h),

Math.round(mRect.right), Math.round(mRect.bottom - h));

mHeadDraw.draw(canvas);

}

if (isFaceIndicatorShow){

mFaceIndicatorDraw.setBounds(Math.round(mRect.left), Math.round(mRect.top),

Math.round(mRect.right), Math.round(mRect.bottom));

mFaceIndicatorDraw.draw(canvas);

}

if (isLeftEyeShow){

float[] leftEye = {face.leftEye.x, face.leftEye.y};

mMatrix.mapPoints(leftEye);//计算出在父布局的真是坐标

float h = dx * 0.1f;

float w = dx * 0.15f;

mLeftEyeDraw.setBounds(Math.round(leftEye[0]-w), Math.round(leftEye[1]-h),

Math.round(leftEye[0]+w), Math.round(leftEye[1]+h));

mLeftEyeDraw.draw(canvas);

}

if (isRightEyeShow){

float[] rightEye = {face.rightEye.x, face.rightEye.y};

float w = dx * 0.15f;

float h = dx * 0.1f;

mMatrix.mapPoints(rightEye);//计算出在父布局的真是坐标

mRightEyeDraw.setBounds(Math.round(rightEye[0]-w), Math.round(rightEye[1]-h),

Math.round(rightEye[0]+w), Math.round(rightEye[1]+h));

mRightEyeDraw.draw(canvas);

}

if (isMouthShow){

float[] mouthP = {face.mouth.x, face.mouth.y};

mMatrix.mapPoints(mouthP);//计算出在父布局的真是坐标

float w = dx * 0.15f;

float h = dx * 0.2f;

mMouthDraw.setBounds(Math.round(mouthP[0]-w), Math.round(mouthP[1]-h),

Math.round(mouthP[0]+w), Math.round(mouthP[1]));

mMouthDraw.draw(canvas);

}

}

}

canvas.restore();

super.onDraw(canvas);

}

android 人脸识别demo,Android Camera 内置人脸识别的Demo相关推荐

  1. 网页实现人脸识别PHP,奇思妙想-用HTML5进行人脸识别

    今天发现一篇文章写的很有趣,叫你如何使用HTML5进行人脸识别.在网页内进行人脸识别,很好很强大! "现代Web"不断发展出不少有趣的API,但你并不会在大多数项目中使用到所有的内 ...

  2. android 表情识别,基于Android平台的人脸表情识别系统的设计与实现

    摘要: 随着目前移动设备硬件技术的不断发展,其性能与PC的差距越来越小,这使得在嵌入式平台上进行图像处理成为了可能.目前使用最广泛的是基于Android系统的嵌入式平台,与之相关的图像类应用需求也渐渐 ...

  3. face.evoLVe:高性能人脸识别开源库,内附高能模型

    点击我爱计算机视觉标星,更快获取CVML新技术 目前人脸识别开源项目众多,但真正能方便快捷拿来就用.性能指标业界领先的开源库并不多,而最近刚刚开源的face.evoLVe绝对是不容忽视的力量. 项目地 ...

  4. 虹软人脸识别SDK接入Milvus实现海量人脸快速检索

    虹软人脸识别SDK接入Milvus实现海量人脸快速检索 背景 虹软SDK及Milvus简介 开发环境 虹软人脸识别SDK使用简介 Milvus环境搭建 快速检索实现 人脸识别流程简介 快速检索 虹软S ...

  5. 【人脸识别】基于dlib库实现人脸特征值提取

    一.Dlib库介绍与安装 1. Dlib库简介 Dlib库是一个机器学习的开源库,包含了机器学习的很多算法,使用起来很方便,直接包含头文件即可,并且不依赖于其他库(自带图像编解码库源码).Dlib可以 ...

  6. java人脸识别_自从加了PC人脸识别登录功能,网站立马显得高大上

    之前不是做了个开源项目嘛,在做完GitHub登录后,想着再显得有逼格一点,说要再加个人脸识别登录,就我这佛系的开发进度,过了一周总算是抽时间安排上了. 源码在文末 其实最近对写文章有点小抵触,写的东西 ...

  7. 人脸识别代码_10行代码实现人脸识别

    什么是人脸识别 人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术.用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行脸部识别的一系列相关技术 ...

  8. Python人脸识别教程 - 基于Python的开源人脸识别库:离线识别率高达99.38%

    Python人脸识别教程 - 基于Python的开源人脸识别库:离线识别率高达99.38% 仅用 Python 和命令行就可以实现人脸识别的库开源了.该库使用 dlib 顶尖的深度学习人脸识别技术构建 ...

  9. 人脸识别接口_DS-K5603-Z 海康威视人员通道人脸识别组件 1万人脸库 10.1英寸LCD触摸显示屏_DS-K5603-Z_DS-K5603-Z...

    DS-K5603-Z 海康威视人员通道人脸识别组件 英寸LCD触摸显示屏 支持10000人脸库 支持人脸识别.刷卡或相互组合的识别方式,1:1比对时间≤1S/人,1:N比对时间≤人 DS-K5603- ...

最新文章

  1. 2021-07-01带Left Join的SQL语句的执行顺序
  2. shell操作典型案例--FTP操作
  3. 《开源安全运维平台OSSIM最佳实践》实验环境下载
  4. 文件压缩和文件打包命令
  5. C++中的4个类型转换关键字
  6. Java高级特性 第10节 IDEA和Eclipse整合JUnit测试框架
  7. HANA report creation implementation go through
  8. [转载] boost python numpy_boost.python 与 boost.numpy安装的一些注意事项
  9. 动画图解:十大经典排序算法动画与解析,看我就够了(配代码完全版)
  10. KEIL MDK的安装(包含HAL库)
  11. Java Map是否有序?
  12. win10计算机管理删除卷,win10系统删除卷或驱动器分区的方法
  13. min-height是什么意思?
  14. Classic Shell 后继者之 Classic Start
  15. Java实现Zoho Mail 发送邮件,使用hutool工具类。
  16. C++图书管理查询系统
  17. ADI Blackfin DSP处理器-BF533的开发详解62:DSP控制ADXL345三轴加速度传感器-贪食蛇游戏(含源码)
  18. 西游记中孙悟空的家业历史
  19. 【万字长文】——作者底层逻辑辨析【自组织场景宣言】,拉开未来序幕!
  20. 30句感悟人生的格言名言

热门文章

  1. 微信支付接口参数规定
  2. PM_03 立项管理
  3. Unity - URP实现2D的投影
  4. 2022人民网算法赛:微博话题识别任务(ERNIE文本分类)_副本
  5. Image Matting(抠图)
  6. fork函数创建子进程僵尸进程孤儿进程详讲
  7. 初中计算机所有知识,初中信息技术知识点大全
  8. airpods二代圆点按钮是啥_AirPods都出第二代了,你还在用25块的廉价保护壳吗?...
  9. 人力资源管理难?看看这些大厂是怎么做的!附数据分析模板
  10. 基于java婚纱摄影网站系统(java毕业设计)