131 lines
3.5 KiB
Python
131 lines
3.5 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
"""
|
||
启动Web应用测试脚本
|
||
"""
|
||
|
||
import os
|
||
import sys
|
||
import logging
|
||
import subprocess
|
||
from pathlib import Path
|
||
|
||
# 设置日志
|
||
logging.basicConfig(level=logging.INFO, format='%(message)s')
|
||
logger = logging.getLogger(__name__)
|
||
|
||
def check_dependencies():
|
||
"""检查依赖包"""
|
||
logger.info("📦 检查依赖包...")
|
||
|
||
required_packages = [
|
||
'torch', 'transformers', 'numpy', 'PIL', 'flask', 'pymochow'
|
||
]
|
||
|
||
missing_packages = []
|
||
for package in required_packages:
|
||
try:
|
||
if package == 'PIL':
|
||
from PIL import Image
|
||
else:
|
||
__import__(package)
|
||
logger.info(f"✅ {package}")
|
||
except ImportError:
|
||
missing_packages.append(package)
|
||
logger.error(f"❌ {package} 未安装")
|
||
|
||
if missing_packages:
|
||
logger.info("安装缺失的包:")
|
||
for pkg in missing_packages:
|
||
if pkg == 'PIL':
|
||
logger.info("pip install Pillow")
|
||
elif pkg == 'pymochow':
|
||
logger.info("pip install pymochow")
|
||
else:
|
||
logger.info(f"pip install {pkg}")
|
||
return False
|
||
|
||
return True
|
||
|
||
def test_vdb_connection():
|
||
"""测试VDB连接"""
|
||
logger.info("🔗 测试百度VDB连接...")
|
||
|
||
try:
|
||
import pymochow
|
||
from pymochow.configuration import Configuration
|
||
from pymochow.auth.bce_credentials import BceCredentials
|
||
|
||
config = Configuration(
|
||
credentials=BceCredentials("root", "vdb$yjr9ln3n0td"),
|
||
endpoint="http://180.76.96.191:5287"
|
||
)
|
||
|
||
client = pymochow.MochowClient(config)
|
||
databases = client.list_databases()
|
||
client.close()
|
||
|
||
logger.info(f"✅ VDB连接成功,发现 {len(databases)} 个数据库")
|
||
return True
|
||
|
||
except Exception as e:
|
||
logger.error(f"❌ VDB连接失败: {e}")
|
||
return False
|
||
|
||
def prepare_directories():
|
||
"""准备必要目录"""
|
||
logger.info("📁 准备目录...")
|
||
|
||
directories = ["uploads", "sample_images", "text_data", "templates"]
|
||
|
||
for dir_name in directories:
|
||
Path(dir_name).mkdir(exist_ok=True)
|
||
logger.info(f"✅ {dir_name}")
|
||
|
||
def start_web_app():
|
||
"""启动Web应用"""
|
||
logger.info("🌐 启动Web应用...")
|
||
|
||
try:
|
||
# 设置环境变量
|
||
os.environ['FLASK_APP'] = 'web_app_vdb_production.py'
|
||
os.environ['FLASK_ENV'] = 'development'
|
||
|
||
# 启动Flask应用
|
||
logger.info("启动地址: http://localhost:5000")
|
||
logger.info("按 Ctrl+C 停止服务")
|
||
|
||
# 直接运行Python文件
|
||
subprocess.run([sys.executable, 'web_app_vdb_production.py'], check=True)
|
||
|
||
except KeyboardInterrupt:
|
||
logger.info("🛑 用户停止服务")
|
||
except Exception as e:
|
||
logger.error(f"❌ Web应用启动失败: {e}")
|
||
|
||
def main():
|
||
"""主函数"""
|
||
logger.info("🚀 启动多模态检索系统Web应用")
|
||
logger.info("=" * 50)
|
||
|
||
# 1. 检查依赖
|
||
if not check_dependencies():
|
||
logger.error("❌ 依赖包检查失败,请先安装缺失的包")
|
||
return False
|
||
|
||
# 2. 测试VDB连接
|
||
if not test_vdb_connection():
|
||
logger.error("❌ VDB连接失败,请检查网络和配置")
|
||
return False
|
||
|
||
# 3. 准备目录
|
||
prepare_directories()
|
||
|
||
# 4. 启动Web应用
|
||
start_web_app()
|
||
|
||
return True
|
||
|
||
if __name__ == "__main__":
|
||
main()
|