FaceIdenService.java 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. package com.iden.bms.face;
  2. import cn.hutool.core.collection.CollUtil;
  3. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4. import com.face.monitor.FaceMonitor;
  5. import com.face.monitor.model.FaceModel;
  6. import com.iden.common.entity.IdenCamera;
  7. import com.iden.common.entity.IdenCommunity;
  8. import com.iden.common.entity.IdenImageStore;
  9. import com.iden.common.service.IdenCameraService;
  10. import com.iden.common.service.IdenCommunityService;
  11. import com.iden.common.service.IdenImageStoreService;
  12. import com.iden.common.util.DateUtils;
  13. import org.apache.commons.lang3.StringUtils;
  14. import org.apache.logging.log4j.LogManager;
  15. import org.apache.logging.log4j.Logger;
  16. import org.springframework.beans.factory.annotation.Value;
  17. import org.springframework.stereotype.Service;
  18. import javax.annotation.Resource;
  19. import java.io.File;
  20. import java.util.ArrayList;
  21. import java.util.Date;
  22. import java.util.List;
  23. /**
  24. * @Author: stw
  25. * @Date: 2021/7/14
  26. * @Desc:
  27. */
  28. @Service
  29. public class FaceIdenService {
  30. @Resource
  31. private IdenImageStoreService idenImageStoreService;
  32. @Resource
  33. private IdenCameraService idenCameraService;
  34. @Resource
  35. private IdenCommunityService idenCommunityService;
  36. @Value("${iden.root:#{null}}")
  37. private String idenRoot;
  38. @Value("${image.url:#{null}}")
  39. private String imageUrl;
  40. private static final Logger logger = LogManager.getLogger(FaceIdenService.class);
  41. /**
  42. *
  43. * @throws Exception
  44. */
  45. public void exe() throws Exception {
  46. logger.info("FaceIdenService.exe start...");
  47. File originImageDirFile = new File(idenRoot + "data/origin/image");
  48. //初始化引擎
  49. FaceMonitor faceMonitor = new FaceMonitor();
  50. faceMonitor.init(idenRoot + "face/model", 0);
  51. //使用摄像头编码做目录名,里面图像或视频的名称上加上拍照时间,
  52. // 比如 20211217123023.jpg 20211217123023~20211217123323.mp4
  53. if (originImageDirFile.isDirectory()) {
  54. File[] cameraCodeDirs = originImageDirFile.listFiles();
  55. if(cameraCodeDirs != null && cameraCodeDirs.length > 0){
  56. logger.info("FaceIdenService.exe ...1");
  57. for(File cameraCodedir : cameraCodeDirs) {
  58. if(cameraCodedir.isDirectory()){
  59. File[] imgFiles = cameraCodedir.listFiles();
  60. if(imgFiles != null && imgFiles.length > 0){
  61. logger.info("FaceIdenService.exe ...2");
  62. String cameraCode = cameraCodedir.getName();
  63. QueryWrapper<IdenCamera> queryWrapper = new QueryWrapper<>();
  64. queryWrapper.lambda().eq(IdenCamera::getCode,cameraCode);
  65. IdenCamera idenCamera = idenCameraService.getOne(queryWrapper);
  66. if(idenCamera == null){
  67. continue;
  68. }
  69. logger.info("FaceIdenService.exe ...3");
  70. //获取特征码
  71. FaceModel[] faceModels = FaceIdenTool.extractFeature(faceMonitor,imgFiles);
  72. List<IdenImageStore> idenImageStoreList = new ArrayList<>();
  73. for(int i = 0; i < imgFiles.length; i++) {
  74. File imgFile = imgFiles[i];
  75. IdenImageStore idenImageStore = new IdenImageStore();
  76. idenImageStore.setCameraId(idenCamera.getId());
  77. idenImageStore.setCommunityId(idenCamera.getCommunityId());
  78. String photographPlace = idenCamera.getPlace();
  79. logger.info("FaceIdenService.exe ...4");
  80. if (StringUtils.isEmpty(photographPlace)) {
  81. IdenCommunity idenCommunity = idenCommunityService.getById(idenCamera.getCommunityId());
  82. if(idenCommunity != null) {
  83. photographPlace = idenCommunity.getName() + "(" + idenCamera.getLongitude() + ":" + idenCamera.getLatitude() + ")";
  84. }
  85. }
  86. logger.info("FaceIdenService.exe ...5");
  87. idenImageStore.setPhotographPlace(photographPlace);
  88. String imgFileName = imgFile.getName();
  89. String photographTime = imgFileName.substring(0, imgFileName.indexOf("_"));
  90. idenImageStore.setPhotographTime(DateUtils.strToDate(photographTime,"yyyyMMddHHmmss"));
  91. idenImageStore.setFeatPtr(FaceIdenTool.getFeatPtr(faceModels,String.valueOf(i)));
  92. File finalDir = new File(imgFile.getParentFile().getAbsolutePath().replace("origin","final"));
  93. if(!finalDir.exists()){
  94. finalDir.mkdirs();
  95. }
  96. logger.info("FaceIdenService.exe ...finalDir == " + finalDir.getAbsolutePath());
  97. logger.info("FaceIdenService.exe ...imgFile.getName() == " + imgFileName);
  98. File finalImgFile = new File(finalDir, imgFileName);
  99. logger.info("FaceIdenService.exe ...finalImgFile == " + finalImgFile.getAbsolutePath());
  100. imgFile.renameTo(finalImgFile);//移动到最终目录
  101. idenImageStore.setImage( imageUrl + cameraCode + "/" + finalImgFile.getName());
  102. //TODO 关联personId
  103. idenImageStore.setCreateTime(new Date());
  104. idenImageStoreList.add(idenImageStore);
  105. }
  106. logger.info("FaceIdenService.exe ...7");
  107. //把图像存到图库中
  108. if (CollUtil.isNotEmpty(idenImageStoreList)) {
  109. logger.info("FaceIdenService.exe ...8");
  110. idenImageStoreService.saveBatch(idenImageStoreList);
  111. }
  112. }
  113. }
  114. }
  115. }
  116. }
  117. logger.info("FaceIdenService.exe end");
  118. }
  119. }