tesseract 特定フォントの言語データを作る

Linuxtesseract

特定フォントの、言語データを作成します。複数フォントでもOKです。

作成される 言語データ(xxx.traineddata) ファイルは一つです。

今回は日本語の横書き用フォントで試してみました。

★作成環境★
・Linux min 19
・tesseract 3.05.02

フォントのインストール

  1. テンポラリーディレクトリへ移動
  2. cd /tmp

  3. フォントのダウンロード
  4. git clone git://github.com/tesseract-ocr/langdata.git

  5. /tmp/landdata/jpn/jpn.config を開く
  6. vi /tmp/langdata/jpn/jpn.config

  7. 縦書き用フォントは使用しないので、下記の行を # でコメントアウトする。
  8. # tessedit_load_sublangs jpn_vert

    /tmp/langdata/jpn/jpn.config の4行目あたり
    #Fixes https://github.com/tesseract-ocr/tesseract/issues/988
    preserve_interword_spaces 1
    
    # tessedit_load_sublangs jpn_vert
    # Important configurations for CJK mode
    
    # New Segmentation search params
    

  9. フォントのインストール
  10. sudo apt-get install -y fonts-takao-gothic
    sudo apt-get install -y fonts-takao-mincho
    sudo apt-get install -y fonts-takao-pgothic
    sudo apt-get install -y fonts-takao
    sudo apt-get install -y fonts-ipaexfont
    sudo apt-get install -y fonts-ipaexfont-gothic
    sudo apt-get install -y fonts-noto-cjk
    sudo apt-get install -y fonts-noto-cjk-extra
    

  11. フォントキャシュの更新
  12. fc-cache -fv

  13. フォントリストの表示

  14. インストールしたフォントの確認
    text2image --list_available_fonts --fonts_dir /usr/share/fonts
    ※表示されたフォント名は、このあと編集する language-specific.sh 内のフォント名を記入する際に必要となります。

フォントの指定(不要フォント名削除編)

  1. language-specific.sh のバックアップ

  2. パッケージ版(例)
    cp /usr/share/tesseract-ocr
    cp language-specific.sh language-specific.sh.bk
    

    ソースコンパイル版(例)
    cd /home/(ユーザ名)/tesseract-3.05.02/training
    cp language-specific.sh language-specific.sh.bk
    

    ※コンパイル版はソースファイルのディレクトリの中にあります。
  3. language-specific.sh の編集
  4. vi language-specific.sh

    1, JPN_FONTS 内のインストールされていない、下記のフォント名を削除する
    "TakaoExGothic" \
    "TakaoExMincho" \
    "VL Gothic" \
    "VL PGothic" \
    

    削除すると、こんな感じになる。
    JPN_FONTS=( \
        "TakaoGothic" \
        "TakaoMincho" \
        "TakaoPGothic" \
        "TakaoPMincho" \
        "Noto Sans Japanese Bold" \
        "Noto Sans Japanese Light" \
    )
    

    2, 旧フォント名 Noto Sans Japanese を新フォント名に変更する。
    (旧フォント名)
    "Noto Sans Japanese Bold" \
    "Noto Sans Japanese Light" \
    

    (新フォント名)
    "Noto Sans CJK JP Bold" \
    "Noto Sans CJK JP Light" \
    
    ※tesseract v3.05.02 は旧フォント名のまま記述されてしまっているので変更が必要です。
    ※v4.xx は新しいかもしれませんが、旧フォント名の場合は修正してあげてください。

    変更すると、こんな感じになる。
    JPN_FONTS=( \
        "TakaoGothic" \
        "TakaoMincho" \
        "TakaoPGothic" \
        "TakaoPMincho" \
        "Noto Sans CJK JP Bold" \
        "Noto Sans CJK JP Light" \
    )
    

    3, VERTICAL_FONTS 内の、下記の縦書き用のフォント名を削除する。
    "TakaoExGothic" \ # for jpn
    "TakaoExMincho" \ # for jpn
    

    削除すると、こんな感じになる。
    VERTICAL_FONTS=( \
        "AR PL UKai Patched" \ # for chi_tra
        "AR PL UMing Patched Light" \ # for chi_tra
        "Baekmuk Batang Patched" \ # for kor
        )
    

    編集が完了したら保存してください。

ここまでの作業でエラーが起きないことを確認する

tesstrain.sh --overwrite --lang jpn --langdata_dir /tmp/langdata

下記のようなメッセージで終われば成功( successfully が末尾から数行目にある)
 :
 :
Combining tessdata files
Output /tmp/tmp.p6smtJD1Kw/jpn/jpn.traineddata created successfully.
Creating new directory /tmp/tesstrain/tessdata
Moving /tmp/tmp.p6smtJD1Kw/jpn/jpn.traineddata to /tmp/tesstrain/tessdata

