donggaosheng лет назад: 2
Родитель
Сommit
cf23fb511d

+ 15 - 14
zd-modules/zd-algorithm/src/main/java/com/zd/alg/face/controller/FaceApi.java

@@ -1,5 +1,6 @@
 package com.zd.alg.face.controller;
 
+import com.arcsoft.face.FaceEngine;
 import com.arcsoft.face.FaceFeature;
 import com.arcsoft.face.FaceInfo;
 import com.arcsoft.face.toolkit.ImageInfo;
@@ -29,7 +30,6 @@ import org.springframework.web.multipart.MultipartFile;
 import java.io.*;
 import java.util.*;
 import java.util.concurrent.*;
-import java.util.concurrent.atomic.LongAdder;
 import java.util.stream.Collectors;
 
 /**
@@ -44,7 +44,12 @@ import java.util.stream.Collectors;
 @RequestMapping("/faceApi")
 public class FaceApi {
 
-    private static final ScheduledExecutorService scheduledExecutorService = SpringUtils.getBean("scheduledExecutorService");
+    //private static final ScheduledExecutorService scheduledExecutorService = SpringUtils.getBean("scheduledExecutorService");
+
+    private static final int taskSize = 50;
+
+    private static ExecutorService pool = Executors.newFixedThreadPool(taskSize);
+
 
     private Logger logger = LoggerFactory.getLogger(FaceApi.class);
 
@@ -57,6 +62,9 @@ public class FaceApi {
     @Autowired
     private RemoteDutyService remoteDutyService;
 
+    @Autowired
+    private FaceEngine faceEngine;
+
 
     @ApiOperation("根据照片文件获取特征码")
     @PostMapping("/faceFeature")
@@ -130,7 +138,6 @@ public class FaceApi {
     @ApiOperation("人脸比较")
     @PostMapping("/newCompare")
     public ResultData newCompare(@RequestParam("file") MultipartFile file,FaceCompare faceCompare) throws IOException{
-
         ImageInfo imageInfo;
         File file1 = null;
         try {
@@ -173,29 +180,23 @@ public class FaceApi {
      */
     @ApiOperation("人脸比较")
     @PostMapping("/multiCompare")
