画像・音声処理

PythonでOCR!簡単に実装する方法から高精度なOCRまで

OCRと聞いて何を思い浮かべますか?

自在に使えたら便利そう

業務改善で使えそう

など思う人は多いと思います。今回はOCRについてPythonで高精度に実装する方法を確認していきましょう。実際にコードを示しながら進めているので、一緒に手を動かしながら学べます!

一連の手続きでわからないことやエラーが発生した際にはTech Teacherにぜひお問い合わせください!


本ブログを運営しているTech Teacherは、
プログラミング家庭教師サービスを運営しています。
完全マンツーマン・フルオーダーメイド
あなたが必要な指導を提供します。

OCRとは

OCR:Optical Character Recognitionは光学文字認識の略で、画像や文書の中からテキストを自動的に抽出する技術です。具体的には、印刷された文書、手書きの文書、または印刷されたテキストが含まれた画像から文字を認識する事が可能です。

Tesseract

今回は「Tesseract」を使用してOCRをしてみましょう。TesseractオープンソースのOCRエンジンです。もともとGoogleによって開発され、後にオープンソースプロジェクトとして公開されました。

Tesseractはオープンソースであり、また高い精度を誇っているため使いやすく、まずはこれでOCRを実施してみるとよいと思います。

Pythonでの実装方法

ダウンロード

Tesseractはgithub「https://github.com/tesseract-ocr/tessdoc」から使用可能です。インストーラーが用意されているので、こちらを使用していきましょう。

ドキュメンテーションの中にWindowsインストーラーへのリンクがありますので、こちらに進みます。今回はWindowsについて解説していますが、それ以外の方は該当するページに進んでください。

Tesseract installer for Windows」の項目の中にダウンロードリンクがあるので、ここをクリックしてダウンロードしてきます。

インストール

先ほどダウンロードしてきたファイルに従ってインストールしていきます。

途中「Choose Components」で、「Additional script data」と「Additional language data」は以下の各2項目を追加してください。

Additional script data

Additional language data

それ以外は基本デフォルトのままで結構です。必要に応じて変更してください。

次にインストールしたフォルダへのパスを設定します。Wndowsで「システム環境変数の編集」を検索して、開いてください。

その後、「Path」を選択して「編集」を選択します。

「新規」を押して、一覧の中に先ほどTesseractをインストールしたフォルダを追加します。デフォルトのままインストールすると、図のように「C:\Program Files\Tesseract-OCR」にインストールされていると思います。

その後、Tesseractが入っているフォルダ以外の場所で「Tesseract」と入力し、「ファイルとして認識されてません」というコメントが出ず、以下のようになれば設定完了です。

pyocrのインストール

次にPythonからOCRを使用するために「pyocr」をインストールします。

こちらは「pip install pyocr」でインストール可能です。

実際に実装してみる

では、実際にコードを書いて実装してみましょう。今回は下記のようなTech Teacherの魅力をまとめた部分を「sample.png」ファイルにしたものを読み取ってみましょう。

import pyocr
from PIL import Image

tools = pyocr.get_available_tools()
tool = tools[0]

img = Image.open('./sample.png')

text = tool.image_to_string(
    img,
    lang="jpn",
    builder=pyocr.builders.TextBuilder(tesseract_layout=6)
)

print(text)

ではコードを順番に見ていきましょう。

import pyocr
from PIL import Image

pyocrとPILからImageを読み込みます。

tools = pyocr.get_available_tools()
tool = tools[0]

pyocr.get_available_tools()」でpyocrで使用できるtoolの一覧を取得します。今回はtesseractしか入っていないので、toolsの0番目にあるtesseractを呼び出します。もしここで複数のtoolが入っている場合は以下のように確認し、該当する番号のものを呼び出してください。

img = Image.open('./sample.png')

text = tool.image_to_string(
    img,
    lang="jpn",
    builder=pyocr.builders.TextBuilder()

まずは今回使用したいデータを「img」に格納します。

次に、先ほど選択したtoolを使用して、「tool.image_to_string()」で読み取りを行います。引数は順に

  1. OCRするファイル
  2. 使用する言語
  3. 使用するbuilder

を入力しています。3つ目のbuilderに関しては以下のようなものがあります。今回は一番上の「TextBuilder」を使用しています。

print(text)

よい精度で認識できているようです。

さらに高精度を狙う

先ほど読み取りを行ったものを確認すると、まぁまぁの認識精度で読み取りを行えているようですが、

  • 魅力1の前に「上」という不要な文字が入っている
  • 魅力2と3の間に不要な改行が入っている

という部分が少しおかしいようです。少し引数を調整してみましょう。

tesseract_layout

text = tool.image_to_string(
    img,
    lang="jpn",
    builder=pyocr.builders.TextBuilder(tesseract_layout=6)
)
print(text)

TextBuilder」に「tesseract_layout=6」を指定してみました。これで正しく認識できたようです。

tesseract_layout」は、文字のレイアウトに関する指定です。コマンドプロンプトに「tesseract –help-extra」と入力していただくと、「Page segmentation modes」の項目で説明が出てきます。

指定できる値を簡単にまとめると、

  • 0:OSD、Orientation and script detection:原文と予測のみ
  • 1:OSD+自動ページ分割
  • 2:OSDなし+自動ページ分割
  • 3:OSDなし+完全自動ページ分割
  • 4:さまざまなサイズのテキストの単一列
  • 5:縦組みテキストの単一ブロック
  • 6:一つのテキストブロック
  • 7:一行のテキストとして扱う
  • 8:一つの単語として扱う
  • 9:円の中の一つの単語として扱う
  • 10:一つの文字として扱う
  • 11:まばらなテキスト。可能な限り多くのテキストを探す
  • 12:OSD+まばらなテキスト
  • 13:行のまま。一行として扱う

となっています。

データサイエンスを学習するならTech Teacherで!

『Tech Teacher』3つの魅力

魅力1. オーダーメイドのカリキュラ

『Tech Teacher』では、決められたカリキュラムがなくオーダーメイドでカリキュラムを組んでいます。「質問だけしたい」「相談相手が欲しい」等のご要望も実現できます。

    魅力2. 担当教師によるマンツーマン指導

    Tech Teacherでは完全マンツーマン指導で目標達成までサポートします。
    東京大学を始めとする難関大学の理系学生・院生・博士の教師がが1対1で、丁寧に指導しています。
    そのため、理解できない箇所は何度も分かるまで説明を受けることができます。

    魅力3. 3,960円/30分で必要な分だけ受講

    Tech Teacherでは、授業を受けた分だけ後払いの「従量課金制」を採用しているので、必要な分だけ授業を受講することができます。また、初期費用は入会金22,000円のみです一般的なプログラミングスクールとは異なり、多額な初期費用がかからないため、気軽に学習を始めることができます。

    まとめ

    ・魅力1. 担当教師によるマンツーマン指導

    ・魅力2. オーダーメイドのカリキュラム

    ・魅力3. 3,960円/30分で必要な分だけ受講

    質問のみのお問い合わせも受け付けております。

    まとめ

    今回はOCRとしてTesseractを説明してきました。OCRを使用すると、既存の紙ベースで流れている情報などをそのまま有効活用することが可能です。

    ぜひ、今回の内容を参考に有効活用していただければと思います。また、一連の手続きでわからないことやエラーが発生した際にはTech Teacherにぜひお問い合わせください!