|
|
|
@ -0,0 +1,146 @@
|
|
|
|
|
package com.ycwl.basic.service.impl.task;
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
|
|
import com.aliyuncs.exceptions.ClientException;
|
|
|
|
|
import com.aliyuncs.facebody.model.v20191230.AddFaceEntityRequest;
|
|
|
|
|
import com.aliyuncs.facebody.model.v20191230.AddFaceRequest;
|
|
|
|
|
import com.aliyuncs.facebody.model.v20191230.AddFaceResponse;
|
|
|
|
|
import com.aliyuncs.facebody.model.v20191230.DeleteFaceEntityRequest;
|
|
|
|
|
import com.aliyuncs.facebody.model.v20191230.SearchFaceRequest;
|
|
|
|
|
import com.aliyuncs.facebody.model.v20191230.SearchFaceResponse;
|
|
|
|
|
import com.ycwl.basic.mapper.pc.DeviceMapper;
|
|
|
|
|
import com.ycwl.basic.mapper.pc.FaceMapper;
|
|
|
|
|
import com.ycwl.basic.mapper.pc.FaceSampleMapper;
|
|
|
|
|
import com.ycwl.basic.mapper.pc.ScenicMapper;
|
|
|
|
|
import com.ycwl.basic.model.pc.face.entity.FaceEntity;
|
|
|
|
|
import com.ycwl.basic.model.pc.face.resp.FaceRespVO;
|
|
|
|
|
import com.ycwl.basic.model.pc.faceSample.entity.FaceSampleEntity;
|
|
|
|
|
import com.ycwl.basic.model.pc.faceSample.req.FaceSampleReqQuery;
|
|
|
|
|
import com.ycwl.basic.model.pc.faceSample.resp.FaceSampleRespVO;
|
|
|
|
|
import com.ycwl.basic.model.task.resp.AddFaceRespVo;
|
|
|
|
|
import com.ycwl.basic.model.task.resp.SearchFaceRespVo;
|
|
|
|
|
import com.ycwl.basic.service.task.TaskFaceService;
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
import com.aliyuncs.DefaultAcsClient;
|
|
|
|
|
import com.aliyuncs.IAcsClient;
|
|
|
|
|
import com.aliyuncs.profile.DefaultProfile;
|
|
|
|
|
|
|
|
|
|
import java.text.SimpleDateFormat;
|
|
|
|
|
import java.util.Date;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
@Service
|
|
|
|
|
public class TaskFaceServiceImpl implements TaskFaceService {
|
|
|
|
|
@Autowired
|
|
|
|
|
private FaceMapper faceMapper;
|
|
|
|
|
@Autowired
|
|
|
|
|
private FaceSampleMapper faceSampleMapper;
|
|
|
|
|
@Autowired
|
|
|
|
|
private ScenicMapper scenicMapper;
|
|
|
|
|
private static final String DATE_FORMAT="yyyyMMddHHmmssSSS";
|
|
|
|
|
@Autowired
|
|
|
|
|
private DeviceMapper deviceMapper;
|
|
|
|
|
|
|
|
|
|
private IAcsClient getClient() {
|
|
|
|
|
DefaultProfile profile = DefaultProfile.getProfile("cn-shanghai","LTAIDySvOV8yC7VZ","RgO5bwRnHrsyDak0IaLEF6iTRo7469");
|
|
|
|
|
IAcsClient client = new DefaultAcsClient(profile);
|
|
|
|
|
return client;
|
|
|
|
|
}
|
|
|
|
|
@Override
|
|
|
|
|
public SearchFaceRespVo searchFace(Long scenicId, Long faceId) {
|
|
|
|
|
FaceRespVO faceRespVO = faceMapper.getById(faceId);
|
|
|
|
|
IAcsClient client = getClient();
|
|
|
|
|
SearchFaceRequest request = new SearchFaceRequest();
|
|
|
|
|
request.setDbName(scenicId.toString());
|
|
|
|
|
request.setImageUrl(faceRespVO.getFaceUrl());
|
|
|
|
|
request.setLimit(100);
|
|
|
|
|
request.setQualityScoreThreshold(80F);
|
|
|
|
|
try {
|
|
|
|
|
SearchFaceResponse response = client.getAcsResponse(request);
|
|
|
|
|
List<SearchFaceResponse.Data.MatchListItem> matchList = response.getData().getMatchList();
|
|
|
|
|
if (matchList.isEmpty()) {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
SearchFaceRespVo respVo = new SearchFaceRespVo();
|
|
|
|
|
FaceEntity faceEntity = new FaceEntity();
|
|
|
|
|
faceEntity.setId(faceId);
|
|
|
|
|
faceEntity.setMatchResult(JSON.toJSONString(matchList));
|
|
|
|
|
faceEntity.setScore(matchList.get(0).getQualitieScore());
|
|
|
|
|
List<SearchFaceResponse.Data.MatchListItem.FaceItemsItem> faceItems = matchList.get(0).getFaceItems().stream()
|
|
|
|
|
.filter(faceItemsItem -> faceItemsItem.getConfidence() > 50).collect(Collectors.toList());
|
|
|
|
|
faceEntity.setMatchSampleIds(
|
|
|
|
|
faceItems.stream()
|
|
|
|
|
.map(SearchFaceResponse.Data.MatchListItem.FaceItemsItem::getExtraData)
|
|
|
|
|
.collect(Collectors.joining(","))
|
|
|
|
|
);
|
|
|
|
|
faceMapper.update(faceEntity);
|
|
|
|
|
respVo.setScore(matchList.get(0).getQualitieScore());
|
|
|
|
|
return respVo;
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public AddFaceRespVo addFaceSample(Long faceSampleId) {
|
|
|
|
|
FaceSampleRespVO faceSampleRespVO = faceSampleMapper.getById(faceSampleId);
|
|
|
|
|
AddFaceEntityRequest request = new AddFaceEntityRequest();
|
|
|
|
|
request.setDbName(faceSampleRespVO.getScenicId().toString());
|
|
|
|
|
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
|
|
|
|
|
String entityId = faceSampleRespVO.getDeviceId().toString() + "_" + sdf.format(faceSampleRespVO.getCreateAt());
|
|
|
|
|
request.setEntityId(entityId);
|
|
|
|
|
IAcsClient client = getClient();
|
|
|
|
|
try {
|
|
|
|
|
client.getAcsResponse(request);
|
|
|
|
|
} catch (ClientException e) {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
AddFaceRequest addFaceRequest = new AddFaceRequest();
|
|
|
|
|
addFaceRequest.setDbName(faceSampleRespVO.getScenicId().toString());
|
|
|
|
|
addFaceRequest.setEntityId(entityId);
|
|
|
|
|
addFaceRequest.setImageUrl(faceSampleRespVO.getFaceUrl());
|
|
|
|
|
addFaceRequest.setExtraData(faceSampleId.toString());
|
|
|
|
|
AddFaceRespVo respVo = new AddFaceRespVo();
|
|
|
|
|
try {
|
|
|
|
|
AddFaceResponse acsResponse = client.getAcsResponse(addFaceRequest);
|
|
|
|
|
FaceSampleEntity faceSampleEntity = new FaceSampleEntity();
|
|
|
|
|
faceSampleEntity.setId(faceSampleId);
|
|
|
|
|
faceSampleEntity.setScore(acsResponse.getData().getQualitieScore());
|
|
|
|
|
faceSampleEntity.setUpdateAt(new Date());
|
|
|
|
|
faceSampleMapper.update(faceSampleEntity);
|
|
|
|
|
respVo.setScore(acsResponse.getData().getQualitieScore());
|
|
|
|
|
} catch (ClientException e) {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
return respVo;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void batchDeleteFace(Long scenicId) {
|
|
|
|
|
FaceSampleReqQuery query = new FaceSampleReqQuery();
|
|
|
|
|
query.setDeviceId(scenicId);
|
|
|
|
|
faceSampleMapper.list(query);
|
|
|
|
|
Date thatDay = DateUtil.offsetDay(new Date(), -3);
|
|
|
|
|
Date dayStart = DateUtil.beginOfDay(thatDay);
|
|
|
|
|
Date dayEnd = DateUtil.endOfDay(thatDay);
|
|
|
|
|
query.setStartTime(dayStart);
|
|
|
|
|
query.setEndTime(dayEnd);
|
|
|
|
|
IAcsClient client = getClient();
|
|
|
|
|
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
|
|
|
|
|
faceSampleMapper.list(query).forEach(faceSampleEntity -> {
|
|
|
|
|
String entityId = faceSampleEntity.getDeviceId().toString() + "_" + sdf.format(faceSampleEntity.getCreateAt());
|
|
|
|
|
DeleteFaceEntityRequest request = new DeleteFaceEntityRequest();
|
|
|
|
|
request.setDbName(scenicId.toString());
|
|
|
|
|
request.setEntityId(entityId);
|
|
|
|
|
try {
|
|
|
|
|
client.getAcsResponse(request);
|
|
|
|
|
} catch (ClientException e) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|