DroneMind/voice_drone/core/configuration.py
2026-04-14 09:54:26 +08:00

209 lines
7.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import os
from pathlib import Path
from voice_drone.tools.config_loader import load_config
from voice_drone.logging_ import get_logger
_cfg_log = get_logger("voice_drone.configuration")
# voice_drone/core/configuration.py -> 工程根目录 voice_drone_assistant 为 parents[2]
_PROJECT_ROOT = Path(__file__).resolve().parents[2]
def _abs_config_path(relative: str) -> str:
p = Path(relative)
if p.is_absolute():
return str(p)
return str(_PROJECT_ROOT / p)
# 系统配置加载器
class SystemConfigLoader:
def __init__(self, config_path="voice_drone/config/system.yaml"):
self.config_path = _abs_config_path(config_path)
self.config = load_config(self.config_path)
# 获取音频配置
def get_audio_config(self):
return self.config["audio"]
# 获取语音活动检测配置
def get_vad_config(self):
return self.config["vad"]
# 获取socket配置
def get_socket_server_config(self):
return self.config["socket_server"]
# 获取日志配置
def get_logging_config(self):
return self.config["logging"]
# 获取STT配置
def get_stt_config(self):
return self.config["stt"]
# 获取TTS配置
def get_tts_config(self):
"""
获取文本转语音(TTS)配置
结构示例:
tts:
model_dir: "src/models/Kokoro-82M-v1.1-zh-ONNX"
model_name: "model_q4.onnx" # 可选: model.onnx, model_fp16.onnx, model_quantized.onnx 等
voice: "zf_001" # 语音风格文件名(不含扩展名)
speed: 1.0 # 语速系数
sample_rate: 24000 # 输出采样率
"""
return self.config.get("tts", {})
# 获取文本预处理配置
def get_text_preprocessor_config(self):
return self.config.get("text_preprocessor", {})
# 获取识别器流程配置
def get_recognizer_config(self):
return self.config.get("recognizer", {})
# 云端语音WebSocket / pcm_asr_uplink 会话)
def get_cloud_voice_config(self):
return self.config.get("cloud_voice", {})
# 主程序 TakeoffPrintRecognizermain_app
def get_assistant_config(self):
return self.config.get("assistant", {})
# 命令配置加载器
class CommandConfigLoader:
def __init__(self, config_path="voice_drone/config/command_.yaml"):
self.config_path = _abs_config_path(config_path)
self.config = load_config(self.config_path)["control_params"]
def get_takeoff_config(self):
return self.config["takeoff"]
def get_land_config(self):
return self.config["land"]
def get_follow_config(self):
return self.config["follow"]
def get_forward_config(self):
return self.config["forward"]
def get_backward_config(self):
return self.config["backward"]
def get_left_config(self):
return self.config["left"]
def get_right_config(self):
return self.config["right"]
def get_up_config(self):
return self.config["up"]
def get_down_config(self):
return self.config["down"]
def get_hover_config(self):
return self.config["hover"]
def get_return_home_config(self):
return self.config["return_home"]
# 关键词配置加载器
class KeywordsConfigLoader:
def __init__(self, config_path="voice_drone/config/keywords.yaml"):
self.config_path = _abs_config_path(config_path)
self.config = load_config(self.config_path)["keywords"]
def get_keywords(self):
return self.config
# 唤醒词配置加载器
class WakeWordConfigLoader:
def __init__(self, config_path="voice_drone/config/wake_word.yaml"):
self.config_path = _abs_config_path(config_path)
self.config = load_config(self.config_path)["wake_word"]
def get_primary(self):
return self.config.get("primary", "")
def get_variants(self):
return self.config.get("variants", [])
def get_matching_config(self):
return self.config.get("matching", {})
# 系统配置常量
system_config = SystemConfigLoader()
SYSTEM_AUDIO_CONFIG = system_config.get_audio_config()
SYSTEM_VAD_CONFIG = system_config.get_vad_config()
SYSTEM_SOCKET_SERVER_CONFIG = system_config.get_socket_server_config()
SYSTEM_LOGGING_CONFIG = system_config.get_logging_config()
SYSTEM_STT_CONFIG = system_config.get_stt_config()
SYSTEM_TTS_CONFIG = system_config.get_tts_config()
SYSTEM_TEXT_PREPROCESSOR_CONFIG = system_config.get_text_preprocessor_config()
SYSTEM_RECOGNIZER_CONFIG = system_config.get_recognizer_config()
SYSTEM_CLOUD_VOICE_CONFIG = system_config.get_cloud_voice_config()
SYSTEM_ASSISTANT_CONFIG = system_config.get_assistant_config()
def load_cloud_voice_px4_context() -> dict:
"""
加载合并到云端 session.start.client 的 PX4/MAV 扩展字段。
路径:环境变量 ROCKET_CLOUD_PX4_CONTEXT_FILE否则 cloud_voice.px4_context_file相对工程根
"""
cv = SYSTEM_CLOUD_VOICE_CONFIG if isinstance(SYSTEM_CLOUD_VOICE_CONFIG, dict) else {}
raw = (os.environ.get("ROCKET_CLOUD_PX4_CONTEXT_FILE") or "").strip()
rel = raw or str(cv.get("px4_context_file") or "").strip()
if not rel:
return {}
p = Path(rel)
if not p.is_absolute():
p = _PROJECT_ROOT / rel
if not p.is_file():
_cfg_log.warning("cloud_voice PX4 上下文文件不存在,已跳过: %s", p)
return {}
try:
data = load_config(str(p))
except Exception as e: # noqa: BLE001
_cfg_log.warning("读取 PX4 上下文 YAML 失败: %s%s", p, e)
return {}
if not isinstance(data, dict):
return {}
return data
SYSTEM_CLOUD_VOICE_PX4_CONTEXT = load_cloud_voice_px4_context()
# 命令配置常量
command_config = CommandConfigLoader()
TAKEOFF_CONFIG = command_config.get_takeoff_config()
LAND_CONFIG = command_config.get_land_config()
FOLLOW_CONFIG = command_config.get_follow_config()
FORWARD_CONFIG = command_config.get_forward_config()
BACKWARD_CONFIG = command_config.get_backward_config()
LEFT_CONFIG = command_config.get_left_config()
RIGHT_CONFIG = command_config.get_right_config()
UP_CONFIG = command_config.get_up_config()
DOWN_CONFIG = command_config.get_down_config()
HOVER_CONFIG = command_config.get_hover_config()
RETURN_HOME_CONFIG = command_config.get_return_home_config()
# 关键词配置常量
keywords_config = KeywordsConfigLoader()
KEYWORDS_CONFIG = keywords_config.get_keywords()
# 唤醒词配置常量
wake_word_config = WakeWordConfigLoader()
WAKE_WORD_PRIMARY = wake_word_config.get_primary()
WAKE_WORD_VARIANTS = wake_word_config.get_variants()
WAKE_WORD_MATCHING_CONFIG = wake_word_config.get_matching_config()
if __name__ == "__main__":
print(TAKEOFF_CONFIG)
print(LAND_CONFIG)
print(FORWARD_CONFIG)
print(BACKWARD_CONFIG)
print(LEFT_CONFIG)
print(RIGHT_CONFIG)
print(UP_CONFIG)
print(DOWN_CONFIG)
print(HOVER_CONFIG)
print(KEYWORDS_CONFIG)