Python入門トップページ


目次

  1. データの準備
  2. macOS 編
    1. Tesseract による画像内文字認識
    2. PDF からの文字列抽出
    3. PDFの画像への変換
  3. Windows 編
    1. Tesseract による画像内文字認識
    2. PDF からの文字列抽出
    3. PDFの画像への変換

画像内文字認識と PDF からの文字列抽出

Tesseract による画像内文字認識(Windows 編)

Tesseract(テッセラクト)は Apache ライセンスで配布されているフリーソフトで,OCRエンジン (libtesseract) とコマンドラインプログラム (tesseract) が含まれるパッケージです.画像に含まれる様々な言語の文字を認識することができます.

なお,このセクション(以降3ページ)は Windows の管理者権限のあるアカウントで作業ですることをおすすめします.一般ユーザでは権限の問題でインストール先や Path の設定箇所が異なり,うまく動作しない可能性もあります.

目次に戻る

Tesseract のインストール

Tesseract User Manual によると,Windows 用の Tessract バイナリファイルは The Mannheim University Libraty (UB Mannheim) で配布されているもの利用すると良いようです.UB Mannheim の wiki ページ にある Tesseract installer for Windows の 64 bit 最新版をダウンロードして実行します.

内容を確認して「Next」をクリックします.

tesseract-win01-2022

内容を確認して「I Agree」をクリックします.

tesseract-win02-2022

「Install for anyone using this computer」を選びます.

tesseract-win03-2022

日本語の認識が行えるように「Additional language data (download)」を展開して開きます.

tesseract-win04-2022

その中にある「Japanese」にチェックを入れます.また縦書き日本語の認識が必要なると見込まれる場合は「Japanese (vertical)」にもチェックを入れると良いでしょう.

tesseract-win05-2022

インストール先を確認します.このフォルダ名をコピーしておくと良いでしょう.後の PATH の設定で利用します.

tesseract-win06-2022

スタートメニューの設定を行います.このサイトではスタートメニューを使う予定はないので「Do not create shortcuts」にチェックを入れても良いかもしれません.

tesseract-win07-2022

インストール中です.

tesseract-win08-2022

インストールが完了しました.

tesseract-win09-2022

「Finish」を押して終了します.

tesseract-win10-2022

目次に戻る

PATH の設定

Windows のコマンドプロンプトで入力したコマンドは Windows の PATH に含まれる場所から検索されて実行されます.いま Tesseract をインストールしましたが,まだ PATH の設定を終えていないので,コマンドプロンプトで tesseract を実行することができません.ここでは tesseract の実行ファイルが含まれるフォルダを Windows の PATH に登録します.

具体的には,Windows の「設定」アプリケーションにある「詳細情報」で,「システムの詳細設定」を開きます.さらに「環境変数」をクリックします.

tesseract-win11-2022

「システム環境変数」の「Path」を選択して「編集」をクリックします.

tesseract-win12-2022

ここで確認したインストール先を入力(コピー&ペースト)して追加します.

tesseract-win13-2022

コマンドプロンプトを起動(既に起動していた場合は再起動)して,path コマンドを入力します.結果の中に,tesseract の情報が含まれていれば OK です.

C:\Users\lecture>path ⏎
PATH=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\Microsoft VS Code\bin;C:\HashiCorp\Vagrant\bin;C:\Program Files\PuTTY\;C:\Program Files\Git\cmd;C:\Program Files\dotnet\;C:\Program Files\Tesseract-OCR\;C:\Users\lecture\AppData\Local\Microsoft\WindowsApps;

C:\Users\lecture>

目次に戻る

Tesseract による画像内文字認識

コマンドプロントを起動して画像内に含まれる文字を認識してみます.まず,利用可能な言語を確認します.英語 (eng),日本語 (jpn),縦書き日本語 (jpn_vert) などが利用可能です.

C:\Users\lecture>tesseract --list-langs ⏎
List of available languages in "C:\Program Files\Tesseract-OCR/tessdata/" (4):
eng
jpn
jpn_vert
osd

C:\Users\lecture>

次に,tesseract_data フォルダにある en_1_img.png ファイルの文字を認識し,result_en.txt というファイルに出力します.ここで, -l eng オプションは言語の指定です.この結果,正しく文字を認識していることがわかりました.なお,データは前のページを参考に準備してください.

C:\Users\lecture>cd Documents\python\pyocr ⏎

C:\Users\lecture\Documents\python\pyocr>tesseract tesseract_data\en_1_img.png result_en_1 -l eng ⏎
Estimating resolution as 318

C:\Users\lecture\Documents\python\pyocr>type 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.

C:\Users\lecture\Documents\python\pyocr>

言語の指定を変更すれば日本語でも認識できます.ただし,コマンドプロンプトの文字コードが異なるために文字化けしてしまいます.(出力されたファイルを Visual Studio Code や メモ帳などのテキストエディタで開くと正しく表示できるはずです.)

