添加统计请求的功能
This commit is contained in:
@@ -130,6 +130,7 @@ async function submitTest() {
|
||||
const file = fileInput.files[0];
|
||||
if (!file) { setStatus('请先选择一张图片', 'error'); return; }
|
||||
|
||||
const _reqStart = performance.now();
|
||||
|
||||
const btn = $('submitBtn');
|
||||
btn.disabled = true;
|
||||
@@ -149,21 +150,23 @@ async function submitTest() {
|
||||
try {
|
||||
const resp = await fetch(API_BASE + '/api/v1/face/measure', { method: 'POST', body: form });
|
||||
const json = await resp.json();
|
||||
const _elapsed = ((performance.now() - _reqStart) / 1000).toFixed(2);
|
||||
|
||||
$('jsonContent').textContent = JSON.stringify(json, null, 2);
|
||||
$('resultsArea').classList.remove('hidden');
|
||||
|
||||
if (json.code === 0) {
|
||||
setStatus('✅ 请求成功 — request_id: ' + json.request_id, 'success');
|
||||
setStatus('✅ 请求成功 (' + _elapsed + 's) — request_id: ' + json.request_id, 'success');
|
||||
showOverlay(json.data.annotated_image_url);
|
||||
renderMetrics(json.data);
|
||||
$('metricsBar').classList.remove('hidden');
|
||||
} else {
|
||||
setStatus('❌ 业务错误 — code: ' + json.code + ' message: ' + json.message, 'error');
|
||||
setStatus('❌ 业务错误 (' + _elapsed + 's) — code: ' + json.code + ' message: ' + json.message, 'error');
|
||||
$('imgPanel').innerHTML = '<span class="placeholder">请求失败,无标注图</span>';
|
||||
}
|
||||
} catch (err) {
|
||||
setStatus('❌ 网络错误: ' + err.message, 'error');
|
||||
const _elapsed = ((performance.now() - _reqStart) / 1000).toFixed(2);
|
||||
setStatus('❌ 网络错误 (' + _elapsed + 's): ' + err.message, 'error');
|
||||
$('jsonContent').textContent = 'Error: ' + err.message;
|
||||
$('resultsArea').classList.remove('hidden');
|
||||
$('imgPanel').innerHTML = '<span class="placeholder">请求失败</span>';
|
||||
|
||||
@@ -150,20 +150,24 @@ async function submitTest() {
|
||||
fd.append('hair_style', checked.join(','));
|
||||
fd.append('use_mask', $('useMask').value);
|
||||
fd.append('prompt', $('promptInput').value);
|
||||
const _reqStart = performance.now();
|
||||
try {
|
||||
const r = await fetch(API_BASE + '/api/v1/hair/grow', { method:'POST', body:fd });
|
||||
const json = await r.json();
|
||||
const _elapsed = ((performance.now() - _reqStart) / 1000).toFixed(2);
|
||||
$('jsonContent').textContent = JSON.stringify(json, null, 2);
|
||||
$('resultsArea').classList.remove('hidden');
|
||||
if (json.code === 0) {
|
||||
const results = json.data.results || [];
|
||||
setStatus('✅ ' + results.length + ' 个方案', 'success');
|
||||
setStatus('✅ ' + results.length + ' 个方案 (' + _elapsed + 's)', 'success');
|
||||
renderSchemes(results);
|
||||
} else {
|
||||
setStatus('❌ code=' + json.code + ' ' + json.message, 'error');
|
||||
setStatus('❌ (' + _elapsed + 's) code=' + json.code + ' ' + json.message, 'error');
|
||||
$('schemesContainer').innerHTML = '<div style="color:#9ca3af">无结果</div>';
|
||||
}
|
||||
} catch(e) { setStatus('❌ ' + e.message, 'error'); $('resultsArea').classList.remove('hidden'); }
|
||||
} catch(e) {
|
||||
const _elapsed = ((performance.now() - _reqStart) / 1000).toFixed(2);
|
||||
setStatus('❌ (' + _elapsed + 's) ' + e.message, 'error'); $('resultsArea').classList.remove('hidden'); }
|
||||
finally { $('submitBtn').disabled = false; $('submitBtn').textContent = '🚀 提交'; }
|
||||
}
|
||||
|
||||
|
||||
@@ -159,9 +159,11 @@ async function submitTest() {
|
||||
fd.append('use_mask', $('useMask').value);
|
||||
fd.append('prompt', $('promptInput').value);
|
||||
|
||||
const _reqStart = performance.now();
|
||||
try {
|
||||
const r = await fetch(API_BASE + '/api/v1/hair/grow-b', { method:'POST', body:fd });
|
||||
const json = await r.json();
|
||||
const _elapsed = ((performance.now() - _reqStart) / 1000).toFixed(2);
|
||||
$('jsonContent').textContent = JSON.stringify(json, null, 2);
|
||||
$('resultsArea').classList.remove('hidden');
|
||||
|
||||
@@ -186,12 +188,14 @@ async function submitTest() {
|
||||
return;
|
||||
}
|
||||
|
||||
setStatus('✅ 成功 | 发际线类型: ' + (d.hairline_type || '—'), 'success');
|
||||
setStatus('✅ 成功 (' + _elapsed + 's) | 发际线类型: ' + (d.hairline_type || '—'), 'success');
|
||||
} else {
|
||||
setStatus('❌ code=' + json.code + ' ' + json.message, 'error');
|
||||
setStatus('❌ (' + _elapsed + 's) code=' + json.code + ' ' + json.message, 'error');
|
||||
$('blendTop').style.display = 'none';
|
||||
}
|
||||
} catch(e) { setStatus('❌ ' + e.message, 'error'); $('resultsArea').classList.remove('hidden'); }
|
||||
} catch(e) {
|
||||
const _elapsed = ((performance.now() - _reqStart) / 1000).toFixed(2);
|
||||
setStatus('❌ (' + _elapsed + 's) ' + e.message, 'error'); $('resultsArea').classList.remove('hidden'); }
|
||||
finally { $('submitBtn').disabled = false; $('submitBtn').textContent = '🚀 提交'; }
|
||||
}
|
||||
|
||||
|
||||
@@ -129,20 +129,24 @@ async function submitTest() {
|
||||
setStatus('⏳ 调用AI视觉模型...', 'info'); $('resultsArea').classList.add('hidden');
|
||||
|
||||
const fd = new FormData(); fd.append('image_file', f);
|
||||
const _reqStart = performance.now();
|
||||
try {
|
||||
const r = await fetch(API_BASE + '/api/v1/face/features', { method:'POST', body:fd });
|
||||
const json = await r.json();
|
||||
const _elapsed = ((performance.now() - _reqStart) / 1000).toFixed(2);
|
||||
$('jsonContent').textContent = JSON.stringify(json, null, 2);
|
||||
$('resultsArea').classList.remove('hidden');
|
||||
|
||||
if (json.code === 0) {
|
||||
const feats = JSON.parse(json.data.features);
|
||||
setStatus('✅ 分析完成 — ' + Object.keys(feats).length + ' 项特征', 'success');
|
||||
setStatus('✅ 分析完成 (' + _elapsed + 's) — ' + Object.keys(feats).length + ' 项特征', 'success');
|
||||
renderFeatures(feats);
|
||||
} else {
|
||||
setStatus('❌ code=' + json.code + ' ' + json.message, 'error');
|
||||
setStatus('❌ (' + _elapsed + 's) code=' + json.code + ' ' + json.message, 'error');
|
||||
}
|
||||
} catch(e) { setStatus('❌ ' + e.message, 'error'); $('resultsArea').classList.remove('hidden'); }
|
||||
} catch(e) {
|
||||
const _elapsed = ((performance.now() - _reqStart) / 1000).toFixed(2);
|
||||
setStatus('❌ (' + _elapsed + 's) ' + e.message, 'error'); $('resultsArea').classList.remove('hidden'); }
|
||||
finally { $('submitBtn').disabled = false; $('submitBtn').textContent = '🚀 分析特征'; }
|
||||
}
|
||||
|
||||
|
||||
@@ -141,22 +141,26 @@ async function submitTest() {
|
||||
setStatus('请求中...', 'info'); $('resultsArea').classList.add('hidden');
|
||||
|
||||
const fd = new FormData(); fd.append('image_file', f); fd.append('gender', $('gender').value);
|
||||
const _reqStart = performance.now();
|
||||
try {
|
||||
const r = await fetch(API_BASE + '/api/v1/hairline/generate', { method:'POST', body:fd });
|
||||
const json = await r.json();
|
||||
const _elapsed = ((performance.now() - _reqStart) / 1000).toFixed(2);
|
||||
$('jsonContent').textContent = JSON.stringify(json, null, 2);
|
||||
$('resultsArea').classList.remove('hidden');
|
||||
if (json.code === 0) {
|
||||
_images = json.data.hairline_images || [];
|
||||
_center = json.data.best_hairline_center_point;
|
||||
$('centerPoint').textContent = _center ? '(' + _center.x + ', ' + _center.y + ')' : '—';
|
||||
setStatus('✅ ' + _images.length + ' 个方案', 'success');
|
||||
setStatus('✅ ' + _images.length + ' 个方案 (' + _elapsed + 's)', 'success');
|
||||
renderGrid();
|
||||
if (_images.length) selectCard(0);
|
||||
} else {
|
||||
setStatus('❌ code=' + json.code + ' ' + json.message, 'error');
|
||||
setStatus('❌ (' + _elapsed + 's) code=' + json.code + ' ' + json.message, 'error');
|
||||
}
|
||||
} catch(e) { setStatus('❌ ' + e.message, 'error'); $('resultsArea').classList.remove('hidden'); }
|
||||
} catch(e) {
|
||||
const _elapsed = ((performance.now() - _reqStart) / 1000).toFixed(2);
|
||||
setStatus('❌ (' + _elapsed + 's) ' + e.message, 'error'); $('resultsArea').classList.remove('hidden'); }
|
||||
finally { $('submitBtn').disabled = false; $('submitBtn').textContent = '🚀 提交'; }
|
||||
}
|
||||
|
||||
|
||||
@@ -132,6 +132,7 @@ async function submitTest() {
|
||||
const file = fileInput.files[0];
|
||||
if (!file) { setStatus('请先选择一张图片', 'error'); return; }
|
||||
|
||||
const _reqStart = performance.now();
|
||||
|
||||
const btn = $('submitBtn');
|
||||
btn.disabled = true;
|
||||
@@ -151,21 +152,23 @@ async function submitTest() {
|
||||
try {
|
||||
const resp = await fetch(API_BASE + '/api/v1/face/measure-v2', { method: 'POST', body: form });
|
||||
const json = await resp.json();
|
||||
const _elapsed = ((performance.now() - _reqStart) / 1000).toFixed(2);
|
||||
|
||||
$('jsonContent').textContent = JSON.stringify(json, null, 2);
|
||||
$('resultsArea').classList.remove('hidden');
|
||||
|
||||
if (json.code === 0) {
|
||||
setStatus('✅ 请求成功 — request_id: ' + json.request_id, 'success');
|
||||
setStatus('✅ 请求成功 (' + _elapsed + 's) — request_id: ' + json.request_id, 'success');
|
||||
showOverlay(json.data.annotated_image_url);
|
||||
renderMetrics(json.data);
|
||||
$('metricsBar').classList.remove('hidden');
|
||||
} else {
|
||||
setStatus('❌ 业务错误 — code: ' + json.code + ' message: ' + json.message, 'error');
|
||||
setStatus('❌ 业务错误 (' + _elapsed + 's) — code: ' + json.code + ' message: ' + json.message, 'error');
|
||||
$('imgPanel').innerHTML = '<span class="placeholder">请求失败,无标注图</span>';
|
||||
}
|
||||
} catch (err) {
|
||||
setStatus('❌ 网络错误: ' + err.message, 'error');
|
||||
const _elapsed = ((performance.now() - _reqStart) / 1000).toFixed(2);
|
||||
setStatus('❌ 网络错误 (' + _elapsed + 's): ' + err.message, 'error');
|
||||
$('jsonContent').textContent = 'Error: ' + err.message;
|
||||
$('resultsArea').classList.remove('hidden');
|
||||
$('imgPanel').innerHTML = '<span class="placeholder">请求失败</span>';
|
||||
|
||||
@@ -151,20 +151,24 @@ async function submitTest() {
|
||||
fd.append('hair_style', checked.join(','));
|
||||
fd.append('use_mask', $('useMask').value);
|
||||
fd.append('prompt', $('promptInput').value);
|
||||
const _reqStart = performance.now();
|
||||
try {
|
||||
const r = await fetch(API_BASE + '/api/v1/hair/grow-v2', { method:'POST', body:fd });
|
||||
const json = await r.json();
|
||||
const _elapsed = ((performance.now() - _reqStart) / 1000).toFixed(2);
|
||||
$('jsonContent').textContent = JSON.stringify(json, null, 2);
|
||||
$('resultsArea').classList.remove('hidden');
|
||||
if (json.code === 0) {
|
||||
const results = json.data.results || [];
|
||||
setStatus('✅ ' + results.length + ' 个结果', 'success');
|
||||
setStatus('✅ ' + results.length + ' 个结果 (' + _elapsed + 's)', 'success');
|
||||
renderSchemes(results);
|
||||
} else {
|
||||
setStatus('❌ code=' + json.code + ' ' + json.message, 'error');
|
||||
setStatus('❌ (' + _elapsed + 's) code=' + json.code + ' ' + json.message, 'error');
|
||||
$('schemesContainer').innerHTML = '<div style="color:#9ca3af">无结果</div>';
|
||||
}
|
||||
} catch(e) { setStatus('❌ ' + e.message, 'error'); $('resultsArea').classList.remove('hidden'); }
|
||||
} catch(e) {
|
||||
const _elapsed = ((performance.now() - _reqStart) / 1000).toFixed(2);
|
||||
setStatus('❌ (' + _elapsed + 's) ' + e.message, 'error'); $('resultsArea').classList.remove('hidden'); }
|
||||
finally { $('submitBtn').disabled = false; $('submitBtn').textContent = '🚀 提交'; }
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user