// ==UserScript== // @name GL人脸五点检测器【极速切帧版|几何全校验】 // @namespace http://tampermonkey.net/ // @version 3.8 // @description 超低延迟极速响应快速切帧;轻量化运算不卡顿;完整全套校验规则 // @match https://ads.aligenie.com/* // @grant none // @run-at document-start // @license MIT // ==/UserScript== (function () { 'use strict'; const frameCache = {}; let currentRecordId = null; let panelDom = null; let contentDom = null; // 验收规定5个固定五官点位 const STANDARD_KP = ["Right Eye","Left Eye","Nose Tip","Right Mouth","Left Mouth"]; let autoCheckTimer = null; // 悬浮面板初始化 function initPanel() { if (panelDom && document.body.contains(panelDom)) return; panelDom = document.createElement('div'); panelDom.style.cssText = ` position: fixed; z-index: 999999999; width: 420px; left:15px; top:70px; background:#fff; border:1px solid #d1d5db; border-radius:10px; box-shadow:0 4px 20px rgba(0,0,0.15); font-family:"Microsoft YaHei"; font-size:13px; overflow:hidden; `; const header = document.createElement('div'); header.style.cssText = `display:flex;gap:6px;align-items:center;padding:8px 12px;background:#f3f4f6;border-bottom:1px solid #ddd;cursor:move`; header.innerHTML = `GL人脸五点‑极速校验`; const btnWrap = document.createElement('div'); btnWrap.style.display = 'flex'; const refreshBtn = makeBtn("↻", ()=>runCheck()); const closeBtn = makeBtn("✕", ()=>panelDom.remove()); btnWrap.append(refreshBtn, closeBtn); header.appendChild(btnWrap); panelDom.append(header); contentDom = document.createElement('div'); contentDom.style.padding = "12px"; contentDom.style.maxHeight = "480px"; contentDom.style.overflowY = "auto"; panelDom.append(contentDom); // 窗口拖拽逻辑 let drag = false, ox, oy; header.onmousedown = e=>{ drag = true; const r = panelDom.getBoundingClientRect(); ox = e.clientX - r.left; oy = e.clientY - r.top; document.onmousemove = ev=>{ panelDom.style.left = (ev.clientX - ox)+'px'; panelDom.style.top = (ev.clientY - oy)+'px'; } document.onmouseup = ()=>{drag=false;document.onmousemove=null} } document.body.appendChild(panelDom); } function makeBtn(text, click){ const s = document.createElement('span'); s.innerText=text; s.style.cssText = `width:26px;height:26px;border-radius:6px;background:#e5e7eb;display:flex;align-items:center;justify-content:center;cursor:pointer;font-weight:bold`; s.onclick = click; return s; } // 极速防抖 60ms 无滞后 function autoRunCheck() { clearTimeout(autoCheckTimer); autoCheckTimer = setTimeout(runCheck, 60); } // 轻量化校验核心 function runCheck(){ initPanel(); if(!currentRecordId || !frameCache[currentRecordId]){ contentDom.innerHTML = `暂无帧缓存,等待加载数据`; return; } const frameData = frameCache[currentRecordId]; let workObj; try{ workObj = JSON.parse(frameData.workResult); }catch{ contentDom.innerHTML = `标注数据解析失败`; return; } // 忽略帧直接跳过运算 if(workObj?.labels?.invalid === "true"){ contentDom.innerHTML = `