基于Python requests的AiTop100图片处理FastAPI服务端和客户端实现。
项目现在提供两个服务组件:
- FastAPI服务端 (
fastapi_nano_banana_server.py
) - RESTful API 服务,处理图片上传和AI处理 - Gradio前端界面 (
app.py
) - 用户交互Web界面,集成nano-banana创意玩法手册
aitop100/
├── app.py # Gradio前端Web界面 (端口7860)
├── fastapi_nano_banana_server.py # FastAPI后端服务 (端口8000)
├── client.py # FastAPI API客户端
├── requirements.txt # Python依赖包
├── start_services.sh # 服务启动脚本
├── Dockerfile # Docker镜像构建文件
├── docker-compose.yml # Docker Compose配置
├── .env.example # 环境变量模板
├── .env # 环境变量配置文件
├── DOCKER_README.md # Docker部署指南
├── ZHO-nano-banana-Creation_README.md # nano-banana创意玩法手册
├── pictures/ # 示例图片目录
├── generated_images/ # 生成图片保存目录
├── logs/ # 日志文件目录
└── test_server_client.py # 测试文件
- ✅ 图片上传: 将本地图片转换为base64并上传到AiTop100服务器
- ✅ AI图片处理: 使用gemini-2.5-flash-image-preview模型进行图片修改
- ✅ Gradio Web界面: 用户友好的图片修改界面,支持拖拽上传
- ✅ FastAPI服务端: RESTful API接口,支持多客户端调用
- ✅ 流式响应处理: 正确处理服务器返回的流式数据
- ✅ 多语言支持: 支持中文和英文提示词
- ✅ 自动保存: 自动保存生成的图片到本地文件
- ✅ API文档: 自动生成的Swagger文档
- ✅ nano-banana创意玩法: 集成46种创意玩法手册
- ✅ Docker容器化: 完整的Docker部署方案
# 拉取镜像
docker pull wwwzhouhui569/aitop100-nano-banana:latest
# 运行容器
docker run -d \
--name aitop100-nano-banana \
-p 8000:8000 \
-p 7860:7860 \
-e AITOP100_TOKEN=your_token_here \
-v $(pwd)/logs:/app/logs \
-v $(pwd)/generated_images:/app/generated_images \
wwwzhouhui569/aitop100-nano-banana:latest
- Gradio Web界面: http://localhost:7860 (推荐使用)
- FastAPI API文档: http://localhost:8000/docs
- 健康检查: http://localhost:8000/health
git clone <repository-url>
cd aitop100
docker build -t aitop100-nano-banana .
docker run -d \
--name aitop100-nano-banana \
-p 8000:8000 \
-p 7860:7860 \
-e AITOP100_TOKEN=your_token_here \
-v $(pwd)/logs:/app/logs \
-v $(pwd)/generated_images:/app/generated_images \
-v $(pwd)/.env:/app/.env:ro \
aitop100-nano-banana
git clone <repository-url>
cd aitop100
pip install -r requirements.txt
或手动安装:
pip install fastapi uvicorn python-multipart requests pillow python-dotenv gradio
# 方式1: 使用启动脚本 (同时启动FastAPI和Gradio)
chmod +x start_services.sh
./start_services.sh
# 方式2: 分别启动两个服务
# 终端1 - 启动FastAPI后端
python3 fastapi_nano_banana_server.py
# 终端2 - 启动Gradio前端
python3 app.py
- Gradio Web界面: http://localhost:7860 (推荐使用)
- FastAPI API文档: http://localhost:8000/docs
# 1. 拉取镜像并启动
docker pull wwwzhouhui569/aitop100-nano-banana:latest
docker run -d --name aitop100-nano-banana -p 7860:7860 -p 8000:8000 -e AITOP100_TOKEN=your_token_here wwwzhouhui569/aitop100-nano-banana:latest
# 2. 访问Web界面
# 浏览器打开: http://localhost:7860
-
访问 AiTop100官网
-
注册/登录账号
-
获取 API Token
浏览器F12 从Appliation>Cookies 中找到 token ey开头的一长串值,这个就是token 值。
-
替换上面命令中的
your_token_here
在运行服务前,需要配置AiTop100 API Token:
-
复制.env.example 为.env
cp .env.example .env
-
或通过环境变量传递:
export AITOP100_TOKEN=your_actual_token_here
重要: .env
文件包含敏感信息,已被添加到.gitignore
中,不会被提交到版本控制。
-
启动服务后,访问: http://localhost:7860
-
图片修改功能:
-
系统设置: 在设置页面配置Token
-
nano-banana创意玩法: 浏览46种创意玩法手册
from client import AiTop100ApiClient
client = AiTop100ApiClient("http://localhost:8000")
# 上传并处理图片
result_path = client.upload_and_process(
"path/to/image.jpg",
"请在这张图片中添加一只机器猫"
)
启动服务器后,访问以下地址查看完整API文档:
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
上传图片文件
curl -X POST "http://localhost:8000/upload" \
-H "accept: application/json" \
-H "Content-Type: multipart/form-data" \
-F "[email protected]"
处理图片
curl -X POST "http://localhost:8000/process" \
-H "accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"message": "请在这张图片中添加一只机器猫",
"image_url": "https://example.com/image.jpg",
"user_id": "user123"
}'
健康检查
curl -X GET "http://localhost:8000/health"
# 检查服务状态
curl http://localhost:8000/health
curl http://localhost:7860/
# Docker容器检查
docker logs aitop100-nano-banana
# 运行测试脚本
python3 test_server_client.py
client = AiTop100ApiClient(base_url="http://localhost:8000")
health_check() -> Dict[str, Any]
- 检查服务器健康状态
upload_image(image_path: str) -> Optional[str]
- 上传图片到服务器
- 返回: 成功时返回图片URL,失败时返回None
process_image(message: str, image_url: str, user_id: str = "api_client") -> Optional[Dict[str, Any]]
- 使用AI处理图片
- 返回: 成功时返回处理结果,失败时返回None
upload_and_process(image_path: str, message: str, user_id: str = "api_client", save_result: bool = True) -> Optional[str]
- 上传并处理图片的一站式方法
- 返回: 成功时返回生成图片的本地路径
from client import AiTop100ApiClient
client = AiTop100ApiClient()
# 健康检查
health = client.health_check()
print(f"服务器状态: {health['status']}")
# 上传图片
image_url = client.upload_image("my_image.jpg")
# 处理图片
result = client.process_image("添加彩虹效果", image_url)
# 一站式处理
generated_path = client.upload_and_process(
"input.jpg",
"请添加一只小猫咪",
save_result=True
)
from client import AiTop100ApiClient
client = AiTop100ApiClient()
images = ["img1.jpg", "img2.jpg", "img3.jpg"]
prompts = ["添加阳光", "添加花朵", "添加彩虹"]
for img, prompt in zip(images, prompts):
result = client.upload_and_process(img, prompt)
if result:
print(f"✅ {img} 处理完成: {result}")
else:
print(f"❌ {img} 处理失败")
服务器启动失败
- 检查端口8000是否被占用
- 确认已安装所有依赖:
pip install -r requirements.txt
图片上传失败
- 检查图片文件是否存在
- 确认图片格式支持 (JPG, PNG, GIF, BMP, WebP)
- 检查文件大小 (建议 < 10MB)
AI处理失败
- 检查网络连接
- 验证授权令牌是否有效
- 确认图片URL可访问
客户端连接失败
- 确认服务器正在运行:
http://localhost:8000/health
- 检查防火墙设置
- 验证客户端base_url配置
- 批量处理: 使用会话复用减少连接开销
- 错误重试: 实现指数退避重试机制
- 缓存: 对相同图片URL进行本地缓存
- 并发: 使用异步客户端提高吞吐量
特性 | FastAPI服务端 | 直接客户端 |
---|---|---|
使用难度 | 简单 | 需要管理token |
部署方式 | 服务化 | 库调用 |
多客户端 | ✅ 支持 | ❌ 每个客户端需要token |
API文档 | ✅ 自动生成 | ❌ 无 |
错误处理 | ✅ 统一处理 | ❌ 分散处理 |
监控日志 | ✅ 集中化 | ❌ 分布式 |
性能 | 额外网络调用 | 直接调用 |
- v0.0.1 - 完整图片AI处理工具
- ✅ FastAPI后端服务 (端口8000)
- ✅ Gradio Web前端界面 (端口7860)
- ✅ nano-banana创意玩法手册集成 (46种玩法)
- ✅ Docker容器化部署
- ✅ API客户端SDK
- ✅ 图片修改和连续编辑功能
- ✅ 多语言提示词支持
项目集成了46种创意玩法,包括但不限于:
- 图片变手办/手办视频 - 将照片转换为精美手办模型
- 动漫转真人 - 二次元角色真人化
- 图片转Funko Pop公仔 - 制作专属Pop公仔
- 高清修复 - 提升图片分辨率和质量
- 虚拟试妆 - 化妆效果预览
- 工业设计套图 - 马克笔、水彩、分析图生成
所有玩法都可在Web界面的"📚 nano-banana创意玩法大合集手册"中找到详细说明和提示词。
本项目仅用于学习和研究目的。
感谢以下项目对本项目提供的有力支持:
📬 联系我:
🔗 社交媒体:
- 个人页:wwwzhouhui
- 公众号:wwzhouhui
- Bilibili:我的B站主页
微信号:
如果这个项目对你有帮助,请给我们一个 ⭐ Star!