결과 페이지는 번역을 사진 위에 블록별로 렌더링합니다. 각 블록의 번역은 OCR 엔진이 소스 텍스트를 감지한 정확한 사각형에 나타납니다. 오버레이는 투명도 슬라이더를 지원하므로 사용자는 페이지를 떠나지 않고도 원본과 번역을 나란히 비교할 수 있습니다.
오버레이 작동 방식
- 블록별 번역. 감지된 각 TextBlock은 독립적인 번역 작업으로 ML Kit에 전송됩니다. 번역은 완료되는 대로 오버레이로 스트리밍되어 사용자는 엔진이 완료하는 순서대로 블록이 "번역되는" 것을 봅니다.
- 사각형으로 위치 지정. 번역된 텍스트는 소스 블록의 경계 상자에 맞게 줄 바꿈 및 배치됩니다. 블록이 좁으면 번역이 여러 줄로 줄 바꿈되고 소스 사각형을 약간 오버플로할 수 있습니다. 엔진은 엄격한 포함보다 가독성을 선호합니다.
- 탭하여 포커스. 번역된 블록을 탭하면 바텀 시트가 열리고 "전체 번역" 보기에서 동일한 블록으로 스크롤되므로 사진을 확대하지 않고도 긴 번역을 읽을 수 있습니다.
- 조정 가능한 투명도. 슬라이더가 오버레이 레이어의 불투명도를 제어합니다. 완전히 투명으로 밀면 원본 사진이 보이고 완전히 불투명하면 번역이 읽힙니다.
결과 페이지 해부
- 상단 바. 닫기 버튼. 다른 컨트롤 없음 — 결과 페이지는 의도적으로 미니멀합니다.
- 메인 영역. 전체 화면의 원본 사진 위에 오버레이 레이어가 렌더링됩니다. InteractiveViewer는 작은 텍스트를 검사하기 위한 확대/축소와 이동을 허용합니다.
- 바텀 시트. 세 가지 상태: 축소됨(기본값), 중간(화면의 약 절반), 확장됨(화면의 대부분). 축소된 상태는 작은 핸들과 요약을 표시합니다. 중간 상태는 블록별 번역을 카드로 표시합니다. 확장된 상태는 모든 블록 번역을 전체 너비로 표시합니다.
- 시트의 두 탭. "Blocks" 탭은 OCR 블록별로 그룹화된 번역을 표시하고 "Full" 탭은 결합된 전체 단락 번역을 표시합니다.
블록별 번역인 이유
- 혼합 스크립트. 영어 헤드라인과 일본어 캡션이 있는 페이지는 블록별 소스 언어 힌트의 이점을 얻습니다. 블록의 위치와 스크립트 클래스는 엔진에 어떤 소스 모델을 사용할지 알려줍니다.
- 실패 격리. 단일 블록의 번역 실패가 페이지의 나머지 부분을 차단하지 않습니다. 오버레이는 실패한 블록에 작은 경고 배지를 표시하여 사용자가 어떤 블록에 수동으로 주의해야 하는지 알 수 있도록 합니다.
- 레이아웃 보존. 소스를 읽는 사용자는 해당 번역을 눈으로 찾을 수 있습니다. 이는 메뉴, 표지판 및 라벨과 같이 공간적 관계가 중요한 경우에 유용합니다.
편집 동작
오버레이는 사진 위에 렌더링되며 사진에 구워지지 않습니다. 기록에 저장하면 원본 사진과 블록별 번역 기록이 모두 저장됩니다. 저장된 항목을 열면 오버레이가 정확히 재현됩니다. 사진 편집은 지원되지 않습니다.