LoginSignup
0
3

More than 1 year has passed since last update.

JPEGファイルから文字を抽出する方法

Posted at

1 はじめに

Pythonを使って、JPEGファイルから文字を抽出してみます。

2 環境

VMware Workstation 15 Playerで作成した仮想マシン(1台)を使用しました。
CentOSの版数は下記のとおりです。

CentOS版数
[root@server ~]# cat /etc/redhat-release
CentOS Linux release 8.3.2011

カーネル版数は以下のとおりです。

カーネル版数
[root@server ~]# uname -r
4.18.0-240.el8.x86_64

3 パッケージのインストール

まず、仮想マシンにAnacondaをインストールしました。
インストール方法は、Anacondaのインストール方法を参照してください。

次に、各種パッケージのアップデートを行いました。

アップデート
(base) [root@server ~]# conda update conda
(base) [root@server ~]# conda install anaconda
(base) [root@server ~]# conda update --all

次に、tesseract(テッセラクト)をインストールしました。
tesseractは、OCRエンジン(光学式文字認識エンジン)です。
インストール方法は、https://anaconda.org/conda-forge/tesseractを参照ください。

tesseractのインストール
(base) [root@server ~]# conda install -c conda-forge tesseract

最後に、pyocrをインストールしました。
pyocrは、PythonからOCRエンジンを利用可能にするためのモジュールです。
インストール方法は、https://anaconda.org/conda-forge/pyocrを参照ください。

pyocrのインストール
(base) [root@server ~]# conda install -c conda-forge pyocr

4 PCのディスプレイで採取した画像ファイルから文字列の抽出

4.1 画像ファイルの作成

テスト用の画像ファイルを作成します。
ここでは、/var/log/messagesファイルの先頭30行をJPEGファイルとして保存します。

messagesの先頭30行表示
[root@server ~]# head -n 30 /var/log/messages

/var/log/messagesファイルの先頭30行のログを表示します。
そして、Ctrl+PrtScを押下して、画面のハードコピーを作成しました。
無題.png

ペイントを使って、画面のハードコピーをJPEG形式で保存します。
ファイル名はsyslog.jpgとしました。
キャプチャ.PNG

4.2 ソースコード

ソースコード
from PIL import Image
import pyocr

# OCRエンジンを取得
engines = pyocr.get_available_tools()
if len(engines) == 0:
    print("OCR engine not found")
    sys.exit(1)
engine = engines[0]

# 画像の文字を読み込む
txt = engine.image_to_string(Image.open('syslog.jpg'), lang="eng")
print(txt)

4.3 実行結果

JupyterLabを使って、抽出結果を確認してみます。
詳細は確認していませんが、JPEGファイルからログを抽出できていることがわかります。
無題.png

5 スマフォのカメラで撮影したJPEGファイルから文字列の抽出

5.1 JPEGファイルの作成

テスト用のJPEGファイルを作成します。
WikipediaのTransportationの部分をスマフォで撮影しました。
日本語がはいっていると変換できないので、英語だけの部分を撮影しました。
都合によりJPEGからPNGに変換したものを以下に示します。
test.png

5.2 ソースコード

ソースコード
from PIL import Image
from PIL import ImageEnhance
import pyocr

engines = pyocr.get_available_tools()
if len(engines) == 0:
    print("OCR engine not found")
    sys.exit(1)
engine = engines[0]

# JPEGファイルをオープンする
im = Image.open('IMG_20211110_213000.jpg')

# 画像を明瞭にする
im_enhanced = ImageEnhance.Brightness(im).enhance(2.0)

# 文字をグレースケール化する
im_gray=im_enhanced.convert(mode='L')

# 画像を180度回転する。
im_rotate = im_gray.rotate(180)

# JPEG形式で保存する。
im_rotate.save('test.jpg','jpeg', quality=80, optimize=True)

# JPEGファイルから文字を抽出する。
txt = engine.image_to_string(Image.open('test.jpg'), lang="eng")
print(txt)

5.3 実行結果

こちらも詳細は確認していませんが、JPEGファイルから文字列が抽出できていることがわかります。
キャプチャ.PNG

Z 参考情報

いちばんやさしいPython機械学習の教本 人気講師が教える業務で役立つ実践ノウハウ

■新規にパッケージを入れたい、あるいは更新したい場合にエラーになる場合
Pythonで書くTesseract 4の基本的な使い方。APIとCLIからOCRを実行する方法

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3