File Key Frame #{{ qcFileProfile.key_frame }}
{{ qcProgress.total }}
FS
{{ qcProgress.current }}
Tested
{{ qcReport.filter(r => r.status === 'PASS').length }}
Passed
{{ qcReport.filter(r => r.status === 'FAIL').length }}
Failed
Key Frame
{{ qcTraceSummary.withKeyFrame }}/{{ qcTraceSummary.total }}
Key Face
{{ qcTraceSummary.withKeyFace }}/{{ qcTraceSummary.total }}
Key Face BBox (short)
{{ qcTraceSummary.bboxShort.avg }}px
{{ qcTraceSummary.bboxShort.min }}–{{ qcTraceSummary.bboxShort.max }}
Key Face Area
{{ qcTraceSummary.bboxArea.avg }}px²
{{ qcTraceSummary.bboxArea.min }}–{{ qcTraceSummary.bboxArea.max }}
Confidence
{{ (qcTraceSummary.conf.avg * 100).toFixed(1) }}%
{{ (qcTraceSummary.conf.min * 100).toFixed(0) }}%–{{ (qcTraceSummary.conf.max * 100).toFixed(0) }}%
Min Confidence
{{ qcTraceSummary.filter.minConfPct }}%
Min Face Size
{{ qcTraceSummary.filter.minSizePx }}px
Min Capture Quality
{{ qcTraceSummary.filter.minQualityPct }}%
Filter Active
{{ qcTraceSummary.filter.active ? 'yes' : 'no' }}
Hidden FS
{{ qcTraceSummary.filter.hidden }}/{{ qcTraceSummary.total }}
Visible FS
{{ qcTraceSummary.filter.visible }}/{{ qcTraceSummary.total }}
conf-only {{ qcTraceSummary.filter.hiddenConfOnly }} · size-only {{ qcTraceSummary.filter.hiddenSizeOnly }} · qual-only {{ qcTraceSummary.filter.hiddenQualOnly }} · both {{ qcTraceSummary.filter.hiddenBoth }} · neither {{ qcTraceSummary.filter.hiddenNeither }}
File Profile
name{{ qcFileProfileInfo.file_name }}
duration{{ qcFileProfileInfo.duration }}s
resolution{{ qcFileProfileInfo.width }}×{{ qcFileProfileInfo.height }}
fps{{ Number(qcFileProfileInfo.fps).toFixed(2) }}
total_frames{{ qcFileProfileInfo.total_frames }}
status{{ qcFileProfileInfo.status }}
FS Profile
face_count{{ qcTraceSummary.fs.faceCount.avg }} ({{ qcTraceSummary.fs.faceCount.min }}–{{ qcTraceSummary.fs.faceCount.max }})
avg_confidence{{ qcTraceSummary.fs.avgConf.avg }} ({{ qcTraceSummary.fs.avgConf.min }}–{{ qcTraceSummary.fs.avgConf.max }})
best_confidence{{ qcTraceSummary.fs.bestConf.avg }} ({{ qcTraceSummary.fs.bestConf.min }}–{{ qcTraceSummary.fs.bestConf.max }})
duration_sec{{ qcTraceSummary.fs.durationSec.avg }} ({{ qcTraceSummary.fs.durationSec.min }}–{{ qcTraceSummary.fs.durationSec.max }})
pose_count{{ qcTraceSummary.fs.poseCount.avg }} ({{ qcTraceSummary.fs.poseCount.min }}–{{ qcTraceSummary.fs.poseCount.max }})
frame_span{{ qcTraceSummary.fs.frameSpan.avg }} ({{ qcTraceSummary.fs.frameSpan.min }}–{{ qcTraceSummary.fs.frameSpan.max }})
{{ r.status === 'PASS' ? '✓' : r.status === 'FAIL' ? '✗' : '⚠' }}
{{ r.check }}
{{ r.details }}
⚠️ Profile Issues ({{ qcProfileIssues.length }})
FS#{{ p.traceId }}
{{ p.groupName }}
{{ p.canRead ? '✓ R' : '✗ R' }}
{{ p.canWrite ? '✓ W' : '✗ W' }}
{{ p.hasKeyFrame ? 'KF' : '-' }}
{{ p.hasKeyFace ? 'KF' : '-' }}
... +{{ qcProfileIssues.length - 10 }} more issues