# ppnt-arcsoft-face-utils
**Repository Path**: ppnt/ppnt-arcsoft-face-utils
## Basic Information
- **Project Name**: ppnt-arcsoft-face-utils
- **Description**: 基于虹软人脸识别SDK封装的人脸识别库,自动适应linux和windows环境
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2022-04-27
- **Last Updated**: 2022-08-08
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## ppnt-arcsoft-face-utils
基于虹软人脸识别SDK封装的人脸识别库,自动适应linux和windows环境
### ppnt-arcsoft-face-utils快速入门
#### 快速入门
引入依赖
```
top.ppnt
ppnt-arcsoft-face-utils
1.0
```
复制SDK文件
将ddl文件或者so文件复制到下面的文件夹
windows:D:\\arcsoft_lib\\WIN64
linux:/opt/arcsoft_lib/LINUX64
##### 整合spring-boot
整合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 check() {
return FaceEngineUtils.check();
}
/**
* 获取人脸特征
* @param file
* @return
* @throws Exception
*/
@RequestMapping("getFaceFeature")
public FaceResult getFaceFeature(MultipartFile file) throws Exception {
File file1 = MultipartFileUtils.transferToFile(file);
return FaceEngineUtils.getFaceFeature(file1);
}
/**
* 人脸特征比对
* @param srcByte
* @param dstByte
* @return
*/
@RequestMapping("compare")
public FaceResult 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 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);
}
}
```
##### 整合jfinal
```
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;
}
```