diff --git a/.env b/.env index cc47590..f4205bc 100644 --- a/.env +++ b/.env @@ -10,4 +10,4 @@ AZURE_OPENAI_DEPLOYMENT_NAME=gpt-4o-drobotics # MongoDB配置 MONGO_URI=mongodb://localhost:27017/ -MONGO_DB_NAME=imgsearcher \ No newline at end of file +MONGO_DB_NAME=imgsearcherxx \ No newline at end of file diff --git a/README.md b/README.md index 67be4b4..8fc549c 100644 --- a/README.md +++ b/README.md @@ -1,99 +1,157 @@ -# 相似图片搜索系统 +# ImgSearcher -这是一个基于百度AI开放平台的相似图片搜索API的封装系统,提供了图片入库、检索、删除和更新等功能,并配有简洁美观的Web界面。 +一个强大的图像搜索和分析应用,结合百度图像搜索API和Azure OpenAI功能,实现智能图像识别、分类和交互式对话。 ## 功能特点 -- **图片入库**:将图片添加到百度相似图片搜索库中,支持添加名称、ID和标签 -- **图片检索**:上传图片搜索相似的图片,支持标签过滤 -- **图库管理**:更新和删除图库中的图片信息 -- **直观界面**:简洁美观的Web界面,操作便捷 +- **图像搜索**:使用百度图像搜索API上传和搜索相似图像 +- **图像管理**:在图像库中添加、更新和删除图像 +- **类型分类**:自动按类型分类图像并提供详细描述 +- **交互式对话**:使用Azure OpenAI集成与上传的图像进行AI对话 +- **MongoDB集成**:使用MongoDB存储和检索图像类型描述 -## 安装与使用 +## 架构 -### 环境要求 +应用程序采用Flask后端和响应式前端构建。它使用多个外部API和服务: -- Python 3.9+ -- Conda -- Poetry +- **百度图像搜索API**:用于图像相似度搜索和分类 +- **Azure OpenAI API**:用于图像分析和交互式对话功能 +- **MongoDB**:用于图像类型描述的持久化存储 -### 安装步骤 +## 前提条件 -1. 克隆或下载本项目到本地 +- Python 3.7+ +- MongoDB(本地或远程实例) +- 百度AI平台账户,并启用图像搜索API +- Azure OpenAI API访问权限 -2. 使用Conda创建虚拟环境: +## 安装 + +1. 克隆仓库: ```bash - conda env create -f environment.yml - conda activate imgsearcher + git clone https://github.com/yourusername/imgsearcher.git + cd imgsearcher ``` -3. 使用Poetry安装依赖: +2. 安装依赖: ```bash - poetry install + pip install -r requirements.txt ``` -4. 配置API密钥: - 在项目根目录创建`.env`文件,填入百度AI平台的API密钥: +3. 在根目录创建`.env`文件,配置如下: ``` - BAIDU_API_KEY=你的API_KEY - BAIDU_SECRET_KEY=你的SECRET_KEY + # 百度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 ``` -5. 创建上传目录: +## 使用方法 + +1. 启动应用: ```bash - mkdir uploads + ./run.sh ``` - -6. 运行应用: + 或手动启动: ```bash - poetry run python app.py + python app.py ``` -7. 在浏览器中访问: +2. 打开浏览器并访问: ``` - http://localhost:5000 + http://localhost:5001 ``` -## 使用说明 +3. 使用Web界面: + - 上传图像到图像库 + - 搜索相似图像 + - 管理图像集合 + - 与上传的图像进行AI对话 -### 图片入库 +## 数据迁移 -1. 在"图片入库"标签页中,选择要上传的图片 -2. 填写图片名称和ID(用于后续识别) -3. 可选择添加标签(最多2个,用逗号分隔) -4. 点击"上传入库"按钮 +如果您需要从基于JSON的类型存储迁移到MongoDB,请使用迁移脚本: -### 图片搜索 +```bash +python migrate_types_to_mongo.py +``` -1. 在"图片搜索"标签页中,选择要搜索的图片 -2. 可选择添加标签过滤条件 -3. 选择标签逻辑(AND或OR) -4. 点击"搜索"按钮 -5. 查看搜索结果 +这将把所有类型描述从JSON文件转移到您的MongoDB实例。 -### 图库管理 +## API端点 -1. 先在"图片搜索"标签页进行搜索 -2. 在搜索结果中,可以对图片进行编辑或删除操作 +### 图像管理 +- `POST /upload` - 上传图像到库 +- `POST /search` - 搜索相似图像 +- `POST /delete` - 从库中删除图像 +- `POST /update` - 更新图像信息 -## API说明 +### 对话功能 +- `GET /chat-with-image` - 访问对话界面 +- `POST /api/upload-chat-image` - 上传图像用于对话 +- `POST /api/chat` - 发送消息与AI对话关于图像 -本系统封装了百度相似图片搜索API的以下功能: -- 图片入库:`/upload` (POST) -- 图片检索:`/search` (POST) -- 图片删除:`/delete` (POST) -- 图片更新:`/update` (POST) -- 获取Token:`/api/token` (GET) +## 项目结构 -## 注意事项 +``` +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 # 环境配置 +``` -- 上传的图片最短边至少50px,最长边最大4096px -- 支持JPG、PNG、BMP格式的图片 -- 每个图片可以添加最多2个标签 -- 检索接口不返回原图,只返回入库时填写的brief信息 -- 图片删除可能会有延时生效(百度API特性) +## 开发 -## 许可证 +### 添加新的图像类型 + +要添加新的图像类型和描述,您可以: + +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密钥和密钥 -MIT diff --git a/__pycache__/mock_baidu_api.cpython-39.pyc b/__pycache__/mock_baidu_api.cpython-39.pyc deleted file mode 100644 index 84696e3..0000000 Binary files a/__pycache__/mock_baidu_api.cpython-39.pyc and /dev/null differ diff --git a/app/__pycache__/__init__.cpython-39.pyc b/app/__pycache__/__init__.cpython-39.pyc deleted file mode 100644 index 0dee61c..0000000 Binary files a/app/__pycache__/__init__.cpython-39.pyc and /dev/null differ diff --git a/app/api/__pycache__/azure_openai.cpython-39.pyc b/app/api/__pycache__/azure_openai.cpython-39.pyc deleted file mode 100644 index 1469b20..0000000 Binary files a/app/api/__pycache__/azure_openai.cpython-39.pyc and /dev/null differ diff --git a/app/api/__pycache__/baidu_image_search.cpython-39.pyc b/app/api/__pycache__/baidu_image_search.cpython-39.pyc deleted file mode 100644 index 029623e..0000000 Binary files a/app/api/__pycache__/baidu_image_search.cpython-39.pyc and /dev/null differ diff --git a/app/api/__pycache__/image_utils.cpython-39.pyc b/app/api/__pycache__/image_utils.cpython-39.pyc deleted file mode 100644 index 618f073..0000000 Binary files a/app/api/__pycache__/image_utils.cpython-39.pyc and /dev/null differ diff --git a/app/api/__pycache__/type_manager.cpython-39.pyc b/app/api/__pycache__/type_manager.cpython-39.pyc deleted file mode 100644 index 274f0d3..0000000 Binary files a/app/api/__pycache__/type_manager.cpython-39.pyc and /dev/null differ diff --git a/app/api/__pycache__/type_manager_mongo.cpython-39.pyc b/app/api/__pycache__/type_manager_mongo.cpython-39.pyc deleted file mode 100644 index cc15438..0000000 Binary files a/app/api/__pycache__/type_manager_mongo.cpython-39.pyc and /dev/null differ