liumaolin commited on
Commit
8acaad0
·
1 Parent(s): 40186e2

Refactor ASR manager: remove `_get_asr_supported_languages`, replace static language mapping with `supported_langs` attribute, and update dynamic module import to use `importlib.util` for improved maintainability.

Browse files
src/VoiceDialogue/services/speech/asr/manager.py CHANGED
@@ -1,3 +1,4 @@
 
1
  import inspect
2
  import logging
3
  import re
@@ -59,15 +60,6 @@ class ASRRegistryTables:
59
  )
60
  print("\n")
61
 
62
- def _get_asr_supported_languages(self, asr_key: str) -> List[str]:
63
- """获取特定ASR引擎支持的语言列表"""
64
- # 根据ASR类型返回支持的语言
65
- language_mapping = {
66
- 'funasr': ['zh', 'auto'],
67
- 'whisper': ['en', 'zh', 'auto'],
68
- }
69
- return language_mapping.get(asr_key, ['auto'])
70
-
71
  def register(self, register_table_key: str, key: str = None) -> callable:
72
  """装饰器,用于注册ASR类"""
73
 
@@ -103,7 +95,7 @@ class ASRManager:
103
  self._language_to_asr_mapping = {
104
  'zh': 'funasr', # 中文优先使用FunASR
105
  'en': 'whisper', # 英文优先使用Whisper
106
- 'auto': 'whisper', # 自动检测默认使用Whisper
107
  }
108
 
109
  def create_asr(self, language: Literal['auto', 'zh', 'en']) -> ASRInterface:
@@ -192,10 +184,11 @@ class ASRManager:
192
  """
193
  supported_languages = {}
194
 
195
- for asr_key in asr_tables.asr_classes.keys():
196
  try:
197
- languages = asr_tables._get_asr_supported_languages(asr_key)
198
- supported_languages[asr_key] = languages
 
199
  except Exception as e:
200
  logging.warning(f"获取ASR引擎 '{asr_key}' 支持的语言失败: {e}")
201
  supported_languages[asr_key] = ['unknown']
@@ -302,8 +295,12 @@ def register_all_asr():
302
  module_name = py_file.stem
303
  try:
304
  # 动态导入模块
305
- module = importlib.import_module(f".models.{module_name}",
306
- package="VoiceDialogue.services.speech.asr")
 
 
 
 
307
  logging.info(f"Successfully imported ASR module: {module_name}")
308
  except ImportError as e:
309
  logging.warning(f"Failed to import ASR module {module_name}: {e}")
 
1
+ import importlib.util
2
  import inspect
3
  import logging
4
  import re
 
60
  )
61
  print("\n")
62
 
 
 
 
 
 
 
 
 
 
63
  def register(self, register_table_key: str, key: str = None) -> callable:
64
  """装饰器,用于注册ASR类"""
65
 
 
95
  self._language_to_asr_mapping = {
96
  'zh': 'funasr', # 中文优先使用FunASR
97
  'en': 'whisper', # 英文优先使用Whisper
98
+ # 'auto': 'whisper', # 自动检测默认使用Whisper
99
  }
100
 
101
  def create_asr(self, language: Literal['auto', 'zh', 'en']) -> ASRInterface:
 
184
  """
185
  supported_languages = {}
186
 
187
+ for asr_key, asr_class in asr_tables.asr_classes.items():
188
  try:
189
+ supported_languages[asr_key] = asr_class.supported_langs
190
+ # languages = asr_tables._get_asr_supported_languages(asr_key)
191
+ # supported_languages[asr_key] = languages
192
  except Exception as e:
193
  logging.warning(f"获取ASR引擎 '{asr_key}' 支持的语言失败: {e}")
194
  supported_languages[asr_key] = ['unknown']
 
295
  module_name = py_file.stem
296
  try:
297
  # 动态导入模块
298
+ spec = importlib.util.spec_from_file_location(
299
+ f".models.{module_name}",
300
+ py_file
301
+ )
302
+ module = importlib.util.module_from_spec(spec)
303
+ spec.loader.exec_module(module)
304
  logging.info(f"Successfully imported ASR module: {module_name}")
305
  except ImportError as e:
306
  logging.warning(f"Failed to import ASR module {module_name}: {e}")
src/VoiceDialogue/services/speech/asr/models/whisper.py CHANGED
@@ -12,7 +12,7 @@ from ..utils import ensure_minimum_audio_duration
12
  @asr_tables.register('asr_classes', 'whisper')
13
  class WhisperCppClient(ASRInterface):
14
  """Whisper C++ API客户端"""
15
- supported_langs = ['en', 'zh', 'auto']
16
 
17
  def __init__(self):
18
  super().__init__()
 
12
  @asr_tables.register('asr_classes', 'whisper')
13
  class WhisperCppClient(ASRInterface):
14
  """Whisper C++ API客户端"""
15
+ supported_langs = ['en', 'zh', ]
16
 
17
  def __init__(self):
18
  super().__init__()