- TryonApi.ets:直连 meida.xiangsilian.com——换装 /change_cloth_base64(JSON+Base64,超时 320s)、发型 /hair/api/*(multipart,实测 5~10s) - ImageCodec.ets:相册选图→解码→缩放→Base64 的公共链路 - TryonPage(模特/服装双图换装)+ HairDesignPage(60 款发型试戴/换发色),首页两张入口卡 - docs/试衣间与发型设计-产品方案.md:Phase A 直连内测 / Phase B 服务端代理 + 合规纳管的分工结论 - 待补:真机实测耗时(T-P0-13/14 基线);Phase B 迁服务端时代码改动集中在 TryonApi 一处
8.4 KiB
8.4 KiB
试衣间与发型设计 · 产品与技术方案
2026-08-29 | 状态:Phase A 已交付(客户端直连内测版)| 关联:《产品方案》§2.1/§10.1、《技术架构文档》§4.4/§7.3/§9.3、《合规与安全方案》
1. 背景与调研结论
新增两个 P0 功能:试衣间(换装试穿) 与 发型设计(试戴 + 换发色)。开发前完成四路调研,结论如下。
1.1 对接目标:自有线上服务(唯一正确选择)
| 候选 | 结论 |
|---|---|
meida.xiangsilian.com(换装 + 发型) |
✅ 采用。《产品方案》§2.1 明确指定;接口实测可用;发型 60 款在线 |
puton.huimeimeta.com(老 H5 试衣间) |
❌ 素材 81% 失效(OSS 桶转私有),接口体系不同,放弃 |
puton-master 代码(桌面 Web 试衣间) |
仅作交互参考:品类互斥选择、批量模式、「上衣+下装」组合逻辑可借鉴;UI 与接口层不可复用 |
1.2 线上服务实测契约(2026-08-29 实测)
换装 POST https://meida.xiangsilian.com/change_cloth_base64(JSON,图片 Base64):
| 字段 | 说明 |
|---|---|
human_img |
必填,人物照片 Base64 |
cloth_img |
上衣图 Base64(仅传 human=单图编辑) |
kuzi_img |
裤子图;传了必须同时传 cloth_img |
change_desc |
提示词,空=工作流默认 |
- 同步返回
{ret:0, data:"<OSS签名URL>"},须ret===0 && data判成功;耗时几十秒~几分钟,客户端超时须 ≥320s;建议图片长边压到 1024~2048。 - 健康检查
GET /health;Swagger 在线试调/docs。
发型(同源 /hair/api 前缀,multipart/form-data,全部实测通过):
GET /hair/api/hairstyles→ 60 款{id, name, image_url}(image_url 为同源相对路径);POST /hair/api/change-hair:image(File) +hairstyle_id→ 结果直接内嵌 Base64 Data URL,实测 1056×1584 约 5.3s;POST /hair/api/change-hair-color:image+rgb(字符串化数组"[255, 0, 0]",不是 hex)+ratio(0~1,默认 0.9),实测 ~6s;- ⚠️ 发型接口不收 WebP(换装接口收)。App 侧统一转 JPEG 再传。
1.3 素材盘点
- 发型库:60 款在线可用(
GET /hair/api/hairstyles直接拉,无需内置); - 服装库:不可用——fitting-room-assets 里服装仅 2 张且是模特上身图;
reference/cloth_pic15 张平铺图格式标准但有品牌 logo,只做开发联调、不内置发布。Phase A 服装图由用户现场上传/拍摄;内置服装库依赖素材生产管线(抠图标准化 +tryon_ready审核,见 §6); - 模特:不用内置——按合规要求「仅限本人照片」,用户上传/拍摄自己的全身照。
1.4 与架构文档的冲突与裁决
《技术架构文档》§10.1.4 要求「接口无认证,禁止客户端直连,必须服务端代理」;但后端 tryon 域目前只有骨架(无 tr_task 表、无路由、无 GPU worker)。裁决为两阶段:
- Phase A(本次交付,内测版):客户端直连线上服务。边界:仅限内测/调试构建,不公开放量;结果图不落库、不提供分享出口;不接入配额扣减(个人页配额卡保持只读展示)。目的是先把功能与体验跑起来、验证效果与耗时基线(T-P0-13/14)。
- Phase B(正式版前置):后端补齐 tryon 域(表 + 5 个 §9.3 端点 + gpu worker + 八步链路),App 切到
/api/v1/tryon/*代理,届时接入配额三段式、IMS 审核、AI 水印 + 内容编号、COS 转存。Phase B 未完成的构建不得对外发布(合规红线:结果图必须带显式 AI 水印 + 隐式标识)。
2. 功能设计
2.1 入口
首页新增两张入口卡:「试衣间」(换装试穿)、「发型设计」(试戴 + 换发色),与「生成我的形象报告」「AI 穿搭顾问」并列。
2.2 试衣间流程(对齐产品方案 §2.1.1 七步)
- 上传/拍摄本人正面全身照(页面明示合规提示:仅限本人照片);
- 上传/拍摄上衣图(必选)、裤子图(可选;选了裤子才走上下装流程);
- 可选提示词(高级,默认折叠);
- 点「开始试穿」→ 长等待态(显示已等待秒数 + 阶段文案,超时 320s);
- 结果页:原图/结果左右对比(点按切换)、保存到相册、再来一次。
Phase A 不做:内置服装库、批量模式、专题试衣间、购买链接(这些依赖素材管线与电商对接,见 §6)。
2.3 发型设计流程(对齐产品方案 §2.1.2)
- 上传/拍摄面部特写(肩部以上,正对镜头);
- 发型网格(在线拉 60 款,缩略图 + 名称);
- 点选即试戴(5~10s,进度条);结果与原图点按切换对比;
- 满意后可继续「换发色」:预设色板(自然黑/深棕/栗色/蜜茶/亚麻灰/酒红等 8 色)+ 强度滑杆(0~1,默认 0.9),换色作用于当前结果图;
- 保存到相册 / 换一张重试。
2.4 异常与降级
- 换装:400 参数错误提示重拍/换图;502/503/504 提示「服务繁忙稍后重试」;超时(>320s)主动中止并提示;
- 发型:HTTP 400 按服务端
message原样提示(「请上传图片」「请选择发型」等);失败保留当前图不覆盖; - 两页均在生成前校验:已选照片、已选单品/发型,不满足则按钮禁用。
3. App 技术方案(Phase A 已实现)
ets/core/TryonApi.ets # 线上服务直连封装(换装 JSON+Base64 / 发型 multipart)
ets/core/ImageCodec.ets # 选图 → 压长边 ≤1600 → JPEG(85%) → Base64/ArrayBuffer
ets/pages/TryonPage.ets # 试衣间
ets/pages/HairDesignPage.ets # 发型设计
HomePage.ets # +2 入口卡;main_pages.json +2 路由
- 图片压缩:解码时按 desiredSize 缩到长边 1600,重编码 JPEG quality=85,Base64 体积可控(~300KB 级);
- 超时:换装 readTimeout=320000ms;发型 readTimeout=120000ms;
- 结果展示:换装返回 OSS URL 直接
Image加载;发型返回 Base64 Data URL 解码为 PixelMap 展示; - 保存相册:结果先写 cacheDir,再
photoAccessHelper.showAssetsCreationDialog(免权限弹系统确认); - 不在 Phase A 做:配额扣减、任务中心、水印、分享、历史记录(线上服务无客户端可用的历史接口)。
4. 验收标准(Phase A)
- 构建绿(assembleHap);真机两页全流程可跑通;
- 换装:全身照 + 上衣(±裤子)出图,等待有秒数反馈,失败有明确提示;
- 发型:60 款列表加载、试戴 ≤15s 出图、换发色生效、可保存相册;
- 两页均有「仅限本人照片」合规提示;
- 实测数据回填:换装 P50 耗时、发型试戴 P50 耗时(喂给 T-P0-13/14 基线)。
5. Phase B 清单(正式版前置,未做)
- 后端 tryon 域:
tr_task/tr_favorite表、POST /api/v1/tryon/tasks等 5 端点(架构 §9.3)、gpu 队列 worker、八步链路(§7.3); - 线上服务八项改造(§4.4:鉴权、任务化、幂等键、并发上限、gpu_seconds 埋点、OSS→COS、前置校验、版本号);
- App 切代理接口,接入配额三段式(tryon 3/3/8、hairstyle 3/2/6)与消耗前剩余提示;
- 合规出口:IMS 审核 + 「AI 生成」显式水印 + EXIF 隐式标识 + 27 位内容编号 + COS 用户桶转存(《合规与安全方案》CR-05/06);
- 素材管线:服装抠图标准化 →
tryon_ready审核 → 内置服装库;60 款发型人工打适配标签(1~2 人日,T-P0-24); - Agent 联动(P1/V2):对话卡片「试穿此搭配」「试戴此发型」带参跳转本两页(参数预留见 §7)。
6. 素材生产需求(给运营/算法)
- 内置服装库目标 ≥300 件
tryon_ready(架构风险线):拍摄 SOP(平铺白底、单品完整、无 logo 遮挡)→ matting-svc 抠图 → 运营审核; - 模特图不需要生产(合规限定本人照片);
reference/cloth_pic仅作开发联调测试集,禁止内置(品牌 logo 版权风险)。
7. 预留:Agent 联动参数(Phase B 用,本次已留口子)
两页 aboutToAppear 读取 router.getParams():TryonPage 支持 {cloth_img?, kuzi_img?, change_desc?}(base64/本地路径);HairDesignPage 支持 {hairstyle_id?}。当前 Agent 卡片按钮未做(V2),参数先留。