학습데이터 geojson .md 반영
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
## 📌 학습데이터 라벨링 geojson 생성
|
||||
|
||||
### 🧩 사용하는 테이블 목록
|
||||
|
||||
- inference_results_testing : AI 수행 이후 변화탐지된 polygon insert 됨
|
||||
- tb_map_sheet_anal_inference : 추론 실행 완료 후, 추론 마스터 값 insert
|
||||
- anal_state : 학습데이터 제작 상태 -> (enum) `LabelMngState`
|
||||
- 💡 tb_map_sheet_anal_data_inference_geom 💡 : 추론 실행 완료 후, testing 값 insert
|
||||
- tb_labeling_inspector : 라벨링 할당 시 선택한 검수자 insert
|
||||
- 라벨링 할당 시 해당 회차별 검수자를 insert
|
||||
- 매일 0시 스케줄링, 어제 라벨링 완료한 데이터 기준 검수 할당 진행
|
||||
- 💡 tb_labeling_assignment 💡 : 라벨링 할당 테이블 (polygon 수만큼)
|
||||
- worker_uid : 라벨러 사번
|
||||
- inspector_uid : 검수자 사번
|
||||
- work_state : 라벨 진행 상태 -> (enum) `LabelState`
|
||||
- inspect_state : 검수 진행 상태 -> (enum) `InspectState`
|
||||
- work_stat_dttm : 라벨 상태 변경일시
|
||||
- inspect_stat_dttm : 검수 상태 변경일시
|
||||
- 💡 tb_map_sheet_learn_data_geom 💡 : 라벨링 툴에서 그린 polygon insert/update
|
||||
- file_create_yn : geojson 파일 생성 후 true 로 업데이트
|
||||
|
||||
**💡표기된 테이블은 geo_uid (Long) 값으로 연결됨**
|
||||
|
||||
### 🧩 스케줄링 로직
|
||||
|
||||
✅ 파일 위치 : TrainingDataReviewJobService.java
|
||||
|
||||
#### 1. 라벨링 완료 건 검수 할당
|
||||
|
||||
- Method : assignReviewerYesterdayLabelComplete
|
||||
- 매일 00시 00분 수행 (시간 변경 가능)
|
||||
- 라벨링 상태 `work_state = DONE`
|
||||
- 라벨링 상태 변경일시(work_stat_dttm) 기준 어제인 건 조회하여 할당
|
||||
- 실패 시, 수동 호출 API : `/api/training-data/review/run-schedule`
|
||||
|
||||
#### 2. 학습데이터 geojson 생성
|
||||
|
||||
- Method : exportGeojsonLabelingGeom
|
||||
- 매일 02시 00분 수행 (시간 변경 가능)
|
||||
- 학습데이터 제작 상태가 `ING`인 회차
|
||||
- 어제까지 검수 상태 업데이트 된 polygon (`inspect_stat_dttm`)
|
||||
- geojson 제작 대상은 누적으로 조회함
|
||||
- `inspect_state = 'COMPLETE'`
|
||||
- `inspect_stat_dttm < 오늘 이전 모두`
|
||||
- 파일 생성 후 polygon별 `file_create_yn = true` 로 업데이트
|
||||
- 회차에 할당된 polygon 총 개수(제외상태 빼고) = `file_create_yn = true` 인 개수가 맞을 때까지 스케줄링 진행
|
||||
- 실패 시, 수동 호출 API : `/api/training-data/review/run-label-geojson`
|
||||
- 파일 생성 위치: `/kamco-nfs/model_output/labeling/`
|
||||
- ️📚 생성 규칙
|
||||
|
||||
```
|
||||
/kamco-nfs/model_output/labeling/
|
||||
└─ {RESULT_UID}
|
||||
└─{RESULT_UID 8자리}_{비교년도}_{기준년도}_{도엽번호}_D15.geojson
|
||||
```
|
||||
|
||||
### 🧩 사용 쿼리
|
||||
|
||||
- 📄 TRAINING_DATA_GEOJSON_QUERY.sql 참고
|
||||
|
||||
### 🧩 라벨링 툴 접속 가능한 계정
|
||||
|
||||
`* password : qwe123!@#`
|
||||
|
||||
1. 라벨러
|
||||
|
||||
- 010222297501
|
||||
- 98765432
|
||||
- 20202020
|
||||
- 123456
|
||||
- 01022223333
|
||||
|
||||
2. 검수자
|
||||
|
||||
- 01022225555
|
||||
- 125511
|
||||
- K20251212001
|
||||
@@ -0,0 +1,85 @@
|
||||
--1. 학습데이터 진행 중 회차 조회
|
||||
select lae1_0.anal_uid,
|
||||
msle1_0.uid,
|
||||
sum(case
|
||||
when (lae1_0.inspect_state = 'UNCONFIRM'
|
||||
or lae1_0.inspect_state = 'COMPLETE'
|
||||
or lae1_0.inspect_state is null)
|
||||
then 1
|
||||
else 0
|
||||
end), --allCnt
|
||||
sum(case
|
||||
when (lae1_0.inspect_state = 'COMPLETE')
|
||||
then 1
|
||||
else 0
|
||||
end), --completeCnt
|
||||
sum(case
|
||||
when (msldge1_0.file_create_yn = true)
|
||||
then 1
|
||||
else 0
|
||||
end) --fileCnt
|
||||
from tb_labeling_assignment lae1_0
|
||||
join
|
||||
tb_map_sheet_anal_inference msaie1_0
|
||||
on lae1_0.anal_uid = msaie1_0.anal_uid
|
||||
and msaie1_0.anal_state = 'ING' --학습데이터 제작 진행중인 회차
|
||||
left join
|
||||
tb_map_sheet_learn msle1_0
|
||||
on msaie1_0.learn_id = msle1_0.id
|
||||
left join
|
||||
tb_map_sheet_learn_data_geom msldge1_0
|
||||
on lae1_0.inference_geom_uid = msldge1_0.geo_uid --라벨링 할당 테이블과 geo_uid 가 같은 값으로 매핑되어 있음
|
||||
group by lae1_0.anal_uid,
|
||||
msle1_0.uid
|
||||
having sum(case
|
||||
when (lae1_0.inspect_state = 'COMPLETE')
|
||||
then 1
|
||||
else 0
|
||||
end) > 0 --검수할당 COMPLETE 상태가 있는 회차만 검색
|
||||
;
|
||||
|
||||
--2. 해당 회차 + 어제까지 검수 완료된 도엽 조회
|
||||
select msaie1_0.compare_yyyy,
|
||||
msaie1_0.target_yyyy,
|
||||
lae1_0.assign_group_id
|
||||
from tb_labeling_assignment lae1_0
|
||||
join
|
||||
tb_map_sheet_anal_inference msaie1_0
|
||||
on lae1_0.anal_uid = msaie1_0.anal_uid
|
||||
where lae1_0.anal_uid = 52 --해당 회차
|
||||
and lae1_0.inspect_state = 'COMPLETE' --검수 완료 상태
|
||||
and lae1_0.inspect_stat_dttm < '2026-01-23T00:00+09:00' --검수상태변경일 오늘 이전 모두
|
||||
group by msaie1_0.compare_yyyy,
|
||||
msaie1_0.target_yyyy,
|
||||
lae1_0.assign_group_id
|
||||
;
|
||||
|
||||
-- 3. 회차 + 도엽에 검수 완료된 polygon 조회
|
||||
select msldge1_0.geo_uid,
|
||||
cast('Feature' as varchar),
|
||||
st_asgeojson(msldge1_0.geom),
|
||||
case
|
||||
when (msldge1_0.class_after_cd in ('building', 'container'))
|
||||
then cast('M1' as varchar)
|
||||
when (msldge1_0.class_after_cd = 'waste')
|
||||
then cast('M2' as varchar)
|
||||
else 'M3'
|
||||
end,
|
||||
msldge1_0.class_before_cd,
|
||||
msldge1_0.class_after_cd
|
||||
from tb_labeling_assignment lae1_0
|
||||
left join
|
||||
tb_map_sheet_learn_data_geom msldge1_0 --라벨링 그린 polygon 저장 테이블
|
||||
on lae1_0.inference_geom_uid = msldge1_0.geo_uid
|
||||
where lae1_0.anal_uid = 52
|
||||
and lae1_0.assign_group_id = '34602060'
|
||||
and lae1_0.inspect_state = 'COMPLETE'
|
||||
and lae1_0.inspect_stat_dttm < '2026-01-23T00:00+09:00'
|
||||
;
|
||||
|
||||
--4. 파일 생성한 learn_data_geom 에 file_create_yn = true 로 업데이트
|
||||
update tb_map_sheet_learn_data_geom msldge1_0
|
||||
set file_create_yn= true,
|
||||
updated_dttm='2026-01-23T19:27:28.623677700+09:00'
|
||||
where msldge1_0.geo_uid = 390913
|
||||
;
|
||||
Reference in New Issue
Block a user