-    public ResultData multiFaceDetection(@RequestBody FaceCompare faceCompare) throws ExecutionException, InterruptedException {
+    public ResultData multiFaceDetection(@RequestBody FaceCompare faceCompare) throws ExecutionException, InterruptedException, TimeoutException {
         logger.info("====人脸比较====");
         ResultData<List<LabSysUserInfo>> infoList = remoteStudentsService.getFaceBySecuritySubjectId(faceCompare.getLabId());
-        long time=System.currentTimeMillis();
         if(infoList.getCode() == 200 && infoList.getData() != null){
             List<Future> list = Optional.ofNullable(infoList.getData()).orElseGet(Collections::emptyList)
                     .stream()
                     .map(a->{
-                        Future f = scheduledExecutorService.submit(new Callable<Object>() {
-                            @Override
-                            public Object call() throws Exception {
-                                logger.info("执行线程名称:"+Thread.currentThread().getName());
-                                return getMultiFaceDetection(a,faceCompare);
-                            }
+                        Future f = pool.submit((Callable<Object>) () -> {
+                            logger.info("执行线程名称:" + Thread.currentThread().getName());
+                            return getMultiFaceDetection(a, faceCompare);
                         });
                         return f;
                     })
                     .collect(Collectors.toList());
             for(Future future:list){
-                ResultData r=(ResultData)future.get();
+                ResultData r = (ResultData) future.get();
                 if(r.getCode()==200){
-                    long time2=System.currentTimeMillis();
-                    logger.info("多线程人脸对比执行时间:"+(time2-time));
                     return r;
                 }
             }

+ 6 - 1
zd-modules/zd-algorithm/src/main/java/com/zd/alg/face/handle/FaceEngineFactory.java

@@ -33,7 +33,8 @@ import java.util.List;
 @Service
 @EnableConfigurationProperties(FaceProperties.class)
 public class FaceEngineFactory {
-    Logger logger = LoggerFactory.getLogger(FaceEngineFactory.class);
+
+    static Logger logger = LoggerFactory.getLogger(FaceEngineFactory.class);
 
     @Autowired
     FaceProperties faceProperties;
@@ -50,6 +51,7 @@ public class FaceEngineFactory {
     public static final String ARC_FACE_VERSION = "3.0";
 
     //初始化一个图片模式引擎
+    @Bean
     public FaceEngine initFaceEngineImage() {
         //初始化IMAGE模式
         return init();
@@ -59,7 +61,10 @@ public class FaceEngineFactory {
         FaceEngine faceEngine = getFaceEngine();
         int errorCode;
         //初始化引擎
+        long time=System.currentTimeMillis();
         errorCode = faceEngine.init(getEngineConfiguration);
+        long time2=System.currentTimeMillis();
+        logger.info("初始化引擎需要多长时间:"+(time2-time));
         if (errorCode != ErrorInfo.MOK.getValue()) {
             logger.error("初始化引擎失败:errorCode:{},", errorCode);
             throw new ServiceException("初始化引擎失败!");

+ 19 - 22
zd-modules/zd-algorithm/src/main/java/com/zd/alg/face/service/FaceService.java

@@ -7,14 +7,18 @@ import com.arcsoft.face.FaceSimilar;
 import com.arcsoft.face.enums.ErrorInfo;
 import com.arcsoft.face.toolkit.ImageInfo;
 import com.zd.alg.face.config.FaceProperties;
+import com.zd.alg.face.controller.FaceApi;
 import com.zd.alg.face.handle.FaceEngineFactory;
 import com.zd.common.core.utils.Assert;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+
 import java.io.File;
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
+
 import static com.arcsoft.face.toolkit.ImageFactory.getRGBData;
 
 /**
@@ -25,12 +29,17 @@ import static com.arcsoft.face.toolkit.ImageFactory.getRGBData;
 @Service
 public class FaceService {
 
+    private static Logger logger = LoggerFactory.getLogger(FaceApi.class);
+
     @Autowired
     FaceEngineFactory faceEngineFactory;
 
     @Autowired
     FaceProperties faceProperties;
 
+    @Autowired
+    FaceEngine faceEngine;
+
 
     /**
      * 人脸检测
@@ -39,8 +48,8 @@ public class FaceService {
      */
     public List<FaceInfo> faceDetect(ImageInfo imageInfo) {
         List<FaceInfo> faceInfoList = new ArrayList<>();
-        int errorCode = faceEngineFactory.initFaceEngineImage().detectFaces(imageInfo.getImageData(), imageInfo.getWidth(), imageInfo.getHeight(), imageInfo.getImageFormat(), faceInfoList);
-        System.out.println("errorCode:"+errorCode);
+        int errorCode=faceEngine.detectFaces(imageInfo.getImageData(), imageInfo.getWidth(), imageInfo.getHeight(), imageInfo.getImageFormat(), faceInfoList);
+        logger.info("errorCode:"+errorCode);
         Assert.isTrue(errorCode == ErrorInfo.MOK.getValue(), "人脸检测失败!");
         return faceInfoList;
     }
@@ -51,20 +60,13 @@ public class FaceService {
      */
     public FaceFeature faceFeature(ImageInfo imageInfo, List<FaceInfo> faceInfoList) {
         FaceFeature faceFeature = new FaceFeature();
-        FaceEngine imageFaceEngine = null;
-        int errorCode;
+        int errorCode = 0;
         try {
-            imageFaceEngine = faceEngineFactory.initFaceEngineImage();
-            errorCode = imageFaceEngine.extractFaceFeature(imageInfo.getImageData(), imageInfo.getWidth(), imageInfo.getHeight(), imageInfo.getImageFormat(), faceInfoList.get(0), faceFeature);
-        }  finally {
-            if (imageFaceEngine != null) {
-                imageFaceEngine.unInit();
-            }
-
+            errorCode = faceEngine.extractFaceFeature(imageInfo.getImageData(), imageInfo.getWidth(), imageInfo.getHeight(), imageInfo.getImageFormat(), faceInfoList.get(0), faceFeature);
+        }catch (Exception e){
+            e.printStackTrace();
         }
-
         Assert.isTrue(errorCode == ErrorInfo.MOK.getValue(), "人脸特征提取失败!");
-
         return faceFeature;
     }
 
@@ -72,17 +74,12 @@ public class FaceService {
      * 人脸对比
      */
     public Boolean compore(FaceFeature targetFaceFeature, FaceFeature sourceFaceFeature) {
-
         FaceSimilar faceSimilar = new FaceSimilar();
-        FaceEngine faceEngine = null;
-        int errorCode;
+        int errorCode = 0;
         try {
-            faceEngine = faceEngineFactory.initFaceEngineImage();
             errorCode = faceEngine.compareFaceFeature(targetFaceFeature, sourceFaceFeature, faceSimilar);
-        }  finally {
-            if (faceEngine != null) {
-                faceEngine.unInit();
-            }
+        }catch (Exception e){
+            e.printStackTrace();
         }
         Assert.isTrue(errorCode == ErrorInfo.MOK.getValue(), "人脸对比失败!");
         return faceSimilar.getScore() >= faceProperties.getScore();