diff --git a/yq-admin/src/main/resources/application-druid.yml b/yq-admin/src/main/resources/application-druid.yml index f97a6b4..d04b155 100644 --- a/yq-admin/src/main/resources/application-druid.yml +++ b/yq-admin/src/main/resources/application-druid.yml @@ -6,7 +6,7 @@ spring: druid: # 主库数据源 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 password: 123456 # 从库数据源 diff --git a/yq-admin/src/main/resources/application.yml b/yq-admin/src/main/resources/application.yml index 5b39f5b..a19ced1 100644 --- a/yq-admin/src/main/resources/application.yml +++ b/yq-admin/src/main/resources/application.yml @@ -9,7 +9,7 @@ ruoyi: # 实例演示开关 demoEnabled: true # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath) - profile: G:/yq/uploadPath + profile: D:/yq/uploadPath # 获取ip地址开关 addressEnabled: false # 验证码类型 math 数字计算 char 字符验证 @@ -18,7 +18,7 @@ ruoyi: # 开发环境配置 server: # 服务器的HTTP端口,默认为8080 - port: 8080 + port: 1111 servlet: # 应用的访问路径 context-path: / @@ -68,15 +68,6 @@ spring: restart: # 热部署开关 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: @@ -87,7 +78,7 @@ spring: # 数据库索引 database: 0 # 密码 - password: + password: 123456 # 连接超时时间 timeout: 10s lettuce: @@ -140,3 +131,8 @@ xss: excludes: /system/notice # 匹配链接 urlPatterns: /system/*,/monitor/*,/tool/* +arcsoft: + appId: 7MtFQZ9S9Ue2UC7koYxJbeL5iEHhqGtp3d5SJbJ4ou92 + sdkKey: 4VM5rVL8eKmmELhRi8ZoopH33GzsgPoptA94zSXyHvzz + faceEngine: E:\arcsoft_lib\LINUX64 + thread-pool-size: 10 \ No newline at end of file diff --git a/yq-admin/src/main/resources/logback.xml b/yq-admin/src/main/resources/logback.xml index 7264f84..b550f00 100644 --- a/yq-admin/src/main/resources/logback.xml +++ b/yq-admin/src/main/resources/logback.xml @@ -1,7 +1,7 @@ - + diff --git a/yq-common/libs/arcsoft-sdk-face-3.0.0.0.jar b/yq-common/libs/arcsoft-sdk-face-3.0.0.0.jar new file mode 100644 index 0000000..3091a2e Binary files /dev/null and b/yq-common/libs/arcsoft-sdk-face-3.0.0.0.jar differ diff --git a/yq-common/pom.xml b/yq-common/pom.xml index ef9701e..16cc9c4 100644 --- a/yq-common/pom.xml +++ b/yq-common/pom.xml @@ -156,7 +156,24 @@ javax.servlet javax.servlet-api - + + com.arcsoft.face + arcsoft-sdk-face + 3.0.0.0 + system + ${basedir}/libs/arcsoft-sdk-face-3.0.0.0.jar + - + + + + org.springframework.boot + spring-boot-maven-plugin + + + true + + + + \ No newline at end of file diff --git a/yq-common/src/main/java/yq/common/arcsoft/FaceEngineTest.java b/yq-common/src/main/java/yq/common/arcsoft/FaceEngineTest.java new file mode 100644 index 0000000..980fab8 --- /dev/null +++ b/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 faceInfoList = new ArrayList(); + // 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 faceInfoList2 = new ArrayList(); + // 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(); + + } +} diff --git a/yq-common/src/main/java/yq/common/utils/FaceEnginUtil.java b/yq-common/src/main/java/yq/common/utils/FaceEnginUtil.java new file mode 100644 index 0000000..7533243 --- /dev/null +++ b/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 faceInfoList = new ArrayList(); + 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 faceInfoList = new ArrayList(); + 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(); + } + + +}