运行虹软应用套件开源代码,发现报错。查看错误信息,说的是缺少类(详细说明看下方)
咨询了下虹软小助手,表示这两个类确实是需要自己实现的
晚上加班把这个做出来了,不得不说虹软开放了应用套件,确实省去了很多研发时间,当天晚上就跑通了
下面把类实现分享在这里,给有需要的人做个参考。。
导航:
– 获取ArcFaceGo包
– 运行ArcFaceGo工程
– 安装及使用
一、获取ArcFaceGo包
进入虹软ArcFaceGo官方页面https://ai.arcsoft.com.cn/product/arcfacego.html,按照步骤获取ArcFaceGo_Source_3.1.1.zip
,其中包含ArcFaceGo源码及相关文档信息。
二、运行ArcFaceGo工程
2.1 获取工程
解压ArcFaceGo_Source_3.1.1.zip
,解压后进入sourcecode
目录,解压其中的ArcFaceGo.zip
获取工程
2.2 编译工程
2.2.1 查看编译报错
使用Android Studio打开工程,并执行Build
,会提示报错,有两个类里有类不存在,需要自己实现:
2.2.2 实现Camera1Engine类
<font size="2">package com.arcsoft.arcfacesingle.libutil;
import android.graphics.ImageFormat;
import android.graphics.SurfaceTexture;
import android.hardware.Camera;
import android.util.Pair;
import com.arcsoft.asg.libcommon.contract.ICameraEngine;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.List;
/**
* ICameraEngine的实现
*/
public class Camera1Engine extends ICameraEngine {
private static final int COUNT_CAMERA_ONE = 1;
private static final int COUNT_CAMERA_TWO = 2;
private Camera camera;
private boolean usePreAlloc;
@Override
public void setUsePreAlloc(boolean usePreAlloc) {
this.usePreAlloc = usePreAlloc;
}
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
super.onPreviewFrame(data, camera);
if (usePreAlloc) {
camera.addCallbackBuffer(data);
}
}
@Override
public void startCamera(SurfaceTexture surfaceTexture, int cameraId, int previewRotation, int previewWidth,
int previewHeight, int bufferCount, int bufferSize) throws IOException {
camera = Camera.open(cameraId);
camera.setDisplayOrientation(previewRotation);
Camera.Parameters parameters = camera.getParameters();
parameters.setPreviewFormat(ImageFormat.NV21);
parameters.setPreviewSize(previewWidth, previewHeight);
List<String> supportedFocusModes = parameters.getSupportedFocusModes();
if (supportedFocusModes != null && supportedFocusModes.size() > 0) {
if (supportedFocusModes.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE)) {
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
} else if (supportedFocusModes.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO)) {
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
} else if (supportedFocusModes.contains(Camera.Parameters.FOCUS_MODE_AUTO)) {
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
}
}
camera.setParameters(parameters);
camera.setPreviewTexture(surfaceTexture);
if (usePreAlloc) {
for (int i = 0; i < bufferCount; i++) {
camera.addCallbackBuffer(new byte[bufferSize]);
}
camera.setPreviewCallbackWithBuffer(this);
} else {
camera.setPreviewCallback(this);
}
camera.startPreview();
}
@Override
public void setPreviewTexture(SurfaceTexture surfaceTexture) {
try {
if (camera != null) {
camera.setPreviewTexture(surfaceTexture);
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void releaseCamera() {
if (camera != null) {
if (usePreAlloc) {
camera.setPreviewCallbackWithBuffer(null);
} else {
camera.setPreviewCallback(null);
}
camera.stopPreview();
camera.release();
camera = null;
}
}
@Override
public List<Integer> getCameraPositionList() {
List<Integer> cameraPosList = new ArrayList<>();
int cameraPosBack = Camera.CameraInfo.CAMERA_FACING_BACK;
int cameraPosFront = Camera.CameraInfo.CAMERA_FACING_FRONT;
int cameraCount = Camera.getNumberOfCameras();
if (cameraCount == COUNT_CAMERA_ONE) {
cameraPosList.add(cameraPosBack);
} else if (cameraCount >= COUNT_CAMERA_TWO) {
cameraPosList.add(cameraPosBack);
cameraPosList.add(cameraPosFront);
}
return cameraPosList;
}
@Override
public List<Pair<Integer, Integer>> getCameraPreviewSizeList() {
List<Camera.Size> commonSizeList = new ArrayList<>();
int cameraPosBack = Camera.CameraInfo.CAMERA_FACING_BACK;
int cameraPosFront = Camera.CameraInfo.CAMERA_FACING_FRONT;
int cameraCount = Camera.getNumberOfCameras();
if (cameraCount == COUNT_CAMERA_ONE) {
try {
Camera backCamera = Camera.open(cameraPosBack);
commonSizeList = backCamera.getParameters().getSupportedPreviewSizes();
backCamera.release();
} catch (Exception e) {
e.printStackTrace();
}
} else if (cameraCount >= COUNT_CAMERA_TWO) {
List<Camera.Size> backSizeList;
try {
Camera.CameraInfo cameraInfo2 = new Camera.CameraInfo();
Camera.getCameraInfo(cameraPosBack, cameraInfo2);
Camera backCamera = Camera.open(cameraPosBack);
backSizeList = backCamera.getParameters().getSupportedPreviewSizes();
backCamera.release();
} catch (Exception e) {
backSizeList = new ArrayList<>();