【生活娱乐赛道】 - 识人闻香

【标签】生活娱乐

【标题】生活娱乐赛道 - 识人闻香


1. Demo 简介

是什么: 识人闻香是一个交互式 AI 面部表情分析与香水推荐网站(单页应用)。用户上传照片后,浏览器端 AI 模型(face-api.js)在本地完成人脸检测与 68 点关键点定位,从中提取 15 维面部特征(含笑容分数、眉毛倾斜度、眼睛睁开度等 7 维表情特征),融合大五人格模型生成多维度"气味画像",最终从 33 款真实香水数据库中推荐 2-3 款最契合的香水。全程照片不上传服务器,隐私零风险。

面向谁:

  • 对香水好奇但缺乏选香经验的年轻用户(18-35 岁)
  • 喜欢趣味性格测试、乐于社交分享的用户
  • 想为他人挑选香水礼物但不知从何下手的用户

主要功能:

功能一:AI 面部表情分析 → 性格画像

用户上传照片或摄像头拍照(含 3 秒倒计时)后,系统在 4 步动画中完成分析。face-api.js 从 68 个关键点中提取 15 维特征:fWHR(面部宽高比)、笑容分数(嘴角上扬度 + 嘴部曲率)、眉毛倾斜度(眉头与眉尾高度差)、眉毛上扬度(眉到眼睑距离)、EAR(眼睛睁开度)、MAR(嘴部张开度)、法令纹代理(鼻翼到嘴角距离)、下颌角度等。这些特征注入大五人格模型(OCEAN),生成 6 维性格雷达图 + 8 项面部特征指标。




功能二:真实香水数据库 → 个性化推荐

基于余弦相似度的香调匹配算法,从 6 大香调(花香、木质、清新、柑橘、东方、果香)共 33 款真实香水中精选推荐。每款香水配有真实产品图片、前/中/后调金字塔、品牌信息和匹配度百分比。推荐算法融入性别匹配加分、面部特征确定性扰动和会话随机扰动,确保不同人脸和多次测试结果有区分度,30 种香水均可出现。

功能三:分享卡片 + 非人脸趣味处理

  • 一键分享:接入 html2canvas 库,将分析结果生成 PNG 图片下载,支持社交传播
  • 趣味页面:上传动物/风景/插画等非人脸图片时,系统通过 Canvas 分析图片主色调(亮度/暖度/绿度),匹配 8 种趣味人格(:herb:绿意/:sunrise:暖色/:sparkles:明亮/:crescent_moon:暗色/:snowflake:清冷/:cherry_blossom:粉柔/:artist_palette:创意/:fire:浓烈),配对应真实香水推荐,将"错误上传"转化为趣味体验


2. Demo 创作思路

灵感来源:

香水本质上是"气味人格"的外化——选择香水的过程暗含性格密码。市面上的香水推荐工具多数只是简单问卷(“你喜欢什么花?”“你周末做什么?”),体验枯燥,缺乏仪式感。如果能把选香变成一场"认识自己"的互动体验——上传一张照片,AI 从面部表情中读出你的性格特质,再匹配到真实香水——既有探索自我的仪式感,又能在娱乐中收获一份实用的推荐。

想解决的问题:

用户痛点 现状 识人闻香的解法
香水品类太多,新手无从选择 线下柜台试香一次只能试几种 33 款真实香水数据库 + AI 匹配算法
现有推荐工具体验枯燥 简单问卷,缺乏沉浸感 多步骤引导式体验 + 4 步分析动画 + 雷达图
推荐结果缺乏个性化依据 “你喜欢花就推荐花香” 15 维面部特征 → Big Five 性格 → 香调匹配
分析结果难以传播 文字报告,无分享价值 html2canvas 一键生成分享卡片

为什么做这个方向:

选择"面部表情 → 性格 → 香水"这条路径,是因为它连接了三个天然有话题性的元素:看脸(人人好奇)、性格测试(社交货币)、香水推荐(实用价值)。三者串联形成完整的"认识自己 → 找到专属气味"故事线,既有娱乐性又有实用价值,天然适配社交传播。

技术选型上选择 face-api.js + 浏览器端 AI 模型,因为:

  1. 隐私友好:照片不上传服务器,全部在本地浏览器分析
  2. 零后端成本:纯前端单 HTML 文件,无需服务器部署
  3. 即时反馈:模型预加载后分析仅需数秒

