画像から文字を読み込んでテキスト化する

2020年12月21日

画像から文字を読み込んでテキスト化する

画像ファイルをpythonで読み込みその画像の文字列を読み取りテキストファイルに起こしてみます。
今回は下の画像ファイルから文字列を読み込んでみます。

画像の文字列を読み込むには「tesseract」というソフトウェアを使用します。
「tesseract」をpythonで使用すには「pyocr」というライブラリが必要です。
それでは早速やってみましょう

参考:
  ・フリーのOCRソフトTesseract 4 が簡単に使えるようになってました!
  ・PythonでOCR

インストール


#RHELからtesseractをインストール
  yum-config-manager --add-repo https://download.opensuse.org/repositories/home:/Alexander_Pozdnyakov/CentOS_7/
  rpm --import https://build.opensuse.org/projects/home:Alexander_Pozdnyakov/public_key
  yum update
  yum install tesseract 
  yum install tesseract-langpack-jpn
#必要なライブラリをインストール
  pip3 install pillow
  pip3 install pyocr

階層

階層は下記の通りです。
「ocr.py」が実行されると「png_dir」に格納されている画像を読み込んでいき「convert_dir」にテキストファイルとして吐き出していきます。


.
├── convert_dir
│   ├── test.txt
│   └── youtube.txt
├── ocr.py
└── png_dir
    ├── test.png
    └── youtube.png

プログラム

プログラムは下記の通りです。


# coding: utf-8
import sys
import pyocr
import os
from PIL import Image

tools = pyocr.get_available_tools()
assert(len(tools) != 0)
tool = tools[0]

def get_file_names():
    file_names = os.listdir('./png_dir')
    return file_names

def convert_image_to_string(file_names):
    for file_name in file_names:
        txt = tool.image_to_string(
            Image.open('./png_dir/'+file_name),
            lang = 'jpn',
            builder = pyocr.builders.TextBuilder()
        )
        file_name = file_name.replace('.png', '.txt')
        with open('./convert_dir/'+file_name, 'wb') as file:
            file.write(txt.encode('utf-8'))

file_names = get_file_names()
convert_image_to_string(file_names)

実行結果


海原雄山 1 日前
100歩譲って給付金は支給しなくていいからしばらくの間は給与から所得税と厚生年金の引き去
りを止めて欲しい。あとは消費税もしばらく0%(にすればかなり違う。

追記

文字読み取りの制度を上げている記事がありました。
PythonでOCR

2020年12月21日