Android 活体人脸实时采集,百度、虹软

 

 百度现在功能较少——使用虹软,方便

 虹软官网:https://ai.arcsoft.com.cn/ucenter/resource/build/index.html

申请应用,下载SDK即可

 

 

 虹软已修改好的,可注册人脸,人脸验证成功——登陆的demo:https://download.csdn.net/download/meixi_android/18434756

1、首先去百度人脸识别创建应用

https://console.bce.baidu.com/ai/?_=1553067234412&fromai=1#/ai/face/client/index

 

 2、下载SDK

https://download.csdn.net/download/meixi_android/11041930

 

3、导入module

 

 4、人脸实时采集实现类

 /*** 绘制人脸框。** @param model 追踪到的人脸*/private void showFrame(FaceFilter.TrackedModel model) {Canvas canvas = mTextureView.lockCanvas();if (canvas == null) {return;}// 清空canvascanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);if (model != null) {FaceInfo info = model.getInfo();model.getImageFrame().retain();RectF rectCenter = new RectF(info.mCenter_x - 2 - info.mWidth * 3 / 5,info.mCenter_y - 2 - info.mWidth * 3 / 5,info.mCenter_x + 2 + info.mWidth * 3 / 5,info.mCenter_y + 2 + info.mWidth * 3 / 5);previewView.mapFromOriginalRect(rectCenter);// 绘制框paint.setStrokeWidth(mRound);paint.setAntiAlias(true);canvas.drawRect(rectCenter, paint);if (model.meetCriteria()) {// 符合检测要求,绘制绿框paint.setColor(Color.GREEN);}mFrameIndex++;Log.d("lgq", "add face index is:" + mFrameIndex);if (mFrameIndex >= 10) {final Bitmap face = model.cropFace();//  final Bitmap face =ImageUtil.bitmapFromArgb(model.getImageFrame());if (face != null) {int size = mList.size();// 释放一些,以防止太多if (size >= 6) {Bitmap bmp = mList.get(size - 6);if (bmp != null) {bmp.recycle();Log.d("lgq", "recycle size is:" + size);bmp = null;}}mList.add(face);Log.d("lgq", "add face ok");mHandler.postDelayed(scrollRunnable, 100);mFrameIndex = 0;faceDetectManager.stop();}}}mTextureView.unlockCanvasAndPost(canvas);}Runnable scrollRunnable = new Runnable() {@Overridepublic void run() {int count = mRecyAdapter.getItemCount();int curIndex = count - 1;mRecyclerview.scrollToPosition(curIndex);mRecyAdapter.setDatas(mList);
//            mRecyclerview.invalidate();mRecyAdapter.notifyDataSetChanged();//  Log.d("lgq", "in runnuable data size is:" + mList.size());}};/*** 初始化recycleView画截图得到的人脸图像*/private void initRecy() {mRecyAdapter = new RecyAdapter(this);mLayoutManager = new LinearLayoutManager(DetectActivity.this,LinearLayoutManager.HORIZONTAL, true);mRecyclerview.setLayoutManager(mLayoutManager);
//        mRecyclerview.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.HORIZONTAL));mLayoutManager.setStackFromEnd(true);mRecyclerview.setAdapter(mRecyAdapter);}private void setCameraType(CameraImageSource cameraImageSource) {// TODO 选择使用前置摄像头cameraImageSource.getCameraControl().setCameraFacing(ICameraControl.CAMERA_FACING_FRONT);// TODO 选择使用usb摄像头
//          cameraImageSource.getCameraControl().setCameraFacing(ICameraControl.CAMERA_USB);// 如果不设置,人脸框会镜像,显示不准//  previewView.getTextureView().setScaleX(-1);// TODO 选择使用后置摄像头
//         cameraImageSource.getCameraControl().setCameraFacing(ICameraControl.CAMERA_FACING_BACK);// previewView.getTextureView().setScaleX(-1);}

 

demo链接:https://download.csdn.net/download/meixi_android/11041930

在线回复bug:qq1085220040

 

运行效果

 

优化采集速度代码:

// 设置回调,回调人脸检测结果。
faceDetectManager.setOnFaceDetectListener((retCode, infos, frame) -> {LogPlus.e("###人脸检测结果:" + retCode + ",infos:" + GsonUtil.getInstance().parseObjToJsonStr(infos));// TODO 显示检测的图片。用于调试,如果人脸sdk检测的人脸需要朝上,可以通过该图片判断//final Bitmap bitmap = Bitmap.createBitmap(frame.getArgb(), frame.getWidth(), frame.getHeight(), Bitmap.Config.ARGB_8888);if (infos == null) {// null表示,没有人脸。LogPlus.e("###没有检测到人脸");setTips("没有检测到人脸");Bitmap faceBitmap = Bitmap.createBitmap(frame.getArgb(), frame.getWidth(), frame.getHeight(), Bitmap.Config.ARGB_8888);upload(faceBitmap);} else {/*有人脸*/setTips("人脸上传...");Bitmap faceBitmap = FaceCropper.getFace(frame.getArgb(), infos[0], frame.getWidth());upload(faceBitmap);}
});

 在线交流人脸bug:QQ1085220040

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/414652.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 最新左右可见上下页的banner实现demo

运行效果,可见上下页样式 demo链接:https://download.csdn.net/download/meixi_android/11045703 实现方法 首先添加必要依赖 implementation (com.android.support:recyclerview-v7:27.0.2){force true } implementation (com.android.support:cardv…

WIN10下微信崩溃(已经是最新版)的解决方法

问题症状:WIN10下运行最新版微信(CrashVersion1644560715) ---------------------------微信运行错误---------------------------你的微信崩溃次数较多,建议使用最新版本,点击"确定"到官网(http://pc.weixi…

o.s.b.d.LoggingFailureAnalysisReporter

1、错误信息 *************************** APPLICATION FAILED TO START ***************************Description:Field userMapper in club.sscai.userservice.user.service.UserService required a bean of type club.sscai.userservice.user.mapper.UserMapper that could …

前端学习(2733):重读vue电商网站43之使用 lodash 中 cloneDeep(obj) 来实现深拷贝

lodash 官方文档传送门 Using npm Js $ npm i -g npm $ npm i --save lodash_.cloneDeep(value) 使用 项目中使用 cloneDeep 需求:由于 addForm 中商品所属的分类数组 goods_cat在商品分类模块需要使用 v-model 进行双向绑定数组形式,而我们调用添加商品…

Spring Data JPA框架

1、前言 扔一个 spring data jpa 的代码,可运行,后续补充博客内容。 环境:eclipse tomcat8 2、部分截图 3、源码 https://gitee.com/niceyoo/jpa-demo 4、sql 既然都是 spring data jpa ,还要啥数据库呀,自己创建一个…

jdk1.7 String switch的实现

对于int的switch,jvm是用tableswitch和lookupswitch来实现的,jdk1.7 switch增加了对string的支持,那么底层是如何实现的呢?是否增加了新的指令或是否给某些指令增加了新的含义? 看这样一个程序: Java代码 …

Android 多线程实现异步执行demo,线程池使用demo

方法1: 1、常见Runnable对象设置同步代码run运行体 class AutoSaleTicket implements Runnable {private int ticket 20;public void run() {while (true) {// 循环是指线程不停的去卖票// 当操作的是共享数据时,用同步代码块进行包围起来,这样在执行时,只能有一…

Mvc5 控制器,视图简单说明

本系列会比Mvc4更详细。Mvc4记录或没记录的东西这里也会提到。 控制器 自动装配: 一般自动装配对于添加的时候比较好用 视图: 控制器返回的视图,其实就是一些静态的HTML。动态性不好,从控制器传递少量数据,最简单使用…

前端学习(2734):重读vue电商网站44之使用 echarts

echarts 官方文档传送门 根据官方文档示例&#xff0c;我们先展示测试数据。 Javascript <template><div><!-- 面包屑导航区域 --><el-breadcrumb separator"/"><el-breadcrumb-item :to"{ path: /home }">首页</el-bre…

No fallback instance of type class found for feign client user-service(转)

No fallback instance of type class found for feign client user-service&#xff08;转&#xff09; 1、错误日志 在 feign 开启熔断&#xff0c;配置 fallback 类&#xff0c;实现当前接口的实现类时&#xff0c;报错信息如下&#xff1a; Error starting ApplicationCont…

Redis在windows下安装过程

https://www.cnblogs.com/M-LittleBird/p/5902850.html 一、下载windows版本的Redis 去官网找了很久&#xff0c;发现原来在官网上可以下载的windows版本的&#xff0c;现在官网以及没有下载地址&#xff0c;只能在github上下载&#xff0c;官网只提供linux版本的下载 官网下载…

前端学习(2735):重读vue电商网站45之项目优化上线

优化Vue项目&#xff0c;部署Vue项目 项目优化 添加进度条 nprogress 进度条官方文档传送门 打开 vue-ui 面板&#xff0c;选择依赖&#xff0c;输入 nprogress 进行安装相关依赖。 npm Javascript npm install --save nprogress在 main.js 入口文件中&#xff0c;进行相关…

Push rejected: Push to origin/master was rejected

Push rejected: Push to origin/master was rejected 1、错误日志 23:04 Maven projects need to be imported: Import Changes Enable Auto-Import23:05 4 files committed: 初始化项目23:06 Push rejected: Push to origin/master was rejected23:07 2 files …

前端学习(2736):重读vue电商网站46之执行build 时报错

Error: No module factory available for dependency type: CssDependency 解决办法&#xff1a; 参考&#xff1a;解决webpack打包报错 No module factory available for dependency type: CssDependency 在执行 build 命令期间移除所有的 console babel-plugin-transform…

@RequestParam @PathVariable

RequestParam PathVariable 1、Request参数 在访问各种各样网站时&#xff0c;经常会发现网站的URL的最后一部分形如&#xff1a;&#xff1f;xxxxyyyy&zzzzwwww。这就是HTTP协议中的Request参数&#xff0c;它有什么用呢&#xff1f;先来看一个例子&#xff1a; 在知乎中…

蓄水池抽样算法 Reservoir Sampling

2018-03-05 14:06:40 问题描述&#xff1a;给出一个数据流&#xff0c;这个数据流的长度很大或者未知。并且对该数据流中数据只能访问一次。请写出一个随机选择算法&#xff0c;使得数据流中所有数据被选中的概率相等。 问题求解&#xff1a;如果是长度已知或者有限的问题&…

Android okhttp3使用实例,OKhttp设置请求超时时间,okgo使用demo,SSL证书验证

SSL证书验证 rootca证书资源 调用 //信任所有证书 HTTPSCerUtils.setTrustAllCertificate(okHttpBuilder); //信任raw资源目录下的证书 HTTPSCerUtils.setCertificate(context, okHttpBuilder, R.raw.rootca); //传入证书…