影像向量检索平台

影像向量检索平台 (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% 通过率
  • 性能测试:支持并发处理,响应时间达标
  • 异常测试:完善的错误处理和恢复机制
  • 集成测试:各模块协同工作验证