Spaces:
Sleeping
Sleeping
| """ | |
| 依赖检测和测试脚本 | |
| 用于诊断 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() |