[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-160":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":15,"forks30d":15,"starsTrendScore":19,"compositeScore":20,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":23,"hasPages":21,"topics":24,"createdAt":9,"pushedAt":9,"updatedAt":25,"readmeContent":26,"aiSummary":27,"trendingCount":15,"starSnapshotCount":15,"syncStatus":28,"lastSyncTime":29,"discoverSource":30},160,"Fashion-AI","liangdabiao\u002FFashion-AI","liangdabiao","电商 AI 生图爆款流水线 — 输入新品平铺图，自动检索相似爆款、分析风格，生成专业宣传图。  ## 项目简介  跨境电商场景中，商家每出一款新品都需要制作宣传图（模特穿着商品的照片）。传统方式需要请模特、搭场景、拍摄修图，成本高、周期长。  本项目实现了一套全自动的 AI 生图流水线",null,"Python",185,49,104,1,0,5,18,52,15,5.1,false,"main",true,[],"2026-06-12 02:00:09","# Fashion AI Promo Photo Pipeline\n\n电商 AI 生图爆款流水线 — 输入新品平铺图，自动检索相似爆款、分析风格，生成专业宣传图。\n\n## 项目简介\n\n跨境电商场景中，商家每出一款新品都需要制作宣传图（模特穿着商品的照片）。传统方式需要请模特、搭场景、拍摄修图，成本高、周期长。\n\n本项目实现了一套全自动的 AI 生图流水线：\n\n1. **以图搜爆款** — 将新品平铺图与历史爆款库做混合检索（视觉相似 + 关键词匹配 + 销量过滤），找到风格最接近的爆款\n2. **AI 分析风格** — 将爆款参考图发给大语言模型，自动分析场景、灯光、姿势、氛围，生成风格描述 prompt\n3. **AI 生成宣传图** — 将新品图 + 爆款参考 + 风格描述一起发给图像生成模型，输出专业宣传图\n\n\n项目灵感来源于教程：Nano Banana2+ Milvus+ qwen3.5，打造电商生图爆款流水线\n文章参考来源：https:\u002F\u002Fmp.weixin.qq.com\u002Fs\u002FitMVbtZDW0IzIBhp6e9OHw\n\n### 推广赞助：从素材生成到投放测试\n这个项目解决的是「新品宣传图生成」问题。  \n如果你生成素材后准备拿去 TikTok Ads \u002F TikTok Shop 测试，可以顺手看一下：\n**TikTok Offers Hub**  \nhttps:\u002F\u002Fttoh.app\n收集 TikTok 的广告优惠券，适合跨境卖家、TikTok Shop 商户和投手。\n\n\n### 为什么用向量数据库？\n\n电商最核心的资产是大量经过市场验证的爆款图。模特表现力、场景构图、光影质感，都是花钱试出来的。与其每次从零写 prompt，不如直接从历史爆款中检索最相似的视觉特征，让 AI 继承\"爆款基因\"。这正是 Milvus 混合检索发挥作用的地方。\n\n### 项目简单使用：\n\n  使用方式：\n  1. 将真实商品图片放入 images\u002F（替换占位图），新品放入 new_products\u002F\n  2. python main.py setup — 建库 + 编码 + 入库\n  3. python main.py search --new-id NEW001 — 测试检索\n  4. python main.py generate --new-id NEW001 — 完整生图流水线\n\n\n### 为什么用混合检索（Dense + Sparse + Scalar）？\n\n单一检索方式有盲区：\n\n| 检索方式 | 擅长 | 弱点 |\n|---------|------|------|\n| Dense 向量（图片 Embedding） | 视觉相似度（颜色、款式、风格） | 不擅长精确关键词匹配 |\n| Sparse 向量（TF-IDF） | 关键词语义（\"floral\"、\"midi\"、\"chiffon\"） | 不理解视觉特征 |\n| 标量筛选 | 品类过滤、销量排序 | 无法理解语义 |\n\n三者结合 + RRF（Reciprocal Rank Fusion）重排序，检索精度远超单一方式。\n\n## 技术架构\n\n```\n新品平铺图\n    │\n    ▼\nllama-nemotron-embed-vl-1b-v2 (Embedding API)\n    │\n    ├── Dense 向量 (2048d)  ──────────────────┐\n    │                                          ▼\n    └── 文本 → TF-IDF → Sparse 向量 ──→  Milvus 混合检索\n                                              │\n                                   Dense (视觉相似)\n                                +  Sparse (关键词匹配)\n                                +  Scalar (品类 + 销量过滤)\n                                +  RRF 重排序\n                                              │\n                                              ▼\n                                    Top-K 相似爆款宣传图\n                                              │\n                                              ▼\n                                   Qwen 3.5 (多模态 LLM)\n                                   分析场景\u002F灯光\u002F姿势\u002F氛围\n                                   输出风格描述 prompt\n                                              │\n                                              ▼\n                                   Gemini 3.1 Flash \u002F Nano Banana 2\n                                   (新品图 + 爆款参考 + 风格prompt)\n                                              │\n                                              ▼\n                                    生成的宣传图 → output\u002F\n```\n\n### 使用的模型\n\n所有模型通过 [OpenRouter](https:\u002F\u002Fopenrouter.ai\u002F) API 调用，无需本地 GPU。\n\n| 模型 | 用途 | 说明 |\n|------|------|------|\n| `nvidia\u002Fllama-nemotron-embed-vl-1b-v2` | 图片\u002F文本 Embedding | 免费，输出 2048 维向量，支持图文同空间 |\n| `qwen\u002Fqwen3.5-397b-a17b` | 爆款风格分析 | 多模态，可同时理解图片和文本 |\n\n**宣传图生成模型**（通过 `--model` 参数切换）：\n\n| 别名 | 模型 | 说明 |\n|------|------|------|\n| `nano-banana`（默认） | `google\u002Fgemini-3.1-flash-image-preview` | 支持多参考图融合、多比例（含 8:1\u002F1:8 超宽超高）、文字渲染，单张约 $0.067，无地区限制 |\n| `gpt-image` | `openai\u002Fgpt-5.4-image-2` | OpenAI 最新生图模型，人像融合效果好，**需海外网络环境** |\n| `gpt-image-pro` | `openai\u002Fgpt-5-image` | OpenAI 生图 Pro 版，质量更高，**需海外网络环境** |\n| `gpt-image-mini` | `openai\u002Fgpt-5-image-mini` | OpenAI 生图轻量版，成本更低，**需海外网络环境** |\n\n### Milvus 混合 Schema\n\n```\nCollection: fashion_products\n├── id              INT64 (主键，自增)\n├── product_id      VARCHAR  — 商品编号\n├── category        VARCHAR  — 品类 (maxi_dress, midi_dress, casual_top)\n├── color           VARCHAR  — 颜色\n├── style           VARCHAR  — 风格 (bohemian, floral, bodycon, ...)\n├── season          VARCHAR  — 季节 (spring, summer, autumn)\n├── sales_count     INT64    — 销量（用于标量过滤）\n├── description     VARCHAR  — 商品描述（用于 TF-IDF）\n├── price           FLOAT    — 价格\n├── dense_vector    FLOAT_VECTOR(2048) — 图片 Embedding\n└── sparse_vector   SPARSE_FLOAT_VECTOR  — TF-IDF 稀疏向量\n```\n\n## 项目结构\n\n```\ncloth-milvus\u002F\n├── main.py              # CLI 入口 (setup \u002F search \u002F generate)\n├── config.py            # 配置管理，从 .env 读取\n├── utils.py             # 工具函数 (图片编解码)\n├── embeddings.py        # Dense\u002FSparse 向量生成\n├── milvus_store.py      # Milvus 建库、插入、混合检索\n├── style_analyzer.py    # Qwen3.5 风格分析\n├── image_generator.py   # Nano Banana 2 宣传图生成\n├── data_setup.py        # 示例数据生成 (CSV + 占位图)\n├── requirements.txt     # Python 依赖\n├── .env                 # API Key 配置 (需自行填写)\n│\n├── images\u002F              # 历史爆款商品图片\n├── new_products\u002F        # 新品平铺图\n├── products.csv         # 历史商品元数据 (40条示例)\n├── new_products.csv     # 新品元数据 (4条示例)\n└── output\u002F              # 生成的宣传图输出目录\n```\n\n## 快速开始\n\n### 1. 环境准备\n\n- Python 3.10+\n- [Zilliz Cloud](https:\u002F\u002Fcloud.zilliz.com\u002F) 账号（免费 tier 即可）\n- [OpenRouter](https:\u002F\u002Fopenrouter.ai\u002F) 账号和 API Key\n\n### 2. 安装依赖\n\n```bash\npip install -r requirements.txt\n```\n\n### 3. 配置 .env\n\n```env\nOPENROUTER_API_KEY=sk-or-v1-xxxxx\nMILVUS_HOST=https:\u002F\u002Fxxx.gcp.zillizcloud.com\nMILVUS_TOKEN=your-zilliz-api-key\nCOLLECTION_NAME=fashion_products\n```\n\n- **OPENROUTER_API_KEY** — 在 [openrouter.ai\u002Fkeys](https:\u002F\u002Fopenrouter.ai\u002Fkeys) 获取\n- **MILVUS_HOST \u002F MILVUS_TOKEN** — 在 Zilliz Cloud 控制台创建集群后获取\n\n### 4. 准备数据\n\n#### 方式一：使用示例数据（快速体验）\n\n将商品图片放入对应目录：\n\n```\nimages\u002F\n├── SKU001.jpg    # 历史爆款商品图\n├── SKU002.jpg\n├── ...\n└── SKU040.jpg\n\nnew_products\u002F\n├── NEW001.jpg    # 新品平铺图\n├── NEW002.jpg\n├── NEW003.jpg\n└── NEW004.jpg\n```\n\n编辑 `products.csv` 和 `new_products.csv` 填入你的真实商品信息。首次运行 `setup` 时程序会自动创建 CSV 模板和占位图。\n\n#### 方式二：使用自己的数据\n\n编辑 CSV 文件，字段格式：\n\n**products.csv（历史爆款库）：**\n\n```csv\nproduct_id,image_path,category,color,style,season,sales_count,description,price\nSKU001,SKU001.jpg,maxi_dress,pink,bohemian,summer,3200,Bohemian pink maxi dress with tassel tie detail,29.99\n```\n\n- `category` — 品类，自由填写，会作为检索过滤条件\n- `sales_count` — 历史销量，默认只检索销量 > 1500 的\n- `description` — 英文描述，用于 TF-IDF 关键词匹配\n\n**new_products.csv（新品）：**\n\n```csv\nnew_id,image_path,category,style,season,prompt_hint\nNEW001,NEW001.jpg,midi_dress,casual,spring,Knit cardigan on a sunlit cafe terrace\n```\n\n- `prompt_hint` — 场景提示词，告诉 AI 你希望生成什么样的宣传场景\n\n### 5. 运行\n\n```bash\n# Step 1: 建库入库（首次运行或数据更新时执行）\npython main.py setup\n\n# Step 2: 测试检索（可选，验证混合检索是否正常）\npython main.py search --new-id NEW001\n\n# Step 3: 完整流水线（检索 → 风格分析 → 生图）\n# 默认使用 Nano Banana 2 生图\npython main.py generate --new-id NEW001\n\n# 使用 GPT-5.4 Image 2 生图\npython main.py generate --new-id NEW001 --model gpt-image\n\n# 使用 GPT-5 Image Pro 生图\npython main.py generate --new-id NEW001 --model gpt-image-pro\n```\n\n生成的宣传图保存在 `output\u002F` 目录。\n\n## CLI 参数\n\n### setup\n\n初始化数据，生成向量，创建 Milvus Collection 并入库。\n\n```bash\npython main.py setup\n```\n\n无需额外参数。重复运行会重建 Collection。\n\n### search\n\n为新品检索相似爆款。\n\n```bash\npython main.py search [OPTIONS]\n```\n\n| 参数 | 默认值 | 说明 |\n|------|--------|------|\n| `--new-id` | 全部 | 指定新品 ID，如 `--new-id NEW001` |\n| `--top-k` | 3 | 返回结果数量 |\n| `--sales-threshold` | 1500 | 最低销量过滤门槛 |\n\n### generate\n\n完整流水线：混合检索 → 风格分析 → 宣传图生成。\n\n```bash\npython main.py generate [OPTIONS]\n```\n\n| 参数 | 默认值 | 说明 |\n|------|--------|------|\n| `--new-id` | 全部 | 指定处理某个新品 |\n| `--top-k` | 3 | 参考爆款数量 |\n| `--sales-threshold` | 1500 | 最低销量过滤门槛 |\n| `--aspect-ratio` | `3:4` | 生成图宽高比（支持 `1:1`, `3:4`, `4:1`, `9:16` 等） |\n| `--image-size` | `2K` | 生成图分辨率（`512px`, `1K`, `2K`, `4K`） |\n| `--model` | `nano-banana` | 生图模型：`nano-banana`, `gpt-image`, `gpt-image-pro`, `gpt-image-mini` |\n\n## 开发者指南\n\n### 模块说明\n\n| 文件 | 职责 |\n|------|------|\n| `config.py` | 所有配置集中管理，从 .env 读取敏感信息 |\n| `embeddings.py` | 图片 → Dense 向量（OpenRouter API）、文本 → TF-IDF Sparse 向量 |\n| `milvus_store.py` | Milvus Collection CRUD 和混合检索（Dense + Sparse + RRF） |\n| `style_analyzer.py` | 调用 Qwen3.5 多模态 LLM 分析爆款图片风格 |\n| `image_generator.py` | 调用 Gemini\u002FNano Banana 2 生成宣传图 |\n| `utils.py` | 图片 base64 编解码、OpenRouter 响应解析 |\n\n### 关键技术点\n\n**1. 混合检索流程**\n\n```python\n# 两路并行检索\ndense_req = AnnSearchRequest(data=[query_dense], anns_field=\"dense_vector\", ...)\nsparse_req = AnnSearchRequest(data=[query_sparse], anns_field=\"sparse_vector\", ...)\n\n# RRF 融合\nresults = client.hybrid_search(reqs=[dense_req, sparse_req], ranker=RRFRanker(k=60))\n```\n\nRRF（Reciprocal Rank Fusion）算法公式：`score(d) = Σ 1\u002F(k + rank(d))`，将两路检索的排名融合为一个综合分数。\n\n**2. 多生图模型支持**\n\n所有生图模型统一通过 OpenRouter `\u002Fapi\u002Fv1\u002Fchat\u002Fcompletions` 调用，格式一致：\n\n```python\npayload = {\n    \"model\": model_id,  # 如 \"google\u002Fgemini-3.1-flash-image-preview\" 或 \"openai\u002Fgpt-5.4-image-2\"\n    \"messages\": [{\"role\": \"user\", \"content\": [...]}],\n    \"modalities\": [\"image\", \"text\"],  # 声明输出包含图片\n}\n# Gemini 系列额外支持 image_config 控制分辨率\nif \"google\" in model_id:\n    payload[\"image_config\"] = {\"aspect_ratio\": \"3:4\", \"image_size\": \"2K\"}\n# OpenAI 系列支持 aspect_ratio\nelif \"openai\" in model_id:\n    payload[\"image_config\"] = {\"aspect_ratio\": \"3:4\"}\n```\n\n模型差异：\n\n| 特性 | Nano Banana 2 (Gemini) | GPT Image 系列 |\n|------|----------------------|---------------|\n| 超宽\u002F超高比例 | 支持 4:1, 1:4, 8:1, 1:8 | 标准比例 |\n| 分辨率控制 | 支持 0.5K~4K | 自动 |\n| 文字渲染 | 支持多语言、手写体 | 支持 |\n| 参考图融合 | 支持 14 张（10对象+4角色） | 支持多张 |\n| 人像融合 | 偶有服装贴合问题 | 更自然 |\n\n通过 `--model` 参数自由切换，同一套代码适配两种生图引擎。\n\n**3. Qwen 3.x Thinking 模式**\n\nQwen 3.x 默认启用 thinking，会将推理过程放在 `reasoning_content` 而非 `content`。本项目通过 `enable_thinking: False` 关闭该行为，确保直接返回结果。\n\n### 自定义扩展\n\n- **换模型** — 修改 `config.py` 中的模型名称，所有模型均走 OpenRouter，无需改动调用代码\n- **新增品类** — 直接在 CSV 中添加新 category，程序自动适配\n- **调整检索策略** — 修改 `milvus_store.py` 中的 `filter_expr`、`RRFRanker` 参数或 `limit` 值\n- **批量处理** — `generate` 不带 `--new-id` 即可批量处理所有新品\n\n## 成本参考\n\n| 模型 | 单次调用成本 |\n|------|------------|\n| Embedding (nvidia) | 免费 |\n| Qwen 3.5 | ~$0.001\u002F次 |\n| Gemini 3.1 Flash (Nano Banana 2) | ~$0.067\u002F张 |\n\n处理一个新品（1次检索 + 1次风格分析 + 1张生图）约 $0.07。\n\n## 已知限制\n\n- 占位图无法用于实际检索和生图，必须替换为真实商品照片\n- 图片分辨率影响 Embedding 质量，建议商品图不低于 800x800\n- Nano Banana 2 在服装与人体融合上偶尔不自然，可通过分步生图（先生成场景背景，再生成模特）或使用 Pro 版本改善\n- Milvus Lite 不支持 Windows，本项目使用 Zilliz Cloud 替代\n\n## 依赖\n\n```\npymilvus>=2.4.0\nopenai>=1.0.0\nrequests>=2.31.0\npillow>=10.0.0\nscikit-learn>=1.3.0\ntqdm>=4.65.0\npython-dotenv>=1.0.0\nnumpy>=1.24.0\n```\n\n\n## 特别感谢\n\nlinux.do社区佬友支持：  https:\u002F\u002Flinux.do ，\n感谢 佬友 trader 提供 api支持\n","Fashion-AI 是一个电商AI生图爆款流水线项目，能够自动将新品平铺图转换为专业的宣传图。其核心功能包括以图搜爆款、AI风格分析以及AI生成宣传图。通过混合检索技术（结合视觉相似度、关键词匹配和销量过滤），该项目可以快速找到与新品风格最接近的历史爆款，并利用大语言模型分析爆款的场景、灯光、姿势等元素，最终生成高质量的宣传图片。适用于跨境电商场景中，帮助商家减少模特拍摄的成本和时间，特别适合需要频繁更新产品宣传图的电商企业。项目使用Python开发，采用多种AI模型协同工作，无需本地GPU支持即可运行。",2,"2026-06-11 02:31:08","CREATED_QUERY"]