LoginSignup
8
13

More than 3 years have passed since last update.

Python+OCR(tesseract)で新しい学習データ(言語データ)を追加してみた

Last updated at Posted at 2019-07-07

背景

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が可能になります!

8
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
13