Tesseract(テッセラクト)は Apache ライセンスで配布されているフリーソフトで,OCRエンジン (libtesseract) とコマンドラインプログラム (tesseract) が含まれるパッケージです.画像に含まれる様々な言語の文字を認識することができます.
Python で Tesseract を利用するために,まず macOS に Tesseract をインストールする必要があります.おそらくパッケージ管理ツールの Homebrew を使ってインストールする方法が最も簡単だと思われます.Homebrew のインストールがまだの場合は,まず Homebrew のオリジナルサイトを参考にインストールします.
% /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" ⏎
Homebrew のインストール後に brew
コマンドを使って tesseract をインストールします.
% brew install tesseract ⏎
Tesseract のインストールが完了すれば,tesseract で利用できる言語を確認します.現時点では英語の認識はできるものの,日本語には対応していないことが確認できます.
% tesseract --list-langs ⏎
List of available languages in "/opt/homebrew/share/tessdata/" (3):
eng
osd
snum
次に,tesseract_data フォルダにある en_1_img.png ファイルの文字を認識し,result_en.txt というファイルに出力します.ここで, -l eng
オプションは言語の指定です.この結果,正しく文字を認識していることがわかりました.なお,データは前のページを参考に準備してください.
(base) rinsaka@MacStudio2022 pyocr % tesseract tesseract_data/en_1_img.png result_en_1 -l eng ⏎ Estimating resolution as 318 (base) rinsaka@MacStudio2022 pyocr % cat result_en_1.txt ⏎ In this paper, we consider a nonparametric adaptive software rejuvenation schedule under a random censored data. For u failure time data and v random censored data, we formulate upper and lower bounds of the predictive system availability based on a nonparametric predictive inference (NPI). Then, we derive adaptive rejuvenation policies which maximizes the upper or lower bound. In simulation experiments, we show that estimates of the software rejuvenation schedule are updated by acquisition of new failure data, and converge to the theoretical optimal solution. (base) rinsaka@MacStudio2022 pyocr %
Tesseract で日本語文字の認識を行うためには,学習済みモデルのファイルをダウンロードしなければなりません.いくつか学習済みモデルが公開されていますが,ubuntu のパッケージを利用することで精度良く認識ができるようです.このために,ubuntu パッケージ:tesseract-ocr-jpn にある tesseract-lang_4.00~git30-7274cfa.orig.tar.xz ソースパッケージをダウンロードします(バージョンなどは異なる可能性があります).ダウンロードできたらファイルを展開します.様々な言語のファイルが展開されますが,jpn.traindeddata
だけを利用します.なお,jpn_vert.traineddata
は縦書き日本語の学習データです.必要に応じてこれも利用してください.
% tar -xvzf tesseract-lang_4.00~git30-7274cfa.orig.tar.xz ⏎ % cd tesseract-lang-4.00~git30-7274cfa ⏎ % ls -lah | grep jpn ⏎ -rw-r--r--@ 1 rinsaka staff 2.4M 2 22 2018 jpn.traineddata -rw-r--r--@ 1 rinsaka staff 2.9M 9 16 2017 jpn_vert.traineddata %
tesseract のインストール先と関連ファイルの保存先を確認します.最後の share/tessdata/
が学習済みファイルの保存先です.
% brew list tesseract ⏎
/opt/homebrew/Cellar/tesseract/5.2.0/bin/tesseract
/opt/homebrew/Cellar/tesseract/5.2.0/include/tesseract/ (12 files)
/opt/homebrew/Cellar/tesseract/5.2.0/lib/libtesseract.5.dylib
/opt/homebrew/Cellar/tesseract/5.2.0/lib/pkgconfig/tesseract.pc
/opt/homebrew/Cellar/tesseract/5.2.0/lib/ (2 other files)
/opt/homebrew/Cellar/tesseract/5.2.0/share/tessdata/ (35 files)
%
ファイルを格納すべきフォルダがわかったので,そのフォルダにファイルをコピーします.(必要に応じて縦書き日本語の学習データもコピーしてください.)
% cp jpn.traineddata /opt/homebrew/Cellar/tesseract/5.2.0/share/tessdata ⏎
ファイルがコピーできたことを念の為に確認しておきます.
% ls -l /opt/homebrew/Cellar/tesseract/5.2.0/share/tessdata ⏎
total 50056
drwxr-xr-x 27 rinsaka admin 864 7 7 05:15 configs
-rw-r--r-- 1 rinsaka admin 4113088 7 7 05:15 eng.traineddata
-rw-r--r--@ 1 rinsaka admin 2471260 8 23 18:55 jpn.traineddata
-rw-r--r-- 1 rinsaka admin 10562727 7 7 05:15 osd.traineddata
-rw-r--r-- 1 rinsaka admin 572 7 7 05:15 pdf.ttf
-rw-r--r-- 1 rinsaka admin 8467391 7 7 05:15 snum.traineddata
drwxr-xr-x 8 rinsaka admin 256 7 7 05:15 tessconfigs
%
コピーができれば,tesseract で利用可能な言語を確認します.日本語 (jpn) が表示されれば完了です.
% tesseract --list-langs ⏎
List of available languages in "/opt/homebrew/share/tessdata/" (4):
eng
jpn
osd
snum
%
では,日本語が含まれる画像の文字認識を実行します.
(base) rinsaka@MacStudio2022 pyocr % tesseract tesseract_data/ja_1_img.png result_ja_1 -l jpn ⏎ Estimating resolution as 452 (base) rinsaka@MacStudio2022 pyocr % cat result_ja_1.txt ⏎ 研究者が自身で収集した学術論文の文献 PDF ファイルを効率的に管理し, 研究活動に有 効活用することを目的として, 文献 PDF データベースシステムを開発した. 利用者は PDF ファイルを Web プラウザからサーバにアップロードすることとで, PDEF ファイルを一元的 に管理できるようになるとともに, 全文検索. ジャーナル検索, 著者検索. タグ (キーワー ド) 検索が利用できるようになる. また, 論文情報の登録などに BIBTEX 情報を活用する ことも本システムの特徴のひとつである. 本論文では文献 PDF データベースシステムの 詳細について議論するとともに, 性能評価実験の結果を考察する. (base) rinsaka@MacStudio2022 pyocr %
ここまでの作業で macOS のターミナルを利用して tesseract の文字認識ができるようになりました.次は Python で文字認識を行います.
ここでは Python の仮想環境を作成して文字認識を行ってみます.なお,仮想環境を構築せずに base 環境に直接 pyocr をインストールすることもできると思われます.
まず,py39ocr という名前で Python 3.9 の仮想環境を作成します.
(base) rinsaka@MacStudio2022 pyocr % conda create -n py39ocr python=3.9 ⏎
構築した仮想環境に入ります.
(base) rinsaka@MacStudio2022 apyocri % conda activate py39ocr ⏎
(py39ocr) rinsaka@MacStudio2022 pyocr %
pip
コマンドでインストール済みのパッケージを確認します.
(py39ocr) rinsaka@MacStudio2022 pyocr % pip list ⏎
Package Version
---------- -------
pip 22.2.2
setuptools 65.2.0
wheel 0.37.1
(py39ocr) rinsaka@MacStudio2022 pyocr %
Python から OCR を実行するために pyocr パッケージをインストールします.パッケージ pyocr をインストールすると Pillow も同時にインストールされることが確認できました.
(py39ocr) rinsaka@MacStudio2022 pyocr % pip install pyocr ⏎ Collecting pyocr Downloading pyocr-0.8.3.tar.gz (67 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 67.6/67.6 kB 1.4 MB/s eta 0:00:00 Preparing metadata (setup.py) ... done Collecting Pillow Using cached Pillow-9.2.0-cp39-cp39-macosx_11_0_arm64.whl (2.8 MB) Building wheels for collected packages: pyocr Building wheel for pyocr (setup.py) ... done Created wheel for pyocr: filename=pyocr-0.8.3-py3-none-any.whl size=37342 sha256=501f18a08efcc4593d8d176734bb94b57fbb23bae55c855ccf59aed92c66b059 Stored in directory: /Users/rinsaka/Library/Caches/pip/wheels/fd/77/6a/e7f97be77dd46cc892e7b5fd9914f28a2b2fbf0bba86929607 Successfully built pyocr Installing collected packages: Pillow, pyocr Successfully installed Pillow-9.2.0 pyocr-0.8.3 (py39ocr) rinsaka@MacStudio2022 pyocr % pip list ⏎ Package Version ---------- ------- Pillow 9.2.0 pip 22.2.2 pyocr 0.8.3 setuptools 65.2.0 wheel 0.37.1 (py39ocr) rinsaka@MacStudio2022 pyocr %
さらに pytesseract もインストールします.
(py39ocr) rinsaka@MacStudio2022 pyocr % pip install pytesseract ⏎ Collecting pytesseract Downloading pytesseract-0.3.10-py3-none-any.whl (14 kB) Collecting packaging>=21.3 Using cached packaging-21.3-py3-none-any.whl (40 kB) Requirement already satisfied: Pillow>=8.0.0 in /Users/rinsaka/miniforge3/envs/py39ocr/lib/python3.9/site-packages (from pytesseract) (9.2.0) Collecting pyparsing!=3.0.5,>=2.0.2 Using cached pyparsing-3.0.9-py3-none-any.whl (98 kB) Installing collected packages: pyparsing, packaging, pytesseract Successfully installed packaging-21.3 pyparsing-3.0.9 pytesseract-0.3.10 (py39ocr) rinsaka@MacStudio2022 pyocr % pip list ⏎ Package Version ----------- ------- packaging 21.3 Pillow 9.2.0 pip 22.2.2 pyocr 0.8.3 pyparsing 3.0.9 pytesseract 0.3.10 setuptools 65.2.0 wheel 0.37.1 (py39ocr) rinsaka@MacStudio2022 pyocr %
Jupyter Notebook を利用するのであればインストールします.
(py39ocr) rinsaka@MacStudio2022 pyocr % pip install jupyter ⏎
各種パッケージのインストールができれば Jupyter Notebook を起動します.
(py39ocr) rinsaka@MacStudio2022 pyocr % jupyter notebook ⏎
まず,言語を英語に設定して tesseract_data
フォルダにある en_1_img.png
から文字を認識します.
import os
from PIL import Image
import pyocr
import pyocr.builders
file_path = os.path.sep.join(['tesseract_data', 'en_1_img.png'])
lang = 'eng'
tool = pyocr.get_available_tools()[0]
text = tool.image_to_string(
Image.open(file_path),
lang=lang,
builder=pyocr.builders.TextBuilder()
)
print('file_path:', file_path)
print('lang: ', lang)
print('----------')
print(text)
file_path: tesseract_data/en_1_img.png lang: eng ---------- In this paper, we consider a nonparametric adaptive software rejuvenation schedule under a random censored data. For u failure time data and v random censored data, we formulate upper and lower bounds of the predictive system availability based on a nonparametric predictive inference (NPI). Then, we derive adaptive rejuvenation policies which maximizes the upper or lower bound. In simulation experiments, we show that estimates of the software rejuvenation schedule are updated by acquisition of new failure data, and converge to the theoretical optimal solution.
日本語の場合でも言語設定を変更するだけで認識ができます.なお,「ブラウザ」を「プラウザ」,「PDF」を「PDEF」と認識したり,「,」を「.」と認識するなど,僅かな誤認識が含まれています.
import os
from PIL import Image
import pyocr
import pyocr.builders
file_path = os.path.sep.join(['tesseract_data', 'ja_1_img.png'])
lang = 'jpn'
tool = pyocr.get_available_tools()[0]
text = tool.image_to_string(
Image.open(file_path),
lang=lang,
builder=pyocr.builders.TextBuilder()
)
print('file_path:', file_path)
print('lang: ', lang)
print('----------')
print(text)
file_path: tesseract_data/ja_1_img.png lang: jpn ---------- 研究者が自身で収集した学術論文の文献 PDF ファイルを効率的に管理し, 研究活動に有 効活用することを目的として, 文献 PDF データベースシステムを開発した. 利用者は PDF ファイルを Web プラウザからサーバにアップロードすることとで, PDEF ファイルを一元的 に管理できるようになるとともに, 全文検索. ジャーナル検索, 著者検索. タグ (キーワー ド) 検索が利用できるようになる. また, 論文情報の登録などに BIBTEX 情報を活用する ことも本システムの特徴のひとつである. 本論文では文献 PDF データベースシステムの 詳細について議論するとともに, 性能評価実験の結果を考察する.