// screens/capture.jsx — 피부 촬영 가이드 (3~5장) function CaptureScreen({ persona, setRoute }) { const Icons = window.Icons; const SHOTS = [ { id: "front", label: "정면", angle: "0°", note: "양쪽 광대 동등하게", required: true, done: true }, { id: "left45", label: "좌측 45°", angle: "-45°", note: "왼쪽 광대·턱선", required: true, done: true }, { id: "right45", label: "우측 45°", angle: "+45°", note: "오른쪽 광대·턱선", required: true, done: true }, { id: "left90", label: "좌측 측면", angle: "-90°", note: "헤어라인·귀앞", required: false, done: false, current: true }, { id: "up", label: "턱 아래 (선택)", angle: "Tilt +15°", note: "코끝 모공", required: false, done: false }, ]; const [current, setCurrent] = React.useState(3); const doneCount = SHOTS.filter(s => s.done).length; return (
02 · 피부 촬영 가이드

iPad 기반 다각도 촬영 — {SHOTS.length}장 (필수 3, 권장 5)

표준화된 얼굴 정렬 SW가 광원·각도·조명 일관성을 자동 보정합니다. 노이즈가 검출되면 재촬영을 요청합니다.

{/* LEFT — Live capture viewport */}
{/* Camera viewport */}
{/* Skin photo placeholder */}
{/* Face guide overlay */} {/* Face oval guide */} {/* Center cross */} {/* Brackets corners */} {[[12,8],[88,8],[12,67],[88,67]].map(([x,y],i) => { const dx = x < 50 ? 1 : -1; const dy = y < 38 ? 1 : -1; return ; })} {/* Top HUD */}
REC · ISO 200 · 1/125s 조명 ✓ 각도 ✓ 포커스 ✓
{SHOTS[current].label} · {SHOTS[current].angle}
{/* Bottom guidance */}
가이드
{SHOTS[current].note}
{/* Shot strip */}
{SHOTS.map((shot, i) => ( ))}
{/* RIGHT — Quality checks + preprocess */}

이미지 품질 검증

실시간
{[ { l: "얼굴 정렬 (Yaw / Pitch / Roll)", v: 96, t: "good" }, { l: "노출 (Exposure)", v: 88, t: "good" }, { l: "조명 균일도", v: 82, t: "good" }, { l: "초점 (Focus)", v: 91, t: "good" }, { l: "모션 블러", v: 12, t: "good", inverse: true }, { l: "안경/마스크 가림", v: 0, t: "good", inverse: true }, ].map((q, i) => (
))}
분석 가능 상태
{doneCount}/3 필수 컷 완료 — AI 분석 시작 가능
{[ { l: "얼굴 keypoint 추출", t: "MediaPipe Face Mesh", done: true }, { l: "정렬·정규화", t: "Affine warp · 1024×1024", done: true }, { l: "노이즈 보정", t: "Denoise + WB 조정", done: true }, { l: "RGB → multi-spectral", t: "Chromophore 분리", done: true }, { l: "Region segmentation", t: "코·볼·이마·턱·눈주변", done: false, active: true }, { l: "Skin texture map", t: "표면 요철 추정", done: false }, ].map((step, i) => (
{step.done ? : step.active ? : {i+1}}
{step.l}
{step.t}
))}
); } window.CaptureScreen = CaptureScreen;