Browse Source

狗强

master
吴远 7 months ago
parent
commit
acdc58ef49
  1. 2
      yq-admin/src/main/resources/application-druid.yml
  2. 20
      yq-admin/src/main/resources/application.yml
  3. 2
      yq-admin/src/main/resources/logback.xml
  4. BIN
      yq-common/libs/arcsoft-sdk-face-3.0.0.0.jar
  5. 21
      yq-common/pom.xml
  6. 107
      yq-common/src/main/java/yq/common/arcsoft/FaceEngineTest.java
  7. 157
      yq-common/src/main/java/yq/common/utils/FaceEnginUtil.java

2
yq-admin/src/main/resources/application-druid.yml

@ -6,7 +6,7 @@ spring:
druid: druid:
# 主库数据源 # 主库数据源
master: master:
url: jdbc:mysql://localhost:3306/sys?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 url: jdbc:mysql://localhost:3307/mine?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root username: root
password: 123456 password: 123456
# 从库数据源 # 从库数据源

20
yq-admin/src/main/resources/application.yml

@ -9,7 +9,7 @@ ruoyi:
# 实例演示开关 # 实例演示开关
demoEnabled: true demoEnabled: true
# 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath) # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
profile: G:/yq/uploadPath profile: D:/yq/uploadPath
# 获取ip地址开关 # 获取ip地址开关
addressEnabled: false addressEnabled: false
# 验证码类型 math 数字计算 char 字符验证 # 验证码类型 math 数字计算 char 字符验证
@ -18,7 +18,7 @@ ruoyi:
# 开发环境配置 # 开发环境配置
server: server:
# 服务器的HTTP端口,默认为8080 # 服务器的HTTP端口,默认为8080
port: 8080 port: 1111
servlet: servlet:
# 应用的访问路径 # 应用的访问路径
context-path: / context-path: /
@ -68,15 +68,6 @@ spring:
restart: restart:
# 热部署开关 # 热部署开关
enabled: true enabled: true
mqtt:
username: adminRQ # 用户名
password: yongqiang666 # 密码
hostUrl: tcp://106.13.50.125:1883 # tcp://ip:端口
clientId: ${random.int} # 客户端id
defaultTopic: test # 订阅主题
timeout: 100 # 超时时间 (单位:秒)
keepalive: 60 # 心跳 (单位:秒)
enabled: true # 是否使用mqtt功能
# redis 配置 # redis 配置
redis: redis:
@ -87,7 +78,7 @@ spring:
# 数据库索引 # 数据库索引
database: 0 database: 0
# 密码 # 密码
password: password: 123456
# 连接超时时间 # 连接超时时间
timeout: 10s timeout: 10s
lettuce: lettuce:
@ -140,3 +131,8 @@ xss:
excludes: /system/notice excludes: /system/notice
# 匹配链接 # 匹配链接
urlPatterns: /system/*,/monitor/*,/tool/* urlPatterns: /system/*,/monitor/*,/tool/*
arcsoft:
appId: 7MtFQZ9S9Ue2UC7koYxJbeL5iEHhqGtp3d5SJbJ4ou92
sdkKey: 4VM5rVL8eKmmELhRi8ZoopH33GzsgPoptA94zSXyHvzz
faceEngine: E:\arcsoft_lib\LINUX64
thread-pool-size: 10

2
yq-admin/src/main/resources/logback.xml

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<configuration> <configuration>
<!-- 日志存放路径 --> <!-- 日志存放路径 -->
<property name="log.path" value="G:/yq/logs" /> <property name="log.path" value="D:/yq/logs" />
<!-- 日志输出格式 --> <!-- 日志输出格式 -->
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" /> <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />

BIN
yq-common/libs/arcsoft-sdk-face-3.0.0.0.jar

Binary file not shown.

21
yq-common/pom.xml

@ -156,7 +156,24 @@
<groupId>javax.servlet</groupId> <groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId> <artifactId>javax.servlet-api</artifactId>
</dependency> </dependency>
<dependency>
<groupId>com.arcsoft.face</groupId>
<artifactId>arcsoft-sdk-face</artifactId>
<version>3.0.0.0</version>
<scope>system</scope>
<systemPath>${basedir}/libs/arcsoft-sdk-face-3.0.0.0.jar</systemPath>
</dependency>
</dependencies> </dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!-- 加入下面这一行 -->
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
</plugins>
</build>
</project> </project>

107
yq-common/src/main/java/yq/common/arcsoft/FaceEngineTest.java

@ -0,0 +1,107 @@
package yq.common.arcsoft;
import com.arcsoft.face.*;
import com.arcsoft.face.enums.DetectMode;
import com.arcsoft.face.enums.DetectOrient;
import com.arcsoft.face.enums.ErrorInfo;
import com.arcsoft.face.toolkit.ImageInfo;
import yq.common.utils.FaceEnginUtil;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import static com.arcsoft.face.toolkit.ImageFactory.getRGBData;
public class FaceEngineTest {
public static void main(String[] args) {
// //从官网获取
// String appId = "7MtFQZ9S9Ue2UC7koYxJbeL5iEHhqGtp3d5SJbJ4ou92";
// String sdkKey = "4VM5rVL8eKmmELhRi8ZoopH33GzsgPoptA94zSXyHvzz";
//
//
// FaceEngine faceEngine = new FaceEngine("E:\\arcsoft_lib\\LINUX64");
// //激活引擎
// int errorCode = faceEngine.activeOnline(appId, sdkKey);
//
// if (errorCode != ErrorInfo.MOK.getValue() && errorCode != ErrorInfo.MERR_ASF_ALREADY_ACTIVATED.getValue()) {
// System.out.println("引擎激活失败");
// }
//
//
// ActiveFileInfo activeFileInfo=new ActiveFileInfo();
// errorCode = faceEngine.getActiveFileInfo(activeFileInfo);
// if (errorCode != ErrorInfo.MOK.getValue() && errorCode != ErrorInfo.MERR_ASF_ALREADY_ACTIVATED.getValue()) {
// System.out.println("获取激活文件信息失败");
// }
//
// //引擎配置
// EngineConfiguration engineConfiguration = new EngineConfiguration();
// engineConfiguration.setDetectMode(DetectMode.ASF_DETECT_MODE_IMAGE);
// engineConfiguration.setDetectFaceOrientPriority(DetectOrient.ASF_OP_ALL_OUT);
// engineConfiguration.setDetectFaceMaxNum(10);
// engineConfiguration.setDetectFaceScaleVal(16);
// //功能配置
// FunctionConfiguration functionConfiguration = new FunctionConfiguration();
// functionConfiguration.setSupportAge(true);
// functionConfiguration.setSupportFace3dAngle(true);
// functionConfiguration.setSupportFaceDetect(true);
// functionConfiguration.setSupportFaceRecognition(true);
// functionConfiguration.setSupportGender(true);
// functionConfiguration.setSupportLiveness(true);
// functionConfiguration.setSupportIRLiveness(true);
// engineConfiguration.setFunctionConfiguration(functionConfiguration);
//
//
// //初始化引擎
// errorCode = faceEngine.init(engineConfiguration);
//
// if (errorCode != ErrorInfo.MOK.getValue()) {
// System.out.println("初始化引擎失败");
// }
//
//
// //人脸检测
// ImageInfo imageInfo = getRGBData(new File("E:\\dog\\dog1.jpg"));
// List<FaceInfo> faceInfoList = new ArrayList<FaceInfo>();
// errorCode = faceEngine.detectFaces(imageInfo.getImageData(), imageInfo.getWidth(), imageInfo.getHeight(), imageInfo.getImageFormat(), faceInfoList);
// System.out.println(faceInfoList);
//
// //特征提取
// FaceFeature faceFeature = new FaceFeature();
// errorCode = faceEngine.extractFaceFeature(imageInfo.getImageData(), imageInfo.getWidth(), imageInfo.getHeight(), imageInfo.getImageFormat(), faceInfoList.get(0), faceFeature);
// System.out.println("特征值大小:" + faceFeature.getFeatureData().length);
//
// //人脸检测2
// ImageInfo imageInfo2 = getRGBData(new File("E:\\dog\\dog2.jpg"));
// List<FaceInfo> faceInfoList2 = new ArrayList<FaceInfo>();
// errorCode = faceEngine.detectFaces(imageInfo2.getImageData(), imageInfo2.getWidth(), imageInfo2.getHeight(),imageInfo2.getImageFormat(), faceInfoList2);
// System.out.println(faceInfoList2);
//
// //特征提取2
// FaceFeature faceFeature2 = new FaceFeature();
// errorCode = faceEngine.extractFaceFeature(imageInfo2.getImageData(), imageInfo2.getWidth(), imageInfo2.getHeight(), imageInfo2.getImageFormat(), faceInfoList2.get(0), faceFeature2);
// System.out.println("特征值大小:" + faceFeature2.getFeatureData().length);
//
// //特征比对
// FaceFeature targetFaceFeature = new FaceFeature();
// targetFaceFeature.setFeatureData(faceFeature.getFeatureData());
// FaceFeature sourceFaceFeature = new FaceFeature();
// sourceFaceFeature.setFeatureData(faceFeature2.getFeatureData());
// FaceSimilar faceSimilar = new FaceSimilar();
//
// errorCode = faceEngine.compareFaceFeature(targetFaceFeature, sourceFaceFeature, faceSimilar);
//
// System.out.println("相似度:" + faceSimilar.getScore());
//
//
// //引擎卸载
// errorCode = faceEngine.unInit();
}
}

157
yq-common/src/main/java/yq/common/utils/FaceEnginUtil.java

@ -0,0 +1,157 @@
package yq.common.utils;
import cn.hutool.core.collection.CollectionUtil;
import com.arcsoft.face.*;
import com.arcsoft.face.enums.DetectMode;
import com.arcsoft.face.enums.DetectOrient;
import com.arcsoft.face.enums.ErrorInfo;
import com.arcsoft.face.enums.ImageFormat;
import com.arcsoft.face.toolkit.ImageFactory;
import com.arcsoft.face.toolkit.ImageInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.multipart.MultipartFile;
import yq.common.exception.ServiceException;
import yq.common.utils.file.ImageUtils;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
/**
* minio文件上传工具类
* @author: jeecg-boot
*/
@Slf4j
public class FaceEnginUtil {
@Value(value = "${arcsoft.appId}")
private static String appId;
@Value(value = "${arcsoft.sdkKey}")
private static String sdkKey;
@Value(value = "${arcsoft.faceEngine}")
private static String faceEngineUrl;
public static FaceEngine init() {
FaceEngine faceEngine = new FaceEngine(faceEngineUrl);
//激活引擎
int errorCode = faceEngine.activeOnline(appId, sdkKey);
if (errorCode != ErrorInfo.MOK.getValue() && errorCode != ErrorInfo.MERR_ASF_ALREADY_ACTIVATED.getValue()) {
System.out.println("引擎激活失败");
}
ActiveFileInfo activeFileInfo=new ActiveFileInfo();
errorCode = faceEngine.getActiveFileInfo(activeFileInfo);
if (errorCode != ErrorInfo.MOK.getValue() && errorCode != ErrorInfo.MERR_ASF_ALREADY_ACTIVATED.getValue()) {
System.out.println("获取激活文件信息失败");
}
//引擎配置
EngineConfiguration engineConfiguration = new EngineConfiguration();
engineConfiguration.setDetectMode(DetectMode.ASF_DETECT_MODE_IMAGE);
engineConfiguration.setDetectFaceOrientPriority(DetectOrient.ASF_OP_ALL_OUT);
engineConfiguration.setDetectFaceMaxNum(10);
engineConfiguration.setDetectFaceScaleVal(16);
//功能配置
FunctionConfiguration functionConfiguration = new FunctionConfiguration();
functionConfiguration.setSupportAge(true);
functionConfiguration.setSupportFace3dAngle(true);
functionConfiguration.setSupportFaceDetect(true);
functionConfiguration.setSupportFaceRecognition(true);
functionConfiguration.setSupportGender(true);
functionConfiguration.setSupportLiveness(true);
functionConfiguration.setSupportIRLiveness(true);
engineConfiguration.setFunctionConfiguration(functionConfiguration);
//初始化引擎
errorCode = faceEngine.init(engineConfiguration);
if (errorCode != ErrorInfo.MOK.getValue()) {
System.out.println("初始化引擎失败");
}
return faceEngine;
}
/**
* 录入人脸接口存入byte数组特征值
* @param file
* @return
*/
public static byte[] uploadInput(MultipartFile file) {
FaceEngine faceEngine = FaceEnginUtil.init();
InputStream inputstream = null;
ImageInfo imageInfo = null;
try {
inputstream = file.getInputStream();
imageInfo = ImageFactory.getRGBData(inputstream);
if (inputstream != null) {
inputstream.close();
}
} catch (IOException e) {
throw new ServiceException("文件非图像类型");
}
List<FaceInfo> faceInfoList = new ArrayList<FaceInfo>();
faceEngine.detectFaces(imageInfo.getImageData(), imageInfo.getWidth(), imageInfo.getHeight(), imageInfo.getImageFormat(), faceInfoList);
//特征提取
FaceFeature faceFeature = new FaceFeature();
faceEngine.extractFaceFeature(imageInfo.getImageData(), imageInfo.getWidth(), imageInfo.getHeight(), imageInfo.getImageFormat(), faceInfoList.get(0), faceFeature);
byte[] featureData = faceFeature.getFeatureData();
FaceEnginUtil.close(faceEngine);
return featureData;
}
/**
* 人脸匹配
* @param file 人脸数据
* @param faceFeature1 数据库人脸存根
* @return float 数据判断大于0.7以上
*/
public static float uploadContrast(MultipartFile file,Byte[] faceFeature1) {
FaceEngine faceEngine = FaceEnginUtil.init();
InputStream inputstream = null;
ImageInfo imageInfo = null;
try {
inputstream = file.getInputStream();
imageInfo = ImageFactory.getRGBData(inputstream);
if (inputstream != null) {
inputstream.close();
}
} catch (IOException e) {
throw new ServiceException("文件非图像类型");
}
List<FaceInfo> faceInfoList = new ArrayList<FaceInfo>();
faceEngine.detectFaces(imageInfo.getImageData(), imageInfo.getWidth(), imageInfo.getHeight(), imageInfo.getImageFormat(), faceInfoList);
//特征提取
FaceFeature faceFeature = new FaceFeature();
faceEngine.extractFaceFeature(imageInfo.getImageData(), imageInfo.getWidth(), imageInfo.getHeight(), imageInfo.getImageFormat(), faceInfoList.get(0), faceFeature);
byte[] featureData = faceFeature.getFeatureData();
//特征比对
FaceFeature targetFaceFeature = new FaceFeature();
targetFaceFeature.setFeatureData(featureData);
FaceFeature sourceFaceFeature = new FaceFeature();
sourceFaceFeature.setFeatureData(faceFeature.getFeatureData());
FaceSimilar faceSimilar = new FaceSimilar();
faceEngine.compareFaceFeature(targetFaceFeature, sourceFaceFeature, faceSimilar);
FaceEnginUtil.close(faceEngine);
return faceSimilar.getScore();
}
public static void close(FaceEngine faceEngine) {
faceEngine.unInit();
}
}
Loading…
Cancel
Save