影像向量检索平台
影像向量检索平台 (Image Vector Platform)
📖 项目简介
影像向量检索平台 是一个基于 RemoteCLIP 的遥感影像智能存储检索系统,专为航空遥感影像管理和智能检索而设计。该系统通过 AI 技术实现遥感影像的自动化处理和智能化检索,让用户可以使用自然语言查询影像内容,极大提升了遥感影像的管理效率和使用体验。
🎯 核心特性
- 🤖 智能自动入库:监听 MinIO 对象存储事件,自动提取影像元数据并入库,无需人工干预
- 🧠 AI 向量化处理:调用 RemoteCLIP 模型为每张影像生成 768 维特征向量,实现语义理解
- 🔍 自然语言检索:支持中文自然语言查询(如"城市建筑区域"、"森林覆盖区"),基于向量相似度智能检索
- 📊 实时系统监控:提供完整的数据统计、处理进度追踪和系统健康监控
- 🗺️ 地理可视化:基于 Cesium 的三维地球展示,直观浏览影像分布
- ⚡ 高性能架构:采用 PostgreSQL + pgvector 实现向量相似度计算,支持海量影像检索
🏗️ 系统架构
系统采用前后端分离的四层架构设计:
┌─────────────────────────────────────────────────────────────┐
│ 前端展示层 (Frontend) │
│ Next.js 14 + React 18 + TypeScript + Tailwind CSS + Cesium │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 仪表板 │ │ 地图视图 │ │ 影像浏览 │ │ 语义搜索 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
↕ HTTP/REST API
┌─────────────────────────────────────────────────────────────┐
│ API 服务层 (Backend) │
│ Spring Boot 3.4.5 + Spring Data JPA │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Controller │ │ Service │ │ Repository │ │
│ │ (REST APIs) │ │ (业务逻辑) │ │ (数据访问) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ 数据存储层 (Storage) │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ PostgreSQL │ │ MinIO │ │ ElasticSearch│ │
│ │ + pgvector │ │ 对象存储 │ │ 元数据检索 │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────────┘
↕
┌─────────────────────────────────────────────────────────────┐
│ AI 服务层 (AI Services) │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ RemoteCLIP │ │ DeepSeek │ │
│ │ 向量化服务 │ │ 翻译服务 │ │
│ └──────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────────┘
架构说明
- 前端展示层:基于 Next.js 14 的现代化 Web 应用,提供响应式用户界面和三维地球可视化
- API 服务层:Spring Boot 构建的 RESTful API 服务,处理业务逻辑和数据流转
- 数据存储层:多数据源架构,PostgreSQL 存储结构化数据和向量,MinIO 存储影像文件,Elasticsearch 提供全文检索
- AI 服务层:RemoteCLIP 模型提供图像和文本的向量化能力,实现语义理解
🔄 核心业务流程
1. 影像自动入库流程
影像上传到 MinIO
↓
MinIO 触发事件 → PostgreSQL 事件表
↓
事件监听器自动捕获
↓
解析影像路径和元数据
↓
动态创建/选择目标表
↓
提取地理信息(层级、行、列)
↓
保存到数据库 → 标记事件已处理
关键特性:
- 自动监听 MinIO 对象创建事件
- 动态表名解析,根据影像路径自动创建和管理不同的表
- 支持 GeoSOT 网格编码,自动解析地理信息
- 重复处理检测,避免数据重复入库
- 定时任务(每 5 秒)自动处理未处理事件
2. 向量化处理流程
数据库中的影像记录
↓
检测未向量化的影像
↓
从 MinIO 获取影像数据
↓
调用 RemoteCLIP API
↓
生成 768 维特征向量
↓
存储到向量表(独立存储)
↓
更新处理状态
关键特性:
- 向量与元数据分离存储,优化查询性能
- 支持批量向量化处理
- 失败自动重试机制
- 详细的处理进度追踪
3. 语义检索流程
用户输入中文查询文本
↓
调用 RemoteCLIP 文本编码器
↓
生成查询向量(768 维)
↓
PostgreSQL + pgvector 向量相似度计算
↓
返回相似度最高的影像列表
↓
前端展示结果(缩略图 + 元数据)
关键特性:
- 支持自然语言查询(如"城市道路"、"农田区域")
- 基于余弦相似度的向量检索
- 可配置返回结果数量和相似度阈值
- 支持多表联合检索
🛠️ 技术栈
后端技术
| 技术 | 版本 | 用途 | | --------------- | ------ | ---------- | | Spring Boot | 3.4.5 | 应用框架 | | Java | JDK 17 | 开发语言 | | Spring Data JPA | 3.x | ORM 框架 | | PostgreSQL | 14+ | 关系数据库 | | pgvector | 0.5+ | 向量扩展 | | MinIO | 8.5.7 | 对象存储 | | Elasticsearch | 8.15.5 | 搜索引擎 | | Lombok | - | 代码简化 |
前端技术
| 技术 | 版本 | 用途 | | ------------ | ------- | ---------- | | Next.js | 14.2.0 | React 框架 | | React | 18.3.1 | UI 库 | | TypeScript | 5.6.3 | 类型安全 | | Tailwind CSS | 3.4.15 | 样式框架 | | Cesium | 1.132.0 | 三维地球 | | Radix UI | Latest | UI 组件 |
AI 模型
| 模型 | 用途 | | --------------------- | ------------------ | | RemoteCLIP (ViT-L-14) | 图像和文本向量化 | | DeepSeek | 中英文翻译(可选) |
📦 核心功能模块
1. 动态表管理模块
- 自动表创建:根据影像路径自动创建和管理数据表
- 表名解析:支持灵活的路径到表名映射规则
- 统一表结构:所有动态表使用相同的标准化结构
示例:
- 路径
raster-manage/tiles/geosot/245/test/11/86_444.png→ 表tif_test_tb - 路径
raster-manage/tiles/geosot/245/demo/12/100_200.png→ 表tif_demo_tb
2. MinIO 事件监听模块
- 实时事件捕获:监听 PostgreSQL 事件表
- 事件解析:提取 MinIO 事件中的对象信息和元数据
- 定时处理:每 5 秒自动处理未处理事件
- 错误恢复:处理失败的事件保留以便重试
3. CLIP 向量化模块
- 图像向量化:为影像生成 768 维特征向量
- 文本向量化:为查询文本生成特征向量
- 向量存储:独立的向量表存储,优化性能
- 批量处理:支持批量向量化任务
4. 向量检索模块
- 语义搜索:基于向量相似度的智能检索
- 多表检索:支持跨多个数据表检索
- 结果排序:按相似度自动排序
- 性能优化:使用 pgvector 索引加速查询
5. 系统监控模块
- 仪表板统计:总影像数、已向量化数、未处理事件数
- 处理进度:实时显示向量化处理进度
- 历史记录:数据集处理历史追踪
- 健康检查:MinIO、数据库、Elasticsearch 连接状态
6. 影像浏览模块
- 影像列表:分页浏览影像数据
- 详情查看:查看影像元数据和地理信息
- 缩略图生成:自动生成影像缩略图
- 地图展示:在三维地球上标注影像位置
🗄️ 数据库设计
事件监听表
1minio_geotile_events_tb
2├── id (主键)
3├── key (对象路径)
4├── value (事件 JSON)
5├── processed (处理状态)
6├── created_at (创建时间)
7└── processed_at (处理时间)动态影像元数据表
1tif_{prefix}_tb
2├── id (主键)
3├── minio_bucket_name (桶名)
4├── minio_object_key (对象键)
5├── minio_object_name (对象名)
6├── tif_size (文件大小)
7├── etag (ETag)
8├── last_modified (最后修改时间)
9├── content_type (内容类型)
10├── tags (标签 JSONB)
11├── user_metadata (用户元数据 JSONB)
12├── geo_level (地理层级)
13├── row (行号)
14├── col (列号)
15└── clip_id (向量 ID,外键)向量存储表
1tif_{prefix}_vector_tb
2├── id (主键)
3├── clip_embedding (向量数据 vector(768))
4└── created_at (创建时间)设计亮点:
- 元数据与向量分离存储,优化查询性能
- 使用 JSONB 存储灵活的元数据
- 支持 pgvector 扩展进行高效向量检索
🚀 快速开始
环境要求
- Java: JDK 17+
- Node.js: 18.0+
- PostgreSQL: 14+ (需安装 pgvector 扩展)
- MinIO: 8.5+
- Elasticsearch: 8.15+
📡 API 接口概览
系统统计接口
GET /api/system/overview- 获取系统仪表板统计GET /api/system/history- 获取数据集处理历史
影像管理接口
GET /api/images- 获取影像列表(分页)GET /api/images/{id}- 获取影像详情
语义搜索接口
POST /api/v0/search- 中文自然语言检索POST /api/v1/search- 高级向量检索
数据处理接口
POST /api/tif/process-events- 手动触发事件处理GET /api/tif/unprocessed-count- 查询未处理事件数POST /api/tif/scan-and-vectorize- 扫描并向量化影像
监控接口
GET /api/tif/health- 系统健康检查GET /api/tif/table/{prefix}/stats- 表统计信息
🎯 应用场景
1. 遥感影像智能管理
- 自动化影像入库,无需人工整理
- 统一的元数据管理和查询
- 地理信息自动提取和索引
2. 自然语言影像检索
- "查找包含城市建筑的影像"
- "搜索森林覆盖区域"
- "找出有道路的卫星图"
3. 影像内容分析
- 基于语义的影像相似度分析
- 影像内容自动分类
- 场景识别和标注
4. 数据可视化展示
- 三维地球上的影像分布展示
- 影像覆盖范围可视化
- 交互式影像浏览
🌟 项目亮点
1. 智能化
- 基于 RemoteCLIP 的语义理解能力
- 自然语言查询,无需专业知识
- AI 驱动的影像检索
2. 自动化
- 全自动影像入库流程
- 自动向量化处理
- 定时任务自动运行
3. 高性能
- pgvector 向量索引加速检索
- 向量与元数据分离存储
- 支持海量影像数据
4. 可扩展
- 动态表管理,灵活适应不同数据源
- 模块化架构,易于扩展
- 标准化 REST API
5. 易用性
- 直观的 Web 界面
- 三维地球可视化
- 完善的系统监控
📊 测试与质量保证
系统经过完整的测试验证:
- 功能测试:100% 用例执行率,93.2% 通过率
- 性能测试:支持并发处理,响应时间达标
- 异常测试:完善的错误处理和恢复机制
- 集成测试:各模块协同工作验证
