Task1: 난공사
ktt.module.cctv_height.Inferencer
CCTV 높이와 난공사 여부를 판단하고 사진의 적합성을 평가하는 파이프라인을 제공합니다.
주요 기능
- CCTV 및 사다리 검출
- CCTV 높이 추정
- 난공사 여부 판단
- 사진 적합성 평가
Usage
demo/demo_cctv_height_compliance_inference.py 참고
build(config)
classmethod
API 인스턴스를 생성합니다.
Parameters:
Returns:
| Name | Type | Description |
|---|---|---|
Inferencer |
Inferencer
|
빌드 완료된 CCTV 높이 추론 핸들러 인스턴스. |
infer(images)
입력 이미지들에 대해 CCTV 높이 및 난공사 판정을 수행합니다.
4단계 파이프라인을 실행합니다: 1) 전처리 (이미지 정규화 및 변환) 2) CCTV 및 사다리 객체 탐지 3) Depth 추정 및 CCTV 높이 계산 4) 난공사 여부 및 사진 적합성 평가
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
images |
list[ndarray]
|
입력 이미지 리스트 (RGB, shape: (H, W, 3)). 각 이미지는 numpy 배열이며 0-255 범위의 uint8 값을 가져야 합니다. |
required |
Returns:
Notes:
non_compliance에 등장하는 값:
- Depth 추론이 수행되지 않은 경우 (infer_depth is False, cctv_height is None)
- cctv_not_found: CCTV 미검출 → 부적합
- cctv_not_centered: 검출된 CCTV가 이미지 중앙에 위치하지 않음 → 부적합
- ladder_not_found: 사다리 미검출 → 부적합
- ladder_not_centered: 검출된 사다리가 이미지 중앙에 위치하지 않음 → 부적합
- Depth 추론이 수행되나, cctv_height 추정은 안되는 경우 (infer_depth is True, cctv_height is None)
- cctv_point_not_found: CCTV 대푯점 검출 실패 → 부적합
- ladder_point_not_on_ground: 사다리가 지면 위에 존재하지 않음 (사다리 박스의 밑변 중 어떤 픽셀도 지면 마스크에 포함되지 않음) → 부적합
- ground_not_found: 지면 검출 실패 → 부적합
- ground_point_not_found: CCTV 연직 하방의 지면 대응점 검출 실패 → 부적합
- cctv_height 추정까지 성공하지만, 오차가 클 위험이 있는 경우
- incomplete_ladder_visibility: 사다리가 이미지에 완전히 보이지 않음 (사다리 박스가 이미지 경계에 닿아있음) → 적합 (경고)
compliance_violation_detected 판정 로직:
- non_compliance가 비어있는 경우 → False (완전 적합)
- non_compliance에 'incomplete_ladder_visibility'만 있는 경우 → False (적합이지만 경고)
- 그 외 non_compliance 항목이 하나라도 있는 경우 → True (부적합)
warmup()
get_default_inference_option(model, key)
특정 추론 옵션의 기본값을 조회합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
model |
str
|
"detection", "depth", "cctv_height" 중 하나. |
required |
key |
str
|
옵션 key. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
Any |
Any
|
옵션 value. |
Keys
사용 가능한 model 및 key 조합:
model: cctv_height
{
"outputs.time": bool, # 인퍼런스 시 각 단계별 시간 출력 여부 (기본값: False)
"params.side_ignore_ratio": float, # CCTV/사다리 박스가 이미지 가장자리에 너무 가까이 있는 경우 무시하는 비율
# 0.0 ~ 0.5 범위 (기본값: 0.1)
# CCTV: 좌우 10% 영역, 하단 10% 영역
# 사다리: 하단 5% 영역 (비율의 0.5배)
"params.cctv_height_meter_threshold": float, # 난공사 CCTV 높이 기준 임계값 (단위: 미터, 기본값: 3.0)
}
model: detection
{
"params.object_score_threshold": list[int], # 각 클래스의 score threshold 값. 예측 box의 score가 threshold보다 작은 경우 필터링 됩니다.
# 각 값은 [0, 100] 범위의 정수. (default ["cctv": 50, "ladder": 50])
"params.object_area_threshold": list[int], # 각 클래스의 area threshold 값. 예측 box의 면적이 threshold보다 작은 경우 필터링 됩니다.
# 각 값은 0 이상의 정수. (default ["cctv": 0, "ladder": 0])
"params.max_num_of_detected_objects": list[int], # 각 클래스의 최대 예측 박스 개수. 예측 box의 개수가 이 값을 넘을 경우 score가 낮은 순으로 제거됩니다.
# 각 값은 -1 이상의 정수이며, 값이 -1인 경우 개수 필터링을 적용하지 않습니다. (default ["cctv": -1, "ladder": -1])
}
model: depth
Usage
get_inference_option(model, key)
현재 설정된 추론 옵션 값을 조회합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
model |
str
|
"detection", "depth", "cctv_height" 중 하나. |
required |
key |
str
|
옵션 key. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
Any |
Any
|
옵션 value. |
Keys
get_default_inference_option과 동일합니다.
Usage
set_inference_option(model, key, value)
추론 옵션을 설정합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
model |
str
|
"detection", "depth", "cctv_height" 중 하나. |
required |
key |
str
|
옵션 key. |
required |
value |
Any
|
설정할 새로운 값. |
required |
Keys
get_default_inference_option과 동일합니다.
Note
설정 변경은 즉시 적용되며 다음 추론부터 새로운 값이 사용됩니다.