|
|
""" |
|
|
依赖检测和测试脚本 |
|
|
用于诊断 Genie TTS 的依赖问题 |
|
|
""" |
|
|
|
|
|
import sys |
|
|
import importlib |
|
|
import logging |
|
|
|
|
|
logging.basicConfig(level=logging.INFO, format='%(levelname)s: %(message)s') |
|
|
logger = logging.getLogger(__name__) |
|
|
|
|
|
def test_critical_dependencies(): |
|
|
"""测试关键依赖""" |
|
|
critical_deps = [ |
|
|
("onnxruntime", "ONNX Runtime - TTS推理引擎"), |
|
|
("numpy", "NumPy - 数值计算基础"), |
|
|
("soundfile", "SoundFile - 音频I/O"), |
|
|
("huggingface_hub", "Hugging Face Hub - 模型下载"), |
|
|
] |
|
|
|
|
|
results = {} |
|
|
logger.info("=== 检测关键依赖 ===") |
|
|
|
|
|
for module_name, description in critical_deps: |
|
|
try: |
|
|
module = importlib.import_module(module_name) |
|
|
version = getattr(module, '__version__', 'Unknown') |
|
|
logger.info(f"✅ {description}: v{version}") |
|
|
results[module_name] = {"status": "OK", "version": version} |
|
|
except ImportError as e: |
|
|
logger.error(f"❌ {description}: 未安装 - {e}") |
|
|
results[module_name] = {"status": "MISSING", "error": str(e)} |
|
|
|
|
|
return results |
|
|
|
|
|
def test_optional_dependencies(): |
|
|
"""测试可选依赖""" |
|
|
optional_deps = [ |
|
|
("scipy", "SciPy - 科学计算"), |
|
|
("librosa", "Librosa - 音频分析"), |
|
|
("rich", "Rich - 终端美化"), |
|
|
("gradio", "Gradio - Web界面"), |
|
|
("pyopenjtalk", "PyOpenJTalk - 日语处理"), |
|
|
] |
|
|
|
|
|
results = {} |
|
|
logger.info("\n=== 检测可选依赖 ===") |
|
|
|
|
|
for module_name, description in optional_deps: |
|
|
try: |
|
|
module = importlib.import_module(module_name) |
|
|
version = getattr(module, '__version__', 'Unknown') |
|
|
logger.info(f"✅ {description}: v{version}") |
|
|
results[module_name] = {"status": "OK", "version": version} |
|
|
except ImportError as e: |
|
|
logger.warning(f"⚠️ {description}: 未安装 - {e}") |
|
|
results[module_name] = {"status": "MISSING", "error": str(e)} |
|
|
|
|
|
return results |
|
|
|
|
|
def test_genie_tts(): |
|
|
"""测试 Genie TTS""" |
|
|
logger.info("\n=== 检测 Genie TTS ===") |
|
|
|
|
|
try: |
|
|
import genie_tts |
|
|
version = getattr(genie_tts, '__version__', 'Unknown') |
|
|
logger.info(f"✅ Genie TTS: v{version}") |
|
|
|
|
|
|
|
|
try: |
|
|
|
|
|
logger.info("🔍 测试预定义角色功能...") |
|
|
|
|
|
logger.info("✅ Genie TTS API 可访问") |
|
|
return {"status": "OK", "version": version} |
|
|
except Exception as e: |
|
|
logger.warning(f"⚠️ Genie TTS API 测试失败: {e}") |
|
|
return {"status": "PARTIAL", "version": version, "error": str(e)} |
|
|
|
|
|
except ImportError as e: |
|
|
logger.error(f"❌ Genie TTS: 未安装 - {e}") |
|
|
return {"status": "MISSING", "error": str(e)} |
|
|
|
|
|
def test_onnx_runtime_providers(): |
|
|
"""测试 ONNX Runtime 提供程序""" |
|
|
logger.info("\n=== 检测 ONNX Runtime 提供程序 ===") |
|
|
|
|
|
try: |
|
|
import onnxruntime as ort |
|
|
providers = ort.get_available_providers() |
|
|
logger.info(f"可用提供程序: {providers}") |
|
|
|
|
|
|
|
|
if 'CPUExecutionProvider' in providers: |
|
|
logger.info("✅ CPU执行提供程序可用") |
|
|
else: |
|
|
logger.error("❌ CPU执行提供程序不可用") |
|
|
|
|
|
return {"providers": providers} |
|
|
except Exception as e: |
|
|
logger.error(f"❌ ONNX Runtime 提供程序检测失败: {e}") |
|
|
return {"error": str(e)} |
|
|
|
|
|
def main(): |
|
|
"""主函数""" |
|
|
logger.info("Genie TTS 依赖检测工具") |
|
|
logger.info("=" * 50) |
|
|
|
|
|
|
|
|
logger.info(f"Python 版本: {sys.version}") |
|
|
logger.info(f"平台: {sys.platform}") |
|
|
|
|
|
|
|
|
critical_results = test_critical_dependencies() |
|
|
optional_results = test_optional_dependencies() |
|
|
genie_results = test_genie_tts() |
|
|
onnx_results = test_onnx_runtime_providers() |
|
|
|
|
|
|
|
|
logger.info("\n=== 检测总结 ===") |
|
|
|
|
|
critical_missing = [k for k, v in critical_results.items() if v["status"] != "OK"] |
|
|
if critical_missing: |
|
|
logger.error(f"❌ 缺少关键依赖: {', '.join(critical_missing)}") |
|
|
logger.error("🚨 没有这些依赖,Genie TTS 无法正常工作!") |
|
|
else: |
|
|
logger.info("✅ 所有关键依赖都已安装") |
|
|
|
|
|
optional_missing = [k for k, v in optional_results.items() if v["status"] != "OK"] |
|
|
if optional_missing: |
|
|
logger.info(f"ℹ️ 缺少可选依赖: {', '.join(optional_missing)}") |
|
|
logger.info("💡 这些依赖缺失可能影响部分功能,但不会阻止基本运行") |
|
|
|
|
|
if genie_results["status"] == "OK": |
|
|
logger.info("🎉 Genie TTS 已准备就绪!") |
|
|
elif genie_results["status"] == "PARTIAL": |
|
|
logger.warning("⚠️ Genie TTS 已安装但功能可能受限") |
|
|
else: |
|
|
logger.error("❌ Genie TTS 未安装或无法导入") |
|
|
|
|
|
return critical_missing, optional_missing, genie_results |
|
|
|
|
|
if __name__ == "__main__": |
|
|
main() |