3. Demo 体验地址

交付方式:交互式 HTML 文件(Zip 打包上传)

已将完整 Demo 及所有依赖(AI 模型文件、香水数据库、产品图片)打包为 Zip 文件上传至社区。

使用方式:

  1. 下载并解压 Zip 文件
  2. 双击 启动.bat(自动启动本地服务器并打开浏览器)
  3. 或手动运行:在解压目录下执行 python -m http.server 8765,然后访问 http://localhost:8765/ 识人闻香.html

注意:必须通过本地服务器(http://) 访问,不能直接双击 HTML 文件(file:// 协议会导致浏览器同源策略阻止 AI 模型加载)


4. TRAE 实践过程

4.1 整体开发流程

整个项目从需求构思到最终交付,全程使用 TRAE 完成。以下为完整开发时间线,每个关键节点标注对应的 TRAE 对话 Session ID:

日期 开发阶段 关键任务 Session ID
7/8 需求规划 撰写产品需求文档(PRD),定义核心用户流程、功能模块、多学科理论融合方案 6a4e5ca0adc73baa79d77c67
7/8 初版开发 完成 Demo 网站初版开发 + 整理 33 款香水结构化数据 6a4e68e8adc73baa79d77cf3
7/9 核心优化 实现全局回退导航、可折叠分析面板、多学科理论驱动分析逻辑、香水产品图片 6a4e9686adc73baa79d781d4
7/9 算法 V2 发现标签匹配导致推荐趋同,改用余弦相似度算法 6a4f207eadc73baa79d7826c
7/9 UI 修复 修复导航栏遮挡文字 + 香水真实图片从 9 款扩充到 33 款 6a4f2436adc73baa79d782ac
7/10 AI 集成 将 Mock 分析替换为真实 face-api.js AI 识别(人脸检测 + 68 点关键点 + 年龄性别) 6a4fb325f1056a7d98f6be38
7/10 Bug 修复 修复 TensorFlow.js 版本缓存冲突 + 服装饱和度计算错误 6a4fc973f1056a7d98f6c059
7/10 系统测试 UI 交互流程检测 + 推荐算法区分度修复(性别匹配 + 连续值调整)+ 图片加载验证 6a4fcef7f1056a7d98f6c21b
7/14 代码审计 自审代码,发现 5 个遗漏问题(空壳函数、静默降级、随机性、死代码、缺免责声明) 6a56317037008f827a5e1403
7/14 5 项修复 html2canvas 保存功能 + Mock 降级提示 + 移除随机性 + 趣味页面接入 + 免责声明 6a56326337008f827a5e1429
7/14 推荐多样性 加入面部特征确定性扰动 + 会话随机扰动,确保 30 种香水均可出现 6a56392d37008f827a5e14e4
7/14 表情增强 研究 68 关键点能力,设计 7 维表情特征方案,修正 fWHR 学术定义 6a563d0937008f827a5e15b2
7/14 表情实施 实施 7 维表情特征注入 Big Five 性格公式 + UI 从 4 栏扩展到 8 栏 6a563e0c37008f827a5e1607

4.2 关键开发步骤详解

步骤一:需求规划与初版开发(7/8)

使用 TRAE 撰写了完整的产品需求文档(PRD),定义了从"用户进入网站"到"查看香水推荐"的完整交互链路,规划了多学科理论融合方案(面部宽高比理论、大五人格模型、四季色彩理论、NeedScope 香水匹配模型)。同日完成 Demo 初版开发,包含首页引导页、照片上传、摄像头拍照等功能模块,并整理了 33 款香水数据到 perfume-data.json

Session ID:6a4e5ca0adc73baa79d77c67(需求规划) / 6a4e68e8adc73baa79d77cf3(初版开发)

步骤二:核心优化与算法迭代(7/9)

在 TRAE 中完成 4 项重大优化:全局回退导航(步骤进度显示 + 回退跳转)、可折叠分析面板(默认折叠显示摘要)、多学科理论驱动的分析逻辑、香水推荐卡片产品图片。推荐算法从简单标签匹配改为余弦相似度算法,解决了 3 张人脸图片推荐趋同的问题。香水真实图片从 9 款扩充到 33 款(21 张来自 nosetime.com CDN,3 张同品牌替代图),设置加载失败回退到品牌色占位图。

Session ID:6a4e9686adc73baa79d781d4(核心优化) / 6a4f207eadc73baa79d7826c(余弦相似度) / 6a4f2436adc73baa79d782ac(UI修复+图片扩充)

步骤三:真实 AI 集成与 Bug 修复(7/10)

这是项目最关键的一步——将 Mock 分析替换为真实 AI 识别。在 TRAE 中完成了 face-api.js 集成:人脸检测(TinyFaceDetector)、68 点关键点定位(FaceLandmark68TinyNet)、年龄/性别估计(AgeGenderNet)、Canvas 肤色/服装色彩分析。实现 AI 失败时自动降级到 Mock 模式的兜底机制。

开发过程中遇到两个关键 Bug:

  1. TensorFlow.js 版本缓存冲突:浏览器缓存旧版 tfjs 与 face-api.js 不兼容,通过重命名 tf.min.jstf170.min.js 解决
  2. 服装饱和度计算错误:RGB 差值未归一化导致开放性分数异常,修正为 0-100 范围归一化

随后进行系统化测试:UI 交互流程检测、推荐算法区分度修复(加入性别匹配 +5 分 + 连续值调整)、香水图片加载验证、非人脸拒绝验证,全部通过。

Session ID:6a4fb325f1056a7d98f6be38(AI集成) / 6a4fc973f1056a7d98f6c059(Bug修复) / 6a4fcef7f1056a7d98f6c21b(系统测试)

步骤四:代码自审与 5 项修复(7/14)

让 TRAE 审查自己的代码,发现了 5 个未意识到的问题并全部修复:

问题 严重度 修复方案
saveShareCard() 是空壳函数,只弹 alert 接入 html2canvas CDN,实现真正的 PNG 下载
Mock 模式静默降级,用户不知情 新增 showModelLoadWarning() 明确提示
推荐结果含 Math.random,同图结果不稳定 移除随机扰动,改为确定性公式
showFunResult() 和 page-fun 是死代码 重写为基于图片主色调分析的趣味推荐
缺少娱乐性免责声明 首页和结果页添加"仅供娱乐参考"

Session ID:6a56317037008f827a5e1403(代码审计) / 6a56326337008f827a5e1429(5项修复)

步骤五:推荐多样性 + 7 维表情特征增强(7/14)

推荐多样性优化:在 findMatchingPerfumes 中加入两层扰动机制——基于面部特征(fWHR、眼部比例、嘴部比例等 10 个原始特征)的确定性扰动(±8 分)和会话随机扰动(±2 分)。确保不同人脸 → 不同推荐,同图多次 → 相似香水交替出现,30 种香水均可出现。

7 维表情特征:在 TRAE 中研究 face-api 68 个关键点的完整能力后,设计并实施了 7 个新的几何特征:

特征 计算方式 关键点 影响的性格维度
笑容分数 嘴角上扬度 + 嘴部曲率 48/54/57 开放性+15, 外倾性+20, 宜人性+12
眉毛倾斜度 眉头与眉尾高度差 17/21/22/26 神经质(倒八字眉→↑)
眉毛上扬度 眉到眼睑距离 19/24/37/43 开放性+20
眼睛睁开度 EAR 公式 36-47 外倾性+, 神经质(眯眼→↑)
嘴部张开度 MAR 公式 48/51/54/57/62/66 外倾性+15
法令纹代理 鼻翼到嘴角距离 31/35/48/54 尽责性(距离短→↑)
下颌角度 下巴尖夹角 4/8/12 尽责性+, 宜人性-

同时修正了 fWHR 的高度定义:从"下巴到鼻梁"(非标准)改为学术标准的"眉到上唇"(符合 Carre & McCormick 研究口径)。UI 面部特征栏从 4 个扩展到 8 个,性格维度从 4 个扩展到 6 个,香调画像从 4 个扩展到 6 个。

三张人脸图片验证结果:

指标 图片1(女,微笑) 图片2(女,不笑) 图片3(男)
笑容指数 57% 44% 54%
开放性 72 66 64
外倾性 59 51 62
理性气质 63 66 64
推荐香水 一千零一夜 绽放 卡普里岛香橙

笑容分数正确区分了不同表情,性格维度随之变化,推荐结果完全不同。

Session ID:6a56392d37008f827a5e14e4(推荐多样性) / 6a563d0937008f827a5e15b2(表情研究) / 6a563e0c37008f827a5e1607(表情实施)

4.3 开发心得

TRAE 的核心价值体现在三个方面:

  1. 浏览器集成测试:TRAE 内置浏览器工具让"写代码 → 测试 → 发现 Bug → 修复"的循环无需离开 IDE。每次修改后直接在浏览器中验证,通过 JS 执行检查变量状态、截图确认 UI 效果,大幅缩短调试周期。
  2. 多轮对话迭代:推荐算法经过 4 轮迭代,每次都是在 TRAE 对话中分析问题 → 提出方案 → 实施修改 → 浏览器验证。TRAE 保持了完整上下文,不需要每次重新解释项目背景。
  3. 代码审计能力:让 TRAE 审查自己的代码,发现了 saveShareCard 空壳、Mock 静默降级、page-fun 死代码等未意识到的问题。这种"自我审计"能力帮助提升了代码质量。

技术架构总结:

Plain Text

用户照片 → face-api.js(浏览器端 AI)
  ├─ 人脸检测(TinyFaceDetector)
  ├─ 68 点关键点(FaceLandmark68TinyNet)
  ├─ 年龄/性别估计(AgeGenderNet)
  └─ 肤色/服装色彩分析(Canvas getImageData)
      ↓
  15 维特征提取(含 7 维表情特征)
      ↓
  Big Five 性格模型 + 香调画像
      ↓
  余弦相似度匹配 33 款香水(含确定性扰动 + 会话扰动)
      ↓
  推荐结果 + html2canvas 分享卡片

4.4 关键任务 Session ID 汇总

以下为本项目开发过程中关键任务的 TRAE 对话 Session ID,按时间顺序排列:

# Session ID 日期 任务描述
1 6a4e5ca0adc73baa79d77c67 7/8 需求规划与产品需求文档撰写
2 6a4e68e8adc73baa79d77cf3 7/8 Demo 初版开发 + 33 款香水数据库构建
3 6a4e9686adc73baa79d781d4 7/9 核心优化:回退导航 + 折叠面板 + 分析算法 + 产品图片
4 6a4f207eadc73baa79d7826c 7/9 推荐算法 V2:标签匹配改为余弦相似度
5 6a4f2436adc73baa79d782ac 7/9 UI 修复 + 香水真实图片扩充至 33 款
6 6a4fb325f1056a7d98f6be38 7/10 AI 集成:Mock 替换为真实 face-api.js
7 6a4fc973f1056a7d98f6c059 7/10 Bug 修复:TF.js 版本冲突 + 饱和度计算
8 6a4fcef7f1056a7d98f6c21b 7/10 系统测试:算法区分度 + 性别匹配 + 图片验证
9 6a56317037008f827a5e1403 7/14 代码自审:发现 5 个遗漏问题
10 6a56326337008f827a5e1429 7/14 5 项修复:html2canvas + Mock提示 + 去随机 + 趣味页面 + 免责
11 6a56392d37008f827a5e14e4 7/14 推荐多样性:确定性扰动 + 会话随机扰动
12 6a563d0937008f827a5e15b2 7/14 表情研究:68 关键点能力分析 + 7 维方案设计
13 6a563e0c37008f827a5e1607 7/14 表情实施:7 维特征注入 Big Five + UI 扩展

以上 Session ID 可在 TRAE 中双击对应对话查看完整开发记录。


5. 报名帖链接

报名帖已通过社区审核,链接如下:
【生活娱乐赛道】做一个"识人闻香"香水性格分析网站 - TRAE AI 创造力大赛 / 【大赛报名专区】 - TRAE 官方中文社区

免责声明: 本应用基于面部特征分析进行趣味性香水推荐,分析结果仅供娱乐参考,不构成专业人格评估或购买建议。

看起来不错,已投票。麻烦帮帮我给我的作品投一票,互相支持支持吧https://forum.trae.cn/t/topic/96939/15?u=一叶孤舟

已投票已投票

啊啊啊我喜欢!想用上完全版!

已投票~互相支持一下~
也来看看我的帖子吧,为听障人士做的公益AI服务员
AI服务员-无声有市:一部手机,让无声摊位也能开口接单