FaceIdenService.java 6.3 KB

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