Ubuntu Weekly Recipe

第577回 Tesseract OCRで文字認識をする

この記事を読むのに必要な時間:およそ 2 分

今回はオープンソースでマルチプラットフォームのOCRエンジンであるTesseract OCRを使用し,読み取り精度を確認してみます。

UbuntuでOCR?

「日本語でOCRと聞くと,プロプライエタリの牙城というか,高価なソフトを購入しないと実用に耐えないというイメージがあるかもしれません。あるいはないかもしれませんが,いずれにせよ日本語の文字は難しいのでOCRで高い精度を出すのはなかなか難しそうに思えます。

少なくとも筆者はそう考えていたので,OCRで高精度の結果を出すのは困難,ましてやオープンソースで……と考えていました。そんなところに,Tesseract OCRのバージョン4.0以降では日本語でもかなりの高精度で認識するという話を小耳に挟みました。実際に試してみると想定していた以上の結果だったので,ここで紹介することにします。

Tesseract OCRとgImageReader

Tesseract OCRはOCRエンジンのみです。コマンドラインのフロントエンドも用意されていますが,やはりGUIフロントエンドがほしいところです。そのようなことを考える人が多いからか,Tesseract OCR自体がマルチプラットフォームであることもあり,たくさんのGUIフロントエンドが開発されています。

そのなかで現在も継続して開発が進んでおり,かつUbuntuのリポジトリにあるものということでgImageReaderを選択しました。なお,今回はTesseract OCRの精度を確認することを主旨としているため,gImageReaderのさまざまな機能には触れません※1⁠。

※1
具体的にはLibreOffice Writerの形式(ODT形式)やPDFで保存できたりしますが,一部うまく動かないところもありました。

使用するUbuntuは19.04です。Tesseract OCRのバージョンは4.0のリリース版です。それ以前のUbuntuだとTesseract OCRのバージョンが若干古いため(具体的には18.04 LTSだと4.0の開発版⁠⁠,同様の結果にならないかもしれません。また快適に動作させるにはそれなりのスペックのPCが必要です。逆にいえば,ハードウェアのスペックが高ければ高いほど短時間で処理が行なえます。

インストール

前述のとおりTesseract OCRとそのフロントエンドであるgImageReaderはUbuntuのリポジトリにありますので,これをインストールするだけです。注意点としては言語データが言語ごとに分かれてパッケージングされており,また日本語の場合は日本語(横書き)と縦書き日本語に分かれているため,その両方をインストールします。

端末を起動し,次のコマンドを実行してください。

$ sudo apt install gimagerader tesseract-ocr-jpn-*

読み込む画像を作成

読み込む画像は何でもいいですが,LibreOffice Writerを起動してキーボードのd→t→F3を順番に押すと挿入されるダミーテキストを使用することにします。書式はデフォルトだとレイアウトがあまりきれいではないため,第440回を参考に適宜修正しています。

続けてこれを画像として保存しますが,⁠ファイル⁠⁠-⁠エクスポート」でPNGやJPEGで保存する方法もありますし,⁠スクリーンショット」⁠GNOMEスクリーンショット)を起動して「取得する領域の選択」で文字の部分だけを保存する方法もあります。今回は後者を使用します。図1が実際に使用した画像です。

図1 横書きサンプル

画像

あまり縦書きのOCRを使用することはないでしょうが,縦書きの画像も用意して試してみることにします。ダミーテキストも縦書きになりますが,こちらはページサイズをA5にしています。図2が実際の画像です。

図2 縦書きサンプル

画像

読み込みと実行

ではgImageReaderを起動し,画像の文字を読み取っていきます。

起動はアクティビティから行ってください。昨今あまり見なくなった情報量多めのアイコンが目印です。

起動直後のスクリーンショットは図3です。下のほうにスペルチェックがインストールされていない旨の警告が表示されています。日本語のスペルチェック辞書はないので「Don⁠t show again」をクリックします。

図3 gImageReaderの起動直後

画像

また中央やや右側にフォントが正しく表示されていない(いわゆるトーフ状態)の文字列が見えます。これは実は言語データで,これを元に文字の読み取りが行われるのですが,見にくくて仕方がないので変更します。

右にある歯車アイコンをクリックし,さらに「Preference」をクリックします。⁠Predefined language definitions」「Filename Prefix」「jpn」「jpn_vert」のところまでスクロールし図4⁠,⁠Native name」を書き換えます。ここでは「日本語」⁠日本語(縦書⁠⁠」としました図5※2⁠。

※2
ただしこの変更は恒久的なものではなく,一度gImageReaderを終了して再起動するとまた元に戻ります。

図4 ⁠Filename Prefix」「jpn」「jpn_vert」のところまでスクロールし,⁠Native name」を書き換える

画像

図5 言語データのトーフが直った

画像

これで準備は完了で,続けて画像を読み込みます。左側のペインにある緑色のアイコンをクリックするとファイルダイアログが表示されるので,読み込ませる画像を選択してください。

この状態だと縦書きの言語データが選択されているため,⁠∨」アイコンをクリックして「日本語[jpn]」に変更します図6⁠。また「Page segmentation mode」「Automatic segmentation mode」に変更します。

図6 言語モデルと「Page segmentation mode」を変更する

画像

ここまできたら,あとは「Recognize all 日本語[jpn](ja)」をクリックします。すると処理が実行され,認識された文字が右ペインに表示されます図7⁠。右から2番目のアイコンをクリックすると保存することができますが,この場合はコピーしてLibreOffice Writerに貼り付けるというのも一つの手です。

図7 読み取った結果は右ペインに表示される

画像

縦書きも言語データを縦書きのものに変更することを除けばおおむね同じ方法で実行できます。

著者プロフィール

あわしろいくや

Ubuntu Japanese TeamとLibreOffice日本語チームのメンバー。LibreOffice,VirtualBox,Joplin,Budgieデスクトップなどの翻訳を手がける。技術同人サークルteam zpn主宰。ほか原稿執筆を少々。