# 图片物体智能标注系统 - 部署状态总结 **时间**: 2025-12-15 **状态**: 🟡 **90% 完成** - 等待 API 启动完成 --- ## ✅ 已完成工作 ### 1. 后端开发与部署 - ✅ 服务器 GPU 检测:4张 Tesla P40,22.4GB 显存 - ✅ Python 环境:虚拟环境 + 所有依赖 - ✅ Florence-2 模型:231.4M 参数,已下载 - ✅ FastAPI 后端代码:完整实现 - ✅ PM2 配置:使用端口 8002 - ✅ flash_attn 占位模块:绕过编译问题 - ✅ GPU 加速:已启用 CUDA ### 2. 前端开发 - ✅ `ImagePreview` 组件:添加定位标注按钮 - ✅ `PreviewAttachment` 组件:集成标注功能 - ✅ 点击检测逻辑:完整实现 - ✅ 加载状态和错误处理:完成 ### 3. 文档 - ✅ 完整实施文档 - ✅ 集成步骤文档 - ✅ 部署状态总结 --- ## 🔄 剩余工作(约 20-30 分钟) ### 步骤 1:等待 API 完全启动(5-10 分钟) 检查服务状态: ```bash ssh -p 5204 root@156.225.27.52 " echo '📊 服务状态:' && \ pm2 list | grep florence && \ echo '' && \ echo '📝 最新日志:' && \ pm2 logs florence-api --lines 20 --nostream && \ echo '' && \ echo '🧪 健康检查:' && \ curl -s http://localhost:8002/health " ``` **预期响应**: ```json {"status":"ok","model_loaded":true} ``` ### 步骤 2:配置 Nginx 代理(5 分钟) ```bash ssh -p 5204 root@156.225.27.52 ``` 编辑 Nginx 配置: ```bash sudo nano /etc/nginx/sites-available/ai-chatbot ``` 在 `server` 块中添加: ```nginx # Florence-2 物体检测 API location /api/detect-object { proxy_pass http://127.0.0.1:8002/api/detect-object; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 增加超时时间 proxy_connect_timeout 10s; proxy_send_timeout 10s; proxy_read_timeout 10s; } ``` 重载 Nginx: ```bash sudo nginx -t && sudo systemctl reload nginx ``` ### 步骤 3:修改 MultimodalInput 组件(10 分钟) **文件**:`components/multimodal-input.tsx` **查找渲染 PreviewAttachment 的位置**(大约在第 300 行附近),修改为: ```typescript {attachments.map((attachment, index) => ( handleRemoveAttachment(attachment.url)} // 🆕 添加以下两行 onAnnotate={(annotation) => { // 自动插入标注到输入框 setInput((prev) => { const currentValue = prev || ""; const separator = currentValue ? " " : ""; return `${currentValue}${separator}${annotation.formattedText}`; }); toast.success(`已添加标注:${annotation.description}`); }} imageIndex={index + 1} // 保留其他 props draggable={attachments.length > 1} onDragStart={(e) => handleDragStart(e, index)} onDragEnd={handleDragEnd} onDragOver={handleDragOver} onDrop={(e) => handleDrop(e, index)} /> ))} ``` ### 步骤 4:部署前端(5 分钟) ```bash cd /Users/lanmu/Desktop/ai-chatbot-main npm run build # 上传并重启 sshpass -p "" ssh -p 5204 root@156.225.27.52 " cd /var/www/ai-chatbot && \ npm run build && \ pm2 restart ai-chatbot " ``` ### 步骤 5:测试功能(5-10 分钟) 1. **访问**:https://ai.yydd.ai 2. **上传图片**:选择 2 张包含明显物体的图片 3. **测试标注**: - 点击第一张图片 - 点击"定位标注"按钮(Target 图标) - 点击图片中的物体(如手提包) - 等待 0.2-0.3 秒 - 验证输入框显示:`📍图1: 绿色手提包` 4. **继续标注第二张**: - 点击第二张图片 - 标注另一个物体 - 输入框应显示:`📍图1: 绿色手提包 📍图2: 红色背包` --- ## 📊 系统配置 ### 后端 API - **端口**: 8002 - **地址**: http://localhost:8002 - **健康检查**: http://localhost:8002/health - **检测 API**: http://localhost:8002/api/detect-object ### 服务器资源 | 资源 | 状态 | |------|------| | GPU | 4× Tesla P40 (22.4GB 显存) | | CUDA | 11.8 | | PyTorch | 2.7.1+cu118 | | Florence-2 | 231.4M 参数 | ### 性能指标(预期) | 指标 | 数值 | |------|------| | 单次识别 | 0.15-0.25 秒 | | GPU 显存占用 | ~2GB | | 内存占用 | ~1.5GB | | 并发能力 | 4-6 QPS | --- ## 🐛 故障排查 ### 检查 API 是否正常 ```bash ssh -p 5204 root@156.225.27.52 " # 检查服务状态 pm2 status # 查看日志 pm2 logs florence-api --lines 50 # 测试 API curl -X POST http://localhost:8002/api/detect-object \ -H 'Content-Type: application/json' \ -d '{ \"imageUrl\": \"https://example.com/image.jpg\", \"clickX\": 100, \"clickY\": 100, \"imageIndex\": 1, \"imageWidth\": 500, \"imageHeight\": 500 }' " ``` ### 监控 GPU 使用 ```bash watch -n 1 nvidia-smi ``` ### 查看错误日志 ```bash # 后端日志 tail -f /var/www/ai-chatbot-backend/logs/error.log # Nginx 日志 sudo tail -f /var/log/nginx/error.log # PM2 日志 pm2 logs florence-api ``` --- ## 📝 已知问题 ### 1. 端口 8001 被占用 - **原因**: Qwen3-VL 服务使用了 8001 - **解决**: Florence-2 使用 8002 ### 2. flash_attn 编译失败 - **原因**: 服务器没有 nvcc 编译工具 - **解决**: 使用占位模块,降级到标准注意力机制 - **影响**: 推理速度可能略慢(~10-15%),但功能正常 ### 3. 模型加载时间较长 - **原因**: 首次加载需要下载和初始化 - **解决**: 已完成,后续启动会快很多(~5 秒) --- ## 🎉 完成后的使用场景 ### 场景示例 1. **用户操作**: - 上传两张图片:一张红色背包,一张绿色手提包 - 点击第一张图中的"红色背包" - 系统自动识别并在输入框显示:`📍图1: 红色背包` - 点击第二张图中的"绿色手提包" - 系统自动在输入框追加:`📍图2: 绿色手提包` - 用户手动输入"替换" - 最终消息:`将📍图1: 红色背包 替换成 📍图2: 绿色手提包` 2. **AI 响应**: - 图片生成模型根据标注理解用户意图 - 生成符合要求的图片 --- ## 📞 联系和支持 ### 查看服务状态 ```bash pm2 status pm2 logs florence-api nvidia-smi ``` ### 重启服务 ```bash pm2 restart florence-api pm2 restart ai-chatbot ``` ### 停止服务 ```bash pm2 stop florence-api pm2 delete florence-api ``` --- ## 🔮 未来优化方向 1. **性能优化**: - 编译真正的 flash-attn(需要安装 nvcc) - 使用模型量化(INT8/FP16) - 启用模型缓存优化 2. **功能增强**: - 批量标注模式 - 标注历史记录 - 自定义标注样式 - 支持多语言描述 3. **用户体验**: - 添加标注预览 - 支持标注编辑 - 快捷键操作 --- **文档版本**: v1.0 **最后更新**: 2025-12-15 14:20 **状态**: 🟡 等待 API 启动完成 --- ## ✅ 下一步操作清单 - [ ] 等待 API 启动完成(检查健康状态) - [ ] 配置 Nginx 代理 - [ ] 修改 MultimodalInput 组件 - [ ] 部署前端 - [ ] 功能测试 **预计剩余时间**: 20-30 分钟