package com.code2roc.fastface.bizlogic; import com.code2roc.fastface.eums.FaceEnum; import com.code2roc.fastface.model.FaceRegistDO; import com.code2roc.fastface.model.RegistResult; import com.code2roc.fastface.service.IFaceRegistService; import com.code2roc.fastface.util.ConvertOp; import com.code2roc.fastface.util.DateUtil; import com.code2roc.fastface.util.SeetaFaceHepler; import com.seeta.sdk.util.SeetafaceUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.awt.image.BufferedImage; import java.util.List; @Component public class FaceRegistLogic { @Autowired private SeetaFaceHepler seetaFaceHepler; @Autowired private IFaceRegistService faceRegistService; public RegistResult addFace(String userID, String userName, String base64Image) { RegistResult registResult = new RegistResult(); int status = 0; String message = "success"; long registIndex = -999; try { BufferedImage image = ConvertOp.convertBase64ToImage(base64Image.split("base64,")[1]); FaceEnum.CheckImageFaceStatus checkImageFaceStatus = seetaFaceHepler.getFace(image); if (checkImageFaceStatus.get_value() == FaceEnum.CheckImageFaceStatus.NoFace.get_value()) { status = -1; message = "未检测到人脸"; } else if (checkImageFaceStatus.get_value() == FaceEnum.CheckImageFaceStatus.MoreFace.get_value()) { status = -1; message = "检测到多张人脸"; } else { registIndex = seetaFaceHepler.registFace(image); } } catch (Exception e) { status = -1; message = "exception"; e.printStackTrace(); } if (status == 0) { FaceRegistDO faceRegistDO = new FaceRegistDO(); faceRegistDO.setUserID(userID); faceRegistDO.setUserName(userName); faceRegistDO.setRegistDate(DateUtil.getDateFormatToSecond()); faceRegistDO.setUpdateDate(DateUtil.getDateFormatToSecond()); faceRegistDO.setBase64Image(base64Image); faceRegistDO.setRegistIndex(registIndex + ""); faceRegistService.insert(faceRegistDO); } registResult.setStatus(status); registResult.setMessage(message); return registResult; } public RegistResult addFaceV2(String userID, String userName, String filePath) { RegistResult registResult = new RegistResult(); int status = 0; String message = "success"; long registIndex = -999; try { BufferedImage image = SeetafaceUtil.toBufferedImage(filePath); FaceEnum.CheckImageFaceStatus checkImageFaceStatus = seetaFaceHepler.getFace(image); if (checkImageFaceStatus.get_value() == FaceEnum.CheckImageFaceStatus.NoFace.get_value()) { status = -1; message = "未检测到人脸"; } else if (checkImageFaceStatus.get_value() == FaceEnum.CheckImageFaceStatus.MoreFace.get_value()) { status = -1; message = "检测到多张人脸"; } else { registIndex = seetaFaceHepler.registFace(image); } } catch (Exception e) { status = -1; message = "exception"; e.printStackTrace(); } if (status == 0) { FaceRegistDO faceRegistDO = new FaceRegistDO(); faceRegistDO.setUserID(userID); faceRegistDO.setUserName(userName); faceRegistDO.setRegistDate(DateUtil.getDateFormatToSecond()); faceRegistDO.setUpdateDate(DateUtil.getDateFormatToSecond()); faceRegistDO.setBase64Image(ConvertOp.convertImageToBase64(filePath)); faceRegistDO.setRegistIndex(registIndex + ""); faceRegistService.insert(faceRegistDO); } registResult.setStatus(status); registResult.setMessage(message); return registResult; } public RegistResult updateFace(String userID, String base64Image) { RegistResult registResult = new RegistResult(); int status = 0; String message = "success"; long registIndex = -999; FaceRegistDO faceRegistDO = faceRegistService.selectOne(userID); try { BufferedImage image = ConvertOp.convertBase64ToImage(base64Image.split("base64,")[1]); FaceEnum.CheckImageFaceStatus checkImageFaceStatus = seetaFaceHepler.getFace(image); if (checkImageFaceStatus.get_value() == FaceEnum.CheckImageFaceStatus.NoFace.get_value()) { status = -1; message = "未检测到人脸"; } else if (checkImageFaceStatus.get_value() == FaceEnum.CheckImageFaceStatus.MoreFace.get_value()) { status = -1; message = "检测到多张人脸"; } else { seetaFaceHepler.deleteFace(Long.parseLong(faceRegistDO.getRegistIndex())); registIndex = seetaFaceHepler.registFace(image); } } catch (Exception e) { status = -1; message = "exception"; e.printStackTrace(); } if (status == 0) { faceRegistDO.setUpdateDate(DateUtil.getDateFormatToSecond()); faceRegistDO.setBase64Image(base64Image); faceRegistDO.setRegistIndex(registIndex + ""); faceRegistService.update(faceRegistDO); } registResult.setStatus(status); registResult.setMessage(message); return registResult; } public RegistResult deleteFace(String userID) { RegistResult registResult = new RegistResult(); int status = 0; String message = "success"; FaceRegistDO faceRegistDO = faceRegistService.selectOne(userID); try { seetaFaceHepler.deleteFace(Long.parseLong(faceRegistDO.getRegistIndex())); } catch (Exception e) { status = -1; message = "exception"; e.printStackTrace(); } if (status == 0) { faceRegistService.delete(userID); } registResult.setStatus(status); registResult.setMessage(message); return registResult; } public RegistResult deleteAllFace() { RegistResult registResult = new RegistResult(); int status = 0; String message = "success"; try { seetaFaceHepler.resetFaceDataBase(); } catch (Exception e) { status = -1; message = "exception"; e.printStackTrace(); } if (status == 0) { faceRegistService.deleteAll(); } registResult.setStatus(status); registResult.setMessage(message); return registResult; } public RegistResult queryFace(String base64Image) { RegistResult registResult = new RegistResult(); int status = 0; String message = "success"; try { BufferedImage image = ConvertOp.convertBase64ToImage(base64Image.split("base64,")[1]); long queryIndex = seetaFaceHepler.queryFace(image); if (queryIndex >= 0) { message = queryIndex + ""; } else { status = -1; message = "未匹配到人脸"; } } catch (Exception e) { status = -1; message = "exception"; e.printStackTrace(); } registResult.setStatus(status); registResult.setMessage(message); return registResult; } public void resetFaceDBIndex() throws Exception { seetaFaceHepler.resetFaceDataBase(); List faceRegistDOList = faceRegistService.selectAllList(); for (FaceRegistDO faceRegistDO : faceRegistDOList) { BufferedImage image = ConvertOp.convertBase64ToImage(faceRegistDO.getBase64Image().split("base64,")[1]); long registIndex = seetaFaceHepler.registFace(image); faceRegistDO.setRegistIndex(registIndex + ""); faceRegistService.update(faceRegistDO); } } public RegistResult checkFace(String base64Image) { RegistResult registResult = new RegistResult(); int status = 0; String message = "success"; try { BufferedImage image = ConvertOp.convertBase64ToImage(base64Image.split("base64,")[1]); FaceEnum.CheckImageFaceStatus checkImageFaceStatus = seetaFaceHepler.getFace(image); message = checkImageFaceStatus.get_name(); } catch (Exception e) { status = -1; message = "exception"; e.printStackTrace(); } registResult.setStatus(status); registResult.setMessage(message); return registResult; } public RegistResult compareFace(String sourceBase64Image, String compareBase64Image) { RegistResult registResult = new RegistResult(); int status = 0; String message = "success"; try { BufferedImage source = ConvertOp.convertBase64ToImage(sourceBase64Image.split("base64,")[1]); BufferedImage compare = ConvertOp.convertBase64ToImage(compareBase64Image.split("base64,")[1]); FaceEnum.CompareImageFaceStatus compareImageFaceStatus = seetaFaceHepler.compareFace(source, compare); message = compareImageFaceStatus.get_name(); } catch (Exception e) { status = -1; message = "exception"; e.printStackTrace(); } registResult.setStatus(status); registResult.setMessage(message); return registResult; } }