Completed training for language 'jpn'
※この時点でエラーが起きるパターンは、目的のフォントがインストールされていない、または、 language-specific.sh の編集で誤字・脱字だと思います。

フォント名の指定(フォント名追加編)

  1. language-specific.sh の編集
  2. vi language-specific.sh

    1, JPN_FONTS 内に、下記のフォント名を追加する
    "IPAexMincho" \
    "IPAexGothic" \
    "Noto Sans Mono CJK JP" \
    "Noto Sans Mono CJK JP Bold" \
    "Noto Serif CJK JP" \
    "Noto Serif CJK JP Bold" \
    
    ※行の末尾は \ で終わること。
    ※無駄なスペースが \ の後ろにあると後々の作業でエラーの原因になる。

    追加すると、こんな感じになる。
    JPN_FONTS=( \
        "TakaoGothic" \
        "TakaoMincho" \
        "TakaoPGothic" \
        "TakaoPMincho" \
        "Noto Sans CJK JP" \
        "Noto Sans CJK JP Bold" \
        "IPAexMincho" \
        "IPAexGothic" \
        "Noto Sans Mono CJK JP" \
        "Noto Sans Mono CJK JP Bold" \
        "Noto Serif CJK JP" \
        "Noto Serif CJK JP Bold" \
    )
    

フォント属性をプロパティファイルに追記


追加分フォントの、フォント属性をプロパティファイルに追記してあげる必要があります。

  1. /tmp/langdata/font_properties の編集
  2. vi /tmp/langdata/font_properties

    ※ファイル内のフォーマットは下のとおりです。
    <fontname> <italic> <bold> <fixed> <serif> <fraktur>

  3. 下記の内容を /tmp/langdata/font_properties の末尾に書き加えます。
  4. IPAexMincho 0 0 0 1 0
    IPAexGothic 0 0 0 0 0
    Noto_Sans_CJK_JP 0 0 0 0 0
    Noto_Sans_CJK_JP_Bold 0 1 0 0 0
    Noto_Sans_Mono_CJK_JP 0 0 1 0 0
    Noto_Sans_Mono_CJK_JP_Bold 0 1 1 0 0
    Noto_Serif_CJK_JP 0 0 0 1 0
    Noto_Serif_CJK_JP_Bold 0 1 0 1 
    

言語データを作成する

  1. 言語データ作成
  2. tesstrain.sh --overwrite --lang jpn --langdata_dir /tmp/langdata

    下記のようなメッセージで終われば成功( successfully が末尾から数行目にある)
     :
     :
    Combining tessdata files
    Output /tmp/tmp.p6smtJD1Kw/jpn/jpn.traineddata created successfully.
    Creating new directory /tmp/tesstrain/tessdata
    Moving /tmp/tmp.p6smtJD1Kw/jpn/jpn.traineddata to /tmp/tesstrain/tessdata
    
    Completed training for language 'jpn'
    
    ※この時点でエラーが起きるパターンは、目的のフォントがインストールされていない、または、 language-specific.sh の編集で誤字・脱字だと思います。

  3. 作成された言語データの確認
  4. ls -l /tmp/tesstrain/tessdata/jpn.traineddata

  5. 言語データを配置する
  6. sudo cp /tmp/tesstrain/tessdata/jpn.traineddata /(データディレクトリ)/.

    <データディレクトリ>の場所
    パッケージ版(例)
    /usr/share/tesseract-ocr/tessdata

    ソースコンパイル版(例)
    /usr/local/tesseract/share/tessdata

動作確認

  1. ホームディレクトリに sample ディレクトリを作成する。
  2. mkdir ~/sample

  3. 下の画像を ファイル名「 test.png」として sample ディレクトリに保存する。
  4. 画像保存
  5. sample ディレクトリに移動する
  6. cd ~/sample

  7. 文字認識をさせてみる
  8. tesseract test.png result -l jpn
    ※オプションの -l は、英字のエル(小文字)です。

    正常
    tesseract test.png result -l jpn
    Tesseract Open Source OCR Engine v3.05.02 with Leptonica
    

    異常(画像ファイルが存在しない場合)
    $ tesseract test.png result -l jpn
    Tesseract Open Source OCR Engine v3.05.02 with Leptonica
    Error in fopenReadStream: file not found
    Error in findFileFormat: image file not found
    Error during processing.
    

  9. result.txt ファイルが作成されます。覗いてみる。
  10. cat result.txt
    
    夏が来た
    

  11. ファイルの中身は 「 夏が来た 」かと思います。