|
@@ -7,6 +7,7 @@ import cn.hutool.core.collection.CollUtil;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
import com.face.monitor.FaceMonitor;
|
|
import com.face.monitor.FaceMonitor;
|
|
import com.face.monitor.model.FaceModel;
|
|
import com.face.monitor.model.FaceModel;
|
|
|
|
+import com.iden.bms.service.PersonService;
|
|
import com.iden.common.entity.IdenCamera;
|
|
import com.iden.common.entity.IdenCamera;
|
|
import com.iden.common.entity.IdenCommunity;
|
|
import com.iden.common.entity.IdenCommunity;
|
|
import com.iden.common.entity.IdenFaceImage;
|
|
import com.iden.common.entity.IdenFaceImage;
|
|
@@ -15,6 +16,7 @@ import com.iden.common.service.IdenCameraService;
|
|
import com.iden.common.service.IdenCommunityService;
|
|
import com.iden.common.service.IdenCommunityService;
|
|
import com.iden.common.service.IdenFaceImageService;
|
|
import com.iden.common.service.IdenFaceImageService;
|
|
|
|
|
|
|
|
+import com.iden.common.util.ByteUtil;
|
|
import com.iden.common.util.DateUtils;
|
|
import com.iden.common.util.DateUtils;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.apache.logging.log4j.LogManager;
|
|
import org.apache.logging.log4j.LogManager;
|
|
@@ -43,6 +45,9 @@ public class FaceIdenService {
|
|
private IdenCameraService idenCameraService;
|
|
private IdenCameraService idenCameraService;
|
|
@Resource
|
|
@Resource
|
|
private IdenCommunityService idenCommunityService;
|
|
private IdenCommunityService idenCommunityService;
|
|
|
|
+ @Resource
|
|
|
|
+ private PersonService personService;
|
|
|
|
+
|
|
|
|
|
|
@Value("${iden.root:#{null}}")
|
|
@Value("${iden.root:#{null}}")
|
|
private String idenRoot;
|
|
private String idenRoot;
|
|
@@ -56,25 +61,26 @@ public class FaceIdenService {
|
|
* @throws Exception
|
|
* @throws Exception
|
|
*/
|
|
*/
|
|
|
|
|
|
- public void exe() throws Exception {
|
|
|
|
- logger.info("FaceIdenService.exe start...");
|
|
|
|
|
|
+ public void handleCameraImage() throws Exception {
|
|
|
|
+ logger.info("FaceIdenService.handleCameraImage start...");
|
|
|
|
|
|
File originImageDirFile = new File(idenRoot + "data/origin/image");
|
|
File originImageDirFile = new File(idenRoot + "data/origin/image");
|
|
- //初始化引擎
|
|
|
|
- FaceMonitor faceMonitor = new FaceMonitor();
|
|
|
|
- faceMonitor.init(idenRoot + "face/model", 0);
|
|
|
|
|
|
|
|
//使用摄像头编码做目录名,里面图像或视频的名称上加上拍照时间,
|
|
//使用摄像头编码做目录名,里面图像或视频的名称上加上拍照时间,
|
|
// 比如 20211217123023.jpg 20211217123023~20211217123323.mp4
|
|
// 比如 20211217123023.jpg 20211217123023~20211217123323.mp4
|
|
if (originImageDirFile.isDirectory()) {
|
|
if (originImageDirFile.isDirectory()) {
|
|
- File[] cameraCodeDirs = originImageDirFile.listFiles();
|
|
|
|
|
|
+ File[] cameraCodeDirs = originImageDirFile.listFiles();
|
|
if(cameraCodeDirs != null && cameraCodeDirs.length > 0){
|
|
if(cameraCodeDirs != null && cameraCodeDirs.length > 0){
|
|
- logger.info("FaceIdenService.exe ...1");
|
|
|
|
|
|
+
|
|
|
|
+ //初始化引擎,加载人员图像人脸特征库
|
|
|
|
+ String personImageDir = idenRoot + "data/final/image/person";
|
|
|
|
+ File[] imgPersonFiles = new File(personImageDir).listFiles();
|
|
|
|
+ FaceMonitor faceMonitorPerson = FaceIdenTool.initFaceMonitor(idenRoot,imgPersonFiles);
|
|
|
|
+
|
|
for(File cameraCodedir : cameraCodeDirs) {
|
|
for(File cameraCodedir : cameraCodeDirs) {
|
|
if(cameraCodedir.isDirectory()){
|
|
if(cameraCodedir.isDirectory()){
|
|
File[] imgFiles = cameraCodedir.listFiles();
|
|
File[] imgFiles = cameraCodedir.listFiles();
|
|
if(imgFiles != null && imgFiles.length > 0){
|
|
if(imgFiles != null && imgFiles.length > 0){
|
|
- logger.info("FaceIdenService.exe ...2");
|
|
|
|
String cameraCode = cameraCodedir.getName();
|
|
String cameraCode = cameraCodedir.getName();
|
|
QueryWrapper<IdenCamera> queryWrapper = new QueryWrapper<>();
|
|
QueryWrapper<IdenCamera> queryWrapper = new QueryWrapper<>();
|
|
queryWrapper.lambda().eq(IdenCamera::getCode,cameraCode);
|
|
queryWrapper.lambda().eq(IdenCamera::getCode,cameraCode);
|
|
@@ -82,9 +88,8 @@ public class FaceIdenService {
|
|
if(idenCamera == null){
|
|
if(idenCamera == null){
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
- logger.info("FaceIdenService.exe ...3");
|
|
|
|
//获取特征码
|
|
//获取特征码
|
|
- FaceModel[] faceModels = FaceIdenTool.extractFeature(faceMonitor,imgFiles);
|
|
|
|
|
|
+ FaceModel[] faceModels = FaceIdenTool.extractFeature(idenRoot,imgFiles);
|
|
|
|
|
|
List<IdenFaceImage> idenFaceImageList = new ArrayList<>();
|
|
List<IdenFaceImage> idenFaceImageList = new ArrayList<>();
|
|
for(int i = 0; i < imgFiles.length; i++) {
|
|
for(int i = 0; i < imgFiles.length; i++) {
|
|
@@ -93,14 +98,12 @@ public class FaceIdenService {
|
|
idenFaceImage.setCameraId(idenCamera.getId());
|
|
idenFaceImage.setCameraId(idenCamera.getId());
|
|
idenFaceImage.setCommunityId(idenCamera.getCommunityId());
|
|
idenFaceImage.setCommunityId(idenCamera.getCommunityId());
|
|
String photographPlace = idenCamera.getPlace();
|
|
String photographPlace = idenCamera.getPlace();
|
|
- logger.info("FaceIdenService.exe ...4");
|
|
|
|
if (StringUtils.isEmpty(photographPlace)) {
|
|
if (StringUtils.isEmpty(photographPlace)) {
|
|
IdenCommunity idenCommunity = idenCommunityService.getById(idenCamera.getCommunityId());
|
|
IdenCommunity idenCommunity = idenCommunityService.getById(idenCamera.getCommunityId());
|
|
if(idenCommunity != null) {
|
|
if(idenCommunity != null) {
|
|
photographPlace = idenCommunity.getName() + "(" + idenCamera.getLongitude() + ":" + idenCamera.getLatitude() + ")";
|
|
photographPlace = idenCommunity.getName() + "(" + idenCamera.getLongitude() + ":" + idenCamera.getLatitude() + ")";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- logger.info("FaceIdenService.exe ...5");
|
|
|
|
idenFaceImage.setPhotographPlace(photographPlace);
|
|
idenFaceImage.setPhotographPlace(photographPlace);
|
|
idenFaceImage.setLongitude(idenCamera.getLongitude());
|
|
idenFaceImage.setLongitude(idenCamera.getLongitude());
|
|
idenFaceImage.setLatitude(idenCamera.getLatitude());
|
|
idenFaceImage.setLatitude(idenCamera.getLatitude());
|
|
@@ -108,39 +111,64 @@ public class FaceIdenService {
|
|
String photographTime = imgFileName.substring(0, imgFileName.indexOf("_"));
|
|
String photographTime = imgFileName.substring(0, imgFileName.indexOf("_"));
|
|
idenFaceImage.setPhotographTime(DateUtils.strToDate(photographTime,"yyyyMMddHHmmss"));
|
|
idenFaceImage.setPhotographTime(DateUtils.strToDate(photographTime,"yyyyMMddHHmmss"));
|
|
|
|
|
|
- idenFaceImage.setFeatPtr(FaceIdenTool.getFeatPtr(faceModels,String.valueOf(i)));
|
|
|
|
|
|
+ if(faceModels[i] != null){
|
|
|
|
+ idenFaceImage.setFeatPtr(ByteUtil.byte2Hex(faceModels[i].getFeatValue()));
|
|
|
|
+ }
|
|
|
|
|
|
File finalDir = new File(imgFile.getParentFile().getAbsolutePath().replace("origin","final"));
|
|
File finalDir = new File(imgFile.getParentFile().getAbsolutePath().replace("origin","final"));
|
|
if(!finalDir.exists()){
|
|
if(!finalDir.exists()){
|
|
finalDir.mkdirs();
|
|
finalDir.mkdirs();
|
|
}
|
|
}
|
|
- logger.info("FaceIdenService.exe ...finalDir == " + finalDir.getAbsolutePath());
|
|
|
|
- logger.info("FaceIdenService.exe ...imgFile.getName() == " + imgFileName);
|
|
|
|
|
|
+ logger.info("FaceIdenService.handleCameraImage ...finalDir == " + finalDir.getAbsolutePath());
|
|
|
|
+ logger.info("FaceIdenService.handleCameraImage ...imgFile.getName() == " + imgFileName);
|
|
File finalImgFile = new File(finalDir, imgFileName);
|
|
File finalImgFile = new File(finalDir, imgFileName);
|
|
|
|
|
|
- logger.info("FaceIdenService.exe ...finalImgFile == " + finalImgFile.getAbsolutePath());
|
|
|
|
|
|
+ logger.info("FaceIdenService.handleCameraImage ...finalImgFile == " + finalImgFile.getAbsolutePath());
|
|
|
|
|
|
imgFile.renameTo(finalImgFile);//移动到最终目录
|
|
imgFile.renameTo(finalImgFile);//移动到最终目录
|
|
|
|
|
|
idenFaceImage.setImage( imageUrl + cameraCode + "/" + finalImgFile.getName());
|
|
idenFaceImage.setImage( imageUrl + cameraCode + "/" + finalImgFile.getName());
|
|
|
|
|
|
- //TODO 关联personId
|
|
|
|
|
|
+ //和人员图像库比对特征码,关联personId
|
|
|
|
+ if(faceModels[i] != null){
|
|
|
|
+
|
|
|
|
+ int hitIndex = FaceIdenTool.getHitIndex(faceMonitorPerson,faceModels[i]);
|
|
|
|
+ if (hitIndex != -1){
|
|
|
|
+ Long personId = personService.getPersonIdByImageFileName(imgPersonFiles[hitIndex].getName());
|
|
|
|
+ if(personId != null) {
|
|
|
|
+ idenFaceImage.setPersonId(personId);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
idenFaceImage.setCreateTime(new Date());
|
|
idenFaceImage.setCreateTime(new Date());
|
|
idenFaceImageList.add(idenFaceImage);
|
|
idenFaceImageList.add(idenFaceImage);
|
|
}
|
|
}
|
|
- logger.info("FaceIdenService.exe ...7");
|
|
|
|
|
|
+
|
|
//把图像存到图库中
|
|
//把图像存到图库中
|
|
if (CollUtil.isNotEmpty(idenFaceImageList)) {
|
|
if (CollUtil.isNotEmpty(idenFaceImageList)) {
|
|
- logger.info("FaceIdenService.exe ...8");
|
|
|
|
idenFaceImageService.saveBatch(idenFaceImageList);
|
|
idenFaceImageService.saveBatch(idenFaceImageList);
|
|
}
|
|
}
|
|
- }
|
|
|
|
|
|
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ //释放人脸引擎
|
|
|
|
+ FaceIdenTool.releaseEngine(faceMonitorPerson);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- logger.info("FaceIdenService.exe end");
|
|
|
|
|
|
+ logger.info("FaceIdenService.handleCameraImage end");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ *
|
|
|
|
+ * @throws Exception
|
|
|
|
+ */
|
|
|
|
+
|
|
|
|
+ public void handleCameraVideo() throws Exception {
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|