# 视觉探索引擎 **Repository Path**: bingbingyihao/visual-exploration-engine ## Basic Information - **Project Name**: 视觉探索引擎 - **Description**: 以图搜图 - 视觉探索引擎 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-08 - **Last Updated**: 2026-06-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 视觉探索引擎 > 以图搜图 - 基于 AI 向量检索的视觉探索系统 ## 项目简介 视觉探索引擎是一个基于深度学习的以图搜图系统。用户上传一张图片后,系统会自动提取图片的特征向量,并在图片池中搜索视觉上相似的图片。同时利用 AI 视觉模型自动分析图片内容,生成分类和标签。 ## 技术栈 | 层级 | 技术 | |------|------| | 后端 | Spring Boot 2.7.18 + MyBatis-Plus 3.5.3 + Lombok | | 向量数据库 | Milvus 2.4 (2560 维向量, IVF_FLAT 索引) | | AI 服务 | 阿里云 DashScope (qwen3-vl-embedding / qwen-vl-max) | | 前端 | Vue 3 + Axios | | 关系数据库 | MySQL 8.0 | ## 功能特性 - **图片上传** - 支持拖拽或点击上传,支持 JPG/PNG/WebP 格式 - **向量提取** - 调用 DashScope 多模态模型将图片转为 2560 维特征向量 - **图片分析** - AI 自动识别图片分类(风景/建筑/人物/动物等)和提取标签 - **以图搜图** - 上传新图片或使用图片池中已有图片进行搜索 - **图片池管理** - 分页浏览、分类筛选、按相似度排序展示结果 - **实时进度** - 上传进度展示、搜索结果相似度百分比显示 ## 系统架构 ``` ┌─────────────┐ ┌──────────────────┐ ┌─────────────────┐ │ Vue 3 前端 │────▶│ Spring Boot 后端 │────▶│ Milvus 向量库 │ └─────────────┘ └────────┬─────────┘ └─────────────────┘ │ ┌──────▼──────┐ ┌─────────────────┐ │ MySQL DB │ │ DashScope AI API│ └─────────────┘ └─────────────────┘ ``` ## 环境要求 - JDK 8+ - Node.js 16+ - MySQL 8.0 - Milvus 2.4+ - 阿里云 DashScope API Key ## 快速开始 ### 1. 数据库准备 执行初始化 SQL 脚本: ```bash mysql -u root -p < code/SpringBoot/src/main/resources/sql/init.sql ``` ### 2. 配置后端 编辑 `code/SpringBoot/src/main/resources/application.properties`: ```properties # 数据库配置 spring.datasource.url=jdbc:mysql://localhost:3306/visual_exploration spring.datasource.username=root spring.datasource.password=你的密码 # DashScope API Key(必填) dashscope.api-key=你的dashscope-api-key # Milvus 配置(如使用默认值可保持不变) milvus.host=localhost milvus.port=19530 ``` ### 3. 启动后端 ```bash cd code/SpringBoot mvn spring-boot:run ``` 后端默认运行在 `http://localhost:8080` ### 4. 启动前端 ```bash cd code/vue npm install npm run serve ``` 前端默认运行在 `http://localhost:8081` ## API 接口 | 方法 | 路径 | 说明 | |------|------|------| | POST | `/api/images/upload` | 上传图片(自动提取向量+分析) | | GET | `/api/images/pool?page=1&size=20&category=` | 分页获取图片池 | | POST | `/api/search/similar` | 上传图片搜索相似图片 | | POST | `/api/search/similar/{imageId}` | 使用图片池中的图片搜索 | ## 项目结构 ``` ├── code/ │ ├── SpringBoot/ # 后端 │ │ ├── src/main/java/com/boot/ │ │ │ ├── config/ # 配置类(Milvus/MyBatis/CORS等) │ │ │ ├── controller/ # 控制器(图片/搜索接口) │ │ │ ├── dto/ # 数据传输对象 │ │ │ ├── entity/ # 数据库实体 │ │ │ ├── mapper/ # MyBatis-Plus Mapper │ │ │ ├── service/ # 业务逻辑层 │ │ │ └── utils/ # 工具类 │ │ └── src/main/resources/ │ │ ├── application.properties # 应用配置 │ │ └── sql/init.sql # 数据库初始化脚本 │ └── vue/ # 前端 │ └── src/ │ ├── api/ # API 请求封装 │ ├── components/ # 通用组件 │ ├── views/ # 页面组件 │ └── styles/ # 全局样式 └── README.md ``` ## 工作原理 1. **上传阶段** - 用户上传图片,后端保存到本地存储,记录到 MySQL 2. **向量提取** - 将图片转为 Base64,调用 DashScope `qwen3-vl-embedding` 模型获取 2560 维向量 3. **向量存储** - 将向量插入 Milvus 向量数据库,关联 image_id 4. **内容分析** - 调用 DashScope `qwen-vl-max` 视觉模型,分析图片分类和标签 5. **搜索阶段** - 对查询图片执行同样的向量提取,在 Milvus 中用内积 (IP) 检索最相似向量 6. **结果返回** - 按相似度排序,关联 MySQL 中的图片元数据返回前端 ## License Apache 2.0