这可能是全网仅有一篇介绍Android Camera2接口集成人脸算法的文章了~

写在前面:

说起人脸辨认,信任咱们都不会感到陌生,在咱们平算法的时刻复杂度是指什么常的作业日子中,人脸打卡、刷脸付出等等现已是运用的十分广泛了,人脸辨认也给咱们的日子带来了极大的便利。

这篇文章的意图是让咱们了解了解Android途径上人脸算法集成的根柢流程(针对运用层的集成)。信任读完这篇文章算法工程师后,咱们会觉的,原本集成人脸辨认算法也是so easy。

全网首发:Android Camera2 集成人脸辨认算法

这篇文章将针对下面几点打开介绍:

一、Android途径人脸辨认程图

二、ArcSoft人脸辨认算法sdk下apple

架构师、Camera2 API 集成 ArcSoft人脸辨认算法

一、Android途径人脸辨认流程图

人脸辨认流程图根柢如下图所示,用一句话来说便是获取camera数据,送到算法中进行辨认,最终显现辨认成果。

全网首发:Android Camera2 集成人脸辨认算法

二、ArcSoft笔记本电脑怎样连wifi人脸辨认算法sdk下载

人脸辨认算法许多,如果是高通途径,高通也是有一套人脸辨认算源码编辑器法的。我这儿挑选的是arcsoft的辨appearance认算法,这个现在是免费的,并且相对来说算法作用也还不错。

接下来咱们看下怎样去获取arcsoft的人脸辨认sdk。

1)架构师认证登录算法设计与剖析arcsoft官网ai.arcsoft.com.cn/,挑选进入开发者中心

全网首发:Android Camera2 集成人脸辨认算法

2)注册并登录开发者中心后,在开发者中心界面,咱们挑选“新建运用”,然后勾选人脸辨认功用。

如下图所示,我创立的运用是“CameraDemo”。这个界面的APP_ID 和SDK_架构KEY咱们后边代码里面需求用到。这个界面还有个“下载SDK”的按钮,点击就能够下载咱们需求的sdk demo。

全网首发:Android Camera2 集成人脸辨认算法

3)Demo下载下来后,咱们先跑下架构图模板arcsoft官方Demo看下作用。

咱们挑选人脸检测特点(视频)。
如下图所示,作用还不错,咱们能够看到辨认出来的信息里面包含了性别、年岁、是否是真人这些根柢信息。

全网首发:Android Camera2 集成人脸辨认算法

全网首发:Android Camera2 集成人脸辨认算法

三、Camera2 API 集成

经过上面的2步,咱们有没觉的集成人脸辨认仍是蛮简略的。介绍完了官方的demo,那接下来咱们源码编辑器编程猫下载看下选用Android Camera2 的api,怎样去集成arcsoft的人脸辨认算法呢。

1、如下面代码块所示,arcsoft 官方demo选用源码年代的是Camera1的api接口,设置的预览数据的回调,回调的直接便是nv21的byte[]数据,然笔记本电脑后再把byte[]数据送进去算法处理。

`private voi算法的五个特性d initCamera() {
DisplayMetAPPrics metr架构和结构ics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics)apple;

    CameraListener cameraLi算法剖析的意图是stener = new CameraListener() {
@Override
public void onCameraOpened(Camera came源码分享网ra, int cameraId, int displayOrientation, boolean isMirror) {
previewSize = camera.getParameters().getPreviewSize();
drawHelper = new DrawHelper(previewSize.width, previewSize.height, previewView.getWidth(), p源码分享网reviewView.getHeight(), displayOrientation
, cameraI架构师和程序员的区别d, isMirror, false, false);
}
@Override
pub架构师需求把握哪些常识lic void onPreview(byte[] nv21笔记本cpu天梯图, Camera camera) {
if (faceRectView != null) {
faceRectView.clearFaceInfo();
}
List<FaceInfo> face架构图模板InfoappleList = new ArrayList<&g算法工程师t;();
int code = faceEngine.detectFaces(nv21, pre架构图viewSize.width, previewSize.height, FaceEngine.CP_PAF_NV21, faceInfoList);
if (code == ErrorInfo.MOK && faceInfoList.size() > 0) {approve
code = faceEngine.p架构师薪酬一月多少rocess(nv21, previewSize.width, previewSize.height, FaceEngine.CP_PAF_NV21, faceInfoList, processMask);
if (code != ErrorInfo.MOK) {
return;
}
} else {
return;
}
List<AgeInfo&gt算法; ageI源码集市nf算法的有穷性是指oL架构师需求把握哪些常识ist = new ArrayList<>();
List<Genapp安装下载derInfo> genderInfoList = new ArrayList<>();
List<Face3DAngle> face3DAngl算法设计与剖析eList = new ArappearrayList<>(appstore);
List<LivenessInfo> faceLivenessInfoList = ne笔记本电脑w ArrayList<>();
iapplicationnt ageCode = faceEngine.getAge(ageInfoLis笔记本电脑排名前十t);
int gendeapproverCode = faceEngine.getGender(笔记genderInfoList);
int笔记 face3DAngleCode = fa架构师认证ceEngine.getFace3DAngle(face3DAngleList);
int livenessCode = faceEngine.getLivene算法的五个特性ss(faceLivenessInfoList);
// 有其间一个的错误码不为Erro架构师需求把握哪些常识rInfo.MOK,return
if ((ageCod算法与数据结构e | genderCode | face3DAngleCode | livenessCode) != ErrorInfo.MOK) {
return;
}
if (fac源码分享网eRectView != null && drawHappreciateelper != null) {
List<DrawInfo> drawInfoList = new Arr源码编辑器ayList<>();
for (int i = 0; i < faceInfoList.size(); i++) {
Log.v(TAG,"---fac笔记eInfoLAPPist.get(i)架构师认证.getRect():"+faceInfoList.get(i).gapproachetRect());
drawInfoList.add(new Dr架构图awInfo(drawHelper.adj架构师薪酬一月多少ustRect(faceInfoList.get(i).getRect()), genderInfoList.get(i).g源码本钱etGender(), ageInfoList.get(i).getAge(),笔记本电脑排名前十 faceLivenessappreciateInfoList.get(i).get源码集市Liveness(apple), RecognizeColor.COLOR_UNKNOWN, null));
}
drawHelper.draw(faceRectView, drawInfoList);
}
}
}`

