카메라 OCR은 로컬에서 포크된 vision_text_recognition 패키지를 사용하여 OCR을 실행합니다. 라틴 문자, 중국어(간체 및 번체), 일본어, 한국어 스크립트를 지원합니다. 인식을 위해 업로드되는 데이터는 없습니다. OCR 엔진이 반환한 각 블록에는 자체 경계 상자와 감지된 텍스트가 포함되며, 결과 페이지는 번역을 동일한 좌표에 다시 그려 원본 레이아웃을 유지합니다.
캡처 파이프라인
- 카메라 초기화. 카메라 컨트롤러는 명시적인
initializing / ready / failed상태로 비동기 초기화됩니다. 실패 시initializing가드에 다시 들어가지 않고 초기화를 재실행하는 재시도 버튼이 표시됩니다. - 실제 방향. 앱이 세로로 잠겨 있으면 iOS의
DeviceOrientation및 EXIF는 신뢰할 수 없습니다. 앱은sensors_plus를 통해 원시 가속도계를 읽고 가장 최근 프레임을 캐시하므로 UI가 잠겨 있어도 셔터가 실제 그립 방향으로 캡처합니다. 그런 다음 EXIF 방향이 이 실제 값과 조정됩니다. - 셔터. 탭하면 현재 미리보기 종횡비로 캡처합니다. 캡처된 프레임은 OCR 전에 구성 가능한 최대 가장자리로 다운스케일됩니다. 대부분의 페이지는 메모리를膨胀시키지 않고 미세한 텍스트를 읽기 위해 긴 가장자리 1500~2000 픽셀이 필요합니다.
- 플래시. 뷰파인더에 4가지 모드(자동, 끄기, 켜기, 토치)가 노출되며 토글은 시스템 플래시 API에 바인딩됩니다.
OCR 반환 내용
- 블록별 경계 상자. 각 TextBlock에는 자체 사각형이 있습니다. 결과 페이지는 이를 사용하여 번역된 텍스트를 원본 텍스트와 정확히 같은 위치에 배치합니다.
- 블록 텍스트 및 순서. 블록별 소스 언어 텍스트, 엔진이 출력한 순서대로(기본적으로 위에서 아래, 왼쪽에서 오른쪽).
- 신뢰도. 각 블록에는 자체 신뢰도가 있습니다. 임계값 미만의 블록은 결과 페이지에 렌더링되지만 사용자가 확인할 수 있도록 "낮은 신뢰도"로 플래그 지정됩니다.
온디바이스를 선택하는 이유
- 프라이버시. 거리 표지판, 계약서 또는 의료 양식의 사진은 기기를 떠나지 않습니다.
- 지연 시간. 네트워크 왕복이 없습니다. 최근 기기에서 일반적인 스마트폰 촬영 페이지의 OCR은 1초 이내에 완료됩니다.
- 오프라인. OCR은 항공기, 지하실, 통신이 불가능한 지역에서 작동합니다. 인식을 실행하는 동일한 엔진이 온디바이스 모델에서 완전히 실행됩니다.
정확한 OCR을 위한 모범 사례
- 균일하고 간접적인 빛. 창광은 천장 스포트라이트보다 성능이 우수합니다. 페이지를 가로지르는 그림자는 문자 오독의 가장 일반적인 원인입니다.
- 탭하여 초점 맞추기. 자동 초점이 잘못된 대상(책상, 손가락, 페이지 가장자리)을 선택하면 캡처 전에 텍스트의 중앙을 탭하세요.
- 평평한 페이지. 책 등서서쪽으로 휘어진 페이지는 제본 근처에서 문자가 손실됩니다. 가능한 경우 다른 손으로 페이지를 평평하게 누르세요.
- 캡처당 하나의 언어. 혼합 스크립트 페이지는 한 번에 처리되지만, 라틴 문자와 세로 일본어가 혼합된 페이지는 두 번의 캡처로 나누는 것이 가장 좋습니다.