0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ブラウザ内でPP-OCRv6を動かし、画像をアップロードしないOCRを実装した

0
Posted at

はじめに

商品画像や管理画面のスクリーンショットから文字を取り出すために、オンラインOCRを使うことがあります。ただ、請求書や契約書まで外部サーバーへ送るのは少し気になります。

そこで、PP-OCRv6をブラウザ内で動かし、元画像と認識結果をアップロードしないOCRを実装しました。この記事では、UIの紹介よりも、ブラウザ内で動かすために分けた処理と、実装時に困った点をまとめます。

OCRのワークスペース

OCR処理は専用Workerへ分離

認識処理をメインスレッドで実行すると、モデルの初期化や推論中に画面操作が重くなります。そのため、モデルの読み込み、画像の前処理、推論、後処理を専用のWeb Workerへ移しました。

メインスレッドが担当するのは、画像選択、進捗表示、結果編集、エクスポートです。Workerとの間では、画像データと認識結果だけを受け渡します。

モデルは初回使用時にダウンロードし、その後はブラウザキャッシュを利用します。OCR処理中に画像や認識文字列をアプリケーションサーバーへ送る処理はありません。

端末に合わせてモデルを3段階に分けた

最初は精度を優先して大きなモデルだけを使おうとしました。しかし、スマートフォンで約138.8MBのモデルを読み込むのは現実的ではありません。

現在は用途別に3つ用意しています。

モデル サイズ 主な用途
高速 約6.0MB 一般的なスクリーンショット
標準 約31.2MB 複雑なレイアウト、日本語を含む画像
高精度 約138.8MB デスクトップ、小さい文字、難しいスキャン

常に最大モデルを使うのではなく、画像と端末に合わせて選べるようにしました。スマートフォンでは高速または標準を基本にしています。

テキストだけでなく位置情報も残す

OCRの出力を一つの文字列にすると、表や管理画面の列構造が失われます。そこで、各行の座標、信頼度、読み順、簡単な表構造を保持するようにしました。

表として判断できた結果はタブ区切りでコピーできます。Excelやスプレッドシートへ貼り付けたときに列が分かれるので、OCR後の手作業を少し減らせます。TXT、Markdown、JSONへの書き出しにも対応しました。

現時点の制限

現在のモデルは、中国語、英語、日本語、ドイツ語、スペイン語、ポルトガル語、フランス語を対象にしています。韓国語にはまだ対応していません。

スキャン画像向けの軽い補正は入れていますが、強い二値化は使っていません。スクリーンショットの細い文字が欠けることがあったためです。ここは画像の種類を見て補正方法を切り替える余地があります。

まとめ

ブラウザ内OCRで難しかったのは、単にモデルを動かすことより、端末ごとのメモリ差と、認識後のレイアウトをどう残すかでした。

実際の動作は以下で確認できます。無料・登録不要です。

同じサイトで画像変換・圧縮、GIF/APNG編集、動画の背景除去も提供しています。ブラウザで処理できる一般的なファイルは、端末内で完結する設計にしています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?