Tesseract OCRをビルドしよう

# 概要
[Tesseract OCR](https://github.com/tesseract-ocr/tesseract)の4.xバージョン以降はLSTMを使っているようです。以下のように2回に分けて今自分が持っている知識を共有したいと思います。
1. ソースからビルド
2. 転移学習

今回は、[github](https://github.com/tesseract-ocr/tesseract)に公開されているソースをビルドし、実行ファイルを作ります。そして画像の中からテキストを読み取ります。
Ubuntu18.04 LTSを使います。

# Installation
## Important Tools
必要なツールをインストールします。結構時間かかります。

```bash
apt-get update

apt-get install git wget curl \
    automake ca-certificates g++ libtool make pkg-config \
    asciidoc docbook-xsl xsltproc \
    libpango1.0-dev \
    libgif-dev libjpeg-dev libpng-dev libtiff-dev zlib1g-dev -y
```
### コマンドの説明
1行目：パッケージリストの更新
2行目：色々ダウンロードするために使うパッケージのインストール
3行目：ビルドするために使うパッケージのインストール
4行目：tesseractのマニュアルが必要とするパッケージのインストール
5行目：tesseractの学習用の機能を使うために必要とするパッケージのインストール
6行目：leptonicaが必要とするパッケージがインストール。leptonicaはtesseractを使うために必要です。

※一回のコマンドでインストールが失敗した場合は、1行ずつインストールしてください。

## Build Leptonica
#### ソースのダウンロード
leptonicaのソースをダウンロードします。今回は/optにしていますが、別に/optではなくてもいいです。

```bash
cd /opt
wget http://www.leptonica.org/source/leptonica-1.78.0.tar.gz
```

次は、圧縮されたファイルを解凍します。

```bash
tar -zxvf /opt/leptonica-1.78.0.tar.gz
```

#### ビルド
##### configure
「configure」とは，これからインストールを行うOSのCPUや
，必要な関連ツールの調査を行い，それらの状況を記述したMakefileファイルを作成するステップです。最後にできるバイナリファイルたちは「make install」するとデフォルトで設定したディレクトリにインストールされますが、configureの実行の際に「--prefix=/好きな場所のパス」を指定する事でインストール先の変更ができます。

```bash
./configure --prefix=/opt/leptonica
```

##### make
「make」とは，configureで作成されたMakefileを基にしてソースコードをコンパイルし、バイナリファイルを作ります。

```bash
make
```

##### make install
「make install」は，makeで生成されたバイナリファイルなどを指定のディレクトリにインストールします。

```bash
make install
```

ちなみに、上記で６回にして実行したコマンドをまとめて１回で行う事もできます。

```bash
wget http://www.leptonica.org/source/leptonica-1.78.0.tar.gz --directory-prefix=/opt && \
    tar -zxvf /opt/leptonica-1.78.0.tar.gz -C /opt && \
    cd /opt/leptonica-1.78.0 && \
    ./configure --prefix=/opt/leptonica && \
    make && \
    make install
```


## Build Tesseract
#### ソースのダウンロード

```bash
cd /opt
git clone https://github.com/tesseract-ocr/tesseract.git tesseract_src
```


#### ビルド
ビルドのやり方は上記で実装したleptonicaと同様ですので今回は1回のコマンドで行います。かなり時間かかります。

```bash
cd /opt/tesseract_src && \
    ./autogen.sh && \
    ./configure --prefix=/opt/tesseract --with-extra-libraries=/opt/leptonica/lib --disable-openmp --disable-debug --disable-opencl --disable-graphics --disable-shared && \
    make && \
    make install && \
    make training && \
    make training-install
```

tesseractを/opt/tesseractの直下にインストールされます。
自分で学習を行わないのであれば、最後の2行が不要です。


## 精度のいいモデルのダウンロード
ソースコードと別のレポジトリに認識精度がいいモデルが公開されています。英語と日本語（横書き）のモデルをダウンロードします。日本語縦書きの場合は「jpn_vert.traineddata」を別当公開されていますが、今回は使わないためダウンロードしません。

```bash
wget https://github.com/tesseract-ocr/tessdata_best/raw/master/eng.traineddata --directory-prefix=/opt/tesseract/share/tessdata
wget https://github.com/tesseract-ocr/tessdata_best/raw/master/jpn.traineddata --directory-prefix=/opt/tesseract/share/tessdata
```

## 環境変数の設定
最後に以下のように環境変数の設定を行います。

```bash
export TESSDATA_PREFIX=/opt/tesseract/share/tessdata
export PATH=$PATH:/opt/tesseract/bin
export LD_LIBRARY_PATH=/opt/leptonica/lib:/opt/tesseract/lib:$LD_LIBRARY_PATH
```
今の設定は一時的なものであり、タミナルを閉じると消えます。永遠に残したい場合は、~/.bash_profileの最後に上記の3行を追加し再起動します。

# Run
まずは、tesseractのどのバージョンインストールされたか確認します。tesseractが正しくインストールされた場合は、バージョン番号が表示されるでしょう。

```bash
tesseract -v
```

テスト用の画像をダウンロードします。他の方法で用意してもOKです。

```
wget https://pbs.twimg.com/media/EIIOocMUUAIAUFa?format=png -O test.png
```
いよいよtesseractの出番。
以下のコマンドで認識依頼かけます。

```bash
tesseract test.png stdout -l eng
```
結果は如何でしたか？

# 補足
■ -l jpnを指定すると日本語のテキストを認識してくれます。

```bash
tesseract test.png stdout -l jpn
```

■ --psm 7を指定すると1行のテキストしかないイメージの制度があがります。複数行ある場合は--psm 6を指定します。tesseract --help-psmを実行するとその詳細を確認する事が出来ます。

```bash
tesseract test.png stdout -l jpn --psm 7
```

# 最後に
今回はソースからのビルドとOCR読み取りまでを学びました。次回は転移学習について書きたいと思います。