目的
PyPI (pip) でTesseract-OCRを構築する方法はネット上にたくさん情報が出ているのですが、Anaconda (conda) に関する情報が少ないです。
私が構築した際につまずいた点があったので備忘録として対策まとめておきます。
システム要件
- Windows 11 Home 22H2
- Anaconda 3.11.1
- Python 3.9.15
試したこと
成功
- Anaconda Promptで
conda install -c conda-forge tesseract
- Jupyter Notebook上で
tesseract
とtessdata
のパス指定
失敗
- Windowsに直接Tesseract-OCRをインストール
- Jupyter Notebook上で
!conda install -c conda-forge tesseract
- Jupyter Notebook上で
!pip install tesseract-ocr libtesseract-dev tesseract-ocr-jpn
-
libtesseract
が見つからないと怒られる
-
成功した方法
Anaconda PromptでTesseract-OCRをインストール
(base) > conda install -c conda-forge tesseract
ここでAnaconda Prompt上で tesseract
が動くか試します。
正しく言語リストが表示されています。
(base) > tesseract --list-langs
List of available languages in "C:\Users\kabeg\anaconda3\share\tessdata/" (125):
afr
amh
ara
asm
(中略)
Jupyter Notebookで動作確認 → 言語リストが空??
続いてJupyter Notebook上でも tesseract
の動作確認です。
tesseract
自体は動いているように見えますが、言語リストが空です。
また言語データ tessdata
のディレクトリはC:/Users/username/anaconda3/share/tessdata
にあるはずですが、どういうわけか ./
になっています。
!tesseract --list-langs
# List of available languages in "./" (0):
Jupyter Notebook上でPathを通す
Windowsの環境変数もいじってみましたが、効果がなかったのでJupyter Notebook上でパスを指定します。
以下のコードを import
文の下などにおいて実行します。
import pyocr
import os
TESSDATA_PATH = 'C:\\Users\\username\\anaconda3\\share\\tessdata' # tessdataへのパス (anacondaでインストールの場合)
# usernameは環境によって変わります
# TESSDATA_PATH = 'C:\\Program Files\\Tesseract-OCR\\tessdata' # tessdataへのパス (Windows直インストールの場合)
# TESSERACT_PATH = 'C:\\Program Files\\Tesseract-OCR\\tesseract.exe' # tesseractが実行できない場合はtesseract.exeにパスを通す
os.environ["TESSDATA_PREFIX"] = TESSDATA_PATH # tessdataへのパスを通す
# os.environ["PATH"] += os.pathsep + TESSERACT_PATH # tesseract.exeのパスも指定する必要が有る場合
再度Jupyter Notebookで動作確認
今度は問題なく言語リストが読み込めました。
!tesseract --list-langs
List of available languages in "C:\Program Files\Tesseract-OCR\tessdata/" (6):
eng
jpn
jpn_vert
osd
script/Japanese
script/Japanese_vert
考察
一番不思議なのはAnaconda Prompt上では言語データへのパスがうまく通っていたのにJupyter NB上ではパスが通っていなかったことです。
考えられる原因としてはJupyter NBで走っているAnacondaは仮想環境であるためパッケージ等は引き継がれるがパス等は引き継がれないことです。
正直私はPython周りにあまり明るくないのでもし原因に心当たりがある方がいらっしゃればコメント等でご教示いただけると幸いです。