C:\Users\lecture\Documents\python\pyocr>tesseract tesseract_data\ja_1_img.png result_en_1 -l jpn ⏎
Estimating resolution as 452

C:\Users\lecture\Documents\python\pyocr>type result_ja_1.txt ⏎
遐皮ゥカ閠・′閾ェ霄ォ縺ァ蜿朱寔縺励◆蟄ヲ陦楢ォ匁枚縺ョ譁・鍵 PDF 繝輔ぃ繧、繝ォ繧貞柑邇・噪縺ォ邂。逅・@, 遐皮ゥカ豢サ蜍輔↓譛・蜉ケ 豢サ逕ィ縺吶k縺薙→繧堤岼逧・→縺励※, 譁・鍵 PDF 繝・・繧ソ繝吶・繧ケ繧キ繧ケ繝・Β繧帝幕逋コ縺励◆. 蛻ゥ逕ィ閠・・ PDF
繝輔ぃ繧、繝ォ繧・Web 繝励Λ繧ヲ繧カ縺九i繧オ繝シ繝舌↓繧「繝・・繝ュ繝シ繝峨☆繧九%縺ィ縺ィ縺ァ, PDEF 繝輔ぃ繧、繝ォ繧剃ク€蜈・噪
縺ォ邂。逅・〒縺阪k繧医≧縺ォ縺ェ繧九→縺ィ繧ゅ↓, 蜈ィ譁・、懃エ「. 繧ク繝」繝シ繝翫Ν讀懃エ「, 闡苓€・、懃エ「. 繧ソ繧ー (繧ュ繝シ繝ッ繝シ
繝・ 讀懃エ「縺悟茜逕ィ縺ァ縺阪k繧医≧縺ォ縺ェ繧・ 縺セ縺・ 隲匁枚諠・ア縺ョ逋サ骭イ縺ェ縺ゥ縺ォ BIBTEX 諠・ア繧呈エサ逕ィ縺吶k
縺薙→繧よ悽繧キ繧ケ繝・Β縺ョ迚ケ蠕エ縺ョ縺イ縺ィ縺、縺ァ縺ゅk. 譛ャ隲匁枚縺ァ縺ッ譁・鍵 PDF 繝・・繧ソ繝吶・繧ケ繧キ繧ケ繝・Β縺ョ
隧ウ邏ー縺ォ縺、縺・※隴ー隲悶☆繧九→縺ィ繧ゅ↓, 諤ァ閭ス隧穂セ。螳滄ィ薙・邨先棡繧定€・ッ溘☆繧・

C:\Users\lecture\Documents\python\pyocr>

コマンドプロンプトの文字コードは CP932 になっています.これを Unicode (UTF-8; 65001) に変更すると正しく表示できました.概ね正しく認識できていることがわかりました.

C:\Users\lecture\Documents\python\pyocr>chcp ⏎
現在のコード ページ: 932

C:\Users\lecture\Documents\python\pyocr>chcp 65001 ⏎
Active code page: 65001

C:\Users\lecture\Documents\python\pyocr>type result_ja_1.txt ⏎
研究者が自身で収集した学術論文の文献 PDF ファイルを効率的に管理し, 研究活動に有
効活用することを目的として, 文献 PDF データベースシステムを開発した. 利用者は PDF
ファイルを Web プラウザからサーバにアップロードすることとで, PDEF ファイルを一元的
に管理できるようになるとともに, 全文検索. ジャーナル検索, 著者検索. タグ (キーワー
ド) 検索が利用できるようにな��. また, 論文情報の登録などに BIBTEX 情報を活用する
ことも本システムの特徴のひとつである. 本論文では文献 PDF データベースシステムの
詳細について議論するとともに, 性能評価実験の結果を考察する.

C:\Users\lecture\Documents\python\pyocr>

目次に戻る

Python での文字認識(インストール)

ここでは Python の仮想環境を作成して画像内の文字認識を実行してみます.なお,仮想環境を構築せずに base 環境に直接 pyocr をインストールすることもできると思います.

まず,Anaconda Navigator を起動して,「Environments」のページにある「Create」をクリックします.

tesseract-win14-2022

Name には任意の名前(ここでは「py39ocr」)を入力し,インストールしたい Python のバージョン(ここでは 3.9.12)を選びます.

tesseract-win15-2022

しばらくすると py39ocr 仮想環境が構築されてリストの中に表示されます.

tesseract-win16-2022

仮想環境の構築ができたら Anaconda Prompt を起動します.(1) Anaconda Prompt で仮想環境の一覧を確認し,(2) base 環境の設定とバージョンを確認,(3) py39ocr 仮想環境に入り,(4) py39ocr 仮想環境の設定とバージョンを確認します.

(base) C:\Users\lecture>conda env list ⏎
# conda environments:
#
base                  *  C:\Users\lecture\anaconda3
py39ocr                  C:\Users\lecture\anaconda3\envs\py39ocr


(base) C:\Users\lecture>where python ⏎
C:\Users\lecture\anaconda3\python.exe
C:\Users\lecture\AppData\Local\Microsoft\WindowsApps\python.exe

(base) C:\Users\lecture>python --version ⏎
Python 3.9.12

(base) C:\Users\lecture>conda activate py39ocr ⏎

(py39ocr) C:\Users\lecture>where python ⏎
C:\Users\lecture\anaconda3\envs\py39ocr\python.exe
C:\Users\lecture\AppData\Local\Microsoft\WindowsApps\python.exe

(py39ocr) C:\Users\lecture>python --version ⏎
Python 3.9.12

(py39ocr) C:\Users\lecture>

仮想環境 py39ocr にインストールされているパッケージを確認します.最低限のパッケージだけがインストールされています.

(py39ocr) C:\Users\lecture>pip list ⏎
Package      Version
------------ ---------
certifi      2022.6.15
pip          22.1.2
setuptools   63.4.1
wheel        0.37.1
wincertstore 0.2

(py39ocr) C:\Users\lecture>

Python で OCR を利用するために pyocr パッケージをインストールします.

(py39ocr) C:\Users\lecture>pip install pyocr ⏎
Collecting pyocr
  Downloading pyocr-0.8.3.tar.gz (67 kB)
     ---------------------------------------- 67.6/67.6 kB 3.8 MB/s eta 0:00:00
  Preparing metadata (setup.py) ... done
Collecting Pillow
  Downloading Pillow-9.2.0-cp39-cp39-win_amd64.whl (3.3 MB)
     ---------------------------------------- 3.3/3.3 MB 7.8 MB/s eta 0:00:00
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=37160 sha256=24851fd2b2c5c0754297b567ffa6236939d98d42583b7d7f668297cf348d6262
  Stored in directory: c:\users\lecture\appdata\local\pip\cache\wheels\fd\77\6a\e7f97be77dd46cc892e7b5fd9914f28a2b2fbf0bba86929607
Successfully built pyocr
Installing collected packages: Pillow, pyocr
Successfully installed Pillow-9.2.0 pyocr-0.8.3

(py39ocr) C:\Users\lecture>pip list ⏎
Package      Version
------------ ---------
certifi      2022.6.15
Pillow       9.2.0
pip          22.1.2
pyocr        0.8.3
setuptools   63.4.1
wheel        0.37.1
wincertstore 0.2

(py39ocr) C:\Users\lecture>

続いて pytesseract パッケージをインストールします.

(py39ocr) C:\Users\lecture>pip install pytesseract ⏎
Collecting pytesseract
  Downloading pytesseract-0.3.10-py3-none-any.whl (14 kB)
Collecting packaging>=21.3
  Downloading packaging-21.3-py3-none-any.whl (40 kB)
     ---------------------------------------- 40.8/40.8 kB 2.0 MB/s eta 0:00:00
Requirement already satisfied: Pillow>=8.0.0 in c:\users\lecture\anaconda3\envs\py39ocr\lib\site-packages (from pytesseract) (9.2.0)
Collecting pyparsing!=3.0.5,>=2.0.2
  Downloading pyparsing-3.0.9-py3-none-any.whl (98 kB)
     ---------------------------------------- 98.3/98.3 kB 5.5 MB/s eta 0:00:00
Installing collected packages: pyparsing, packaging, pytesseract
Successfully installed packaging-21.3 pyparsing-3.0.9 pytesseract-0.3.10

(py39ocr) C:\Users\lecture>pip list ⏎
Package      Version
------------ ---------
certifi      2022.6.15
packaging    21.3
Pillow       9.2.0
pip          22.1.2
pyocr        0.8.3
pyparsing    3.0.9
pytesseract  0.3.10
setuptools   63.4.1
wheel        0.37.1
wincertstore 0.2

(py39ocr) C:\Users\lecture>

さらに Juypter Notebook もインストールします.

(py39ocr) C:\Users\lecture>pip install jupyter ⏎

目次に戻る

Python での文字認識

Python の仮想環境構築と必要なパッケージのインストールができれば,Jupyter Notebook を使って画像内の文字認識を行ってみます.まず,フォルダを移動して Jupyter Notebook を起動します.

(py39ocr) C:\Users\lecture>cd Documents\python\pyocr ⏎

(py39ocr) C:\Users\lecture\Documents\python\pyocr>jupyter notebook ⏎

まず,文字認識ができるように環境が構築されていることを確認します.実行結果としてモジュール名が出力されれば問題ありません.もしも [] とだけ出力された場合はいずれかの設定に問題があるはずです.

import pyocr
tools = pyocr.get_available_tools()
print(tools)
[<module 'pyocr.tesseract' from 'C:\\Users\\lecture\\anaconda3\\envs\\py39ocr\\lib\\site-packages\\pyocr\\tesseract.py'>]

次に,言語を英語に設定して 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 データベースシステムの
詳細について議論するとともに, 性能評価実験の結果を考察する.

目次に戻る