File size: 5,198 Bytes
24437ee |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 |
"""
依赖检测和测试脚本
用于诊断 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("🔍 测试预定义角色功能...")
# 这不会实际下载,只是测试API
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}")
# 检查CPU提供程序
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() |