209 lines
7.0 KiB
Python
209 lines
7.0 KiB
Python
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", {})
|
||
|
||
# 主程序 TakeoffPrintRecognizer(main_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) |