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行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!