Python3.9系&Tesseractを用いて画像をOCR処理する方法
2026/08/04
以前にGASとDrive APIを組み合わせて画像をOCR処理する方法をメモしたが、これを自前のサーバかつ外部APIは使用せずに実装したい。また、ある程度のOCR処理精度も保ちたい。調べたところPHPでは厳しそうだがPythonだとライブラリが豊富で対応できそう。今回はTesseractを用いた対応方法をメモ。
目次
環境について
テストした環境は以下の通り。
- AlmaLinux8.6
- Python 3.9.25
やりたいこと
以前も試した以下の画像をOCR処理し、画像内の文言を取得したい。
対応方法
Tesseractのインストール
サーバにSSH接続し以下コマンドを実行する。
#EPALをインストール dnf install -y epel-release #キャッシュを作成 dnf makecache #Tesseractのパッケージの検索 dnf search tesseract-langpack #Tesseractのパッケージのインストール dnf install -y tesseract-langpack-jpn #Python用のライブラリのインストール python3.9 -m pip install pytesseract
cv2(OpenCV)のインストール
画像処理用にcv2(OpenCV)というライブラリも必要になるため以下コマンドを実行する。
#libGLのインストール dnf install -y mesa-libGL #opencv-pythonの軽量版をインストール python3.9 -m pip install opencv-python-headless #軽量版じゃない方をインストールする場合は以下 python3.9 -m pip install opencv-python
OCR処理用ファイル(ocr.py)
以下内容のファイルを適当なディレクトリにアップロードする。
import pytesseract
import cv2
#画像の読み込み
img = cv2.imread("test.jpg")
#小さい文字対策のため画像の拡大
img = cv2.resize(img, None, fx=2.0, fy=2.0, interpolation=cv2.INTER_LINEAR)
#前処理としてグレースケール化
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#ノイズの除去
gray = cv2.GaussianBlur(gray, (3, 3), 0)
#二値化(OCR精度UP)
_, thresh = cv2.threshold(gray, 180, 255, cv2.THRESH_BINARY)
#OCRの実行
text = pytesseract.image_to_string(thresh, lang="jpn")
#出力
print(text)
プログラムの実行
サーバにSSH接続して以下コマンドを実行する。
python3 ocr.py
実行結果
私の環境だと以下が出力された。
GASとAdSense Management APIを使って前日
分の売り上げをメール通知する方法
Googleアドセンスの売り上げをチェックする際、いつもはアドセンスの菅
理画面に見に行っていた。 これが面倒臭いのでGoogle Apps Scriptと
AdSense Management APIを組み合わせて昨日分のGoogleアドセンスの売
り上げをメールで受け取りたい。 以下に実装方法をメモ。
登録日時、更新日時、タグ部分は読み取れなかったのか空白(改行)となった。この辺りは画像拡大等、色々試したがどうにもできず。
ただ、それ以外の部分は正常にOCR処理できているように見受けられる。
その他
EasyOCRについて
EasyOCRという他のOCRライブラリも試してみたが、今回使用した画像の場合はTesseractの方が圧倒的に精度が高かった。
また、Tesseractの方が処理速度が圧倒的に速かった。
他に試したいこと
以下あたりも今後試してみたい。
- 身分証画像から氏名部分をOCR処理する等、画像の指定した部分の文言を取得
- PDFのOCR処理
所感
各種環境構築は面倒くさいものの自前のサーバかつ無料のライブラリで対応できるのはありがたい。場合によっては業務でも使っていけそう。
関連記事
-
-
AlmaLinux8系にPython3.9系をインストールしHello Worldを表示する方法
WebARENA Indigo&AlmaLinux8.6の環境にPyth ...
