153 lines
4.7 KiB
Python
153 lines
4.7 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
InsightFlow Multimodal Module Test Script
|
|
测试多模态支持模块
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
|
|
# 添加 backend 目录到路径
|
|
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
|
|
|
print(" = " * 60)
|
|
print("InsightFlow 多模态模块测试")
|
|
print(" = " * 60)
|
|
|
|
# 测试导入
|
|
print("\n1. 测试模块导入...")
|
|
|
|
try:
|
|
from multimodal_processor import get_multimodal_processor
|
|
|
|
print(" ✓ multimodal_processor 导入成功")
|
|
except ImportError as e:
|
|
print(f" ✗ multimodal_processor 导入失败: {e}")
|
|
|
|
try:
|
|
from image_processor import get_image_processor
|
|
|
|
print(" ✓ image_processor 导入成功")
|
|
except ImportError as e:
|
|
print(f" ✗ image_processor 导入失败: {e}")
|
|
|
|
try:
|
|
from multimodal_entity_linker import get_multimodal_entity_linker
|
|
|
|
print(" ✓ multimodal_entity_linker 导入成功")
|
|
except ImportError as e:
|
|
print(f" ✗ multimodal_entity_linker 导入失败: {e}")
|
|
|
|
# 测试初始化
|
|
print("\n2. 测试模块初始化...")
|
|
|
|
try:
|
|
processor = get_multimodal_processor()
|
|
print(" ✓ MultimodalProcessor 初始化成功")
|
|
print(f" - 临时目录: {processor.temp_dir}")
|
|
print(f" - 帧提取间隔: {processor.frame_interval}秒")
|
|
except Exception as e:
|
|
print(f" ✗ MultimodalProcessor 初始化失败: {e}")
|
|
|
|
try:
|
|
img_processor = get_image_processor()
|
|
print(" ✓ ImageProcessor 初始化成功")
|
|
print(f" - 临时目录: {img_processor.temp_dir}")
|
|
except Exception as e:
|
|
print(f" ✗ ImageProcessor 初始化失败: {e}")
|
|
|
|
try:
|
|
linker = get_multimodal_entity_linker()
|
|
print(" ✓ MultimodalEntityLinker 初始化成功")
|
|
print(f" - 相似度阈值: {linker.similarity_threshold}")
|
|
except Exception as e:
|
|
print(f" ✗ MultimodalEntityLinker 初始化失败: {e}")
|
|
|
|
# 测试实体关联功能
|
|
print("\n3. 测试实体关联功能...")
|
|
|
|
try:
|
|
linker = get_multimodal_entity_linker()
|
|
|
|
# 测试字符串相似度
|
|
sim = linker.calculate_string_similarity("Project Alpha", "Project Alpha")
|
|
assert sim == 1.0, "完全匹配应该返回1.0"
|
|
print(f" ✓ 字符串相似度计算正常 (完全匹配: {sim})")
|
|
|
|
sim = linker.calculate_string_similarity("K8s", "Kubernetes")
|
|
print(f" ✓ 字符串相似度计算正常 (不同字符串: {sim:.2f})")
|
|
|
|
# 测试实体相似度
|
|
entity1 = {"name": "Project Alpha", "type": "PROJECT", "definition": "核心项目"}
|
|
entity2 = {"name": "Project Alpha", "type": "PROJECT", "definition": "主要项目"}
|
|
sim, match_type = linker.calculate_entity_similarity(entity1, entity2)
|
|
print(f" ✓ 实体相似度计算正常 (相似度: {sim:.2f}, 类型: {match_type})")
|
|
|
|
except Exception as e:
|
|
print(f" ✗ 实体关联功能测试失败: {e}")
|
|
|
|
# 测试图片处理功能(不需要实际图片)
|
|
print("\n4. 测试图片处理器功能...")
|
|
|
|
try:
|
|
processor = get_image_processor()
|
|
|
|
# 测试图片类型检测(使用模拟数据)
|
|
print(f" ✓ 支持的图片类型: {list(processor.IMAGE_TYPES.keys())}")
|
|
print(f" ✓ 图片类型描述: {processor.IMAGE_TYPES}")
|
|
|
|
except Exception as e:
|
|
print(f" ✗ 图片处理器功能测试失败: {e}")
|
|
|
|
# 测试视频处理配置
|
|
print("\n5. 测试视频处理器配置...")
|
|
|
|
try:
|
|
processor = get_multimodal_processor()
|
|
|
|
print(f" ✓ 视频目录: {processor.video_dir}")
|
|
print(f" ✓ 帧目录: {processor.frames_dir}")
|
|
print(f" ✓ 音频目录: {processor.audio_dir}")
|
|
|
|
# 检查目录是否存在
|
|
for dir_name, dir_path in [
|
|
("视频", processor.video_dir),
|
|
("帧", processor.frames_dir),
|
|
("音频", processor.audio_dir),
|
|
]:
|
|
if os.path.exists(dir_path):
|
|
print(f" ✓ {dir_name}目录存在: {dir_path}")
|
|
else:
|
|
print(f" ✗ {dir_name}目录不存在: {dir_path}")
|
|
|
|
except Exception as e:
|
|
print(f" ✗ 视频处理器配置测试失败: {e}")
|
|
|
|
# 测试数据库方法(如果数据库可用)
|
|
print("\n6. 测试数据库多模态方法...")
|
|
|
|
try:
|
|
from db_manager import get_db_manager
|
|
|
|
db = get_db_manager()
|
|
|
|
# 检查多模态表是否存在
|
|
conn = db.get_conn()
|
|
tables = ["videos", "video_frames", "images", "multimodal_mentions", "multimodal_entity_links"]
|
|
|
|
for table in tables:
|
|
try:
|
|
conn.execute(f"SELECT 1 FROM {table} LIMIT 1")
|
|
print(f" ✓ 表 '{table}' 存在")
|
|
except Exception as e:
|
|
print(f" ✗ 表 '{table}' 不存在或无法访问: {e}")
|
|
|
|
conn.close()
|
|
|
|
except Exception as e:
|
|
print(f" ✗ 数据库多模态方法测试失败: {e}")
|
|
|
|
print("\n" + " = " * 60)
|
|
print("测试完成")
|
|
print(" = " * 60)
|