카메라 능력 테스트
아크릴 스캔 앱을 PWA로 낼 수 있는지 판단하기 위한 진단 도구. 실제 판별/합성은 하지 않고, 이 기기·브라우저가 무엇을 해주는지만 측정해 JSON과 이미지로 내보낸다. 모든 처리는 데스크톱 파이프라인에서 한다.
권한을 허용해야 렌즈 이름이 보인다. 카메라를 켜면 메인(후면 camera 0)으로 열고 바로 최대 해상도를 요청한다(렌즈를 바꿔도 즉시 최대 해상도). 줌이 뜨면, 값을 올려도 해상도(블록 1)가 그대로면 디지털 줌(센서 크롭, 화질 손해)이다.
1. 기기 / 스트림 능력
카메라를 시작하면 자동으로 채워진다. 이 기기가 수동 노출·화이트밸런스·줌·토치를 지원한다고 보고하는지, 실제로 열린 스트림의 해상도·fps가 얼마인지.
2. 해상도
세 경로의 해상도가 다 다르다. 조각을 프레임에 꽉 채웠을 때 몇 px을 얻는지의 근거가 된다.
3. 버스트 (무음 후보)
비디오 프레임을 연속으로 받는다. 셔터음이 나지 않는 경로다. 대신 스틸 최대 해상도보다 낮다. 받은 장수·실효 fps·프레임 간격의 흔들림을 재고, 프레임을 무압축 zip 한 개로 내보낸다. 해상도는 카메라를 켜거나 렌즈를 바꿀 때 이미 최대로 맞춰지므로, 버스트는 그 해상도로 바로 찍는다 (표의 프레임 크기로 확인).
4. 노출 / 화이트밸런스 고정
잠글 수 있는지, 잠근 뒤 실제로 노출이 고정되는지. 잠금 시도 후 조명을 손으로 바꿔가며 프레임 평균 밝기를 로깅한다. 잠겼다면 밝기가 조명을 그대로 따라 크게 변하고(카메라가 보정을 안 함), 자동이면 카메라가 보정해 밝기가 오히려 일정하게 유지된다. 즉 변동폭이 클수록 잠금이 된 것이다. 잠금 전(자동)과 후를 각각 로깅해 비교하면 확실하다.
5. 센서 (가속도계 / 자이로)
중력 벡터로 카메라 기울기를 알 수 있으면 원근 정칙화에 쓸 수 있다. 권한을 요청하고 5초간 로깅한다. 정지 상태에서 얼마나 안정적인지, 촬영 프레임과 시간을 맞출 수 있는지.