Tesseract-OCR のオリジナル学習データを作成してSwift(iOSアプリ)で使う 〜(1) 準備編〜

# はじめに

自前でOCR機能を開発しようと思ったら、OCRライブラリとしては現状 Tesseract-OCR 一択かなと思います。

もっと素晴らしいライブラリあったら知りたいなぁと思いますが、
OCRについて調査した５〜６年前から現在に至るまで、OCRの分野で劇的なブレイクスルーは感じていません...。

Tesseract-OCRには、公式？から各言語の一般的に利用できる学習データが公開されています。
しかしながら、この汎用的な学習データをそのまま使っても、自分が利用したい「固有の用途」にはイマイチなことがほとんどかと思います。

例えば...

* 検出したい内容が限られている、業務上の何らかの文字列のOCR
* 特定のフォントの特定の文字列だけでいいOCR
* ある特殊なフォントに対応するだけでいいOCR
* ある特定人物の手書き文字のOCR
* ...etc 

自分が欲するOCR学習データを作成してしまいましょう。


# やること

* Tesseract-OCR を利用するための準備をし、
* オリジナルの学習データを作成し、
* Swift（iOSアプリ上）で使うまで、

をやります。
面倒臭いこと多々ありますが、なるべく楽をしながらやっていきます。

恐らく長くなるので、セッションごとに分割しながらまとめていきます。

* [(1) 準備編](https://qiita.com/n-funaki/items/2c1eb8e7d83c59168438) (=この記事)

* (執筆中) (2) フォントを指定して学習データ作成編

* (執筆中) (3) 画像から学習データ作成編

* (執筆中) (4) Swift(iOSアプリ)から利用する編



公式リポジトリはこちらです。
[GitHub: tesseract-ocr](https://github.com/tesseract-ocr)


# 前提

### 筆者環境

* Mac macOS Sierra
* Homebrew v1.5.4
* Java SE 1.8.0_162

### 知識

* OCR を知っている
* Homebrew を知っている
* Java SE を知っている
* XCode を利用できる
* Swift を知っている

#### ※ 必要 Java SE バージョン

Java SE 1.8以上
http://www.oracle.com/technetwork/java/javase/downloads/index.html

Javaは後述のツールを利用するために必要です。
Java SEのインストール方法などは解説しません。

```shell:もろもろバージョン確認
$ java -version
java version "1.8.0_162"
Java(TM) SE Runtime Environment (build 1.8.0_162-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)

$ brew -v
Homebrew 1.5.4-88-g650d6db
Homebrew/homebrew-core (git revision 00cd2; last commit 2018-02-26)
```




# 実践

## 1. Tesseract-OCR 本体の準備

学習データを作成するためには、何は無くとも Tesseract-OCR 本体が必要です。
Tesseract-OCRの本体を、Macか、Windowsか、あるいはLinuxかの環境にインストールする必要があります。

GitHubからソースを取得してコンパイルして...とやり始めると急にハードルがあがるので、
Macでは Homebrew という文明の利器で用意します。

2018年3月1日 現在のTesseractの安定板は 3系(3.05.1)です。
最新版は 4系(4.00.0 alpha) ですが、長らくα版のままです。

どちらが良いのかは正直わかりません。
**が、新しいもの好きは甘んじて人柱になります。**

どちらのバージョンを利用するかは自由ですし、
それぞれのバージョンに対応した学習データを用意しないといけない（はず）なので、
混乱しないようにしましょう。

```shell:HomebrewでTesseractをインストールする
## Tesseract 安定板 3系 を使う場合
$ brew install tesseract --with-training-tools

## まだalpha版の 4系 を使う場合
$ brew install tesseract --HEAD --with-training-tools

```

「--with-training-tools」は、学習データを作成するためのツール群なので、**必須**です。
この指定をしないと、オリジナルの学習データを作成することができません。

インストールが完了したら、ちゃんと利用できる状態か確認します。

```shell:インストールしたtesseractを確認
## バージョンを確認
$ tesseract --version
tesseract 4.00.00alpha
 leptonica-1.75.3
  libjpeg 9b : libpng 1.6.34 : libtiff 4.0.9 : zlib 1.2.8

 Found AVX2
 Found AVX
 Found SSE

## 後で必要になるので、パスも確認しておく
$ which tesseract 
/usr/local/bin/tesseract
```


## 2. 学習データ作成の準備

tesseractの準備ができたところで早速諸々やっていきたいところですが、
学習データ作成の過程では、ターミナルからtesseractのコマンドを沢山叩いたり、
「学習データを作成するためのデータ」を準備したりが非常に手間です。

非常に手間なので、手軽にしてくれる文明の利器**「jTessBoxEditor」**を活用します。

### 2-1. jTessBoxEditor の準備

jTessBoxEditorは「.jar」ファイルのJavaアプリです。
Javaが動作するパソコン環境なら、WindowsでもMacでもLinuxでも動かせると思います。

最新の安定板：jTessBoxEditor-1.7.3.zip

[公式のダウンロード先URL：http://vietocr.sourceforge.net/training.html](http://vietocr.sourceforge.net/training.html)

[↑のURLが利用できなかったので、私がダウンロードした先のURL：https://sourceforge.net/projects/vietocr/files/jTessBoxEditor/](https://sourceforge.net/projects/vietocr/files/jTessBoxEditor/)


### 2-2. jTessBoxEditor を起動

上記からダウンロードしたzipファイルに含まれている「jTessBoxEditor.jar」をターミナルから実行します。

```shell:Readmeに記載されている起動コマンド
$ java -Xms128m -Xmx1024m -jar jTessBoxEditor.jar
```

すると、おもむろにJavaアプリの画面が表示されます。

アプリウィンドウの横幅が割と広めなので、起動ままだとアプリウィンドウの全体が表示されていない可能性があります。
肝心の操作ボタンがウィンドウの右端側にあるので、一見なにをすればいいかまったくわからない画面になってしまいます。
表示の横幅に気をつけてください。

（※私はなりました。
　　使ってみようと思ったら「操作するボタン何処にもないんだけど...？」という失意）


<img width="1440" alt="jTessBoxEditor起動" src="https://qiita-image-store.s3.amazonaws.com/0/55620/6f1ba78b-d61e-bb80-27af-2e167f895084.png">
図 jTessBoxEditor起動画面

操作タブは以下の3つがあります。
用途に応じて、タブが用意する機能を活用していきます。

|タブ名|意味|
|:--:|:--|
|Trainer タブ| 最終的に学習データを生成したり、テストしたりする機能|
|Box Editor タブ| 学習データ作成時に、文字の切り出し範囲などを指定する機能|
|TIFF/Box Generator タブ| フォントと文字を指定して、学習データ作成用のデータを作成する機能|




# つづく

さて、ここまででひとまず準備が整ったので、
次回から実際に学習データを作成していきたいと思います。

[次回] 執筆中... 気長にお待ちください