|
@@ -11,8 +11,14 @@ import cn.com.qmth.examcloud.core.oe.student.dao.entity.ExamCaptureEntity;
|
|
|
import cn.com.qmth.examcloud.core.oe.student.service.ExamCaptureQueueService;
|
|
|
import cn.com.qmth.examcloud.core.oe.student.service.ExamCaptureService;
|
|
|
import cn.com.qmth.examcloud.core.oe.student.service.ExamRecordDataService;
|
|
|
+import cn.com.qmth.examcloud.starters.face.verify.model.FaceResult;
|
|
|
+import cn.com.qmth.examcloud.starters.face.verify.model.param.ImageParm;
|
|
|
+import cn.com.qmth.examcloud.starters.face.verify.model.param.ImageTokenParm;
|
|
|
+import cn.com.qmth.examcloud.starters.face.verify.model.param.ImageUrlParm;
|
|
|
+import cn.com.qmth.examcloud.starters.face.verify.service.FaceVerifyService;
|
|
|
import cn.com.qmth.examcloud.support.Constants;
|
|
|
import cn.com.qmth.examcloud.support.cache.CacheHelper;
|
|
|
+import cn.com.qmth.examcloud.support.cache.bean.StudentCacheBean;
|
|
|
import cn.com.qmth.examcloud.support.cache.bean.SysPropertyCacheBean;
|
|
|
import cn.com.qmth.examcloud.support.enums.ExamProperties;
|
|
|
import cn.com.qmth.examcloud.support.examing.ExamRecordData;
|
|
@@ -59,6 +65,9 @@ public class ExamCaptureServiceImpl implements ExamCaptureService {
|
|
|
@Autowired
|
|
|
private ExamRecordDataService examRecordDataService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private FaceVerifyService faceVerifyService;
|
|
|
+
|
|
|
public static final String TEMP_FILE_EXP = "face_compare/";
|
|
|
|
|
|
@Autowired
|
|
@@ -88,6 +97,7 @@ public class ExamCaptureServiceImpl implements ExamCaptureService {
|
|
|
examCaptureQueueRepo.deleteById(examCaptureQueue.getId());
|
|
|
}
|
|
|
|
|
|
+ @Deprecated
|
|
|
@Override
|
|
|
public CompareFaceSyncInfo compareFaceSyncByFileUrl(Long studentId, String baseFaceToken, String fileUrl) {
|
|
|
CompareFaceSyncInfo compareFaceSyncInfo = new CompareFaceSyncInfo();
|
|
@@ -160,6 +170,48 @@ public class ExamCaptureServiceImpl implements ExamCaptureService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public CompareFaceSyncInfo compareFaceSync(StudentCacheBean student, String fileUrl) {
|
|
|
+ // 获取学校人脸API方案配置 todo
|
|
|
+ boolean useBaiduApi = true;
|
|
|
+ double baiduExpectFaceCompareScore = 70d;
|
|
|
+
|
|
|
+ CompareFaceSyncInfo info = new CompareFaceSyncInfo();
|
|
|
+ info.setStudentId(student.getId());
|
|
|
+ info.setIsPass(false);
|
|
|
+ info.setIsStranger(false);
|
|
|
+ info.setExistsSystemError(false);
|
|
|
+
|
|
|
+ try {
|
|
|
+ FaceResult faceResult;
|
|
|
+ ImageParm imageParm = new ImageUrlParm(FileStorageUtil.realPath(fileUrl));
|
|
|
+ if (useBaiduApi) {
|
|
|
+ faceResult = faceVerifyService.faceCompareByBaidu(new ImageUrlParm(student.getPhotoPath()), imageParm, baiduExpectFaceCompareScore);
|
|
|
+ } else {
|
|
|
+ faceResult = faceVerifyService.faceCompareByFacePlus(new ImageTokenParm(student.getFaceToken()), imageParm);
|
|
|
+ }
|
|
|
+ info.setIsPass(faceResult.isPass());
|
|
|
+ info.setFaceCompareResult(faceResult.getThresholds());
|
|
|
+
|
|
|
+ if (!faceResult.isPass()) {
|
|
|
+ log.warn("[compareFaceSync] fail --> {}", faceResult.getError());
|
|
|
+ info.setErrorMsg("检测过程中照片非本人");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (faceResult.getFaceNum() > 1) {
|
|
|
+ info.setIsStranger(true);
|
|
|
+ info.setErrorMsg("检测过程中存在多人脸");
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ info.setExistsSystemError(true);
|
|
|
+ info.setErrorMsg(e.getMessage());
|
|
|
+
|
|
|
+ log.error("[compareFaceSync] error --> {}", e.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ return info;
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public ExamCaptureEntity getExamCaptureResult(Long examRecordDataId, String fileName) {
|
|
|
return examCaptureRepo.findByExamRecordDataIdAndFileName(examRecordDataId, fileName);
|