基于虹软人脸识别SDK封装的人脸识别库,自动适应linux和windows环境
引入依赖
<dependency>
<groupId>top.ppnt</groupId>
<artifactId>ppnt-arcsoft-face-utils</artifactId>
<version>1.0</version>
</dependency>
复制SDK文件
将ddl文件或者so文件复制到下面的文件夹
windows:D:\arcsoft_lib\WIN64
linux:/opt/arcsoft_lib/LINUX64
整合Controller示例如下 调用FaceEngineUtils,FaceEngineUtil会自动匹配windows环境和linux环境
import java.io.File;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import com.arcsoft.face.FaceFeature;
import com.arcsoft.face.FaceSimilar;
import com.smu.recognize.utils.MultipartFileUtils;
import top.ppnt.arcsoft.face.utils.FaceEngineUtils;
import top.ppnt.arcsoft.face.utils.FaceResult;
/**
* @author create by Ping E Lee on 2022年4月4日 下午7:54:15
*
*/
@RestController
@RequestMapping("face/engine")
public class FaceController {
/**
* 检查服务是否有效
* @return
*/
@RequestMapping("check")
public FaceResult<Void> check() {
return FaceEngineUtils.check();
}
/**
* 获取人脸特征
* @param file
* @return
* @throws Exception
*/
@RequestMapping("getFaceFeature")
public FaceResult<FaceFeature> getFaceFeature(MultipartFile file) throws Exception {
File file1 = MultipartFileUtils.transferToFile(file);
return FaceEngineUtils.getFaceFeature(file1);
}
/**
* 人脸特征比对
* @param srcByte
* @param dstByte
* @return
*/
@RequestMapping("compare")
public FaceResult<FaceSimilar> compare(byte[] srcByte, byte[] dstByte) {
FaceFeature src = new FaceFeature(srcByte);
FaceFeature dst = new FaceFeature(dstByte);
FaceSimilar faceSimilar = FaceEngineUtils.compare(src, dst);
return new FaceResult<>(faceSimilar);
}
/**
* 人脸特征比对
*/
@RequestMapping("compare")
public FaceResult<FaceSimilar> compareString(String srcStr, String dstStr) {
byte[] srcByte = org.apache.commons.codec.binary.Base64.decodeBase64(srcStr);
byte[] dstByte = org.apache.commons.codec.binary.Base64.decodeBase64(dstStr);
FaceFeature src = new FaceFeature(srcByte);
FaceFeature dst = new FaceFeature(dstByte);
FaceSimilar faceSimilar = FaceEngineUtils.compare(src, dst);
return new FaceResult<>(faceSimilar);
}
}
package top.ppnt.modules.asrsoft.face.controller;
import com.arcsoft.face.FaceFeature;
import com.arcsoft.face.FaceSimilar;
import com.jfinal.core.Controller;
import com.jfinal.core.Path;
import com.jfinal.upload.UploadFile;
import top.ppnt.arcsoft.face.utils.FaceEngineUtils;
import top.ppnt.arcsoft.face.utils.FaceResult;
/**
* @author Ping E Lee
*
*/
@Path("api/arcsoft/face")
public class ArcSoftFaceController extends Controller {
/**
* 检查服务是否有效
* @return
*/
public void check() {
renderJson(FaceEngineUtils.check());
}
/**
* 获取人脸特征
* @param file
* @return
* @throws Exception
*/
public void getFaceFeature() throws Exception {
UploadFile uploadFile = getFile();
renderJson(FaceEngineUtils.getFaceFeature(uploadFile.getFile()));
}
/**
* 人脸特征比对
* @param srcByte
* @param dstByte
* @return
*/
public void compare(byte[] srcByte, byte[] dstByte) {
FaceFeature src = new FaceFeature(srcByte);
FaceFeature dst = new FaceFeature(dstByte);
FaceSimilar faceSimilar = FaceEngineUtils.compare(src, dst);
renderJson(new FaceResult<>(faceSimilar));
}
/**
* 人脸特征比对
*/
public void compareString(String srcStr, String dstStr) {
byte[] srcByte = org.apache.commons.codec.binary.Base64.decodeBase64(srcStr);
byte[] dstByte = org.apache.commons.codec.binary.Base64.decodeBase64(dstStr);
FaceFeature src = new FaceFeature(srcByte);
FaceFeature dst = new FaceFeature(dstByte);
FaceSimilar faceSimilar = FaceEngineUtils.compare(src, dst);
renderJson(new FaceResult<>(faceSimilar));
}
}
使用FaceEngineUtils初始化引擎,测试代码如下
private FaceEngine faceEngine = new FaceEngine(FaceEngineUtils.getLibPath());
//构造方法
{
EngineConfiguration engineConfiguration = getFaceConfigraution();
// 获取FaceEngine
int activeCode = FaceEngineUtils.activteEngine(faceEngine);
if (activeCode != ErrorInfo.MOK.getValue() && activeCode != ErrorInfo.MERR_ASF_ALREADY_ACTIVATED.getValue()) {
System.out.println("引擎激活失败");
} else {
System.out.println("引擎激活成功");
}
int initCode = faceEngine.init(engineConfiguration);
System.out.println(initCode);
if (initCode != ErrorInfo.MOK.getValue()) {
System.out.println("初始化引擎失败");
}
}
/**
* 获取人脸配置信息
* @return
*/
private EngineConfiguration getFaceConfigraution() {
// 引擎配置
EngineConfiguration engineConfiguration = new EngineConfiguration();
// 检测模式 图片/视频,这里选择的是图片模式
engineConfiguration.setDetectMode(DetectMode.ASF_DETECT_MODE_IMAGE);
// 人脸检测角度
engineConfiguration.setDetectFaceOrientPriority(DetectOrient.ASF_OP_0_ONLY);
// 功能配置
FunctionConfiguration functionConfiguration = new FunctionConfiguration();
// 是否支持年龄检测
functionConfiguration.setSupportAge(true);
// 是否支持3D人脸检测
functionConfiguration.setSupportFace3dAngle(true);
// 是否支持人脸检测
functionConfiguration.setSupportFaceDetect(true);
// 是否支持人脸识别
functionConfiguration.setSupportFaceRecognition(true);
// 是否支持性别检测
functionConfiguration.setSupportGender(true);
// 是否支持RGB活体检测
functionConfiguration.setSupportLiveness(true);
// 是否支持RGB活体检测
functionConfiguration.setSupportIRLiveness(true);
// 设置引擎功能配置
engineConfiguration.setFunctionConfiguration(functionConfiguration);
// 初始化引擎
return engineConfiguration;
}