158 lines
4.6 KiB
Markdown
158 lines
4.6 KiB
Markdown
# ImgSearcher
|
||
|
||
一个强大的图像搜索和分析应用,结合百度图像搜索API和Azure OpenAI功能,实现智能图像识别、分类和交互式对话。
|
||
|
||
## 功能特点
|
||
|
||
- **图像搜索**:使用百度图像搜索API上传和搜索相似图像
|
||
- **图像管理**:在图像库中添加、更新和删除图像
|
||
- **类型分类**:自动按类型分类图像并提供详细描述
|
||
- **交互式对话**:使用Azure OpenAI集成与上传的图像进行AI对话
|
||
- **MongoDB集成**:使用MongoDB存储和检索图像类型描述
|
||
|
||
## 架构
|
||
|
||
应用程序采用Flask后端和响应式前端构建。它使用多个外部API和服务:
|
||
|
||
- **百度图像搜索API**:用于图像相似度搜索和分类
|
||
- **Azure OpenAI API**:用于图像分析和交互式对话功能
|
||
- **MongoDB**:用于图像类型描述的持久化存储
|
||
|
||
## 前提条件
|
||
|
||
- Python 3.7+
|
||
- MongoDB(本地或远程实例)
|
||
- 百度AI平台账户,并启用图像搜索API
|
||
- Azure OpenAI API访问权限
|
||
|
||
## 安装
|
||
|
||
1. 克隆仓库:
|
||
```bash
|
||
git clone https://github.com/yourusername/imgsearcher.git
|
||
cd imgsearcher
|
||
```
|
||
|
||
2. 安装依赖:
|
||
```bash
|
||
pip install -r requirements.txt
|
||
```
|
||
|
||
3. 在根目录创建`.env`文件,配置如下:
|
||
```
|
||
# 百度API配置
|
||
BAIDU_API_KEY=你的百度API密钥
|
||
BAIDU_SECRET_KEY=你的百度Secret密钥
|
||
APP_ID=你的百度应用ID
|
||
|
||
# Azure OpenAI配置
|
||
AZURE_OPENAI_API_KEY=你的Azure_OpenAI_API密钥
|
||
AZURE_OPENAI_ENDPOINT=你的Azure_OpenAI端点
|
||
AZURE_OPENAI_API_VERSION=2023-12-01-preview
|
||
AZURE_OPENAI_DEPLOYMENT_NAME=你的部署名称
|
||
|
||
# MongoDB配置
|
||
MONGO_URI=mongodb://localhost:27017/
|
||
MONGO_DB_NAME=imgsearcher
|
||
```
|
||
|
||
## 使用方法
|
||
|
||
1. 启动应用:
|
||
```bash
|
||
./run.sh
|
||
```
|
||
或手动启动:
|
||
```bash
|
||
python app.py
|
||
```
|
||
|
||
2. 打开浏览器并访问:
|
||
```
|
||
http://localhost:5001
|
||
```
|
||
|
||
3. 使用Web界面:
|
||
- 上传图像到图像库
|
||
- 搜索相似图像
|
||
- 管理图像集合
|
||
- 与上传的图像进行AI对话
|
||
|
||
## 数据迁移
|
||
|
||
如果您需要从基于JSON的类型存储迁移到MongoDB,请使用迁移脚本:
|
||
|
||
```bash
|
||
python migrate_types_to_mongo.py
|
||
```
|
||
|
||
这将把所有类型描述从JSON文件转移到您的MongoDB实例。
|
||
|
||
## API端点
|
||
|
||
### 图像管理
|
||
- `POST /upload` - 上传图像到库
|
||
- `POST /search` - 搜索相似图像
|
||
- `POST /delete` - 从库中删除图像
|
||
- `POST /update` - 更新图像信息
|
||
|
||
### 对话功能
|
||
- `GET /chat-with-image` - 访问对话界面
|
||
- `POST /api/upload-chat-image` - 上传图像用于对话
|
||
- `POST /api/chat` - 发送消息与AI对话关于图像
|
||
|
||
|
||
## 项目结构
|
||
|
||
```
|
||
imgsearcher/
|
||
├── app/
|
||
│ ├── api/
|
||
│ │ ├── azure_openai.py # Azure OpenAI集成
|
||
│ │ ├── baidu_image_search.py # 百度图像搜索API客户端
|
||
│ │ ├── image_utils.py # 图像处理工具
|
||
│ │ ├── type_manager.py # 基于JSON的类型管理器
|
||
│ │ └── type_manager_mongo.py # 基于MongoDB的类型管理器
|
||
│ ├── data/
|
||
│ │ └── type_descriptions.json # 类型描述(JSON格式)
|
||
│ ├── static/
|
||
│ │ ├── css/ # CSS样式表
|
||
│ │ ├── js/ # JavaScript文件
|
||
│ │ └── img/ # 静态图像
|
||
│ └── templates/
|
||
│ ├── index.html # 主应用页面
|
||
│ └── chat.html # 对话界面页面
|
||
├── uploads/ # 上传图像目录
|
||
├── app.py # 主应用入口点
|
||
├── migrate_types_to_mongo.py # 类型数据迁移脚本
|
||
├── requirements.txt # Python依赖
|
||
├── run.sh # 启动脚本
|
||
└── .env # 环境配置
|
||
```
|
||
|
||
## 开发
|
||
|
||
### 添加新的图像类型
|
||
|
||
要添加新的图像类型和描述,您可以:
|
||
|
||
1. 使用Web界面上传带有新类型的图像
|
||
2. 直接向MongoDB集合添加条目:
|
||
```python
|
||
from app.api.type_manager_mongo import TypeManagerMongo
|
||
|
||
manager = TypeManagerMongo()
|
||
manager.add_type("新类型名称", "新类型的详细描述")
|
||
```
|
||
|
||
### 扩展对话功能
|
||
|
||
可以通过修改`app.py`中的`chat()`函数和`app/api/azure_openai.py`中的Azure OpenAI集成来扩展对话功能。
|
||
|
||
## 故障排除
|
||
|
||
- **MongoDB连接问题**:确保MongoDB正在运行,并且`.env`文件中的连接URI正确
|
||
- **图像上传失败**:检查上传目录是否存在并具有适当的权限
|
||
- **API认证错误**:验证`.env`文件中的API密钥和密钥
|
||
|