test(deploy): verify fourth feedback capture and public release
This commit is contained in:
@@ -39,7 +39,7 @@
|
|||||||
| 歪头 roll | 不判断 | ≤10° |
|
| 歪头 roll | 不判断 | ≤10° |
|
||||||
| 脸部平均亮度 | 65~235 | 75~225 |
|
| 脸部平均亮度 | 65~235 | 75~225 |
|
||||||
| 稳定累计 | 450ms,短暂漏检不打断 | ≥650ms 且≥3 合格帧;任何漏检/异常打断,帧间隔>2000ms 打断 |
|
| 稳定累计 | 450ms,短暂漏检不打断 | ≥650ms 且≥3 合格帧;任何漏检/异常打断,帧间隔>2000ms 打断 |
|
||||||
| 稳定期间漂移 | 未单独判断 | 相对起始合格帧 yaw/pitch≤5°,中心 x/y≤原帧 3.5%,框高比例变化≤4.5% |
|
| 稳定期间漂移 | 未单独判断 | 相对起始合格帧 yaw/pitch≤5°,中心 x/y≤原帧 3.5%,框高占比变化≤4.5 个百分点 |
|
||||||
| 最终 JPEG | 实时抓拍后直接推进 | 抓拍后本地复验通过才推进 |
|
| 最终 JPEG | 实时抓拍后直接推进 | 抓拍后本地复验通过才推进 |
|
||||||
|
|
||||||
系统相机/相册文件使用同样的单人、完整入镜、距离、角度、光线门限;由于系统照片可能已镜像,沿用不判断左右方向的兼容方式,并记录 `direction_checked:false`。模型加载中最多等待 8 秒;模型确实不可用时保留原有手动/文件降级通路,并记录 `unchecked/model-unavailable`,不伪称已校验。
|
系统相机/相册文件使用同样的单人、完整入镜、距离、角度、光线门限;由于系统照片可能已镜像,沿用不判断左右方向的兼容方式,并记录 `direction_checked:false`。模型加载中最多等待 8 秒;模型确实不可用时保留原有手动/文件降级通路,并记录 `unchecked/model-unavailable`,不伪称已校验。
|
||||||
@@ -72,4 +72,17 @@
|
|||||||
- 使用本地真实模型对 C3_180、C3_-135、C3_135 三张样例进行推理,当前收紧门限均通过(yaw 约 4.28°/-44.77°/42.59°)。这不是对真实手机拍摄合格率的保证。
|
- 使用本地真实模型对 C3_180、C3_-135、C3_135 三张样例进行推理,当前收紧门限均通过(yaw 约 4.28°/-44.77°/42.59°)。这不是对真实手机拍摄合格率的保证。
|
||||||
- `node h5/test/capture-quality-browser.mjs`:真实识别引擎和原始模型,使用保持长宽比、居中后的三视角样例模拟视频流,实际自动拍摄三张并复验 JPEG;正脸不能冒充侧脸、反方向侧脸不能直接推进,诊断对应正确视角,相机成功后释放。不是手动触发快门,也不是模拟识别结果。
|
- `node h5/test/capture-quality-browser.mjs`:真实识别引擎和原始模型,使用保持长宽比、居中后的三视角样例模拟视频流,实际自动拍摄三张并复验 JPEG;正脸不能冒充侧脸、反方向侧脸不能直接推进,诊断对应正确视角,相机成功后释放。不是手动触发快门,也不是模拟识别结果。
|
||||||
|
|
||||||
全部写入测试仅发生在独立临时数据目录,上游测肤以本地样例替代;不调用收费 Face++,不修改生产账号、照片、报告或配置。真实手机微信/相机验收与上线需后续执行。
|
全部写入测试仅发生在独立临时数据目录,上游测肤以本地样例替代;不调用收费 Face++,不修改生产账号、照片、报告或配置。真实手机微信/相机仍需用户最终验收。
|
||||||
|
|
||||||
|
## 生产部署及只读验收
|
||||||
|
|
||||||
|
- 功能提交:`92a3965b7d637f19ec3d31389f142447339ff2a6`(`feat(h5): apply fourth feedback and tighten local capture validation`)。
|
||||||
|
- 服务器:`ubuntu@1me.xajuzi.com:/home/ubuntu/juzi`;入口:<https://1me.xajuzi.com/state/>。部署前服务器工作区干净、HEAD 与 origin/main 均为 `e53c809`;通过 Git bundle 快进更新,不代替用户 push、不覆盖服务器私有配置或已有用户数据。
|
||||||
|
- 更新后重启 `juzi-h5.service`,让服务端评分展示模块、质量诊断模块及前端同版。服务 active/running,`NRestarts=0`,健康接口 `ok:true`;检查时最近 10 分钟错误级日志为 0。
|
||||||
|
- 公网首页、app/capture-quality/head-pose/report-ui 四个脚本、CSS、两份扫描素材全部 200;逐文件 SHA-256 与本地一致,均为 `Cache-Control: no-cache`。
|
||||||
|
- 公网未登录报告、后台页面及统计接口均 401;私有身份文件、server.js 均 404;微信配置仍启用,不修改微信凭据或流程。
|
||||||
|
- 公网真实模型的自动三连拍测试通过:三个实际合格视角自动抓拍、最终 JPEG 本地复验、实际识别到的正脸/错误方向不能冒充目标侧脸、正确诊断归属、报告后释放摄像头;登录与测肤响应仅浏览器内拦截,不产生生产账号或报告、不调用收费测肤。
|
||||||
|
- 公网第三轮专项串行复验通过:五种屏宽的弹窗断行/产品版式、三款产品、扫描动效与成功进入报告、六种等待视口、装饰图标、取消/迟到响应/失败恢复及字体/扫描图失败降级;无页面 JS 异常。已检查公网首页、等待画面及产品截图。
|
||||||
|
- 公网第二轮回归串行复验通过:首页口号/Logo 比例、实际 PSD 字体、首屏不加载完整字体和识别引擎、全屏相机、三种圆角轮廓/五官辅助线、五种宽度无溢出;无页面 JS 异常。
|
||||||
|
- 公网报告交互串行复验通过:三个维度独立滑动/键盘切换、垂直滚动不误切换、图片放大、七张检测图、三档产品排版;皱纹正文显示指定结论、不再包含分区技术附文。无页面 JS 异常。
|
||||||
|
- 同时启动多套冷浏览器时曾出现字体/资源下载超时;串行重试自动拍摄流程通过。字体仍按原 PSD 使用原始 MiSans,并不将此网络压力测试描述为真实手机合格率保证。
|
||||||
|
|||||||
@@ -4,9 +4,9 @@
|
|||||||
"2": "app.js",
|
"2": "app.js",
|
||||||
"3": "skin-score.js",
|
"3": "skin-score.js",
|
||||||
"4": "customer-feedback-second.js",
|
"4": "customer-feedback-second.js",
|
||||||
"5": "n",
|
"5": "r",
|
||||||
"6": "extractFaceTensors",
|
"6": "extractFaces",
|
||||||
"7": ".loadFromDisk",
|
"7": "customer-feedback-third.mjs",
|
||||||
"8": "admin.js",
|
"8": "admin.js",
|
||||||
"9": "__awaiter",
|
"9": "__awaiter",
|
||||||
"10": "FaceLandmarks68",
|
"10": "FaceLandmarks68",
|
||||||
@@ -14,14 +14,14 @@
|
|||||||
"12": "server.js",
|
"12": "server.js",
|
||||||
"13": "files",
|
"13": "files",
|
||||||
"14": ".draw",
|
"14": ".draw",
|
||||||
"15": "extractFaces",
|
"15": "getEnv",
|
||||||
"16": "巨子测肤 · 1'me 在线肌肤测试 — UI 设计规范",
|
"16": "巨子测肤 · 1'me 在线肌肤测试 — UI 设计规范",
|
||||||
"17": "k",
|
"17": "k",
|
||||||
"18": "1'me 在线肌肤测试 H5",
|
"18": "1'me 在线肌肤测试 H5",
|
||||||
"19": "customer-feedback-fourth.js",
|
"19": "customer-feedback-fourth.js",
|
||||||
"20": "build_fixtures.py",
|
"20": "build_fixtures.py",
|
||||||
"21": "disposeUnusedWeightTensors",
|
"21": "disposeUnusedWeightTensors",
|
||||||
"22": "FaceExpressionNet",
|
"22": "AgeGenderNet",
|
||||||
"23": "facepp-skinanalyze(旷视皮肤分析专业版调用技能)",
|
"23": "facepp-skinanalyze(旷视皮肤分析专业版调用技能)",
|
||||||
"24": "巨子测肤 · 1'me 语音播报内容设计文档 V1.0",
|
"24": "巨子测肤 · 1'me 语音播报内容设计文档 V1.0",
|
||||||
"25": "mobile-select.iife.min.js",
|
"25": "mobile-select.iife.min.js",
|
||||||
@@ -42,7 +42,7 @@
|
|||||||
"40": "第四轮反馈修改与验收",
|
"40": "第四轮反馈修改与验收",
|
||||||
"41": "NeuralNetwork",
|
"41": "NeuralNetwork",
|
||||||
"42": "layer_at",
|
"42": "layer_at",
|
||||||
"43": "normalize",
|
"43": "convLayer",
|
||||||
"44": "start-local.sh",
|
"44": "start-local.sh",
|
||||||
"45": "PredictAllAgeAndGenderWithFaceAlignmentTask",
|
"45": "PredictAllAgeAndGenderWithFaceAlignmentTask",
|
||||||
"46": "PredictAllFaceExpressionsWithFaceAlignmentTask",
|
"46": "PredictAllFaceExpressionsWithFaceAlignmentTask",
|
||||||
@@ -65,27 +65,27 @@
|
|||||||
"63": "e2e-browser.mjs",
|
"63": "e2e-browser.mjs",
|
||||||
"64": "account-client.js",
|
"64": "account-client.js",
|
||||||
"65": "微信登录接入与公网部署说明",
|
"65": "微信登录接入与公网部署说明",
|
||||||
"66": "report-persistence.mjs",
|
"66": ".div",
|
||||||
"67": "ui-20261009.mjs",
|
"67": "ui-20261009.mjs",
|
||||||
"68": "analyze-timeout.js",
|
"68": "analyze-timeout.js",
|
||||||
"69": "misans/README.md",
|
"69": "misans/README.md",
|
||||||
"70": "extractConvParamsFactory",
|
"70": "extractConvParamsFactory",
|
||||||
"71": "AgeGenderNet",
|
"71": ".predictAgeAndGender",
|
||||||
"72": "build_report_copy.py",
|
"72": "build_report_copy.py",
|
||||||
"73": "camera-geometry.js",
|
"73": "camera-geometry.js",
|
||||||
"74": "report-copy.js",
|
"74": "report-copy.js",
|
||||||
"75": "prepare_h5_assets.py",
|
"75": "prepare_h5_assets.py",
|
||||||
"76": ".detect",
|
"76": "TinyYolov2Base",
|
||||||
"77": "drawFaceExpressions",
|
"77": "drawFaceExpressions",
|
||||||
"78": "t",
|
"78": "n",
|
||||||
"79": "登录反馈与加载优化(2026-10-12)",
|
"79": "登录反馈与加载优化(2026-10-12)",
|
||||||
"80": "线上微信登录部署记录",
|
"80": "线上微信登录部署记录",
|
||||||
"81": "wechat-production.mjs",
|
"81": "wechat-production.mjs",
|
||||||
"82": "wechat-browser.mjs",
|
"82": ".forwardInput",
|
||||||
"83": "10.09 新版 H5 实施与验收",
|
"83": "10.09 新版 H5 实施与验收",
|
||||||
"84": "微信登录联调:2026-10-12",
|
"84": "微信登录联调:2026-10-12",
|
||||||
"85": "test/accounts.js",
|
"85": "test/accounts.js",
|
||||||
"86": "TinyFaceFeatureExtractor",
|
"86": "normalize",
|
||||||
"87": "产品推荐规则:肤龄基准与边界调整",
|
"87": "产品推荐规则:肤龄基准与边界调整",
|
||||||
"88": "ui-20261012/manifest.json",
|
"88": "ui-20261012/manifest.json",
|
||||||
"89": "傅艳NEW与项思炼的会话 2026年10月12日.md",
|
"89": "傅艳NEW与项思炼的会话 2026年10月12日.md",
|
||||||
@@ -94,14 +94,17 @@
|
|||||||
"92": "客户反馈修改(2026-10-12)",
|
"92": "客户反馈修改(2026-10-12)",
|
||||||
"93": ".runAndExtendWithFaceDetections",
|
"93": ".runAndExtendWithFaceDetections",
|
||||||
"94": "第三轮反馈:PSD 对齐、验收及上线记录",
|
"94": "第三轮反馈:PSD 对齐、验收及上线记录",
|
||||||
"95": "login-performance.mjs",
|
"95": ".forwardInput",
|
||||||
"96": "production-loop.mjs",
|
"96": ".run",
|
||||||
"97": "PredictSingleAgeAndGenderWithFaceAlignmentTask",
|
"97": "PredictSingleAgeAndGenderWithFaceAlignmentTask",
|
||||||
"98": "PredictSingleFaceExpressionsWithFaceAlignmentTask",
|
"98": "PredictSingleFaceExpressionsWithFaceAlignmentTask",
|
||||||
"99": "DetectSingleFaceLandmarksTask",
|
"99": "DetectSingleFaceLandmarksTask",
|
||||||
"100": "extractAllFacesAndComputeResults",
|
"100": "extractAllFacesAndComputeResults",
|
||||||
|
"101": ".toBatchTensor",
|
||||||
|
"102": "TinyYolov2",
|
||||||
"103": "第四轮反馈/傅艳NEW与项思炼的会话 2026年10月12日.md",
|
"103": "第四轮反馈/傅艳NEW与项思炼的会话 2026年10月12日.md",
|
||||||
"104": "export_fourth_feedback_assets.py",
|
"104": "export_fourth_feedback_assets.py",
|
||||||
"105": "capture-quality-browser.mjs",
|
"105": "capture-quality-browser.mjs",
|
||||||
"106": "第三轮反馈20261012/傅艳NEW与项思炼的会话 2026年10月12日.md"
|
"106": "第三轮反馈20261012/傅艳NEW与项思炼的会话 2026年10月12日.md",
|
||||||
|
"107": "rescaleAndNormalize"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
{"0": "37652788ec545d8c", "1": "cb6ea50bd4e4a5ca", "2": "b159712c832c558e", "3": "1f737ca8edb978f2", "4": "56bf12952b0de42b", "5": "47494afa617b619b", "6": "8ebd0f43f0e86540", "7": "29c0ad4b6e50513b", "8": "a689fcb62e7754af", "9": "fcd7da5fb21df420", "10": "15606ce5d8eec23a", "11": "4a490abd5e503318", "12": "aeca274694e158d2", "13": "7e3b558a587a4ebe", "14": "bf75bfc99d4f9e34", "15": "2c0eaf406546159b", "16": "95add6a975c0cb72", "17": "ea5cb911b81546f5", "18": "38bb0b185ceed116", "19": "39abb1eef19df707", "20": "aecf2fce44ba49c5", "21": "9d50601a75c5903e", "22": "f7ad594ba6fb1a78", "23": "90fac00055070ce2", "24": "f85b5b1634224c86", "25": "46e8db3e6e3f37ea", "26": "b6934549d800f3bd", "27": "eab427ce9a5219e9", "28": "3c44bc4b258aa360", "29": "c608f1c6492e1cb1", "30": "73c13793fca09f56", "31": "fbbcfc059751cc6a", "32": "f6bcf56c4589316b", "33": "75f750c5b7d9f63d", "34": "f024ff7942935690", "35": "241be5abeab1da6f", "36": "a7d375041779bad4", "37": "cb8f26249485324a", "38": "9a25b1230b5fe649", "39": "fdd95375b4a5ddb3", "40": "0ea4c7c8a34ebf68", "41": "d96493a5f110bd4c", "42": "916170b9f5d7346b", "43": "eb9096fc959866ce", "44": "852c1bb2446edd9c", "45": "92ab3e5134ed8685", "46": "65718282b3c32109", "47": "e594ecaa8e7d1538", "48": "cf2f2424bc00436f", "49": "1f976711cda158dc", "50": "bbb2b57d72922b16", "51": "eb6a182204867275", "52": "2ec3c8c088568ba9", "53": "68c45056378341a7", "54": "c58d41e8e580fdc6", "55": "ed3c8df05ff45f5e", "56": "9ee2ad45dc27851d", "57": "f2a40b5f1b29f669", "58": "9a659f254e1ffa46", "59": "891f59cda3708718", "60": "a505b7de6257a4e8", "61": "9ed244ba3453a0c1", "62": "1366ae24c7e5897d", "63": "c256b43f75d7809e", "64": "ce0e68dab611f022", "65": "74ae017de0ffd36b", "66": "e042d7fe7351bcb9", "67": "3e126d8deaf6e200", "68": "6b91f3679541de79", "69": "e511846eeba03076", "70": "e2303b43add6bddd", "71": "14fdf4e4c496519f", "72": "c84f196a7bd35861", "73": "2b887bf601ccfb9f", "74": "ae2a154311e1f53a", "75": "69fdd23278518884", "76": "9f2b7646fd18ba5d", "77": "2165f45a42456a76", "78": "7f25acff11d57ca1", "79": "c6cfdfe181232ecc", "80": "315325cde1352e98", "81": "37c559741825be74", "82": "2b037735e1f5b0f6", "83": "1284897282eb47a3", "84": "d8bb296741d3d05c", "85": "4bc370be8afd7db1", "86": "ec24a95b0cbd8486", "87": "e5fa7717989eda80", "88": "8b5ab5232cef3457", "89": "9e3363b80eeceeea", "90": "dd1c246e19a2d032", "91": "83b0fd3b14363e4d", "92": "fced244d93677d90", "93": "a38797466ce43978", "94": "713d04996c4627df", "95": "59c31f858c7b6970", "96": "4195478d5c528371", "97": "01f68dfc34a29d32", "98": "8c471c7baeaaca54", "99": "23f1d406f6c779ae", "100": "29debca18be73445", "103": "6ffbe07b521a061b", "104": "e114a7aebaaca2f1", "105": "0567be4dc8048b9c", "106": "8bc72c179793e1c2"}
|
{"0": "cd6fa4c897b52500", "1": "cb6ea50bd4e4a5ca", "2": "b159712c832c558e", "3": "1f737ca8edb978f2", "4": "56bf12952b0de42b", "5": "d50faa21d10efe9c", "6": "7162685b110caea8", "7": "325690c89d34f602", "8": "a689fcb62e7754af", "9": "1215838433447012", "10": "68c52c80f38f8b2c", "11": "7c739fd002680640", "12": "aeca274694e158d2", "13": "7e3b558a587a4ebe", "14": "bf75bfc99d4f9e34", "15": "bbd2902bccbcfc9c", "16": "95add6a975c0cb72", "17": "68c8c4a53446cb29", "18": "38bb0b185ceed116", "19": "39abb1eef19df707", "20": "aecf2fce44ba49c5", "21": "d4699b3ebc30431b", "22": "bb2dc34c7d87256a", "23": "90fac00055070ce2", "24": "f85b5b1634224c86", "25": "46e8db3e6e3f37ea", "26": "6039f82328197b7e", "27": "eab427ce9a5219e9", "28": "0018a4ff1d5fe668", "29": "c608f1c6492e1cb1", "30": "73c13793fca09f56", "31": "fbbcfc059751cc6a", "32": "f6bcf56c4589316b", "33": "75f750c5b7d9f63d", "34": "f024ff7942935690", "35": "0a737a97b7cae9fc", "36": "a7d375041779bad4", "37": "cb8f26249485324a", "38": "9a25b1230b5fe649", "39": "fdd95375b4a5ddb3", "40": "5e546676ab96de03", "41": "d96493a5f110bd4c", "42": "916170b9f5d7346b", "43": "4eaa3e8b9eed3bf1", "44": "852c1bb2446edd9c", "45": "92ab3e5134ed8685", "46": "65718282b3c32109", "47": "e594ecaa8e7d1538", "48": "cf2f2424bc00436f", "49": "1f976711cda158dc", "50": "bbb2b57d72922b16", "51": "eb6a182204867275", "52": "2ec3c8c088568ba9", "53": "68c45056378341a7", "54": "c58d41e8e580fdc6", "55": "a4d51d71a07be14b", "56": "9ee2ad45dc27851d", "57": "f2a40b5f1b29f669", "58": "55bfa752b54c63f4", "59": "891f59cda3708718", "60": "a505b7de6257a4e8", "61": "57344ed1fd5c260f", "62": "1366ae24c7e5897d", "63": "c256b43f75d7809e", "64": "ce0e68dab611f022", "65": "74ae017de0ffd36b", "66": "09b9b4b462ad944a", "67": "3e126d8deaf6e200", "68": "6b91f3679541de79", "69": "e511846eeba03076", "70": "af5864c4ac65160d", "71": "a2b13160223b5a98", "72": "c84f196a7bd35861", "73": "2b887bf601ccfb9f", "74": "ae2a154311e1f53a", "75": "69fdd23278518884", "76": "4880b6c8e510f062", "77": "d5ce16a18b491627", "78": "390555e7d7f0d203", "79": "c6cfdfe181232ecc", "80": "315325cde1352e98", "81": "37c559741825be74", "82": "315b401775d71d8e", "83": "1284897282eb47a3", "84": "d8bb296741d3d05c", "85": "4bc370be8afd7db1", "86": "8824c7a0092ee36e", "87": "e5fa7717989eda80", "88": "8b5ab5232cef3457", "89": "9e3363b80eeceeea", "90": "dd1c246e19a2d032", "91": "83b0fd3b14363e4d", "92": "fced244d93677d90", "93": "84a88fb74d1ce216", "94": "713d04996c4627df", "95": "5fec2bbca3634aec", "96": "1511ecae12413095", "97": "01f68dfc34a29d32", "98": "8c471c7baeaaca54", "99": "23f1d406f6c779ae", "100": "b8eb9c4c56ab3204", "101": "0c404de2055f9462", "102": "c96276581a8c98d4", "103": "6ffbe07b521a061b", "104": "e114a7aebaaca2f1", "105": "0567be4dc8048b9c", "106": "8bc72c179793e1c2", "107": "8d5f4e992bac9095"}
|
||||||
+100
-89
@@ -1,16 +1,16 @@
|
|||||||
# Graph Report - juzi (2026-10-12)
|
# Graph Report - juzi (2026-10-12)
|
||||||
|
|
||||||
## Corpus Check
|
## Corpus Check
|
||||||
- 92 files · ~4,888,704 words
|
- 92 files · ~4,888,834 words
|
||||||
- Verdict: corpus is large enough that graph structure adds value.
|
- Verdict: corpus is large enough that graph structure adds value.
|
||||||
|
|
||||||
## Summary
|
## Summary
|
||||||
- 1381 nodes · 2809 edges · 105 communities (82 shown, 23 thin omitted)
|
- 1382 nodes · 2810 edges · 108 communities (84 shown, 24 thin omitted)
|
||||||
- Extraction: 93% EXTRACTED · 7% INFERRED · 0% AMBIGUOUS · INFERRED: 189 edges (avg confidence: 0.54)
|
- Extraction: 93% EXTRACTED · 7% INFERRED · 0% AMBIGUOUS · INFERRED: 189 edges (avg confidence: 0.54)
|
||||||
- Token cost: 0 input · 0 output
|
- Token cost: 0 input · 0 output
|
||||||
|
|
||||||
## Graph Freshness
|
## Graph Freshness
|
||||||
- Built from commit: `e53c8095`
|
- Built from commit: `92a3965b`
|
||||||
- Run `git rev-parse HEAD` and compare to check if the graph is stale.
|
- Run `git rev-parse HEAD` and compare to check if the graph is stale.
|
||||||
- Run `graphify update .` after code changes (no API cost).
|
- Run `graphify update .` after code changes (no API cost).
|
||||||
|
|
||||||
@@ -20,9 +20,9 @@
|
|||||||
- app.js
|
- app.js
|
||||||
- skin-score.js
|
- skin-score.js
|
||||||
- customer-feedback-second.js
|
- customer-feedback-second.js
|
||||||
- n
|
- r
|
||||||
- extractFaceTensors
|
- extractFaces
|
||||||
- .loadFromDisk
|
- customer-feedback-third.mjs
|
||||||
- admin.js
|
- admin.js
|
||||||
- __awaiter
|
- __awaiter
|
||||||
- FaceLandmarks68
|
- FaceLandmarks68
|
||||||
@@ -30,14 +30,14 @@
|
|||||||
- server.js
|
- server.js
|
||||||
- files
|
- files
|
||||||
- .draw
|
- .draw
|
||||||
- extractFaces
|
- getEnv
|
||||||
- 巨子测肤 · 1'me 在线肌肤测试 — UI 设计规范
|
- 巨子测肤 · 1'me 在线肌肤测试 — UI 设计规范
|
||||||
- k
|
- k
|
||||||
- 1'me 在线肌肤测试 H5
|
- 1'me 在线肌肤测试 H5
|
||||||
- customer-feedback-fourth.js
|
- customer-feedback-fourth.js
|
||||||
- build_fixtures.py
|
- build_fixtures.py
|
||||||
- disposeUnusedWeightTensors
|
- disposeUnusedWeightTensors
|
||||||
- FaceExpressionNet
|
- AgeGenderNet
|
||||||
- facepp-skinanalyze(旷视皮肤分析专业版调用技能)
|
- facepp-skinanalyze(旷视皮肤分析专业版调用技能)
|
||||||
- 巨子测肤 · 1'me 语音播报内容设计文档 V1.0
|
- 巨子测肤 · 1'me 语音播报内容设计文档 V1.0
|
||||||
- mobile-select.iife.min.js
|
- mobile-select.iife.min.js
|
||||||
@@ -56,7 +56,7 @@
|
|||||||
- 第四轮反馈修改与验收
|
- 第四轮反馈修改与验收
|
||||||
- NeuralNetwork
|
- NeuralNetwork
|
||||||
- layer_at
|
- layer_at
|
||||||
- normalize
|
- convLayer
|
||||||
- start-local.sh
|
- start-local.sh
|
||||||
- PredictAllAgeAndGenderWithFaceAlignmentTask
|
- PredictAllAgeAndGenderWithFaceAlignmentTask
|
||||||
- PredictAllFaceExpressionsWithFaceAlignmentTask
|
- PredictAllFaceExpressionsWithFaceAlignmentTask
|
||||||
@@ -76,24 +76,24 @@
|
|||||||
- e2e-browser.mjs
|
- e2e-browser.mjs
|
||||||
- account-client.js
|
- account-client.js
|
||||||
- 微信登录接入与公网部署说明
|
- 微信登录接入与公网部署说明
|
||||||
- report-persistence.mjs
|
- .div
|
||||||
- ui-20261009.mjs
|
- ui-20261009.mjs
|
||||||
- analyze-timeout.js
|
- analyze-timeout.js
|
||||||
- misans/README.md
|
- misans/README.md
|
||||||
- extractConvParamsFactory
|
- extractConvParamsFactory
|
||||||
- AgeGenderNet
|
- .predictAgeAndGender
|
||||||
- build_report_copy.py
|
- build_report_copy.py
|
||||||
- .detect
|
- TinyYolov2Base
|
||||||
- drawFaceExpressions
|
- drawFaceExpressions
|
||||||
- t
|
- n
|
||||||
- 登录反馈与加载优化(2026-10-12)
|
- 登录反馈与加载优化(2026-10-12)
|
||||||
- 线上微信登录部署记录
|
- 线上微信登录部署记录
|
||||||
- wechat-production.mjs
|
- wechat-production.mjs
|
||||||
- wechat-browser.mjs
|
- .forwardInput
|
||||||
- 10.09 新版 H5 实施与验收
|
- 10.09 新版 H5 实施与验收
|
||||||
- 微信登录联调:2026-10-12
|
- 微信登录联调:2026-10-12
|
||||||
- test/accounts.js
|
- test/accounts.js
|
||||||
- TinyFaceFeatureExtractor
|
- normalize
|
||||||
- 产品推荐规则:肤龄基准与边界调整
|
- 产品推荐规则:肤龄基准与边界调整
|
||||||
- ui-20261012/manifest.json
|
- ui-20261012/manifest.json
|
||||||
- 傅艳NEW与项思炼的会话 2026年10月12日.md
|
- 傅艳NEW与项思炼的会话 2026年10月12日.md
|
||||||
@@ -101,14 +101,17 @@
|
|||||||
- 客户反馈修改(2026-10-12)
|
- 客户反馈修改(2026-10-12)
|
||||||
- .runAndExtendWithFaceDetections
|
- .runAndExtendWithFaceDetections
|
||||||
- 第三轮反馈:PSD 对齐、验收及上线记录
|
- 第三轮反馈:PSD 对齐、验收及上线记录
|
||||||
- login-performance.mjs
|
- .forwardInput
|
||||||
- production-loop.mjs
|
- .run
|
||||||
- PredictSingleAgeAndGenderWithFaceAlignmentTask
|
- PredictSingleAgeAndGenderWithFaceAlignmentTask
|
||||||
- PredictSingleFaceExpressionsWithFaceAlignmentTask
|
- PredictSingleFaceExpressionsWithFaceAlignmentTask
|
||||||
- DetectSingleFaceLandmarksTask
|
- DetectSingleFaceLandmarksTask
|
||||||
- extractAllFacesAndComputeResults
|
- extractAllFacesAndComputeResults
|
||||||
|
- .toBatchTensor
|
||||||
|
- TinyYolov2
|
||||||
- 第四轮反馈/傅艳NEW与项思炼的会话 2026年10月12日.md
|
- 第四轮反馈/傅艳NEW与项思炼的会话 2026年10月12日.md
|
||||||
- 第三轮反馈20261012/傅艳NEW与项思炼的会话 2026年10月12日.md
|
- 第三轮反馈20261012/傅艳NEW与项思炼的会话 2026年10月12日.md
|
||||||
|
- rescaleAndNormalize
|
||||||
|
|
||||||
## God Nodes (most connected - your core abstractions)
|
## God Nodes (most connected - your core abstractions)
|
||||||
1. `__awaiter()` - 59 edges
|
1. `__awaiter()` - 59 edges
|
||||||
@@ -137,11 +140,11 @@
|
|||||||
## Import Cycles
|
## Import Cycles
|
||||||
- None detected.
|
- None detected.
|
||||||
|
|
||||||
## Communities (105 total, 23 thin omitted)
|
## Communities (108 total, 24 thin omitted)
|
||||||
|
|
||||||
### Community 0 - "face-api.js"
|
### Community 0 - "face-api.js"
|
||||||
Cohesion: 0.02
|
Cohesion: 0.02
|
||||||
Nodes (36): cn(), computeReshapedDimensions(), createBrowserEnv(), createFileSystem(), createNodejsEnv(), Dimensions(), dr(), en() (+28 more)
|
Nodes (34): boxPredictionLayer(), cn(), createBrowserEnv(), createFileSystem(), createNodejsEnv(), decodeBoxesLayer(), depthwiseConvLayer(), dr() (+26 more)
|
||||||
|
|
||||||
### Community 1 - "线上闭环测试(不含真实微信授权)"
|
### Community 1 - "线上闭环测试(不含真实微信授权)"
|
||||||
Cohesion: 0.25
|
Cohesion: 0.25
|
||||||
@@ -159,33 +162,29 @@ Nodes (45): acneGrade(), buildViewModel(), calcAcne(), calcContour(), calcSens()
|
|||||||
Cohesion: 0.17
|
Cohesion: 0.17
|
||||||
Nodes (10): assert, context, face, fs, geometry, original, path, source (+2 more)
|
Nodes (10): assert, context, face, fs, geometry, original, path, source (+2 more)
|
||||||
|
|
||||||
### Community 5 - "n"
|
### Community 5 - "r"
|
||||||
Cohesion: 0.11
|
Cohesion: 0.14
|
||||||
Nodes (44): a(), ae(), bf(), cf(), d(), da(), drawContour(), dt() (+36 more)
|
Nodes (34): a(), ae(), bf(), cf(), d(), drawContour(), dt(), ea() (+26 more)
|
||||||
|
|
||||||
### Community 6 - "extractFaceTensors"
|
### Community 6 - "extractFaces"
|
||||||
Cohesion: 0.10
|
Cohesion: 0.10
|
||||||
Nodes (9): bgrToRgbTensor(), Box(), DetectAllFaceLandmarksTask(), extendWithFaceLandmarks(), extractFaceTensors(), FaceLandmarks(), isDimensions(), minBbox() (+1 more)
|
Nodes (15): bgrToRgbTensor(), Box(), DetectAllFaceLandmarksTask(), Dimensions(), extendWithFaceLandmarks(), extractFaces(), extractFaceTensors(), imageTensorToCanvas() (+7 more)
|
||||||
|
|
||||||
### Community 7 - ".loadFromDisk"
|
### Community 7 - "customer-feedback-third.mjs"
|
||||||
Cohesion: 0.25
|
Cohesion: 0.14
|
||||||
Nodes (4): ComposableTask(), getModelUris(), Gf(), TinyFaceDetector()
|
Nodes (9): actualLines(), errors, guideLines, manifest, rect(), requests, root, widths (+1 more)
|
||||||
|
|
||||||
### Community 8 - "admin.js"
|
### Community 8 - "admin.js"
|
||||||
Cohesion: 0.20
|
Cohesion: 0.20
|
||||||
Nodes (29): ageText(), api(), bind(), captureQualityHtml(), closeDetail(), collectFilters(), dimsHtml(), doRetry() (+21 more)
|
Nodes (29): ageText(), api(), bind(), captureQualityHtml(), closeDetail(), collectFilters(), dimsHtml(), doRetry() (+21 more)
|
||||||
|
|
||||||
### Community 9 - "__awaiter"
|
### Community 9 - "__awaiter"
|
||||||
Cohesion: 0.13
|
Cohesion: 0.14
|
||||||
Nodes (13): __awaiter(), extendWithFaceExpressions(), extractSingleFaceAndComputeResult(), fetchImage(), fetchJson(), fetchNetWeights(), fetchOrThrow(), __generator() (+5 more)
|
Nodes (13): __awaiter(), ComposableTask(), fetchImage(), fetchJson(), fetchNetWeights(), fetchOrThrow(), __generator(), getModelUris() (+5 more)
|
||||||
|
|
||||||
### Community 10 - "FaceLandmarks68"
|
|
||||||
Cohesion: 0.19
|
|
||||||
Nodes (3): FaceLandmarks5(), FaceLandmarks68(), getCenterPoint()
|
|
||||||
|
|
||||||
### Community 11 - "lib/accounts.js"
|
### Community 11 - "lib/accounts.js"
|
||||||
Cohesion: 0.17
|
Cohesion: 0.06
|
||||||
Nodes (20): atomic(), body(), cookie(), cookies(), crypto, fs, json(), login() (+12 more)
|
Nodes (37): atomic(), body(), cookie(), cookies(), crypto, fs, json(), login() (+29 more)
|
||||||
|
|
||||||
### Community 12 - "server.js"
|
### Community 12 - "server.js"
|
||||||
Cohesion: 0.08
|
Cohesion: 0.08
|
||||||
@@ -195,17 +194,17 @@ Nodes (52): accounts, appendRecord(), callFacepp(), CaptureDiagnostics, CRED, cr
|
|||||||
Cohesion: 0.12
|
Cohesion: 0.12
|
||||||
Nodes (15): files, analyze-fail, analyzing, countdown-321, hint-far, hint-front, hint-hold, hint-near (+7 more)
|
Nodes (15): files, analyze-fail, analyzing, countdown-321, hint-far, hint-front, hint-hold, hint-near (+7 more)
|
||||||
|
|
||||||
### Community 15 - "extractFaces"
|
### Community 15 - "getEnv"
|
||||||
Cohesion: 0.19
|
Cohesion: 0.27
|
||||||
Nodes (18): awaitMediaLoaded(), bufferToImage(), createCanvas(), createCanvasFromMedia(), extractFaces(), extractImagePatches(), getContext2dOrThrow(), getEnv() (+10 more)
|
Nodes (14): awaitMediaLoaded(), bufferToImage(), createCanvas(), createCanvasFromMedia(), extractImagePatches(), getContext2dOrThrow(), getEnv(), getMediaDimensions() (+6 more)
|
||||||
|
|
||||||
### Community 16 - "巨子测肤 · 1'me 在线肌肤测试 — UI 设计规范"
|
### Community 16 - "巨子测肤 · 1'me 在线肌肤测试 — UI 设计规范"
|
||||||
Cohesion: 0.15
|
Cohesion: 0.15
|
||||||
Nodes (12): 1. 基准与尺寸换算, 2. 色彩规范, 3. 字体规范, 4. 组件切图(assets/svg/), 5. 图片素材(assets/images/,共 15 张), 6. 页面清单(design/ 下有整屏 PNG 预览), 7. 目录结构, 8. 还原建议 (+4 more)
|
Nodes (12): 1. 基准与尺寸换算, 2. 色彩规范, 3. 字体规范, 4. 组件切图(assets/svg/), 5. 图片素材(assets/images/,共 15 张), 6. 页面清单(design/ 下有整屏 PNG 预览), 7. 目录结构, 8. 还原建议 (+4 more)
|
||||||
|
|
||||||
### Community 17 - "k"
|
### Community 17 - "k"
|
||||||
Cohesion: 0.17
|
Cohesion: 0.15
|
||||||
Nodes (12): b(), ba(), gn(), k(), kn(), ne(), tt(), wo() (+4 more)
|
Nodes (15): b(), ba(), ca(), da(), fa(), k(), ne(), pa() (+7 more)
|
||||||
|
|
||||||
### Community 18 - "1'me 在线肌肤测试 H5"
|
### Community 18 - "1'me 在线肌肤测试 H5"
|
||||||
Cohesion: 0.13
|
Cohesion: 0.13
|
||||||
@@ -220,8 +219,8 @@ Cohesion: 0.40
|
|||||||
Nodes (9): build_case1(), build_case2(), build_truth(), col(), dump(), main(), parse_value(), set_path() (+1 more)
|
Nodes (9): build_case1(), build_case2(), build_truth(), col(), dump(), main(), parse_value(), set_path() (+1 more)
|
||||||
|
|
||||||
### Community 21 - "disposeUnusedWeightTensors"
|
### Community 21 - "disposeUnusedWeightTensors"
|
||||||
Cohesion: 0.14
|
Cohesion: 0.09
|
||||||
Nodes (23): disposeUnusedWeightTensors(), extractorsFactory$3(), extractorsFactory$5(), extractorsFactory$7(), extractorsFactory$9(), extractParamsFromWeigthMap(), extractParamsFromWeigthMap$1(), extractParamsFromWeigthMap$2() (+15 more)
|
Nodes (24): disposeUnusedWeightTensors(), extractorsFactory$3(), extractorsFactory$5(), extractorsFactory$7(), extractorsFactory$9(), extractParamsFromWeigthMap(), extractParamsFromWeigthMap$1(), extractParamsFromWeigthMap$2() (+16 more)
|
||||||
|
|
||||||
### Community 23 - "facepp-skinanalyze(旷视皮肤分析专业版调用技能)"
|
### Community 23 - "facepp-skinanalyze(旷视皮肤分析专业版调用技能)"
|
||||||
Cohesion: 0.20
|
Cohesion: 0.20
|
||||||
@@ -236,8 +235,8 @@ Cohesion: 0.20
|
|||||||
Nodes (16): _arrayLikeToArray(), _arrayWithHoles(), _arrayWithoutHoles(), _classCallCheck(), _createClass(), _defineProperties(), h(), _iterableToArray() (+8 more)
|
Nodes (16): _arrayLikeToArray(), _arrayWithHoles(), _arrayWithoutHoles(), _classCallCheck(), _createClass(), _defineProperties(), h(), _iterableToArray() (+8 more)
|
||||||
|
|
||||||
### Community 26 - ".extractWeights"
|
### Community 26 - ".extractWeights"
|
||||||
Cohesion: 0.13
|
Cohesion: 0.12
|
||||||
Nodes (15): createFaceDetectionNet(), createFaceRecognitionNet(), createMtcnn(), createSsdMobilenetv1(), createTinyFaceDetector(), createTinyYolov2(), extractFCParamsFactory(), extractorsFactory$2() (+7 more)
|
Nodes (16): createFaceDetectionNet(), createFaceRecognitionNet(), createMtcnn(), createSsdMobilenetv1(), createTinyFaceDetector(), createTinyYolov2(), extractFCParamsFactory(), extractorsFactory$2() (+8 more)
|
||||||
|
|
||||||
### Community 27 - "gen_voice.py"
|
### Community 27 - "gen_voice.py"
|
||||||
Cohesion: 0.30
|
Cohesion: 0.30
|
||||||
@@ -245,7 +244,7 @@ Nodes (11): ndarray, Path, gen_countdown(), main(), normalize_clip(), 倒计时
|
|||||||
|
|
||||||
### Community 28 - "C"
|
### Community 28 - "C"
|
||||||
Cohesion: 0.09
|
Cohesion: 0.09
|
||||||
Nodes (29): ao(), C(), cd(), cl(), co(), Do(), eo(), fo() (+21 more)
|
Nodes (34): ao(), Bo(), C(), cd(), cl(), co(), Do(), eo() (+26 more)
|
||||||
|
|
||||||
### Community 29 - "face-api.js 本地化依赖(h5/vendor/faceapi/)"
|
### Community 29 - "face-api.js 本地化依赖(h5/vendor/faceapi/)"
|
||||||
Cohesion: 0.29
|
Cohesion: 0.29
|
||||||
@@ -260,8 +259,8 @@ Cohesion: 0.60
|
|||||||
Nodes (4): main(), 递归缩放 result 内全部坐标:{left,top,width,height} 矩形与 {x,y} 点,与原数据同为整数。, scale_coords(), to_data_url()
|
Nodes (4): main(), 递归缩放 result 内全部坐标:{left,top,width,height} 矩形与 {x,y} 点,与原数据同为整数。, scale_coords(), to_data_url()
|
||||||
|
|
||||||
### Community 35 - "customer-feedback.js"
|
### Community 35 - "customer-feedback.js"
|
||||||
Cohesion: 0.06
|
Cohesion: 0.11
|
||||||
Nodes (27): alternate, approved, assert, crop, details, excellent, fs, model (+19 more)
|
Nodes (18): alternate, approved, assert, crop, details, excellent, fs, model (+10 more)
|
||||||
|
|
||||||
### Community 37 - "UI 外发版 10.09 图片资源"
|
### Community 37 - "UI 外发版 10.09 图片资源"
|
||||||
Cohesion: 0.40
|
Cohesion: 0.40
|
||||||
@@ -272,16 +271,16 @@ Cohesion: 0.40
|
|||||||
Nodes (4): 1meAI测肤旷视UI问题反馈, UI交互界面调整, 交互, **设计**
|
Nodes (4): 1meAI测肤旷视UI问题反馈, UI交互界面调整, 交互, **设计**
|
||||||
|
|
||||||
### Community 40 - "第四轮反馈修改与验收"
|
### Community 40 - "第四轮反馈修改与验收"
|
||||||
Cohesion: 0.25
|
Cohesion: 0.22
|
||||||
Nodes (7): PSD 来源, 前端参数及限制, 后台校准留痕, 已确认并实现, 皱纹(紧塑力)原文, 第四轮反馈修改与验收, 验证
|
Nodes (8): PSD 来源, 前端参数及限制, 后台校准留痕, 已确认并实现, 生产部署及只读验收, 皱纹(紧塑力)原文, 第四轮反馈修改与验收, 验证
|
||||||
|
|
||||||
### Community 42 - "layer_at"
|
### Community 42 - "layer_at"
|
||||||
Cohesion: 0.18
|
Cohesion: 0.18
|
||||||
Nodes (11): list, bounds(), layer_at(), main(), save_image(), composite(), main(), sha256() (+3 more)
|
Nodes (11): list, bounds(), layer_at(), main(), save_image(), composite(), main(), sha256() (+3 more)
|
||||||
|
|
||||||
### Community 43 - "normalize"
|
### Community 43 - "convLayer"
|
||||||
Cohesion: 0.05
|
Cohesion: 0.23
|
||||||
Nodes (37): boxPredictionLayer(), conv(), conv$1(), convDown(), convLayer(), convLayer$1(), convNoRelu(), convWithBatchNorm() (+29 more)
|
Nodes (11): convLayer(), convWithBatchNorm(), depthwiseSeparableConv$1(), fullyConnectedLayer(), leaky(), ONet(), PNet(), prelu() (+3 more)
|
||||||
|
|
||||||
### Community 44 - "start-local.sh"
|
### Community 44 - "start-local.sh"
|
||||||
Cohesion: 0.50
|
Cohesion: 0.50
|
||||||
@@ -304,8 +303,8 @@ Cohesion: 0.11
|
|||||||
Nodes (17): 1. 结论和依据, 2. 统一比较口径, 3. 逐页差异和调整内容, 4. 报告数据如何接到新 UI, 5. 登录与“我的报告”的真实能力缺口, 6. 原稿中需要整理的内容, 7. 实施顺序与交付物, 8. 验收定义 (+9 more)
|
Nodes (17): 1. 结论和依据, 2. 统一比较口径, 3. 逐页差异和调整内容, 4. 报告数据如何接到新 UI, 5. 登录与“我的报告”的真实能力缺口, 6. 原稿中需要整理的内容, 7. 实施顺序与交付物, 8. 验收定义 (+9 more)
|
||||||
|
|
||||||
### Community 55 - "i"
|
### Community 55 - "i"
|
||||||
Cohesion: 0.10
|
Cohesion: 0.09
|
||||||
Nodes (24): bn(), ca(), dn(), ee(), Ef(), et(), fa(), fn() (+16 more)
|
Nodes (22): bn(), dn(), ee(), Ef(), et(), fn(), i(), je() (+14 more)
|
||||||
|
|
||||||
### Community 56 - "report-ui.js"
|
### Community 56 - "report-ui.js"
|
||||||
Cohesion: 0.50
|
Cohesion: 0.50
|
||||||
@@ -316,12 +315,8 @@ Cohesion: 0.60
|
|||||||
Nodes (5): diffCtx(), loadJSON(), main(), okNum(), okStr()
|
Nodes (5): diffCtx(), loadJSON(), main(), okNum(), okStr()
|
||||||
|
|
||||||
### Community 58 - ".dispose"
|
### Community 58 - ".dispose"
|
||||||
Cohesion: 0.16
|
Cohesion: 0.17
|
||||||
Nodes (12): extractBoundingBoxes(), FaceRecognitionNet(), getSizesForScale(), nonMaxSuppression(), normalize$1(), pyramidDown(), rescaleAndNormalize(), scale() (+4 more)
|
Nodes (12): computeReshapedDimensions(), extractBoundingBoxes(), iou(), isEven(), nonMaxSuppression(), nonMaxSuppression$1(), pyramidDown(), scale() (+4 more)
|
||||||
|
|
||||||
### Community 61 - "FaceProcessor"
|
|
||||||
Cohesion: 0.24
|
|
||||||
Nodes (3): extractParams$1(), FaceLandmark68TinyNet(), FaceProcessor()
|
|
||||||
|
|
||||||
### Community 62 - "提交前 Review(2026-10-11)"
|
### Community 62 - "提交前 Review(2026-10-11)"
|
||||||
Cohesion: 0.40
|
Cohesion: 0.40
|
||||||
@@ -339,29 +334,33 @@ Nodes (5): browser(), init(), read(), rememberKind(), request()
|
|||||||
Cohesion: 0.22
|
Cohesion: 0.22
|
||||||
Nodes (7): 公网服务器配置, 公网真机验收清单, 反向代理与后台保护, 已完成的链路, 微信登录接入与公网部署说明, 数据、迁移与备份, 本机开发环境限制(不代表线上状态)
|
Nodes (7): 公网服务器配置, 公网真机验收清单, 反向代理与后台保护, 已完成的链路, 微信登录接入与公网部署说明, 数据、迁移与备份, 本机开发环境限制(不代表线上状态)
|
||||||
|
|
||||||
### Community 66 - "report-persistence.mjs"
|
### Community 66 - ".div"
|
||||||
Cohesion: 0.29
|
Cohesion: 0.21
|
||||||
Nodes (6): child, dataRoot, fx, h5, ReportUI, require
|
Nodes (4): FaceLandmark68NetBase(), FaceLandmarks5(), getCenterPoint(), Point()
|
||||||
|
|
||||||
### Community 68 - "analyze-timeout.js"
|
### Community 68 - "analyze-timeout.js"
|
||||||
Cohesion: 0.20
|
Cohesion: 0.20
|
||||||
Nodes (7): assert, end, fs, path, source, start, vm
|
Nodes (7): assert, end, fs, path, source, start, vm
|
||||||
|
|
||||||
### Community 70 - "extractConvParamsFactory"
|
### Community 70 - "extractConvParamsFactory"
|
||||||
Cohesion: 0.28
|
Cohesion: 0.20
|
||||||
Nodes (8): extractConvParamsFactory(), extractorsFactory(), extractorsFactory$1(), extractorsFactory$6(), extractParams(), extractParams$2(), extractParams$6(), extractSeparableConvParamsFactory()
|
Nodes (9): extractConvParamsFactory(), extractorsFactory(), extractorsFactory$1(), extractorsFactory$6(), extractParams(), extractParams$2(), extractParams$6(), extractParamsTiny() (+1 more)
|
||||||
|
|
||||||
### Community 76 - ".detect"
|
### Community 71 - ".predictAgeAndGender"
|
||||||
Cohesion: 0.13
|
Cohesion: 0.28
|
||||||
Nodes (8): iou(), isEven(), NetInput(), nonMaxSuppression$1(), sigmoid(), TinyYolov2(), TinyYolov2Base(), validateConfig()
|
Nodes (4): extendWithAge(), extendWithGender(), PredictAllAgeAndGenderTask(), PredictSingleAgeAndGenderTask()
|
||||||
|
|
||||||
|
### Community 76 - "TinyYolov2Base"
|
||||||
|
Cohesion: 0.40
|
||||||
|
Nodes (3): sigmoid(), TinyYolov2Base(), validateConfig()
|
||||||
|
|
||||||
### Community 77 - "drawFaceExpressions"
|
### Community 77 - "drawFaceExpressions"
|
||||||
Cohesion: 0.21
|
Cohesion: 0.22
|
||||||
Nodes (9): DrawBox(), drawDetections(), drawFaceExpressions(), DrawFaceLandmarks(), FaceExpressions(), isWithFaceDetection(), isWithFaceExpressions(), isWithFaceLandmarks() (+1 more)
|
Nodes (8): DrawBox(), drawDetections(), drawFaceExpressions(), DrawFaceLandmarks(), FaceExpressions(), isWithFaceDetection(), isWithFaceExpressions(), isWithFaceLandmarks()
|
||||||
|
|
||||||
### Community 78 - "t"
|
### Community 78 - "n"
|
||||||
Cohesion: 0.12
|
Cohesion: 0.10
|
||||||
Nodes (24): be(), bi(), Bo(), ce(), de(), e(), er(), fe() (+16 more)
|
Nodes (33): be(), bi(), ce(), de(), e(), er(), fe(), Ie() (+25 more)
|
||||||
|
|
||||||
### Community 79 - "登录反馈与加载优化(2026-10-12)"
|
### Community 79 - "登录反馈与加载优化(2026-10-12)"
|
||||||
Cohesion: 0.25
|
Cohesion: 0.25
|
||||||
@@ -375,9 +374,9 @@ Nodes (6): 初次部署时的凭据查找记录(现已由用户提供), 初
|
|||||||
Cohesion: 0.60
|
Cohesion: 0.60
|
||||||
Nodes (4): api(), base, callback(), start()
|
Nodes (4): api(), base, callback(), start()
|
||||||
|
|
||||||
### Community 82 - "wechat-browser.mjs"
|
### Community 82 - ".forwardInput"
|
||||||
Cohesion: 0.22
|
Cohesion: 0.31
|
||||||
Nodes (6): createAccounts, h5, ReportUI, require, root, SkinScore
|
Nodes (6): conv(), denseBlock4(), depthwiseSeparableConv(), mainBlock(), reductionBlock(), TinyXception()
|
||||||
|
|
||||||
### Community 83 - "10.09 新版 H5 实施与验收"
|
### Community 83 - "10.09 新版 H5 实施与验收"
|
||||||
Cohesion: 0.29
|
Cohesion: 0.29
|
||||||
@@ -391,6 +390,10 @@ Nodes (6): 后续真机确认与体验优化, 微信登录联调:2026-10-12,
|
|||||||
Cohesion: 0.22
|
Cohesion: 0.22
|
||||||
Nodes (9): assert, create, fs, http, os, path, ReportUI, SkinScore (+1 more)
|
Nodes (9): assert, create, fs, http, os, path, ReportUI, SkinScore (+1 more)
|
||||||
|
|
||||||
|
### Community 86 - "normalize"
|
||||||
|
Cohesion: 0.20
|
||||||
|
Nodes (5): denseBlock3(), FaceFeatureExtractor(), normalize(), __spreadArrays(), TinyFaceFeatureExtractor()
|
||||||
|
|
||||||
### Community 87 - "产品推荐规则:肤龄基准与边界调整"
|
### Community 87 - "产品推荐规则:肤龄基准与边界调整"
|
||||||
Cohesion: 0.33
|
Cohesion: 0.33
|
||||||
Nodes (6): 产品推荐规则:肤龄基准与边界调整, 决策顺序, 后台与前端一致性, 实施与验证范围, 已明确的要求, 已确认的三个条件
|
Nodes (6): 产品推荐规则:肤龄基准与边界调整, 决策顺序, 后台与前端一致性, 实施与验证范围, 已明确的要求, 已确认的三个条件
|
||||||
@@ -408,34 +411,42 @@ Cohesion: 0.33
|
|||||||
Nodes (5): 公网部署与复测, 客户反馈修改(2026-10-12), 皱纹数据说明, 逐项处理, 验证
|
Nodes (5): 公网部署与复测, 客户反馈修改(2026-10-12), 皱纹数据说明, 逐项处理, 验证
|
||||||
|
|
||||||
### Community 93 - ".runAndExtendWithFaceDetections"
|
### Community 93 - ".runAndExtendWithFaceDetections"
|
||||||
Cohesion: 0.21
|
Cohesion: 0.19
|
||||||
Nodes (7): allFacesMtcnn(), allFacesSsdMobilenetv1(), allFacesTinyYolov2(), detectAllFaces(), DetectAllFacesTask(), DetectSingleFaceTask(), extendWithFaceDetection()
|
Nodes (8): allFacesMtcnn(), allFacesSsdMobilenetv1(), allFacesTinyYolov2(), detectAllFaces(), DetectAllFacesTask(), DetectSingleFaceTask(), extendWithFaceDetection(), resizeResults()
|
||||||
|
|
||||||
### Community 94 - "第三轮反馈:PSD 对齐、验收及上线记录"
|
### Community 94 - "第三轮反馈:PSD 对齐、验收及上线记录"
|
||||||
Cohesion: 0.33
|
Cohesion: 0.33
|
||||||
Nodes (5): 原稿与导出可追溯性, 已完成, 本地验证, 生产部署及只读验收, 第三轮反馈:PSD 对齐、验收及上线记录
|
Nodes (5): 原稿与导出可追溯性, 已完成, 本地验证, 生产部署及只读验收, 第三轮反馈:PSD 对齐、验收及上线记录
|
||||||
|
|
||||||
### Community 96 - "production-loop.mjs"
|
### Community 95 - ".forwardInput"
|
||||||
Cohesion: 0.50
|
Cohesion: 0.48
|
||||||
Nodes (3): artifacts, errors, samples
|
Nodes (6): conv$1(), convDown(), convLayer$1(), convNoRelu(), residual(), residualDown()
|
||||||
|
|
||||||
|
### Community 96 - ".run"
|
||||||
|
Cohesion: 0.29
|
||||||
|
Nodes (3): extendWithFaceExpressions(), PredictAllFaceExpressionsTask(), PredictSingleFaceExpressionsTask()
|
||||||
|
|
||||||
### Community 100 - "extractAllFacesAndComputeResults"
|
### Community 100 - "extractAllFacesAndComputeResults"
|
||||||
Cohesion: 0.12
|
Cohesion: 0.11
|
||||||
Nodes (8): ComputeAllFaceDescriptorsTask(), ComputeSingleFaceDescriptorTask(), extendWithAge(), extendWithFaceDescriptor(), extendWithGender(), extractAllFacesAndComputeResults(), PredictAllAgeAndGenderTask(), PredictSingleAgeAndGenderTask()
|
Nodes (8): ComputeAllFaceDescriptorsTask(), ComputeSingleFaceDescriptorTask(), extendWithFaceDescriptor(), extractAllFacesAndComputeResults(), extractSingleFaceAndComputeResult(), FaceLandmarks(), FaceRecognitionNet(), minBbox()
|
||||||
|
|
||||||
|
### Community 107 - "rescaleAndNormalize"
|
||||||
|
Cohesion: 0.67
|
||||||
|
Nodes (3): getSizesForScale(), normalize$1(), rescaleAndNormalize()
|
||||||
|
|
||||||
## Knowledge Gaps
|
## Knowledge Gaps
|
||||||
- **284 isolated node(s):** `source`, `document_size`, `pages`, `assets`, `layers` (+279 more)
|
- **285 isolated node(s):** `source`, `document_size`, `pages`, `assets`, `layers` (+280 more)
|
||||||
These have ≤1 connection - possible missing edges or undocumented components.
|
These have ≤1 connection - possible missing edges or undocumented components.
|
||||||
- **23 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
|
- **24 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
|
||||||
|
|
||||||
## Suggested Questions
|
## Suggested Questions
|
||||||
_Questions this graph is uniquely positioned to answer:_
|
_Questions this graph is uniquely positioned to answer:_
|
||||||
|
|
||||||
- **Why does `v()` connect `n` to `report-ui.js`, `face-api.js`, `app.js`, `C`?**
|
- **Why does `v()` connect `r` to `report-ui.js`, `face-api.js`, `app.js`, `C`?**
|
||||||
_High betweenness centrality (0.069) - this node is a cross-community bridge._
|
_High betweenness centrality (0.069) - this node is a cross-community bridge._
|
||||||
- **Why does `k()` connect `k` to `face-api.js`, `app.js`, `n`, `lib/accounts.js`, `t`, `i`?**
|
- **Why does `k()` connect `k` to `face-api.js`, `app.js`, `r`, `lib/accounts.js`, `n`, `C`?**
|
||||||
_High betweenness centrality (0.063) - this node is a cross-community bridge._
|
_High betweenness centrality (0.063) - this node is a cross-community bridge._
|
||||||
- **Why does `fill()` connect `report-ui.js` to `n`?**
|
- **Why does `fill()` connect `report-ui.js` to `r`?**
|
||||||
_High betweenness centrality (0.055) - this node is a cross-community bridge._
|
_High betweenness centrality (0.055) - this node is a cross-community bridge._
|
||||||
- **Are the 24 inferred relationships involving `n()` (e.g. with `newRecordId()` and `ae()`) actually correct?**
|
- **Are the 24 inferred relationships involving `n()` (e.g. with `newRecordId()` and `ae()`) actually correct?**
|
||||||
_`n()` has 24 INFERRED edges - model-reasoned connections that need verification._
|
_`n()` has 24 INFERRED edges - model-reasoned connections that need verification._
|
||||||
@@ -444,4 +455,4 @@ _Questions this graph is uniquely positioned to answer:_
|
|||||||
- **Are the 9 inferred relationships involving `i()` (e.g. with `da()` and `f()`) actually correct?**
|
- **Are the 9 inferred relationships involving `i()` (e.g. with `da()` and `f()`) actually correct?**
|
||||||
_`i()` has 9 INFERRED edges - model-reasoned connections that need verification._
|
_`i()` has 9 INFERRED edges - model-reasoned connections that need verification._
|
||||||
- **What connects `source`, `document_size`, `pages` to the rest of the system?**
|
- **What connects `source`, `document_size`, `pages` to the rest of the system?**
|
||||||
_284 weakly-connected nodes found - possible documentation gaps or missing edges._
|
_285 weakly-connected nodes found - possible documentation gaps or missing edges._
|
||||||
File diff suppressed because one or more lines are too long
+546
-524
File diff suppressed because it is too large
Load Diff
@@ -1625,8 +1625,8 @@
|
|||||||
"semantic_hash": ""
|
"semantic_hash": ""
|
||||||
},
|
},
|
||||||
"h5/test/customer-feedback.mjs": {
|
"h5/test/customer-feedback.mjs": {
|
||||||
"mtime": 1791807197.0309076,
|
"mtime": 1791807904.8348992,
|
||||||
"ast_hash": "03ab67670a7091048dcf8804e10830dc",
|
"ast_hash": "6bc22a957a60d361c8350bbaa60f63ca",
|
||||||
"semantic_hash": ""
|
"semantic_hash": ""
|
||||||
},
|
},
|
||||||
"feedback/\u5085\u8273NEW\u4e0e\u9879\u601d\u70bc\u7684\u4f1a\u8bdd 2026\u5e7410\u670812\u65e5/\u5085\u8273NEW\u4e0e\u9879\u601d\u70bc\u7684\u4f1a\u8bdd 2026\u5e7410\u670812\u65e5.md": {
|
"feedback/\u5085\u8273NEW\u4e0e\u9879\u601d\u70bc\u7684\u4f1a\u8bdd 2026\u5e7410\u670812\u65e5/\u5085\u8273NEW\u4e0e\u9879\u601d\u70bc\u7684\u4f1a\u8bdd 2026\u5e7410\u670812\u65e5.md": {
|
||||||
@@ -1680,8 +1680,8 @@
|
|||||||
"semantic_hash": ""
|
"semantic_hash": ""
|
||||||
},
|
},
|
||||||
"h5/test/customer-feedback-second.mjs": {
|
"h5/test/customer-feedback-second.mjs": {
|
||||||
"mtime": 1791792650.5151644,
|
"mtime": 1791807904.8348992,
|
||||||
"ast_hash": "2e340ce46b90c142341cb1f9636cb2e7",
|
"ast_hash": "169cedf52d8e32afc0c85cd68de2d0b1",
|
||||||
"semantic_hash": ""
|
"semantic_hash": ""
|
||||||
},
|
},
|
||||||
"docs/\u5ba2\u6237\u53cd\u9988\u7b2c\u4e8c\u6279\u4fee\u6539-2026-10-12.md": {
|
"docs/\u5ba2\u6237\u53cd\u9988\u7b2c\u4e8c\u6279\u4fee\u6539-2026-10-12.md": {
|
||||||
@@ -1815,8 +1815,8 @@
|
|||||||
"semantic_hash": ""
|
"semantic_hash": ""
|
||||||
},
|
},
|
||||||
"h5/test/capture-quality-browser.mjs": {
|
"h5/test/capture-quality-browser.mjs": {
|
||||||
"mtime": 1791807372.9989223,
|
"mtime": 1791807622.1829002,
|
||||||
"ast_hash": "a63b2d89c7a103dcd3d9e240f6423c4a",
|
"ast_hash": "e47f574f9e0254921d5f38be1e348b71",
|
||||||
"semantic_hash": ""
|
"semantic_hash": ""
|
||||||
},
|
},
|
||||||
"h5/test/customer-feedback-fourth.js": {
|
"h5/test/customer-feedback-fourth.js": {
|
||||||
@@ -1835,8 +1835,8 @@
|
|||||||
"semantic_hash": ""
|
"semantic_hash": ""
|
||||||
},
|
},
|
||||||
"docs/\u5ba2\u6237\u53cd\u9988\u7b2c\u56db\u8f6e\u4fee\u6539-2026-10-12.md": {
|
"docs/\u5ba2\u6237\u53cd\u9988\u7b2c\u56db\u8f6e\u4fee\u6539-2026-10-12.md": {
|
||||||
"mtime": 1791807372.9989223,
|
"mtime": 1791807904.8348992,
|
||||||
"ast_hash": "65ff64dac35dd7015251fb0ce0ab6617",
|
"ast_hash": "cf06ddce0c92fd331e89edfe663d0f81",
|
||||||
"semantic_hash": ""
|
"semantic_hash": ""
|
||||||
},
|
},
|
||||||
"feedback/\u7b2c\u56db\u8f6e\u53cd\u9988/\u5085\u8273NEW\u4e0e\u9879\u601d\u70bc\u7684\u4f1a\u8bdd 2026\u5e7410\u670812\u65e5.md": {
|
"feedback/\u7b2c\u56db\u8f6e\u53cd\u9988/\u5085\u8273NEW\u4e0e\u9879\u601d\u70bc\u7684\u4f1a\u8bdd 2026\u5e7410\u670812\u65e5.md": {
|
||||||
|
|||||||
@@ -10,7 +10,9 @@ const browser = await chromium.launch({ headless: true });
|
|||||||
try {
|
try {
|
||||||
const page = await browser.newPage({ viewport: { width: 375, height: 726 } });
|
const page = await browser.newPage({ viewport: { width: 375, height: 726 } });
|
||||||
page.setDefaultTimeout(60000);
|
page.setDefaultTimeout(60000);
|
||||||
const errors = []; page.on('pageerror', e => errors.push(e.message));
|
const errors = [], failedRequests = [];
|
||||||
|
page.on('pageerror', e => errors.push(e.message));
|
||||||
|
page.on('requestfailed', request => failedRequests.push({ path: new URL(request.url()).pathname, error: request.failure().errorText }));
|
||||||
await page.route('**/api/auth/session', route => route.fulfill({ json: { ok: true, user: { id: 'local-camera-fixture', kind: 'browser' } } }));
|
await page.route('**/api/auth/session', route => route.fulfill({ json: { ok: true, user: { id: 'local-camera-fixture', kind: 'browser' } } }));
|
||||||
for (const name of ['C3_180.jpg', 'C3_135.jpg', 'C3_-135.jpg']) {
|
for (const name of ['C3_180.jpg', 'C3_135.jpg', 'C3_-135.jpg']) {
|
||||||
const body = fs.readFileSync(fileURLToPath(new URL('../../reference/facepp-skinanalyze/examples/images/' + name, import.meta.url)));
|
const body = fs.readFileSync(fileURLToPath(new URL('../../reference/facepp-skinanalyze/examples/images/' + name, import.meta.url)));
|
||||||
@@ -54,12 +56,18 @@ try {
|
|||||||
try {
|
try {
|
||||||
await page.waitForFunction(() => window.faceapi && faceapi.nets.faceLandmark68Net.isLoaded && document.querySelector('#s-cam').classList.contains('cam-live'));
|
await page.waitForFunction(() => window.faceapi && faceapi.nets.faceLandmark68Net.isLoaded && document.querySelector('#s-cam').classList.contains('cam-live'));
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log(await page.evaluate(() => ({ status: document.querySelector('#cam-status').textContent, hint: document.querySelector('#cam-hint').textContent, toast: document.querySelector('#toast').textContent, width: document.querySelector('#cam-video').videoWidth, classes: document.querySelector('#s-cam').className, engine: !!window.faceapi })), errors);
|
console.log(await page.evaluate(() => ({ status: document.querySelector('#cam-status').textContent, hint: document.querySelector('#cam-hint').textContent, toast: document.querySelector('#toast').textContent, width: document.querySelector('#cam-video').videoWidth, classes: document.querySelector('#s-cam').className, engine: !!window.faceapi })), errors, failedRequests);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
assert.equal(await page.locator('#s-cam.cam-manual').count(), 0, 'real automatic pipeline, not manual bypass');
|
assert.equal(await page.locator('#s-cam.cam-manual').count(), 0, 'real automatic pipeline, not manual bypass');
|
||||||
await page.evaluate(() => {
|
await page.evaluate(() => {
|
||||||
window.__holdSamples = []; window.__hints = [];
|
window.__holdSamples = []; window.__hints = []; window.__evaluations = [];
|
||||||
|
const evaluate = CaptureQuality.evaluate;
|
||||||
|
CaptureQuality.evaluate = function(d, options) {
|
||||||
|
const result = evaluate(d, options);
|
||||||
|
window.__evaluations.push({ target: options.target, ok: result.ok, hint: result.hint });
|
||||||
|
return result;
|
||||||
|
};
|
||||||
const hold = CaptureQuality.hold;
|
const hold = CaptureQuality.hold;
|
||||||
CaptureQuality.hold = function(state, obs, now) {
|
CaptureQuality.hold = function(state, obs, now) {
|
||||||
const result = hold(state, obs, now);
|
const result = hold(state, obs, now);
|
||||||
@@ -79,11 +87,11 @@ try {
|
|||||||
ratio: window.__dbgRatio, faces: faces.map(d => ({ score: d.detection.score, pose: HeadPose.estimate(d.landmarks.positions, false), box: d.detection.box })), holds: window.__holdSamples, hints: window.__hints };
|
ratio: window.__dbgRatio, faces: faces.map(d => ({ score: d.detection.score, pose: HeadPose.estimate(d.landmarks.positions, false), box: d.detection.box })), holds: window.__holdSamples, hints: window.__hints };
|
||||||
}).then(value => JSON.stringify(value, null, 2)), errors); throw error;
|
}).then(value => JSON.stringify(value, null, 2)), errors); throw error;
|
||||||
}
|
}
|
||||||
await page.waitForTimeout(1000);
|
await page.waitForFunction(() => window.__evaluations.some(row => row.target === 'right' && !row.ok));
|
||||||
assert((await page.locator('#cam-step').textContent()).includes('2/3'), 'front photo cannot pass the side gate');
|
assert((await page.locator('#cam-step').textContent()).includes('2/3'), 'front photo cannot pass the side gate');
|
||||||
await page.evaluate(() => window.__cameraFixture.set('C3_135.jpg'));
|
await page.evaluate(() => window.__cameraFixture.set('C3_135.jpg'));
|
||||||
await page.waitForFunction(() => document.querySelector('#cam-step').textContent.includes('3/3'));
|
await page.waitForFunction(() => document.querySelector('#cam-step').textContent.includes('3/3'));
|
||||||
await page.waitForTimeout(800);
|
await page.waitForFunction(() => window.__evaluations.some(row => row.target === 'left' && !row.ok));
|
||||||
assert((await page.locator('#cam-step').textContent()).includes('3/3'), 'wrong-direction side cannot pass');
|
assert((await page.locator('#cam-step').textContent()).includes('3/3'), 'wrong-direction side cannot pass');
|
||||||
const sent = page.waitForRequest(r => r.url().endsWith('/api/skin-analyze'));
|
const sent = page.waitForRequest(r => r.url().endsWith('/api/skin-analyze'));
|
||||||
await page.evaluate(() => window.__cameraFixture.set('C3_-135.jpg'));
|
await page.evaluate(() => window.__cameraFixture.set('C3_-135.jpg'));
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ const artifacts = process.env.H5_ARTIFACT_DIR;
|
|||||||
const browser = await chromium.launch({ headless: true });
|
const browser = await chromium.launch({ headless: true });
|
||||||
try {
|
try {
|
||||||
const page = await browser.newPage({ viewport: { width: 375, height: 726 }, isMobile: true, hasTouch: true });
|
const page = await browser.newPage({ viewport: { width: 375, height: 726 }, isMobile: true, hasTouch: true });
|
||||||
|
page.setDefaultTimeout(60000); // Match the production-facing third-round suite.
|
||||||
const errors = [], requests = [];
|
const errors = [], requests = [];
|
||||||
page.on('pageerror', e => errors.push(e.message));
|
page.on('pageerror', e => errors.push(e.message));
|
||||||
page.on('request', r => requests.push(new URL(r.url()).pathname));
|
page.on('request', r => requests.push(new URL(r.url()).pathname));
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ const base = process.env.H5_BASE_URL || 'http://127.0.0.1:8080/';
|
|||||||
const browser = await chromium.launch({ headless: true });
|
const browser = await chromium.launch({ headless: true });
|
||||||
try {
|
try {
|
||||||
const page = await browser.newPage({ viewport: { width: 375, height: 726 }, isMobile: true, hasTouch: true });
|
const page = await browser.newPage({ viewport: { width: 375, height: 726 }, isMobile: true, hasTouch: true });
|
||||||
|
page.setDefaultTimeout(60000); // Cold public-site font downloads can exceed 30s.
|
||||||
const errors = [];
|
const errors = [];
|
||||||
page.on('pageerror', e => errors.push(e.message));
|
page.on('pageerror', e => errors.push(e.message));
|
||||||
await page.goto(base + '?mock=1&screen=report');
|
await page.goto(base + '?mock=1&screen=report');
|
||||||
|
|||||||
Reference in New Issue
Block a user