Inference
safety.InferenceHandler
학습한 Object Detection/Classification 모델을 사용하여 검사를 하기 위한 InferenceHandler class 입니다.
Usage
demo/inference.py 참고
build(config)
classmethod
InferenceHandler class의 instance를 생성합니다.
Parameters:
Returns:
| Name | Type | Description |
|---|---|---|
InferenceHandler |
build가 완료된 safety.InferenceHandler class의 instance를 반환합니다. |
Note
- 각 테스크 모델의 경로(
{task}_checkpoint_path)가 None인 경우 해당 버전의 기본 모델을 사용합니다. - default_alarm_options, default_object_options는 API에서 기본적으로 비활성화합니다. (즉,
enabled가 False입니다.) - Depth 모델에서 depth, normal, intrinsic을 모두 예측합니다.
infer(images, camera_ids, timestamps)
현재 설정된 inference 옵션을 바탕으로 inference를 수행합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
images |
list[ndarray]
|
inference를 수행할 이미지들의 list (shape: [H, W, C]) |
required |
camera_ids |
list[int]
|
images의 각 image에 대한 camera_id list |
required |
timestamps |
list[int]
|
images의 각 image에 대한 timestamp list (단위: 밀리초) |
required |
Returns:
Note
얼굴 비식별화를 켠 카메라에서는 person 항목에 face 필드가 붙습니다.
그 bounding_box 를 가려주세요.
for obj in result["detected_objects"]:
face = obj.get("face")
if face is not None and face["bounding_box"] is not None:
mask(face["bounding_box"])
얼굴을 찾지 못한 사람에게도 키는 붙고 안쪽 값이 None 입니다. 키가 있다고
가릴 영역이 있는 것은 아니므로 bounding_box 까지 확인하세요.
face 키는 person 항목에만 붙습니다. 화재·연기·지게차 등 다른 class 에는
키 자체가 없고, 비식별화를 켜지 않은 카메라
(set_deid_option(camera_id, {"enabled": True}))나 모델을 올리지 않은 경우에는
어떤 항목에도 없습니다. 즉 키의 유무가 이 카메라가 비식별화를 쓰는지 알려줍니다.
얼굴의 주인은 그 항목 자신입니다 — id 와 bounding_box 가 그 사람의 것입니다.
사람과 짝지어지지 않은 얼굴은 결과에 나오지 않으며 가려지지도 않습니다. 사람 검출이 그 사람을 놓쳤거나, 겹치는 사람이 이미 다른 얼굴을 받은 경우입니다 (한 사람에 얼굴 하나). 한 현장 영상 600프레임 기준 검출된 얼굴의 1.5%, 프레임의 17%에서 발생합니다. 사람 검출 성능에 딸린 한계입니다.
따라서 object option 의 person.enabled 가 켜져 있어야 합니다. 꺼면 사람
항목 자체가 없어 face 도 하나도 나오지 않습니다.
face["bounding_box"] 는 검출된 얼굴 크기 그대로입니다 — 넓히지 않습니다. 칠하기 전에
받는 쪽에서 각 변을 넓히세요(set_deid_option Note 2 참고). 병합·평활을 거치므로
검출된 얼굴 개수와는 1:1 이 아닙니다.
프레임을 시간 순서대로 넣어야 합니다 — 시간축 평활이 채널마다 트랙을
유지하며 여러 프레임의 점수를 평균해 판정합니다. 넣지 않은 프레임은
가려지지 않으므로, 띄엄띄엄 넣는다면 그 사이를 직전 영역으로 버티도록
받는 쪽에서 그만큼 더 넓혀야 합니다 (set_deid_option 참고).
warmup()
get_default_inference_option(model, key)
Model별 Postprocess 옵션의 기본 설정 값을 반환합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
model |
str
|
"safety", "detection", "face_detection", "classification", "depth", "match" 중 하나. |
required |
key |
str
|
옵션 key |
required |
Returns:
| Name | Type | Description |
|---|---|---|
Any |
Any
|
옵션 value |
사용 가능한 key와 value 목록
model: safety
key: 가능한 key는 다음과 같습니다.
{
"outputs.time": bool, # 인퍼런스 시 각 요소에 걸린 시간을 반환할지 여부. (default False)
"params.mlc_filter_thresholds": dict[str, float], # MLC 필터의 각 클래스별 threshold 값. 각 값은 [0, 1] 범위의 실수. (default {"person": 0.9, "fire": 0.5, "smoke": 0.5})
# 소형 box 에는 `min(small_object.mlc_threshold[class], 이 값)`이 적용됩니다 (작은 객체를 더 통과시키기 위함).
"params.small_object": dict, # 소형 객체 보정 파라미터. 3개 key 를 모두 넘겨야 합니다. (default {"area": 900.0, "crop_margin": 0.1, "mlc_threshold": {"person": 0.7, "fire": -1, "smoke": -1}})
# "area": 소형으로 판정할 box 면적(px^2) 상한. 0 이상의 실수. (default 900.0 = 30x30px)
# "crop_margin": 소형 box 를 분류기에 넣을 때 각 변을 확장할 비율. [0, 1] 범위의 실수. 타이트한 crop 은 분류가 어려워 문맥을 넣습니다. (default 0.1 = 10% 확장)
# "mlc_threshold": 클래스별 소형 게이트. person/fire/smoke 3개 key 를 모두 넘겨야 합니다. 각 값은 [0, 1] 범위의 실수 또는 -1. (default {"person": 0.7, "fire": -1, "smoke": -1})
# 값이 있으면 그 class 가 crop 마진 대상이 되고, 소형 box 만 mlc_filter_thresholds 와 비교해 더 낮은 값으로 게이트됩니다.
# -1 이면 그 class 는 소형 보정에서 제외됩니다 (crop 마진·게이트 완화 둘 다 없음).
# 주의: 오프라인 채점(benchmark)도 같은 값을 읽습니다. 런타임에 바꾼 뒤 벤치를 돌릴 때는 같은 값을 함께 넘겨야 수치가 맞습니다.
}
model: detection
key: DET 모델 결과 후처리 파라미터. 가능한 key는 다음과 같습니다.
{
"params.object_score_threshold": list[int], # 각 클래스의 score threshold 값. 예측 box의 score가 threshold보다 작은 경우 필터링 됩니다.
# 각 값은 [0, 100] 범위의 정수. (default [30, 10, ... , 10])
"params.object_area_threshold": list[int], # 각 클래스의 area threshold 값. 예측 box의 면적이 threshold보다 작은 경우 필터링 됩니다.
# 각 값은 0 이상의 정수. (default [0, ... , 0])
"params.max_num_of_detected_objects": list[int], # 각 클래스의 최대 예측 박스 개수. 예측 box의 개수가 이 값을 넘을 경우 score가 낮은 순으로 제거됩니다.
# 각 값은 -1 이상의 정수이며, 값이 -1인 경우 개수 필터링을 적용하지 않습니다. (default [30, -1, ... , -1])
}
model: face_detection
key: 얼굴 검출 모델 결과 후처리 파라미터. 비식별화를 켜고 빌드한 경우에만 사용할 수 있으며,
아닌 경우 FaceDetectionNotAvailableError(151)가 발생합니다. 가능한 key는 다음과 같습니다.
{
"params.object_score_threshold": int, # 얼굴 box의 score threshold. 낮출수록 미검은 줄고 헛검출은 늡니다.
# [0, 100] 범위의 정수. (default 20)
"params.person_score_threshold": int, # 얼굴 모델이 내는 사람 box의 score threshold. 가릴 대상이 아니라
# 후처리 게이트 재료라 얼굴보다 높게 잡습니다. [0, 100] 범위의 정수. (default 50)
"params.nms_iou_threshold": int, # 겹친 얼굴 box를 억제하는 IoU threshold. 학습 config와 같은 값이며,
# 올려 잡으면 한 얼굴에 box가 여러 개 쌓입니다. [0, 100] 범위의 정수. (default 30)
"params.dedup_iou_threshold": int, # 거의 같은 위치의 box를 하나로 줄이는 IoU threshold. [0, 100] 범위의 정수. (default 95)
"params.max_num_of_detected_objects": int, # 최대 얼굴 box 개수. 넘으면 score가 낮은 순으로 제거됩니다.
# -1 이상의 정수이며, -1인 경우 개수 필터링을 적용하지 않습니다. (default 300)
}
model: classification
key: CLS 모델 결과 후처리 파라미터. 가능한 key는 다음과 같습니다.
{
"params.additional_scores": list[int | float], # scores_including_add를 계산할 때, scores_original에 더해지는 값입니다. 각 값은 [0, 100] 범위의 실수. (default [0.0, ... , 0.0])
}
model: depth
key: DEPTH, NORMAL 모델 결과 후처리 파라미터. 가능한 key는 다음과 같습니다.
model: match
key: MATCH 모델 결과 후처리 파라미터. 가능한 key는 다음과 같습니다.
get_inference_option(model, key)
Model에 따른 현재 설정된 postprocess 옵션 값을 읽습니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
model |
str
|
"safety", "detection", "face_detection", "classification", "depth", "match" 중 하나. |
required |
key |
str
|
옵션 key |
required |
Returns:
| Name | Type | Description |
|---|---|---|
Any |
Any
|
옵션 value |
Keys
get_default_inference_option과 동일합니다.
set_inference_option(model, key, value)
Model에 따른 Postprocess 옵션을 설정합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
model |
str
|
"safety", "detection", "face_detection", "classification", "depth", "match" 중 하나. |
required |
key |
str
|
설정하고자 하는 옵션 key 입니다. |
required |
value |
Any
|
설정하고자 하는 옵션 value 입니다. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
None |
None
|
None |
Keys
get_default_inference_option과 동일합니다.
register_camera(camera_id)
검사할 camera_id를 등록합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
camera_id |
int
|
등록할 camera_id |
required |
Returns:
| Name | Type | Description |
|---|---|---|
None |
None
|
None |
Raises:
| Type | Description |
|---|---|
InvalidCameraIdError
|
camera_id가 int가 아닌 경우 발생하는 에러 |
AlreadyRegisteredCameraIdError
|
이미 등록된 camera_id를 등록하려고 할 때 발생하는 에러 |
release_camera(camera_id)
등록된 camera_id를 해제합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
camera_id |
int
|
해제할 camera_id |
required |
Returns:
| Name | Type | Description |
|---|---|---|
None |
None
|
None |
Raises:
| Type | Description |
|---|---|
UnregisteredCameraIdError
|
등록되지 않은 camera_id를 해제하려고 할 때 발생하는 에러 |
get_registered_camera_ids()
등록된 camera_id 리스트를 반환합니다.
Returns:
| Type | Description |
|---|---|
list[int]
|
list[int]: 등록된 camera_id 리스트 |
get_default_tracker_option(camera_id)
기본 tracker option을 반환합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
camera_id |
int
|
tracker option을 반환할 camera_id (사용하지 않음, 단순히 다른 API와의 일관성을 위해 존재) |
required |
Returns:
| Type | Description |
|---|---|
dict[str, Any]
|
Usage
Note: camera_id는 사용하지 않으며, 단순히 다른 API와의 일관성을 위해 존재합니다.
get_tracker_option(camera_id)
등록된 camera_id에 대한 tracker option을 반환합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
camera_id |
int
|
tracker option을 반환할 camera_id |
required |
Returns:
| Type | Description |
|---|---|
dict[str, Any]
|
dict[str, Any]: tracker option. 형태는 |
Raises:
| Type | Description |
|---|---|
UnregisteredCameraIdError
|
등록되지 않은 camera_id에 대한 정보를 요청할 때 발생하는 에러 |
set_tracker_option(camera_id, tracker_option)
등록된 camera_id에 대한 tracker option을 설정합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
camera_id |
int
|
tracker option을 설정할 camera_id |
required |
tracker_option |
dict[str, Any]
|
tracker option. 형태는 |
required |
Returns:
| Name | Type | Description |
|---|---|---|
None |
None
|
None |
Raises:
| Type | Description |
|---|---|
InvalidTrackerOptionError
|
tracker_option가 올바르지 않을 때 발생하는 에러 |
UnregisteredCameraIdError
|
등록되지 않은 camera_id에 대해 설정할 때 발생하는 에러 |
Usage
option = handler.get_tracker_option(camera_id=0)
option["object_score_threshold"] = 70
option["min_continuous_count"] = 5
handler.set_tracker_option(camera_id=0, tracker_option=option)
option = handler.get_tracker_option(camera_id=0)
print(option)
# {"object_score_threshold": 70, "min_continuous_count": 5} # 설정한 값이 반환됩니다.
get_default_deid_option(camera_id)
얼굴 비식별화 옵션의 기본값을 가져옵니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
camera_id |
int
|
옵션을 반환할 camera_id (사용하지 않음, 단순히 다른 API와의 일관성을 위해 존재) |
required |
Returns:
| Type | Description |
|---|---|
dict[str, Any]
|
dict[str, Any]: 기본 비식별화 옵션. 자세한 항목은 |
get_deid_option(camera_id)
해당 카메라의 얼굴 비식별화 옵션을 가져옵니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
camera_id |
int
|
카메라 ID. |
required |
Returns:
| Type | Description |
|---|---|
dict[str, Any]
|
dict[str, Any]: 현재 비식별화 옵션. |
set_deid_option(camera_id, deid_option)
해당 카메라의 얼굴 비식별화 옵션을 변경합니다.
바꾸려는 항목만 담아 넘기면 됩니다. 넘기지 않은 항목은 그대로 유지됩니다.
Parameters:
Note
- 프레임을 시간 순서대로 넣어야 합니다. 시간축 평활이 채널마다 트랙을 유지하며 여러 프레임의 점수를 평균해 판정하므로, 순서가 섞이면 에러 없이 깜빡임이나 과검으로 나타납니다.
- 좌표는 검출된 얼굴 크기 그대로이며 넓히지 않습니다. 검출 박스는 머리카락 경계·턱선을 조금 못 덮으므로, 칠하기 전에 받는 쪽에서 각 변을 넓히세요.
화면에는 모든 프레임이 나가는데 여기로는 골라서 넣는다면, 넣지 않은
프레임은 받는 쪽이 직전 영역을 그대로 붙들고 있어야 합니다. 그사이
사람이 움직이면 얼굴이 그 영역을 벗어나므로 그만큼 더 넓혀야 합니다.
이 모듈은 넣는 주기도, 어떻게 칠할지도 알 수 없습니다.
3. smooth_window 등 평활 항목의 단위는 초가 아니라 프레임 수입니다.
넣는 프레임레이트가 달라지면 같은 값이라도 시간 상수가 달라집니다.
4. 얼굴 검출 문턱은 채널별 옵션이 아니라 모델 옵션입니다. 다른 모델과
마찬가지로 set_inference_option("face_detection", ...) 으로 바꿉니다.
눈금은 여기 점수 항목과 같은 0~100 이라 그대로 비교하면 됩니다.
smooth_thr 는 검출 문턱보다 커야 뜻이 있습니다 — 같거나 낮으면
들어오는 박스가 이미 전부 그 값을 넘긴 것들이라 아무것도 걸러지지 않습니다.
(기본값은 검출 문턱 20, smooth_thr 30 입니다.)
5. person_gate 가 쓰는 사람 박스는 safety 검출기의 person 클래스입니다
(infer 결과의 boxes_xyxy). 얼굴 모델이 따로 내는 것이 아닙니다.
get_default_grid_option(camera_id)
기본 grid option을 반환합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
camera_id |
int
|
grid option을 반환할 camera_id (사용하지 않음, 단순히 다른 API와의 일관성을 위해 존재) |
required |
Returns:
| Type | Description |
|---|---|
dict[str, Any]
|
Usage
Note: camera_id는 사용하지 않으며, 단순히 다른 API와의 일관성을 위해 존재합니다.
get_grid_option(camera_id)
등록된 camera_id에 대한 grid option을 반환합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
camera_id |
int
|
grid option을 반환할 camera_id |
required |
Returns:
| Type | Description |
|---|---|
dict[str, Any]
|
dict[str, Any]: grid option. 형태는 |
Raises:
| Type | Description |
|---|---|
UnregisteredCameraIdError
|
등록되지 않은 camera_id에 대한 정보를 요청할 때 발생하는 에러 |
set_grid_option(camera_id, grid_option)
등록된 camera_id에 대한 grid option을 설정합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
camera_id |
int
|
grid option을 설정할 camera_id |
required |
grid_option |
dict[str, Any]
|
grid option. 형태는 |
required |
Returns:
| Name | Type | Description |
|---|---|---|
None |
None
|
None |
Raises:
| Type | Description |
|---|---|
InvalidGridOptionError
|
grid_option이 올바르지 않을 때 발생하는 에러 |
UnregisteredCameraIdError
|
등록되지 않은 camera_id에 대해 설정할 때 발생하는 에러 |
get_reference_image(camera_id)
등록된 camera_id에 대한 reference image를 반환합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
camera_id |
int
|
reference image를 반환할 camera_id |
required |
Returns:
| Type | Description |
|---|---|
ndarray | None
|
np.ndarray | None: reference image (shape: [H, W, C]). None인 경우 reference image가 설정되지 않은 상태입니다. |
Raises:
| Type | Description |
|---|---|
UnregisteredCameraIdError
|
등록되지 않은 camera_id에 대한 정보를 요청할 때 발생하는 에러 |
set_reference_image(camera_id, reference_image, surface_points)
등록된 camera_id에 대한 reference image를 설정합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
camera_id |
int
|
reference image를 설정할 camera_id |
required |
reference_image |
ndarray
|
reference image
형태는 |
required |
surface_points |
list[list[int]]
|
required |
Returns:
| Name | Type | Description |
|---|---|---|
None |
None
|
None |
Raises:
| Type | Description |
|---|---|
InvalidReferenceImageError
|
reference_image가 올바르지 않을 때 발생하는 에러 |
UnregisteredCameraIdError
|
등록되지 않은 camera_id에 대해 설정할 때 발생하는 에러 |
InsufficientSurfacePointsError
|
surface_points의 개수가 3개 미만인 경우 발생하는 에러 |
Usage
import cv2
reference_image = cv2.imread("reference.jpg")
surface_points = [[0, 0], [100, 0], [100, 100], [0, 100]]
err, msg, _ = handler.set_reference_image(camera_id=0, reference_image=reference_image, surface_points=surface_points)
err, msg, img = handler.get_reference_image(camera_id=0)
np.array_equal(reference_image, img)
# True # set과 get 과정에서 형변환이 일어나기 때문에 완전히 동일하지 않을 수 있습니다.
get_monitoring_area(camera_id)
등록된 camera_id에 대한 monitoring area를 반환합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
camera_id |
int
|
monitoring area를 반환할 camera_id |
required |
Returns:
| Type | Description |
|---|---|
dict[str, list[list[list[int]]]]
|
Raises: UnregisteredCameraIdError: 등록되지 않은 camera_id에 대한 정보를 요청할 때 발생하는 에러
set_monitoring_area(camera_id, monitoring_area)
등록된 camera_id에 대한 monitoring area를 설정합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
camera_id |
int
|
monitoring area를 설정할 camera_id |
required |
monitoring_area |
dict[str, list[list[list[int]]]]
|
dictionary of monitoring area polygon list
형태는 |
required |
Returns:
| Name | Type | Description |
|---|---|---|
None |
None
|
None |
Raises:
| Type | Description |
|---|---|
InvalidMonitoringAreaError
|
monitoring_area가 올바르지 않을 때 발생하는 에러 |
UnregisteredCameraIdError
|
등록되지 않은 camera_id에 대해 설정할 때 발생하는 에러 |
Usage
area = {"includes": [[[0, 0], [100, 0], [100, 100], [0, 100]]], "excludes": []}
err, msg, _ = handler.set_monitoring_area(camera_id=0, monitoring_area=area)
err, msg, area = handler.get_monitoring_area(camera_id=0)
print(area)
# {"includes": [[[0, 0], [100, 0], [100, 100], [0, 100]]], "excludes": []} # 설정한 값이 반환됩니다.
get_default_object_options(camera_id)
등록된 camera_id에 대한 default object options를 반환합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
camera_id |
int
|
default object options를 반환할 camera_id |
required |
Returns:
Raises:
| Type | Description |
|---|---|
UnregisteredCameraIdError
|
등록되지 않은 camera_id에 대한 정보를 요청할 때 발생하는 에러 |
get_object_options(camera_id)
등록된 camera_id에 대한 object options를 반환합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
camera_id |
int
|
object options를 반환할 camera_id |
required |
Returns:
| Type | Description |
|---|---|
dict[str, dict]
|
dict[str, dict[str, Any]]: object options. 형태는 |
Raises:
| Type | Description |
|---|---|
UnregisteredCameraIdError
|
등록되지 않은 camera_id에 대한 정보를 요청할 때 발생하는 에러 |
set_object_options(camera_id, object_options)
등록된 camera_id에 대한 object options를 설정합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
camera_id |
int
|
object options를 설정할 camera_id |
required |
object_options |
dict[str, dict]
|
object options. 형태는 |
required |
Returns:
| Name | Type | Description |
|---|---|---|
None |
None
|
None |
Raises:
| Type | Description |
|---|---|
InvalidObjectOptionsError
|
object_options가 올바르지 않을 때 발생하는 에러 |
UnregisteredCameraIdError
|
등록되지 않은 camera_id에 대해 설정할 때 발생하는 에러 |
Usage
options = handler.get_object_options(camera_id=0)
options["person"]["enabled"] = True
options["person"]["score_threshold"] = 50
handler.set_object_options(camera_id=0, object_options=options)
options = handler.get_object_options(camera_id=0)
print(options)
# {"person": {"enabled": True, "area_threshold": 100.0, "score_threshold": 50}, ...} # 설정한 값이 반환됩니다.
# {"smoke": {"enabled": True, "area_threshold": 900.0, "score_threshold": 50, "movement_score_threshold": 10}, ...} # 설정한 값이 반환됩니다.
Note
얼굴 비식별화를 함께 쓴다면 person 항목의 필터가 가리기에도 그대로 적용됩니다.
face는 person object에만 붙으므로, 여기서 걸러진 사람의 얼굴은 에러 없이
가려지지 않습니다. person.enabled가 False면(기본값) 한 장도 가려지지 않습니다.
get_default_event_options(camera_id)
등록된 camera_id에 대한 default event options를 반환합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
camera_id |
int
|
default event options를 반환할 camera_id |
required |
Returns:
get_event_options(camera_id)
등록된 camera_id에 대한 event options를 반환합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
camera_id |
int
|
event options를 반환할 camera_id |
required |
Returns:
| Type | Description |
|---|---|
dict[str, dict]
|
dict[str, dict[str, Any]]: event options. 형태는 |
Raises:
| Type | Description |
|---|---|
UnregisteredCameraIdError
|
등록되지 않은 camera_id에 대한 정보를 요청할 때 발생하는 에러 |
set_event_options(camera_id, event_options)
등록된 camera_id에 대한 event options를 설정합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
camera_id |
int
|
event options를 설정할 camera_id |
required |
event_options |
dict[str, dict]
|
event options. 형태는 |
required |
Returns:
| Name | Type | Description |
|---|---|---|
None |
None
|
None |
Raises:
| Type | Description |
|---|---|
InvalidEventOptionsError
|
event_options가 올바르지 않을 때 발생하는 에러 |
UnregisteredCameraIdError
|
등록되지 않은 camera_id에 대해 설정할 때 발생하는 에러 |
Usage
get_default_alarm_options(camera_id)
등록된 camera_id에 대한 default alarm options를 반환합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
camera_id |
int
|
default alarm options를 반환할 camera_id |
required |
Returns:
Note
time_ranges는 list의 list 입니다. 바깥 list는 활성화 시간대들의 목록이고, 각 안쪽 list는 반드시 길이 2인[start, end]이어야 합니다. (예:[[36000, 43200], [46800, 61200]]→ 10:00~12:00, 13:00~17:00 활성화)- 현재 시각이 어느 한 구간에라도 포함되면 알람이 활성화됩니다. 구간이 서로 겹쳐도 됩니다. (겹치는 구간은 합집합으로 처리됩니다.) 엔진단에서는 구간 겹침을 검사하지 않으며, 구간 겹침 검증은 front/backend에서 수행됩니다.
- 각 구간에서
start==end인 경우, 해당 구간은 항상(24시간) 활성화됩니다. - 각 구간에서
start>end인 경우, 자정을 넘기는 구간으로 해석됩니다. (예: 23:00~04:00 → 23:00~24:00, 00:00~04:00 활성화)
Raises:
| Type | Description |
|---|---|
UnregisteredCameraIdError
|
등록되지 않은 camera_id에 대한 정보를 요청할 때 발생하는 에러 |
get_alarm_options(camera_id)
등록된 camera_id에 대한 alarm options를 반환합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
camera_id |
int
|
alarm options를 반환할 camera_id |
required |
Returns:
| Type | Description |
|---|---|
dict[str, dict]
|
dict[str, dict]: alarm options. 형태는 |
Raises:
| Type | Description |
|---|---|
UnregisteredCameraIdError
|
등록되지 않은 camera_id에 대한 정보를 요청할 때 발생하는 에러 |
set_alarm_options(camera_id, alarm_options)
등록된 camera_id에 대한 alarm options를 설정합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
camera_id |
int
|
alarm options를 설정할 camera_id |
required |
alarm_options |
dict[str, dict]
|
alarm options. 형태는 |
required |
Returns:
| Name | Type | Description |
|---|---|---|
None |
None
|
None |
Raises:
| Type | Description |
|---|---|
InvalidAlarmOptionsError
|
alarm_options가 올바르지 않을 때 발생하는 에러 |
UnregisteredCameraIdError
|
등록되지 않은 camera_id에 대해 설정할 때 발생하는 에러 |
Usage
options = handler.get_alarm_options(camera_id=0)
options["fire_detect"]["enabled"] = True
options["fire_detect"]["time_ranges"] = [[8 * 3600, 12 * 3600], [13 * 3600, 18 * 3600]]
handler.set_alarm_options(camera_id=0, alarm_options=options)
options = handler.get_alarm_options(camera_id=0)
print(options)
# {"fire_detect": {"enabled": True, "time_ranges": [[28800, 43200], [46800, 64800]], ...}, ...} # 설정한 값이 반환됩니다.
get_depth_fitting_preview(image, surface_points)
이미지에 depth fitting preview를 적용합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
image |
ndarray
|
depth fitting preview를 적용할 이미지, shape: (H, W, C) |
required |
surface_points |
list[list[int]]
|
depth fitting을 위한 reference surface points. |
required |
Returns:
| Type | Description |
|---|---|
ndarray
|
np.ndarray: depth fitting preview가 적용된 이미지 |
Raises:
| Type | Description |
|---|---|
InsufficientSurfacePointsError
|
surface_points의 개수가 3개 미만인 경우 발생하는 에러 |