CentOSを使って画像から文字起こしするためにTess4J用にTesseractをコンパイルする

# 必要なもの
VirtualBox(やっぱり、javaって素晴らしい。)
CentOS6.3 ([ iso ](https://mirror.nsc.liu.se/centos-store/6.3/isos/x86_64/CentOS-6.3-x86_64-bin-DVD1.iso)) のディスクイメージ (渋い)

# 仮想環境
- RAM 8GB
- ストレージ 40GB

# 手順
## VMをセッティング
最初に構築のTestをするか聞いてくるが、テストはスキップすること。なぜか次に進めなくなるので。
後は、そのまま進める。Desktopバージョンで、全部入りでインストールする。

## インターネットの設定
最初はnetが繋がらないので設定。
ターミナル起動して、スーパーユーザ切り替え

```
su - 
```

以下のファイルをviでいじる。（iで挿入モード、escでエスケープして、:wq!で上書き）

```
vi /etc/sysconfig/network-scripts/ifcfg-eth0
```

ONBOOT=yes　#noをyesに変更

サービスをリスタート。

```
service netowrk restart
```

FireFoxが繋がるか確認して、つながればOK。
（ハードウェアによっては、ドライバーのインストール必要。）

## その他のアップデート

ターミナルを起動して、
スーパーユーザ切り替え

```
su - 
```

アップデート

```
yum update
```

## javaを1.8にアップグレード（develバージョンで）

```
# javacにもパス通るから。
yum install java-1.8.0-openjdk-devel
```

## Eclipse Neon
eclipse neonをインストール（これ以上だと描画系ライブラリでバージョンエラー）
https://www.eclipse.org/downloads/packages/release/neon/3

Mavenプロジェクトで、tess4jを使ことを前提としています。

## 開発ツールをインストールして、tesseractをコンパイル

### 開発ツール(gccは4.7以上が必要)

```
# 開発ツール
yum -y groupinstall "development tools"
# 周辺ライブラリ
yum -y install libpng-devel libtiff-devel libjpeg-devel
# コンパイルに必要なツール
yum -y install centos-release-scl
# コンパイラー
yum -y install devtoolset-7-gcc-c++
```

## インスコした環境を有効にする
これは環境設定ファイルに設定しない限り、毎回ターミナルで実行が必要。

```
source /opt/rh/devtoolset-7/enable
```

## コンパイルに必要なツールのインストール

```
cd /usr/src/
wget http://ftpmirror.gnu.org/autoconf-archive/autoconf-archive-2019.01.06.tar.xz
tar xvvfJ autoconf-archive-2019.01.06.tar.xz
cd autoconf-archive-2019.01.06/
./configure --prefix=/usr
make
make install
```

## Tesseractの画像処理プログラムをコンパイル、インストール。

```
cd /usr/src/
wget http://leptonica.org/source/leptonica-1.77.0.tar.gz
tar xvvfz leptonica-1.77.0.tar.gz
cd leptonica-1.77.0/
./configure --prefix=/usr/local/
make
make install
```

## Tesseractをコンパイル、インストール

今回は[4.1.1-rc2](https://github.com/tesseract-ocr/tesseract/releases/tag/4.1.1-rc2)

```
cd /usr/src/
wget https://github.com/tesseract-ocr/tesseract/archive/4.1.1-rc2.tar.gz
tar xvvfz 4.1.1-rc2.tar.gz # なぜかtesseract名が抜けてる笑。このバージョンだけ。
cd tesseract-4.1.1-rc2 
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
./autogen.sh
./configure --prefix=/usr/local/ --with-extra-libraries=/usr/local/lib/ --disable-openmp
make install
```

無事に終わったら、/usr/local/lib/に全部できているので、
「linux-x86-64」フォルダを好きな場所に作り、
この中にコピー。
cp file file... dir

これをeclipseのtesseractを使うプロジェクトのsrc/main/resourcesフォルダ直下にコピー

## Eclipseをターミナルから起動する
まず、なんだかlocaleを設定する。(https://github.com/nguyenq/tess4j/issues/105)

```
export LC_ALL=C
```

この状態で、eclipseの起動ファイルパスをターミナルに打ち込んで、起動。

## ソフトウェアのリリース

自分で作ったjavaプログラムをコンパイルできたら、
jarと、tessdataフォルダと、コンパイル済みの「linux-x86-64」フォルダを同梱する。

同様の環境でターミナルでテストするときは、
export LC_ALL=Cしてから、
コマンド。

以上。

## はまったところ
・コンパイル時、openmpのリンカーエラーを避けるために、オプションを追加する。（https://github.com/tesseract-ocr/tesseract/issues/2323）
・linux-x86-64フォルダを作り、中にコンパイル済みのファイルを全部入れて、これをプロジェクトフォルダ直下ではなく、リソースフォルダにコピーしないとだめ。
・（上記の方法だと）tesseractライブラリをコンパイルするときは毎回ターミナルで「source /opt/rh/devtoolset-7/enable」が必要
・localeコマンドで「export LC_ALL=C」(※設定ファイルに記録すればいいんですが)してから、そのままターミナルでeclipse起動。

# Reference
- https://www.cnblogs.com/zlAurora/p/9266039.html
- http://badbivouac.blog.fc2.com/blog-entry-12.html
- http://otiai10.hatenablog.com/entry/2016/11/07/063317
- https://www.tekovic.com/installing-tesseract-ocr-40-on-centos-6

Visionary Imaging Services, Inc.
Tatsuaki Kobayashi