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

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() {

@Override

public 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);

最后

我见过很多技术leader在面试的时候,遇到处于迷茫期的大龄程序员,比面试官年龄都大。这些人有一些共同特征:可能工作了5、6年,还是每天重复给业务部门写代码,工作内容的重复性比较高,没有什么技术含量的工作。问到这些人的职业规划时,他们也没有太多想法。

其实30岁到40岁是一个人职业发展的黄金阶段,一定要在业务范围内的扩张,技术广度和深度提升上有自己的计划,才有助于在职业发展上有持续的发展路径,而不至于停滞不前。

不断奔跑,你就知道学习的意义所在!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值