相機 OCR 使用本地分叉的 vision_text_recognition 套件執行 OCR,支援拉丁文、中文(簡體和繁體)、日文和韓文字型。識別過程無需上傳任何內容。OCR 引擎返回的每個文字區塊都帶有自己的邊界框和識別文字;結果頁將翻譯繪製回同一座標,從而保留原始版面。
拍攝流程
- 相機初始化。 相機控制器以明確的
initializing / ready / failed狀態進行非同步初始化。失敗時會顯示重試按鈕,可在不重新進入initializing守衛的情況下重新執行初始化。 - 真實方向。 當應用鎖定為直式時,iOS 的
DeviceOrientation和 EXIF 不可靠。應用透過sensors_plus讀取原始加速度計,並快取最近一幀,因此即使 UI 被鎖定,快門也能以真實的握持方向拍攝。然後將 EXIF 方向與此真實情況協調一致。 - 快門。 點擊以目前預覽長寬比拍攝。拍攝後幀在 OCR 前會下採樣到可設定的最大邊長——大多數頁面需要在長邊 1500–2000 像素才能讓引擎讀取細小文字而不佔用過多記憶體。
- 閃光燈。 取景器中提供四種模式——自動、關、開和手電筒——切換綁定到系統閃光 API。
OCR 返回的內容
- 每個區塊的邊界框。 每個 TextBlock 都有自己的矩形。結果頁使用這些邊界框將翻譯後的文字精確定位到來源文字上。
- 區塊文字和順序。 每個區塊的來源語言文字,按照引擎發出的順序(預設從上到下、從左到右)。
- 信賴度。 每個區塊都有自己的信賴度。低於閾值的區塊會在結果頁中呈現但標記為「低信賴度」,以便使用者驗證。
為什麼在裝置本地處理
- 隱私。 街牌、合約或醫療表格的照片永遠不會離開裝置進行 OCR。
- 延遲。 無網路往返。在最近的裝置上,典型的手機拍攝頁面的 OCR 在一秒內完成。
- 離線。 OCR 可在飛機上、地下室和沒有網路的地區工作。執行辨識的同一引擎完全依賴裝置本地模型。
提高 OCR 準確性的最佳實務
- 均勻的間接光。 窗光優於頭頂聚光燈。穿過頁面的陰影是字元誤讀的最常見原因。
- 點擊對焦。 如果自動對焦選擇了錯誤對象(桌面、手指、頁邊),請在拍攝前點擊文字中心。
- 平整的頁面。 向書脊彎曲的頁面會在裝訂線附近遺失字元。盡可能用另一隻手將頁面壓平。
- 每次拍攝一種語言。 混合字型的頁面可在一次掃描中處理,但混排拉丁文與直排日文的頁面最好分成兩次拍攝。