背景
Anaconda + python + tesseract でOCR環境を構築したのですが、
対応していない言語をOCRする必要が出てきました。
ということで、新たな言語の学習データを追加してみました。
環境
MacOS Mojave ver10.14.4
Anaconda Navigator 1.9.7
※Anacondaのインストールは、こちらを参考にいたしました
JupiterNotebook 5.4.0
実践
tesseract用の学習データ(「xxxx.traindeddata」)を入手して、指定のフォルダに格納します。
学習データの入手
各種言語データ
https://github.com/tesseract-ocr/tessdata
使用したい言語データ(xxx.traineddata)を入手します。
7セグメント用(温度計等のデジタル数字)
https://github.com/arturaugusto/display_ocr
「letsgoditital」→「letsgodigital.traineddata」を入手
学習データの格納場所
ダウンロードしてきた学習データを下記のフォルダに格納します。今回は、「letsgoditital」を格納しました。
/Users/xxx/anaconda3/share/tessdata/
もし、格納場所がわからない場合は、下記のコードを一度実行してみましょう。
実行結果の一番下に
「TesseractError: (1, b'Error opening data file 〜〜」
という部分があるかと思います。これは、指定した学習データがないよというエラーです。
なので、こちらに学習データを格納してあげましょう。
txt = tool.image_to_string(
Image.open('./imagesFolder/num/567.png'),
lang="letsgodigital",
builder=pyocr.builders.TextBuilder(tesseract_layout=6)
)
print( txt )
TesseractError Traceback (most recent call last)
<ipython-input-7-294dc4179e9d> in <module>()
2 Image.open('./imagesFolder/num/567.png'),
3 lang="letsgodigital",
----> 4 builder=pyocr.builders.TextBuilder(tesseract_layout=6)
5 )
6 print( txt )
~/anaconda3/lib/python3.6/site-packages/pyocr/tesseract.py in image_to_string(image, lang, builder)
378 configs=builder.tesseract_configs)
379 if status:
--> 380 raise TesseractError(status, errors)
381
382 tested_files = []
TesseractError: (1, b'Error opening data file
/Users/xxxx/anaconda3/share/tessdata/letsgodigital.traineddata\n
Please make sure the TESSDATA_PREFIX environment variable is set to your "tessdata" directory.\nFailed loading language \'letsgodigital\'\nTesseract couldn\'t load any languages!\nCould not initialize tesseract.\n')
学習データの確認
下記コードを使って、学習データが使えるようになっているか確認します!
from PIL import Image
import sys
import pyocr
import pyocr.builders
tools = pyocr.get_available_tools()
if len(tools) == 0:
print("No OCR tool found")
sys.exit(1)
# The tools are returned in the recommended order of usage
tool = tools[0]
print("Will use tool '%s'" % (tool.get_name()))
# Ex: Will use tool 'libtesseract'
langs = tool.get_available_languages()
print("Available languages: %s" % ", ".join(langs))
lang = langs[0]
print("Will use lang '%s'" % (lang))
結果はこちら。
無事7セグメント用デジタル数字(「letsgodigital」)が使用可能なのが確認できます。
Will use tool 'Tesseract (sh)'
Available languages: eng, jpn, letsgodigital,
Will use lang 'afr'
終わりに
以上、tesseractの初期セットにない学習データを追加してみました!これで、いろんな言語のOCRが可能になります!