You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

118 lines
4.9 KiB
Python

import os
import cv2
def _parse_bool(value):
if isinstance(value, bool):
return value
text = str(value).strip().lower()
return text in {"1", "true", "yes", "on"}
def _parse_int(value):
return int(str(value).strip())
def _parse_float(value):
return float(str(value).strip())
def _parse_str(value):
return str(value)
def _parse_backend(value):
text = str(value).strip().lower()
if text.lstrip("+-").isdigit():
return int(text)
return {
"any": cv2.CAP_ANY,
"dshow": cv2.CAP_DSHOW,
"msmf": cv2.CAP_MSMF,
"v4l2": cv2.CAP_V4L2,
}.get(text, cv2.CAP_DSHOW)
def _parse_source(value):
text = str(value).strip()
if text and text.lstrip("+-").isdigit():
return int(text)
return text
def _apply_env_overrides(namespace, spec):
for env_name, (key, parser) in spec.items():
if env_name not in os.environ:
continue
namespace[key] = parser(os.environ[env_name])
def apply_config_env_overrides(namespace):
_apply_env_overrides(
namespace,
{
"FPV_MODEL_PATH": ("MODEL_PATH", _parse_str),
"FPV_DEVICE": ("DEVICE", _parse_int),
"FPV_USE_HALF": ("USE_HALF", _parse_bool),
"FPV_CONF": ("CONF", _parse_float),
"FPV_IMG_SIZE_ROI": ("IMG_SIZE_ROI", _parse_int),
"FPV_IMG_SIZE_FULL": ("IMG_SIZE_FULL", _parse_int),
"FPV_MAX_DET": ("MAX_DET", _parse_int),
"FPV_SOURCE": ("SOURCE", _parse_source),
"FPV_CAP_BACKEND": ("CAP_BACKEND", _parse_backend),
"FPV_CAMERA_WIDTH": ("CAMERA_WIDTH", _parse_int),
"FPV_CAMERA_HEIGHT": ("CAMERA_HEIGHT", _parse_int),
"FPV_CAMERA_FPS": ("CAMERA_FPS", _parse_int),
"FPV_CAMERA_FOURCC": ("CAMERA_FOURCC", _parse_str),
"FPV_VIDEO_REALTIME": ("VIDEO_REALTIME", _parse_bool),
"FPV_SHOW_OUTPUT": ("SHOW_OUTPUT", _parse_bool),
"FPV_SAVE_INFER_VIDEO": ("SAVE_INFER_VIDEO", _parse_bool),
"FPV_OUT_VIDEO_PATH": ("OUT_VIDEO_PATH", _parse_str),
"FPV_ARCHIVE_RECORD_MODE": ("ARCHIVE_RECORD_MODE", _parse_str),
"FPV_DETECTION_CLIP_MAX_GAP_SEC": ("DETECTION_CLIP_MAX_GAP_SEC", _parse_float),
"FPV_TARGET_OUT_FPS": ("TARGET_OUT_FPS", _parse_int),
"FPV_FORCE_EFFECTIVE_PAL": ("FORCE_EFFECTIVE_PAL", _parse_bool),
"FPV_EFFECTIVE_W": ("EFFECTIVE_W", _parse_int),
"FPV_EFFECTIVE_H": ("EFFECTIVE_H", _parse_int),
"FPV_UI_FRAME_EXPORT_ENABLE": ("UI_FRAME_EXPORT_ENABLE", _parse_bool),
"FPV_UI_FRAME_EXPORT_PATH": ("UI_FRAME_EXPORT_PATH", _parse_str),
"FPV_UI_FRAME_EXPORT_EVERY": ("UI_FRAME_EXPORT_EVERY", _parse_int),
"FPV_UI_FRAME_EXPORT_JPEG_QUALITY": ("UI_FRAME_EXPORT_JPEG_QUALITY", _parse_int),
"FPV_UI_FRAME_EXPORT_MAX_FPS": ("UI_FRAME_EXPORT_MAX_FPS", _parse_float),
"FPV_REALTIME_SKIP_STALE_FRAMES": ("REALTIME_SKIP_STALE_FRAMES", _parse_bool),
"FPV_REALTIME_MAX_SKIP_FRAMES": ("REALTIME_MAX_SKIP_FRAMES", _parse_int),
"FPV_REALTIME_PREVIEW_SKIPPED_FRAMES": ("REALTIME_PREVIEW_SKIPPED_FRAMES", _parse_bool),
"FPV_REALTIME_ANALYSIS_EVERY": ("REALTIME_ANALYSIS_EVERY", _parse_int),
"FPV_GUIDANCE_EXPORT_ENABLE": ("GUIDANCE_EXPORT_ENABLE", _parse_bool),
"FPV_GUIDANCE_EXPORT_PATH": ("GUIDANCE_EXPORT_PATH", _parse_str),
"FPV_ERROR_OUTPUT_ENABLE": ("ERROR_OUTPUT_ENABLE", _parse_bool),
"FPV_ERROR_OUTPUT_PROTOCOL": ("ERROR_OUTPUT_PROTOCOL", _parse_str),
"FPV_ERROR_OUTPUT_HOST": ("ERROR_OUTPUT_HOST", _parse_str),
"FPV_ERROR_OUTPUT_PORT": ("ERROR_OUTPUT_PORT", _parse_int),
"FPV_ERROR_OUTPUT_OBJECT_ID": ("ERROR_OUTPUT_OBJECT_ID", _parse_int),
"FPV_ERROR_OUTPUT_UNITS": ("ERROR_OUTPUT_UNITS", _parse_str),
"FPV_ERROR_OUTPUT_EVERY": ("ERROR_OUTPUT_EVERY", _parse_int),
"FPV_ERROR_OUTPUT_HFOV_DEG": ("ERROR_OUTPUT_HFOV_DEG", _parse_float),
"FPV_ERROR_OUTPUT_VFOV_DEG": ("ERROR_OUTPUT_VFOV_DEG", _parse_float),
"FPV_ERROR_OUTPUT_RANGE_M": ("ERROR_OUTPUT_RANGE_M", _parse_float),
},
)
def apply_intercept_env_overrides(namespace):
_apply_env_overrides(
namespace,
{
"FPV_AUTOPILOT_ENABLE": ("AUTOPILOT_ENABLE", _parse_bool),
"FPV_AUTOPILOT_BACKEND": ("AUTOPILOT_BACKEND", _parse_str),
"FPV_AUTOPILOT_JSON_PATH": ("AUTOPILOT_JSON_PATH", _parse_str),
"FPV_MAVLINK_CONNECTION": ("MAVLINK_CONNECTION", _parse_str),
"FPV_MSP_PORT": ("MSP_PORT", _parse_str),
"FPV_PROTO_UDP_ENABLE": ("PROTO_UDP_ENABLE", _parse_bool),
"FPV_PROTO_UDP_HOST": ("PROTO_UDP_HOST", _parse_str),
"FPV_PROTO_UDP_PORT": ("PROTO_UDP_PORT", _parse_int),
"FPV_PROTO_UDP_DESCRIPTOR": ("PROTO_UDP_DESCRIPTOR", _parse_int),
},
)