123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- package com.iden.bms.service;
- import cn.hutool.core.bean.BeanUtil;
- import cn.hutool.core.collection.CollUtil;
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- import com.face.monitor.FaceMonitor;
- import com.face.monitor.model.FaceModel;
- import com.iden.bms.face.FaceIdenTool;
- import com.iden.common.entity.IdenFaceImage;
- import com.iden.common.entity.IdenWarningPersonTrace;
- import com.iden.common.exception.BDException;
- import com.iden.common.service.IdenWarningPersonTraceService;
- import com.iden.common.util.DateUtils;
- import com.iden.common.util.ImgUtil;
- import com.iden.common.vo.FaceRetrieveResultVO;
- import com.iden.common.vo.TraceVO;
- import com.iden.common.vo.UserLoginedConvertVO;
- import org.apache.commons.lang3.StringUtils;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.stereotype.Service;
- import org.springframework.web.multipart.MultipartFile;
- import javax.annotation.Resource;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.List;
- import java.util.UUID;
- /**
- *
- * @author makejava
- * @since 2021-05-21 00:08:38
- */
- @Service
- public class TraceService {
- @Resource
- private FaceImageService faceImageService;
- @Resource
- private IdenWarningPersonTraceService idenWarningPersonTraceService;
- @Value("${iden.root:#{null}}")
- private String idenRoot;
- @Value("${file.url:#{null}}")
- private String fileUrl;
- /**
- * 上传图像
- * @param file
- * @return 访问URL
- */
- public String uploadImage(MultipartFile file) throws BDException {
- String image = null;
- try {
- if (file != null) {
- //获取文件名
- String fileName = file.getOriginalFilename();
- if (org.springframework.util.StringUtils.isEmpty(fileName) || file.getSize() == 0) {
- throw new BDException("图像文件不能为空!");
- }
- //验证文件名是否合格
- if (!ImgUtil.isImg(fileName)) {
- throw new BDException("图像文件必须是图片格式!");
- }
- String saveFileName = DateUtils.getCurrYyyyMMddHHmmssDate() + "_" + UUID.randomUUID().toString() + fileName.substring(fileName.lastIndexOf("."), fileName.length());
- String picFullFileName = idenRoot + "data/trace/" + saveFileName;
- FileOutputStream fos = new FileOutputStream(picFullFileName);
- fos.write(file.getBytes());
- image = saveFileName;
- } else {
- throw new BDException("上传失败");
- }
- } catch (Exception e) {
- throw new BDException("上传失败",e);
- }
- return image;
- }
- /**
- * 上传图像查询轨迹列表
- * 图像识别,使用特征码查询图像库,得到图库表中对应的数据列表
- * @return
- */
- public List<TraceVO> listUploadImagesTrace(String imageNames, String beginDate, String endDate, UserLoginedConvertVO loginUser) {
- Date dateBegin = null;
- if(StringUtils.isNotEmpty(beginDate)){
- dateBegin = DateUtils.strToDate(beginDate,"yyyyMMdd");
- }
- Date dateEnd = null;
- if(StringUtils.isNotEmpty(endDate)){
- dateEnd = DateUtils.strToDate(endDate,"yyyyMMdd");
- }
- if(imageNames.endsWith(",")) {
- imageNames = imageNames.substring(0, imageNames.length() - 1);
- }
- String[] imageNameArr = imageNames.split(",");
- File[] imgFiles = new File[imageNameArr.length];
- for (int i = 0; i < imageNameArr.length; i++) {
- if (StringUtils.isNotEmpty(imageNameArr[i])){
- imgFiles[i] = new File(idenRoot + "data/trace/" + imageNameArr[i]);
- }
- }
- //上传的图像的特征码结构体数组
- FaceModel[] faceModels = FaceIdenTool.extractFeature(idenRoot,imgFiles);
- //初始化引擎,加载摄像头上传的在时间段内的图像人脸特征库
- File cameraImageDirFile = new File(idenRoot + "data/final/camera/image");
- File[] cameraImageFiles = getCameraImageFiles(cameraImageDirFile,dateBegin,dateEnd);
- FaceMonitor faceMonitorCamera = FaceIdenTool.initFaceMonitor(idenRoot,cameraImageFiles);
- List<TraceVO> result = new ArrayList<>();
- for(FaceModel faceModel : faceModels) {
- FaceRetrieveResultVO faceRetrieveResultVO = FaceIdenTool.getHitResult(faceMonitorCamera,faceModel);
- if (faceRetrieveResultVO != null) {
- int hitIndex = faceRetrieveResultVO.getIndex();
- IdenFaceImage idenFaceImage = faceImageService.getIdenFaceImageByImageFileName(cameraImageFiles[hitIndex].getName());
- if(idenFaceImage != null){
- TraceVO vo = new TraceVO();
- BeanUtil.copyProperties(idenFaceImage,vo);
- result.add(vo);
- }
- }
- }
- return result;
- }
- private File[] getCameraImageFiles(File cameraImageDirFile,Date dateBegin, Date dateEnd) {
- List<File> list = new ArrayList<>();
- File[] cameraCodeDirFiles = cameraImageDirFile.listFiles();
- if (cameraCodeDirFiles != null && cameraCodeDirFiles.length > 0){
- for (File cameraCodeDirFile : cameraCodeDirFiles) {
- File[] cameraImageFiles = cameraCodeDirFile.listFiles();
- if (cameraImageFiles != null && cameraImageFiles.length > 0){
- for (File cameraImageFile : cameraImageFiles){
- String photographTime = cameraImageFile.getName().substring(0, cameraImageFile.getName().indexOf("_"));
- Date photographDate = DateUtils.strToDate(photographTime.substring(0,8),"yyyyMMdd");
- if(dateBegin != null && photographDate.before(dateBegin)){
- continue;
- }
- if(dateEnd != null && photographDate.after(dateEnd)){
- continue;
- }
- list.add(cameraImageFile);
- }
- }
- }
- }
- File[] resuit = new File[list.size()];
- return list.toArray(resuit);
- }
- /**
- * 上传图像查询轨迹列表
- * 图像识别,使用特征码查询图像库,得到图库表中对应的数据列表
- * @return
- */
- public List<TraceVO> listTrace(String uid, String beginDate, String endDate, UserLoginedConvertVO loginUser) {
- List<TraceVO> vos = new ArrayList<>();
- QueryWrapper<IdenWarningPersonTrace> queryWrapper = new QueryWrapper<>();
- queryWrapper.lambda().eq(IdenWarningPersonTrace::getUid,uid)
- .ge(StringUtils.isNotEmpty(beginDate),IdenWarningPersonTrace::getDataDate,beginDate)
- .le(StringUtils.isNotEmpty(endDate),IdenWarningPersonTrace::getDataDate,endDate)
- .orderByAsc(IdenWarningPersonTrace::getPhotographTime);
- List<IdenWarningPersonTrace> idenWarningPersonTraceList = this.idenWarningPersonTraceService.list(queryWrapper);
- if(CollUtil.isNotEmpty(idenWarningPersonTraceList)) {
- idenWarningPersonTraceList.forEach(item->{
- TraceVO vo = new TraceVO();
- IdenWarningPersonTrace idenWarningPersonTrace = new IdenWarningPersonTrace();
- BeanUtil.copyProperties(idenWarningPersonTrace,vo);
- vos.add(vo);
- });
- }
- return vos;
- }
- }
|