추론 run 추가 #98
@@ -151,7 +151,7 @@ public class InferenceResultApiController {
|
||||
@RequestBody
|
||||
@Valid
|
||||
InferenceResultDto.RegReq req) {
|
||||
UUID uuid = inferenceResultService.saveInferenceInfo(req);
|
||||
UUID uuid = inferenceResultService.run(req);
|
||||
return ApiResponseDto.ok(uuid);
|
||||
}
|
||||
|
||||
|
||||
@@ -45,6 +45,7 @@ import java.time.ZonedDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
@@ -116,6 +117,124 @@ public class InferenceResultService {
|
||||
return dto.getUuid();
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public UUID run(InferenceResultDto.RegReq req) {
|
||||
List<MngListDto> targetDtoList = mapSheetMngCoreService.getHstMapSheetList(req);
|
||||
List<String> compareList = mapSheetMngCoreService.getMapSheetMngHst(req.getCompareYyyy());
|
||||
List<String> targetList =
|
||||
mapSheetMngCoreService.getHstMapSheetList(req).stream()
|
||||
.map(MngListDto::getMapSheetNum)
|
||||
.filter(Objects::nonNull)
|
||||
.distinct()
|
||||
.toList();
|
||||
|
||||
log.info(
|
||||
"hst list count compareList = {}, targetList = {}", compareList.size(), targetList.size());
|
||||
|
||||
Set<String> compareSet = new HashSet<>(compareList);
|
||||
Set<String> targetSet = new HashSet<>(targetList);
|
||||
|
||||
long intersectionCount =
|
||||
targetSet.stream()
|
||||
.distinct()
|
||||
.filter(compareSet::contains)
|
||||
.count(); // compare와 target에 공통으로 존재하는 도협 수
|
||||
|
||||
long excludedTargetCount =
|
||||
targetSet.stream()
|
||||
.distinct()
|
||||
.filter(s -> !compareSet.contains(s))
|
||||
.count(); // target 에만 존재하는 도협 수 (compare 에는 없음)
|
||||
|
||||
long onlyCompareCount =
|
||||
compareSet.stream()
|
||||
.distinct()
|
||||
.filter(s -> !targetSet.contains(s))
|
||||
.count(); // compare 에만 존재하는 도협 수 (target 에는 없음)
|
||||
|
||||
log.info(
|
||||
"""
|
||||
===== MapSheet Year Comparison =====
|
||||
target Total: {}
|
||||
compare Total: {}
|
||||
Intersection: {}
|
||||
target Only (Excluded from compare): {}
|
||||
compare Only: {}
|
||||
====================================
|
||||
""",
|
||||
targetSet.size(),
|
||||
compareSet.size(),
|
||||
intersectionCount,
|
||||
excludedTargetCount,
|
||||
onlyCompareCount);
|
||||
|
||||
List<String> filteredTargetList =
|
||||
targetSet.stream() // target 기준으로
|
||||
.filter(compareSet::contains) // compare에 있는 도협만 남김
|
||||
.toList();
|
||||
|
||||
Scene modelComparePath =
|
||||
getSceneInference(req.getCompareYyyy().toString(), filteredTargetList, "", "");
|
||||
|
||||
Scene modelTargetPath =
|
||||
getSceneInference(req.getTargetYyyy().toString(), filteredTargetList, "", "");
|
||||
|
||||
// 작은 쪽 기준으로 탐지건수/파일생성 리스트 결정
|
||||
List<ImageFeature> imageFeatureList;
|
||||
if (modelComparePath.getFeatures().size() <= modelTargetPath.getFeatures().size()) {
|
||||
imageFeatureList = modelComparePath.getFeatures();
|
||||
} else {
|
||||
imageFeatureList = modelTargetPath.getFeatures();
|
||||
}
|
||||
|
||||
// imageFeatureList 기준 sceneId Set
|
||||
Set<String> sceneIdSet =
|
||||
imageFeatureList.stream()
|
||||
.map(ImageFeature::getSceneId)
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
// targetList(List<MngListDto>) 리턴용으로 필터링
|
||||
List<MngListDto> newTargetList =
|
||||
targetDtoList.stream()
|
||||
.filter(m -> m.getMapSheetNum() != null)
|
||||
.filter(m -> sceneIdSet.contains(m.getMapSheetNum()))
|
||||
.toList();
|
||||
|
||||
// 목록 및 추론 대상 도엽정보 저장
|
||||
UUID uuid = inferenceResultCoreService.saveInferenceInfo(req, newTargetList);
|
||||
|
||||
// ai 서버에 전달할 파라미터 생성
|
||||
pred_requests_areas predRequestsAreas = new pred_requests_areas();
|
||||
predRequestsAreas.setInput1_year(req.getCompareYyyy());
|
||||
predRequestsAreas.setInput2_year(req.getTargetYyyy());
|
||||
predRequestsAreas.setInput1_scene_path(modelComparePath.getFilePath());
|
||||
predRequestsAreas.setInput2_scene_path(modelTargetPath.getFilePath());
|
||||
|
||||
InferenceSendDto m1 = this.getModelInfo(req.getModel1Uuid());
|
||||
m1.setPred_requests_areas(predRequestsAreas);
|
||||
|
||||
log.info("[INFERENCE] Start m1 = {}", m1);
|
||||
m1.setPred_requests_areas(predRequestsAreas);
|
||||
|
||||
// ai 추론 실행 api 호출
|
||||
Long batchId = ensureAccepted(m1);
|
||||
|
||||
// ai 추론 실행후 응답값 update
|
||||
SaveInferenceAiDto saveInferenceAiDto = new SaveInferenceAiDto();
|
||||
saveInferenceAiDto.setUuid(uuid);
|
||||
saveInferenceAiDto.setBatchId(batchId);
|
||||
saveInferenceAiDto.setStatus(Status.IN_PROGRESS.getId());
|
||||
saveInferenceAiDto.setType(ModelType.G1.getId());
|
||||
saveInferenceAiDto.setInferStartDttm(ZonedDateTime.now());
|
||||
saveInferenceAiDto.setModelComparePath(modelComparePath.getFilePath());
|
||||
saveInferenceAiDto.setModelTargetPath(modelTargetPath.getFilePath());
|
||||
saveInferenceAiDto.setModelStartDttm(ZonedDateTime.now());
|
||||
inferenceResultCoreService.update(saveInferenceAiDto);
|
||||
|
||||
return uuid;
|
||||
}
|
||||
|
||||
/**
|
||||
* 변화탐지 실행 정보 생성
|
||||
*
|
||||
@@ -146,31 +265,31 @@ public class InferenceResultService {
|
||||
|
||||
List<TotalListDto> totalNumList = new ArrayList<>();
|
||||
|
||||
if (DetectOption.EXCL.getId().equals(req.getDetectOption())) {
|
||||
// "추론제외" 일때 전년도 이전 값이 있어도 전년도 도엽이 없으면 비교 안함
|
||||
for (MngListCompareDto dto : compareList) {
|
||||
if (Objects.equals(dto.getBeforeYear(), req.getCompareYyyy())) {
|
||||
TotalListDto totalDto = new TotalListDto();
|
||||
totalDto.setBeforeYear(dto.getBeforeYear() == null ? 0 : dto.getBeforeYear());
|
||||
totalDto.setMapSheetNum(dto.getMapSheetNum());
|
||||
totalNumList.add(totalDto);
|
||||
}
|
||||
}
|
||||
} else if (DetectOption.PREV.getId().equals(req.getDetectOption())) {
|
||||
// "이전 년도 도엽 사용" 이면 전년도 이전 도엽도 사용
|
||||
for (MngListCompareDto dto : compareList) {
|
||||
if (dto.getBeforeYear() != 0) {
|
||||
TotalListDto totalDto = new TotalListDto();
|
||||
totalDto.setBeforeYear(dto.getBeforeYear() == null ? 0 : dto.getBeforeYear());
|
||||
totalDto.setMapSheetNum(dto.getMapSheetNum());
|
||||
totalNumList.add(totalDto);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (totalNumList.isEmpty()) {
|
||||
throw new CustomApiException("NOT_FOUND_COMPARE_YEAR", HttpStatus.NOT_FOUND);
|
||||
}
|
||||
// if (DetectOption.EXCL.getId().equals(req.getDetectOption())) {
|
||||
// // "추론제외" 일때 전년도 이전 값이 있어도 전년도 도엽이 없으면 비교 안함
|
||||
// for (MngListCompareDto dto : compareList) {
|
||||
// if (Objects.equals(dto.getBeforeYear(), req.getCompareYyyy())) {
|
||||
// TotalListDto totalDto = new TotalListDto();
|
||||
// totalDto.setBeforeYear(dto.getBeforeYear() == null ? 0 : dto.getBeforeYear());
|
||||
// totalDto.setMapSheetNum(dto.getMapSheetNum());
|
||||
// totalNumList.add(totalDto);
|
||||
// }
|
||||
// }
|
||||
// } else if (DetectOption.PREV.getId().equals(req.getDetectOption())) {
|
||||
// // "이전 년도 도엽 사용" 이면 전년도 이전 도엽도 사용
|
||||
// for (MngListCompareDto dto : compareList) {
|
||||
// if (dto.getBeforeYear() != 0) {
|
||||
// TotalListDto totalDto = new TotalListDto();
|
||||
// totalDto.setBeforeYear(dto.getBeforeYear() == null ? 0 : dto.getBeforeYear());
|
||||
// totalDto.setMapSheetNum(dto.getMapSheetNum());
|
||||
// totalNumList.add(totalDto);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// if (totalNumList.isEmpty()) {
|
||||
// throw new CustomApiException("NOT_FOUND_COMPARE_YEAR", HttpStatus.NOT_FOUND);
|
||||
// }
|
||||
|
||||
// 사용할 영상파일 년도 기록 및 추론에 포함되는지 설정
|
||||
for (MngListDto target : targetList) {
|
||||
|
||||
Reference in New Issue
Block a user