メインコンテンツへスキップ
【python】文字認識したテキストをエクセルに出力するやり方をわかりやすく【PyOCR + XlsxWriter】
  1. Posts/

【python】文字認識したテキストをエクセルに出力するやり方をわかりやすく【PyOCR + XlsxWriter】

今回はPyOCRで文字認識したテキストをエクセルに出力する方法を解説します。

具体的にはXlsxWriterというライブラリを使用してPythonスクリプトからエクセル操作を行います。

この記事は以下のような方を対象者としています。

  • python初学者の方
  • pythonで文字認識したテキストをエクセルに出力したい方
  • pythonでエクセルへの出力方法を探している方

前置き:pythonでエクセルへ出力する
#

Alt text

pythonでエクセル関連の操作を行う場合にはxlsxwriterライブラリを使います。

xlsxwriterではセルの結合やセルのサイズ調整、テキストの出力から画像のエクセルへの貼り付け等ができます。

Pythonでエクセル操作その1:環境構築をしよう
#

まずはPythonでエクセル操作を行うための準備をしましょう。

実際に私が環境構築した時の手順を説明します。

下記が私のPCのPythonのライブラリのバージョンです。

※これらコマンドはターミナル上で実行しています。

実行コマンド:
python --version

出力結果:
Python 2.7.15

ちなみに私はMacを使うため本記事もMacでの環境構築を前提として解説します。

Pythonでエクセル操作その2:xlsxwriterのインストール
#

まずは下記コマンドでxlsxwriterライブラリのインストールをしましょう。

実行コマンド:
sudo pip install xlsxwriter

出力結果:
Successfully built xlsxwriter

Install Successfulのような文言が出力されれば正常にxlsxwriterインストールがされていると思います。

念のため下記コマンドでxlsxwriterがインストールできているかどうか確認しましょう。

実行コマンド:
pip list | grep XlsxWriter

出力結果:
XlsxWriter 1.3.7

Pythonでエクセル操作その3:エクセルに出力してみよう
#

それでは早速エクセルに出力するためのpythonスクリプトを書きましょう。

例としてA列の1行目にtestという文字を格納したtest.xlsxというファイル名を出力するスクリプト(test.py)を書きます。

<!-- xlsxwriterライブラリをインポート  -->
import xlsxwriter

<!-- 列を設定 0 = A列, 1 = B列  -->
line = 0
<!-- 行を設定 0 = 1行目, 1 = 2行目  -->
row = 0

<!-- test.xlsxというエクセルファイルを出力  -->
workbook = xlsxwriter.Workbook("test.xlsx")
<!-- testという名前のシートを作成  -->
worksheet = workbook.add_worksheet("test")
<!-- line,rowで指定したセルにtestというテキストを格納  -->
worksheet.write(line,row,"test")
<!-- エクセルファイルへの編集を保存する  -->
workbook.close()

上記test.pyを作成したら、下記コマンドでtest.pyを実行しましょう。

python test.py

これでtest.pyと同じフォルダ内にtest.xlsxというファイル名のエクセルファイルが出力されます。

Alt text

Pythonでエクセル操作その4:PyOCRで文字認識したテキストをエクセルに出力
#

続いて画像からテキストを認識し出力するプログラムと結合しエクセルに認識文字を出力しましょう。

先ほど書いたエクセルへの出力文字部分を文字認識で取得した値で置き換えてあげれば完了です。

import sys
from PIL import Image
import pyocr
import pyocr.builders
import xlsxwriter

tools = pyocr.get_available_tools()
if len(tools) == 0:
    print("No OCR tool found")
    sys.exit(1)

tool = tools[0]
print("Will use tool '%s'" % (tool.get_name()))

<!-- 同じフォルダ内のimage.pngから文字認識を行い結果をtxtに格納  -->
txt = tool.image_to_string(
    Image.open("./image.png"),
    lang="jpn",
    builder=pyocr.builders.TextBuilder(tesseract_layout=6)
)

line = 0
row = 0

workbook = xlsxwriter.Workbook("test.xlsx")
worksheet = workbook.add_worksheet("test")
<!-- エクセルへの出力結果部分に文字認識結果を保持する変数txtを指定  -->
worksheet.write(line, row, txt)
workbook.close()

上記コマンドが正常に完了すれば、text.xlsxファイルに下記文字認識で取得したテキストがエクセルに出力されます。

Alt text

関連記事

【コピペOK】flutterのSizedBoxとExpandedの違いをわかりやすく
【flutter初心者】Column/Row/Center/Containerの違いをわかりやすく
【flutter】BoxDecorationの使い方をわかりやすく