2、接下来咱们要介绍架构师和程序员的区别的是运用Camera2接口,怎样集成arcsoft的人脸辨认算法。

我自己创立了个运用工程,demo源码地址也在文末会给出。算法
咱们先来看下我自己写的demo作用图:

全网首发:Android Camera2 集成人脸辨认算法

下面来讲解下代码结束的首要过程:
(不了解Camera2接口的同学,建议先找一篇关于Camera2 API的文章先approach了解下,关于算法的时刻复杂度是指什么Camera2,我自己前架构面也写过算是比较详细的文章介绍,也欢迎咱们阅览)

i、初始化imageReader

mImag架构师薪酬一月多少eReader = ImageRe算法是什么ader.newInstance(mPreviewSize.getWidth(),
mPr算法剖析的意图是eviewSize.getHeight(),ImageFormat.YUV_420_888, 2);
mImageReader.setOnImageAvailableListener(
mOnImag源码网站eAvailableListener, mBackgroundHandler);

ii、创立session的时分,把imagerReader的surface也add进去。
这样咱们就能拿到实时的视频流。

mPreviewRequestBu架构图ilder.addTarget(mIma架构是什么意思geReader.getSu算法的时刻复杂度是指什么rfAPPace());
mCameraDevice.createCaptureSession(Arrays.asList(surface, mImageReader.getSurface()),
new CameraCaptureSession.StateCallback() {

}

iii、在imageReader的实时流回调里面,咱们需求把接收到的YUV_420_888的数据先转换成nv21格式,然后再送进arcsoft的人脸检测算法中进行处理。
Camera1 接口上,设置预览数据回调后,回调的直接便是nv2架构图模板1格式的数据,相对来说会比Camera2上的处理睬简略许多。

不过Android 现在现已不再对Camera旧的架构进行维护,并且现在干流的手机选用的笔记本电脑根柢上也都是Camera2的接口。所以咱们仍是十分有必要了解把握Camera2的各种运用。源码网站

private final ImageReader.OnImageAvailableListener mOnImageAvailableListener
= new Imag算法导论eReader.OnImageAvailableListener() {

    @Override
public void onImageAvailable(ImageReader reader) {
Image image = reader.ac笔记本电脑开不了机quireLatestImage();
if(image == null){
return;
}
synchronized (mImageReade笔记本电脑性价比排行2020rLock) {
if(!mImageReaderLock.equals(1)){
Log.v(TAG, "--- image not available,just return!!!");
image.close();
return;
}
if (ImageFormat.YUV_420_888 == im源码编辑器手机版下载age.getFormat()) {
Ima架构和结构ge.Plane[] planes = image.getPlane笔记本电脑什么牌子好s();
lock.lock();
if (y == null) {
y = new byte[planes[0].getBuffer().limit() - planes[0].getBuffer().position()];
u = new byt源码之家e[pla算法nes[1].getBuffer().limit() - planes[1].getBuffer().position()];
v = new byte[planes[2].getBuffer().limit() - planes[2].getBuffer().position()];
}
if (image.getPlanes()[0].getBuffer().remaining() == y.length) {
planes[0].g算法的五个特性etBuffer().get(y);
planes[1].getBuffer().get(u);
planes[2].getBuffer架构().get(v);
if (n架构图v21 == null) {
nv21 = new架构和结构 byte[planes[0].getRowStride() * mPr源码网站eviewSize.getHeight() * 3 / 2];
}
if(nv21 != null &&a源码编辑器mp; (nv21.length != planes[0].getRowStride() * mPreviewSize.getHeight() *3/2)){
return;
}
// 回传数据是YUV422
if (y.length / u.le架构图模板ngth == 2) {
ImageUtil源码编程.yuv422ToYuv420sp(y, u, v, nv21, planes[0].getRowStride(), mPreviewSize.getHeight());
}
// 回传数据是YUV420
else if (y.length / u.length == 4) {
ImageUtil.yuv420ToYuv420sp(y算法导论, u算法导论, v, nv21, planes[0].getRowStride(), mPreviewSize.getHeight());
}
//调用Arcsoft算法,绘制人脸信息
drawFaceInfo(nv21);
}
lock.APPunlock();
}
}
image.close();
}
};

Demo 代码地址:
pan.baidu.com/s/1z44mAtkJ…

这篇文件介绍的,是针对运用层上的人脸算法集成。现在许多手机厂商,人脸算法有一部算法导论分是在hal层结束的。比如美颜算法这些,直接便是在hal层结束的了,这样处理功率会更高。针对hal层的算法集成,感兴趣同学的欢迎留言,后边的文章我会进行更新介绍。


*自己从事Android Camera相关开发已有5年,

*现在在深圳上班笔记本电脑开机黑屏没反应怎样办

*欢迎关注我的微信群众号: 小驰笔记

*期望和更多的小伙伴一同交流学习~

——– 2021.04.17 深圳 16appstore:21