feat(h5): update skin scoring, age display and capture countdown
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
# 后台北京时间统一
|
||||
|
||||
## 修改
|
||||
|
||||
- 后台记录列表、失败与异常、详情的创建/更新时间统一显示北京时间(UTC+8)。
|
||||
- 日期筛选和CSV导出筛选按北京自然日计算,例如10月14日覆盖UTC的10月13日16:00至10月14日15:59:59.999。
|
||||
- 完整带时区ISO查询仍按其实际时间点比较,完整结束时间包含该毫秒;不带时区的完整时间按北京时间解释。
|
||||
- 今日检测量、近14日趋势按北京日期归类,不再直接截取UTC日期。
|
||||
- CSV创建时间转换为北京时间,列标题明确时区;列表筛选、趋势和导出说明也标注北京时间。
|
||||
- 前后端共享 `js/beijing-time.js`。原始记录、UTC时间字段及接口时间不做批量修改,评分和推荐不变。
|
||||
- 无效日期及颠倒区间返回400,不产生误导结果。
|
||||
|
||||
## 验证
|
||||
|
||||
```sh
|
||||
TZ=UTC node h5/test/beijing-time.js
|
||||
TZ=America/New_York node h5/test/beijing-time.js
|
||||
TZ=Asia/Shanghai node h5/test/beijing-time.js
|
||||
node h5/test/admin-beijing-browser.mjs
|
||||
node h5/test/report-persistence.mjs
|
||||
```
|
||||
|
||||
独立测试服务使用临时记录目录,服务进程设为纽约时区,浏览器分别使用洛杉矶、UTC、上海时区。固定“当前时间”为北京时间凌晨00:30(UTC仍为前一天),验证北京午夜前后毫秒边界、单日/单边/带时区筛选、CSV、今日及每日统计、创建与更新时间显示、无效日期。测试后逐字比较原始UTC记录不变,无真实账号/报告或付费检测调用。
|
||||
|
||||
当前本地实现,尚未提交或部署。
|
||||
@@ -0,0 +1,13 @@
|
||||
# 展示肌龄限制±5岁
|
||||
|
||||
用户已确认:实际年龄25岁、接口肌龄40岁,展示30岁。
|
||||
|
||||
展示肌龄 = max(实际年龄−5, min(实际年龄+5, 原始肌龄))。
|
||||
|
||||
该限制仅影响展示,不修改接口原始肌龄,不用于产品推荐,不调整三个维度或综合得分。后台同时保留原始肌龄与展示肌龄,列表、详情和CSV与报告页使用同一规则。新报告存储展示值;历史报告读取时按原始肌龄和当时填写的实际年龄应用新展示规则,不改写历史文件或推荐。
|
||||
|
||||
缺少原始肌龄显示`--`,不拿实际年龄替代;缺少实际年龄时展示原始肌龄。保留原始小数精度,不另外取整。
|
||||
|
||||
同时移除肤色图片上的黄褐斑、雀斑检出状态浮层(HTML、CSS和渲染逻辑),不改变其评分参数与色素图30%透明度。
|
||||
|
||||
验证覆盖:±5边界、上下限、缺失值、小数、原始数据不变、历史展示值不作为输入、推荐继续使用原始肌龄;后端记录/列表/详情/CSV以及历史报告一致性;真实色斑案例图片无浮层。
|
||||
@@ -0,0 +1,26 @@
|
||||
# 恢复321与色斑案例复测
|
||||
|
||||
本地修改,尚未部署。未调用付费检测接口,未修改线上记录。
|
||||
|
||||
## 拍摄提示音
|
||||
|
||||
每次网页摄像头抓拍先播放已有 countdown-321.mp3,等待真正的 ended 事件,再执行白屏补光和抓帧。沿用流程音队列,上一条步骤引导先播完;倒计时期间锁定快门、停止姿态提示,禁止重复触发。退出、页面隐藏使令牌失效,不再拍摄。拍下后的本地照片复验保持不变。
|
||||
|
||||
网页内自动和降级手动抓拍适用。系统相机原生快门不受网页控制;浏览器音频不可用时不阻断原有拍摄流程。
|
||||
|
||||
验证:node h5/test/countdown-capture-browser.mjs,三张逐张等待音频 ended、防重复快门、取消倒计时均通过。自动化控制音频结束事件,手机微信实际音量和播放仍需真机验证。
|
||||
|
||||
## 真实色斑案例
|
||||
|
||||
线上225条记录中207份原始结果可读取,所有结果 freckle.value 均为0,因此没有可用于验证的真实雀斑阳性案例。雀斑分类值没有提供雀斑数量,confidence 不等于雀斑个数,也不作为阳性依据。
|
||||
|
||||
选择棕色色斑最多的 R20261014-155810-LFB8 本地复测,brown_spot.count=81,freckle.value=0,仍展示雀斑未检出,不能把棕色色斑冒充雀斑。
|
||||
|
||||
- 色素分99;黄褐斑和雀斑均未检出,不扣该分类分。
|
||||
- 黑眼圈分30;肤色项=99×80%+30×20%=85.2。
|
||||
- 水分项79;肤色水润分类百分制=(85.2+79)/2=82.1,映射十分制9.46。
|
||||
- 当前透亮感9.46,综合得分91。
|
||||
- 色素图以30%透明度叠加,原始照片不降透明度。
|
||||
- 无黄褐斑/雀斑区域坐标时只显示真实检出状态,不生成定位框。
|
||||
|
||||
H5_PIGMENTATION_CASE_DIR 指向私有临时案例目录运行 h5/test/pigmentation-case-browser.mjs,评分公式、真实标记、透明度和浏览器渲染验证通过。真实照片和原始返回不纳入 Git。
|
||||
@@ -0,0 +1,38 @@
|
||||
# 痘痘按三视图各类型最大数量计分
|
||||
|
||||
## 规则
|
||||
|
||||
正脸读取 `result.<type>`,侧脸读取 `left_side_result.left_acne_info.<type>` / `right_side_result.right_acne_info.<type>`。每类分别取有效数量的最大值,不累加,也不是选皮损总数最多的照片。
|
||||
|
||||
| 类型 | 字段 | 每处扣分 |
|
||||
|---|---|---:|
|
||||
| 闭口 | closed_comedones | 1 |
|
||||
| 丘疹 | acne | 2 |
|
||||
| 脓包 | acne_pustule | 4 |
|
||||
| 结节 | acne_nodule | 6 |
|
||||
| 痘印 | acne_mark | 1.5 |
|
||||
|
||||
计数优先 `.count`,缺失时兼容已有矩形数量回退;负数、非整数、非有限数不计为有效数量。明确0才算未检出。
|
||||
|
||||
`计数扣分=min(50, Σ各类最大数量×权重)`。
|
||||
|
||||
正脸 `score_info.acne_score` 的既有100/85/70/55分档映射不变,侧脸整体评分不合并。
|
||||
`痘痘P=min(正脸评分映射值,100−计数扣分)`;某一项缺失时仅用其他有效项;计数全部缺失则仅用正脸评分,二者都缺失不生成痘痘分。
|
||||
|
||||
报告文案与计分共用合并数量,侧脸检出脓包/结节也影响相应提示,计数不完整不声称完全未检出。这里的数量是三视图各类型最大值汇总,不等同于跨视图去重后的真实全脸总数。
|
||||
|
||||
## 后台和历史
|
||||
|
||||
新记录保存 `acne_scoring`,版本 `three-view-type-max-v1`,包括五类正/左/右数量、最大值、来源视图、权重、每项扣分、扣分合计/封顶结果、完整性和正脸评分/映射值。
|
||||
后台详情展示计分明细表。报告快照同步保存用于展示的变量。旧记录和快照不迁移、不改写,历史推荐保持原样。
|
||||
|
||||
## 验证
|
||||
|
||||
- `node h5/test/acne-three-view.js`:分类分别取最大而非相加、不同类型来自不同视图、并列值、缺失/零/非法数量、计数回退、正脸评分约束、50分封顶、侧脸中重皮损文案与源数据不变。
|
||||
- `H5_ACNE_MAX_TEST=1 node h5/test/report-persistence.mjs`:隔离合成三视图验证计分、报告文案、后台明细、保存/回看、CSV、历史不可变。
|
||||
- `node h5/test/regression.js`:旧case2期望显式更新为侧脸闭口1处参与扣分;原始fixture不改写。
|
||||
- 私有案例目录回放:`H5_WRINKLE_CASE_DIR=<private directory> node h5/test/wrinkle-case-browser.mjs`。
|
||||
|
||||
`R20261014-171215-CYLF`:闭口为0/1/0→取1,丘疹为0/1/1→取1,其他三类为0。扣3分,痘痘P=97、S=9.91,稳韧力由原9.97变为9.91。与待上线的整体皱纹规则合用,紧塑力8.95、透亮感9.63,综合得分`round(8.95×4+9.63×3+9.91×3)=94`(仅皱纹修改时为95)。
|
||||
|
||||
当前本地实现,未提交或部署;此前待发布的北京时间、整体皱纹评分修改继续保留。所有回放使用隔离数据和固定接口返回,不调用付费检测、不写线上记录。
|
||||
@@ -0,0 +1,37 @@
|
||||
# 皱纹改用接口整体评分
|
||||
|
||||
按用户要求修改:皱纹百分制P直接采用 `score_info.wrinkle_score`(兼容顶层同名字段),取值0~100。不再计算 `100-最差分区值`,也不再用分区严重度限制该整体分。分区指标、计数、标记仍保留供查看。
|
||||
|
||||
- 皱纹S仍为 `7+3×P÷100`;紧塑力仍取轮廓和皱纹中的较差项。
|
||||
- 缺失或无效的整体评分不生成皱纹分,不静默回退分区旧规则。
|
||||
- 新报告/记录标记 `api-overall-v1`,后台详情说明来源。
|
||||
- 修正维度一位小数显示中的浮点舍入:8.95显示9.0,9.45显示9.5;内部S、评分公式和综合得分计算精度不变。
|
||||
- 不改写既有线上历史记录或快照。此次历史案例使用原始接口返回,在本地隔离服务复算;没有重新调用旷视或新增线上检测。
|
||||
- 本次是用户指定的业务评分口径,不代表已核实供应商对该字段评分方向的定义。
|
||||
|
||||
## 案例复算
|
||||
|
||||
`R20261014-171215-CYLF`:
|
||||
|
||||
| 项目 | 原保存值 | 本地新规则 |
|
||||
|---|---:|---:|
|
||||
| 接口整体皱纹分 | 65 | 65(输入未改变) |
|
||||
| 皱纹P | 0 | 65 |
|
||||
| 皱纹S | 7 | 8.95 |
|
||||
| 轮廓S | 9.73 | 9.73 |
|
||||
| 紧塑力S | 7 | 8.95(显示9.0) |
|
||||
| 透亮感S | 9.63 | 9.63 |
|
||||
| 稳韧力S | 9.97 | 9.97 |
|
||||
| 加权综合得分 | 87 | 95 |
|
||||
|
||||
`8.95×4+9.63×3+9.97×3=94.6`,四舍五入为95。
|
||||
|
||||
## 验证
|
||||
|
||||
`test/wrinkle-overall.js` 独立验证新评分来源、0/100边界、无分区仍可评分、严重度不影响整体分、缺失不回退、原输入不修改、维度舍入。
|
||||
|
||||
`test/wrinkle-case-browser.mjs` 只读取显式提供的私有样例目录(环境变量 `H5_WRINKLE_CASE_DIR`),以隔离临时微信身份和数据库回放接口返回,核对后台保存与报告页显示、生成截图。真实照片和原始数据不提交Git。
|
||||
|
||||
原Excel回归与引擎内置合成样例固定整体皱纹输入为旧P,隔离其他分类/文案的回归;原始fixture文件保持不变,新规则由独立测试和真实案例回放覆盖。
|
||||
|
||||
当前本地修改,尚未提交、部署。与此前待发布的后台北京时间修改共同保留在工作区。
|
||||
@@ -0,0 +1,11 @@
|
||||
# 肤色文案与实际黑眼圈等级
|
||||
|
||||
仅调整报告展示文案,不改肤色计分、20%黑眼圈权重、综合得分或产品推荐。
|
||||
|
||||
肤色三档仍沿用肤色水润分类百分制原值:低于80=改善,80至低于90=良好,大于等于90=优秀;色素分占位符取现有 melanin。三档新模板同步到 reference/AI测肤报告页话术修改.md,再用 tools/build_report_copy.py 生成 report-copy.js,避免重生成时丢失本次调整。
|
||||
|
||||
黑眼圈描述独立读取 dark_circle_severity.value:0无明显黑眼圈,1仅存在轻度黑眼圈,2存在中度黑眼圈,3可见明显黑眼圈。仅接受0~3的整数;无效/缺失省略描述,不读 dark_circle.value,不用 dark_circle_score 推断。即使肤色优秀,也可能显示明显黑眼圈;即使肤色改善,也可能显示无明显黑眼圈。
|
||||
|
||||
消费者文案删除追加的黑眼圈分数及20%/80%权重说明;后台评分明细保留。新生成的报告与后台详情共用新展示模板,已保存的历史 presentation 保留,不迁移历史记录。
|
||||
|
||||
验证:color-copy.js 覆盖60种分档/程度组合、80/90边界、与黑眼圈分数相反的程度、缺失/无效程度、缺失色素分与不修改输入。另复测评分、色素透明度、真实色斑案例及报告持久化。
|
||||
@@ -0,0 +1,30 @@
|
||||
# 肤色项加入黑眼圈20%,色素图30%叠加
|
||||
|
||||
## 用户确认的评分口径
|
||||
|
||||
色素扣斑分=melanin_score-melasma×10-freckle×5。
|
||||
|
||||
肤色项=色素扣斑分×80%+dark_circle_score×20%。
|
||||
|
||||
肤色水润P=肤色项×50%+水分项×50%;水分项原有严重度交叉校验不变。
|
||||
透亮感仍取平滑度和肤色水润中的较差项。没有拆分现有肤色/水分底层类别或新增维度。
|
||||
|
||||
黑眼圈缺失/无效时不编造分数,按其余有效权重归一,后台记录计算来源。报告肤色文案显示黑眼圈评分与20%权重,后台详情说明色素扣斑分、黑眼圈分、合成肤色项和水分项;新记录保存 `tone_scoring`(`color-dark-circle-20-v1`)。历史快照和评分不重写。
|
||||
|
||||
## 图像
|
||||
|
||||
- 肤色页原始照片保持不透明,brown_area 色素图在照片上使用 multiply 混合、globalAlpha=0.3。
|
||||
- 没有色素图时,可用接口返回的 melanin_mark 真实坐标叠加;有色素图时不重复叠加同一份色素坐标。
|
||||
- 黄褐斑和雀斑当前返回value/confidence分类结果,没有各自位置坐标。图上显示检出/未检出/未获取;只有实际收到该类型坐标时才绘制标记,不能借褐色斑坐标冒充黄褐斑/雀斑。
|
||||
- 图层或坐标均缺失时降级为原始照片并注明,不填补不存在的检测区域。
|
||||
- 30%只应用于肤色页检测叠加层,不改皱纹、平滑度、水分、泛红、痘痘图层或整体人脸照片的不透明度。
|
||||
|
||||
## 验证
|
||||
|
||||
- `node h5/test/tone-dark-circle.js`:80/20、外层50/50、先扣斑再加权、0分、缺失/非法值、来源记录、文案、输入不变。
|
||||
- `node h5/test/tone-overlay-browser.mjs`:用固定颜色的合成测试图核对实际像素的30%混合,整张照片opacity仍为1;有/无分类值不伪造坐标;无图降级。
|
||||
- `H5_ACNE_MAX_TEST=1 node h5/test/report-persistence.mjs`:新来源与前后端评分、文案保存回看、历史不改写。
|
||||
- 私有CYLF案例本地回放截图:色素94、黑眼圈68、水分93,肤色项88.8,肤色水润90.9;平滑度87.6仍更低,所以透亮感仍9.63,叠加待发布的皱纹/痘痘规则,综合得分94。
|
||||
- 旧Excel/参考断言将黑眼圈输入固定到原色素扣斑分,以隔离其他既有计算/文案回归;新规则由独立测试验证,不改写原始fixture。
|
||||
|
||||
所有测试使用临时服务、固定接口返回或样例图片,不发起付费调用、不写线上记录。当前本地修改,未提交或部署。
|
||||
Reference in New Issue
Block a user