一条牛仔裤,被StyleCast归进了夹克类。这是开发者用自己手机拍下的第一件衣服,也是整个项目最有价值的一次翻车。
![]()
StyleCast是一个跑在手机浏览器里的AI穿搭规划器,为DEV Hacktoberfest 2026开源AI挑战赛第二周"副业"主题而做。它的逻辑很朴素:拍一次衣柜,之后每天早上从自己的衣服里挑一套,匹配真实天气预报。
但第一版差点走进死胡同。项目最初是一个Python服务器,通过Ollama调用Qwen2.5-VL,搭配效果不错,可每个用户都得先装Ollama、拉一个6 GB的模型,才能看到第一套搭配。第二天,这套方案被整个推翻,AI被搬进了浏览器。
浏览器里跑模型,靠什么撑住
衣物打标用的是CLIP ViT-B/32,经Transformers.js在设备本地运行,笔记本走WebGPU,手机走WebAssembly。预算对话由Gemma 3 1B承担,没有WebGPU的设备降级到Gemma 3 270M,跑在web worker里。天气数据来自免费的Open-Meteo,无需密钥,直接从浏览器调用。衣柜和照片存在浏览器的IndexedDB中。
CLIP并不像聊天模型那样描述照片,它把照片和一组描述逐一比对,挑出最接近的那个。对"这是什么类型的衣服"这个问题,这已经够用,而且小到能在手机上跑。至于搭配本身,交给纯JavaScript规则:先看天气,再看场合,最后避开最近穿过的。
开发者的原话是,不需要一个模型来告诉他正在下雨。
三个问题,一次修完
牛仔裤的误判没有靠改提示词碰运气。他写了一个评分脚本,让打标器跑过272张带标签的商品图,并接入CI,每次改动打标器的PR都会触发。脚本挖出三个问题:
- 标签太懒。CLIP拿照片去匹配"一张牛仔裤的照片",没有别的线索,只能靠颜色和面料判断,蓝色牛仔布看起来就像牛仔夹克。现在每种类型都配了几条平实描述,比如"一条牛仔裤""蓝色牛仔牛仔裤""有两条裤腿的牛仔长裤"。
- 中心裁剪。CLIP会裁成正方形,把牛仔裤这类竖长照片拦腰截断。现在改为填充成正方形。
- 省内存的捷径反而伤了准确率。手机原本用8位模型省内存,现在换成16位,分两半加载,先文本后图像,以塞进手机内存。
三项修完,同一批272张照片上的结果:手机端衣物类型识别从55%升到77%,大类(上装、下装、鞋等)从90%升到93%;笔记本端类型识别从72%升到77%,大类从92%升到93%。
代价是手机首次下载从约150 MB涨到约300 MB,之后浏览器会缓存。
预算对话怎么不烧钱
问一句"我有50欧元,该买什么",流程是这样的:设备上的Gemma读取衣柜和规则找出的缺口,规划最多三次搜索;只有简短查询词(比如"雨衣")和价格上限会发到Render上的小服务器,那里保管SerpApi密钥,每次搜索缓存六小时,并按IP和按天限制搜索次数。规则从每次搜索里挑一件商品,保证总价不超预算,Gemma再写一句话说明每件为什么合适。
如果用户直接点名商品("20以下的鞋"),就跳过规划直接搜。如果Gemma在设备上加载失败,规则接手规划搜索并给出朴素解释,对话照样能用。
还有一个浏览器跑模型的坑:首次加载失败可能让ONNX Runtime在页面余下生命周期里一直坏着。现在每次模型尝试都开一个全新的web worker,WebGPU失败不会拖垮WebAssembly回退。
开源模型撑起一个2欧元订阅
在开发者看来,这个副业成立的前提是模型开源。隐私上,没人愿意把卧室衣柜的照片传到陌生服务器,模型跑在浏览器里,照片不离开手机,托管视觉API给不了这个承诺。成本上,闭源API按张按条计费,开源权重跑在用户设备上不花他一分钱,这才让2欧元的订阅算得过来。离线可用,模型下载后打标和选衣无需联网,最后一次预报会存下来应对信号差的早晨。可修可换,CLIP认错牛仔裤时能进去改标签、改预处理、比精度、量化每次改动;Gemma 1B在弱设备上降到270M,仓库里还有对比CLIP与SmolVLM的测试页。
项目是静态站点,无构建步骤,MIT许可,npm test覆盖搭配规则、预算对话和购物服务器,CI在每个PR上跑。首批用户是两位朋友,用安卓手机拍下自己的衣服,结果都对,评价是"不错,但还能更好"。开发者认这个评价——项目才几天大,反馈就是下一版的内容。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.