[業務アプリ開発] Pythonで、画像から文字データを取り出す方法(Tesseract、PyOCR)

Python
YOU<br>
YOU

Pythonを業務に活用したいけど、なにかないかな。

けんろう
けんろう

Pythonなら、画像データからテキストデータを取り出すことができます。

Pythonを使って、画像データからテキストデータを取り出す方法を紹介します。

画像データからテキストデータを取り出すことは、オープンソースソフトを使えば、無料で実現できます。

画像データからテキストデータを取り出すことができれば、

・客先から送られて来たPDFファイルから資料を作成する場合にテキストデータを取り出すことで、資料の作成時間を大幅に減らすことができます。
・スマホで撮影したお客さんの名刺から、顧客リストを作成する
・雑誌で気になるページをスマホカメラで撮影して、この記事をテキストデータとして管理する(資料作成の元データにする)

画像データからテキストデータを取り出すには、Tesseract-OCR、PyOCRを使用します。

スポンサーリンク

Tesseract-OCRとは

Tesseract-OCRというのは、Googleが開発したOCR用のソフトウェアです。

このソフトは各言語毎に訓練データを使って文字認識をしています。

PyOCRとは

World / OpenPaperwork / pyocr · GitLab
A Python wrapper for Tesseract and Cuneiform -

「PyOCR」はPython用のOCRツールラッパーです。PythonプログラムからさまざまなOCRツールを使用できます。

現在サポートされているOCRツールは以下の3種類。
 ・Libtesseract
 ・Tesseract
 ・Cuneiform

環境構築

今回は、Windows PCにインストールする方法を紹介します。

Tesseract-OCRのインストール

Tesseract-OCRのインストール方法は、以下のサイトがわかりやすく書かれていますので、こちらを参照してください。

Tesseract OCR をWindowsにインストールする方法 - ガンマソフト
OCRをPythonで操作できれば大量の紙資料の読み取りも自動化できます。特に郵便番号や請求書番号など定型書類の番号を読み取る作業は代表的な活用例です。 普段のオフィスワークではOCRソフトウェアを用...

PyOCRのインストール

コマンド プロンプトを開いて、以下のコマンドを実行してください。実行すると、PyOCRのインストールが始まります。

pip install pyocr

テスト画像の用意

使用する画像は、なんでもいいですが、なるべくテキストのみが書かれている画像の方が認識率が高いので、下図を保存して、使用してください。

(図の上で右クリックして、「名前を付けて、画像を保存」)

サンプルコード


#!usr/bin/env python
# -*- coding: utf-8 -*-

import os
from PIL import Image
import pyocr
import pyocr.builders

# Tesseractのパスを通す
path_tesseract = "C:\\Program Files\\Tesseract-OCR"
if path_tesseract not in os.environ["PATH"].split(os.pathsep):
    os.environ["PATH"] += os.pathsep + path_tesseract

# OCRエンジンの選択
tools = pyocr.get_available_tools()     # OCRエンジンのリストを取得
tool = tools[0]     # OCRエンジンのリストの中から、使用したいエンジンを選択

# 画像の読み込み
img = Image.open("ocr-test.png")

# OCR実行
builder = pyocr.builders.TextBuilder(tesseract_layout=6)
result = tool.image_to_string(
    img,    # 読み取り対象
    lang="jpn",     # 読み取り対象の言語 
    builder=builder     #   オプション
)

# 結果を表示
print(result)

上記サンプルコードと対象となる画像データは同じフォルダに入れてください。

サンプルコード内にオプションを指定する部分がありますが、オプションは、以下となります。

pagesegmode values are:
  0 = Orientation and script detection (OSD) only.
  1 = Automatic page segmentation with OSD.
  2 = Automatic page segmentation, but no OSD, or OCR
  3 = Fully automatic page segmentation, but no OSD. (Default)
  4 = Assume a single column of text of variable sizes.
  5 = Assume a single uniform block of vertically aligned text.
  6 = Assume a single uniform block of text.
  7 = Treat the image as a single text line.
  8 = Treat the image as a single word.
  9 = Treat the image as a single word in a circle.
  10 = Treat the image as a single character.
pagesegmodeの値は次のとおりです。
  0 =方向とスクリプト検出(OSD)のみ。
  1 = OSDによる自動ページセグメンテーション。
  2 =自動ページセグメンテーション、ただしOSDなし、またはOCR
  3 =完全自動のページセグメンテーション。ただし、OSDなし。 (デフォルト)
  4 =可変サイズのテキストの単一列を想定します。
  5 =垂直に配置されたテキストの単一の均一なブロックを想定します。
  6 =単一の均一なテキストブロックを想定します。
  7 =画像を単一のテキスト行として扱います。
  8 =画像を1つの単語として扱います。
  9 =画像を円の中の1つの単語として扱います。
  10 =画像を単一の文字として扱います。

実行

上記サンプルコードと対象となる画像データは同じフォルダに入れてください。

コマンドプロンプトを開いて、以下のコマンドを実行してください。

python app.py

実行すると、コマンドプロンプトに、以下が表示されると思います。

目次[閉じる]
1. ごの記事で解決できること
2. 今回、作るアプリ
3. 準備
4. 構成
5. ラズバイとM5Stackをケーブルでつなぐ
1. M5Stack側
1. M5GOの場合
2. ラズバイ便
3. M5Stackとラズバイのつなぎ方
6. M5Stack側の設定
1.サンプルコード
7. ラズバイ側の設定
1.サンプルコード
8. 動かし方
1. M5Stack
2. Raspberry Pi
9. まとめ
10. 参考

なかなか高い認識率です。これなら、いろんなことに使えそうです。

まとめ

今回は、画像データからテキストデータを取り出す方法として、Python、Tesseract-OCR、PyOCRを使用した方法を紹介しました。

コメント

タイトルとURLをコピーしました