# 多模态检索系统 (Multimodal Retrieval System)

基于 OpenSearch-AI/Ops-MM-embedding-v1-7B 模型的多模态检索系统，支持四种检索模式：文搜图、文搜文、图搜图、图搜文。

## 功能特性

- **文搜文 (Text-to-Text)**: 使用文本查询搜索相似文本
- **文搜图 (Text-to-Image)**: 使用文本查询搜索相关图像
- **图搜图 (Image-to-Image)**: 使用图像查询搜索相似图像
- **图搜文 (Image-to-Text)**: 使用图像查询搜索相关文本

## 环境要求

- Python 3.8+
- CUDA 支持的 GPU (推荐，也可使用CPU)
- 至少 8GB 内存

## 安装依赖

```bash
pip install -r requirements.txt
```

## 快速开始

### 1. 检查GPU环境

```python
from multimodal_retrieval import check_gpu_info
check_gpu_info()
```

### 2. 初始化系统

```python
from multimodal_retrieval import MultimodalRetrieval

# 初始化检索系统
retrieval_system = MultimodalRetrieval()
```

### 3. 构建索引

```python
# 构建文本索引
texts = ["一只可爱的小猫", "美丽的山景", "现代化城市"]
retrieval_system.build_text_index(texts)

# 构建图像索引
image_paths = ["./images/cat.jpg", "./images/mountain.jpg", "./images/city.jpg"]
retrieval_system.build_image_index(image_paths)
```

### 4. 执行检索

```python
# 文搜文
results = retrieval_system.search_text_by_text("猫咪", top_k=5)

# 文搜图
results = retrieval_system.search_images_by_text("动物", top_k=5)

# 图搜图
results = retrieval_system.search_images_by_image("./query_image.jpg", top_k=5)

# 图搜文
results = retrieval_system.search_text_by_image("./query_image.jpg", top_k=5)
```

## 运行演示

```bash
python demo.py
```

演示脚本会自动：
1. 检查GPU环境信息
2. 初始化多模态检索系统
3. 演示四种检索模式
4. 显示检索结果和相似度分数

## 文件结构

```
mmeb/
├── multimodal_retrieval.py  # 主要检索系统类
├── demo.py                  # 演示脚本
├── requirements.txt         # 依赖包列表
├── README.md               # 项目说明
└── images/                 # 图像数据目录 (需要自行创建)
```

## API 参考

### MultimodalRetrieval 类

#### 初始化参数
- `model_name`: 模型名称，默认 "OpenSearch-AI/Ops-MM-embedding-v1-7B"
- `device`: 设备类型，默认自动选择 ("cuda" 或 "cpu")

#### 主要方法

##### `build_text_index(texts, save_path=None)`
构建文本索引
- `texts`: 文本列表
- `save_path`: 索引保存路径 (可选)

##### `build_image_index(image_paths, save_path=None)`
构建图像索引
- `image_paths`: 图像路径列表
- `save_path`: 索引保存路径 (可选)

##### `search_text_by_text(query, top_k=5)`
文搜文检索
- `query`: 查询文本
- `top_k`: 返回结果数量
- 返回: `[(文本, 相似度分数), ...]`

##### `search_images_by_text(query, top_k=5)`
文搜图检索
- `query`: 查询文本
- `top_k`: 返回结果数量
- 返回: `[(图像路径, 相似度分数), ...]`

##### `search_images_by_image(query_image, top_k=5)`
图搜图检索
- `query_image`: 查询图像路径或PIL图像
- `top_k`: 返回结果数量
- 返回: `[(图像路径, 相似度分数), ...]`

##### `search_text_by_image(query_image, top_k=5)`
图搜文检索
- `query_image`: 查询图像路径或PIL图像
- `top_k`: 返回结果数量
- 返回: `[(文本, 相似度分数), ...]`

## 注意事项

1. **首次运行**: 首次运行时会自动下载模型，需要网络连接
2. **内存需求**: 7B参数模型需要较大内存，建议使用GPU
3. **图像格式**: 支持常见图像格式 (jpg, png, bmp, gif等)
4. **批处理**: 系统自动进行批处理以提高效率
5. **索引保存**: 可以保存和加载索引以避免重复构建

## 性能优化建议

- 使用GPU加速推理
- 合理设置批处理大小
- 保存索引文件避免重复构建
- 对大量数据使用分批处理

## 故障排除

### 常见问题

1. **CUDA内存不足**: 减小批处理大小或使用CPU
2. **模型下载失败**: 检查网络连接或使用镜像源
3. **图像加载错误**: 检查图像文件路径和格式

### 日志信息

系统会输出详细的日志信息，包括：
- GPU环境检测结果
- 模型加载进度
- 索引构建状态
- 检索执行情况

## 许可证

本项目遵循 MIT 许可证。
