OpenCVのOCR(tesseract-ocr)をWindows(64bit)、C++で使う

tesseract-ocrのビルドに苦労したので記載

- (2021/04/05追記)  
自分向けのメモとして残しただけの記事にいくつかのWebページからリンクされておりました。ありがとうございます。  
やはりビルドに苦戦していた人が・・・こんな雑な記事で申し訳ない。  
CPPANが終了し、[SoftwareNetwork](https://github.com/SoftwareNetwork/sw)なるものに変わっていたりするので以下を参考にvcpkgでインストールすると良いと思います。
    - https://qiita.com/lilac0011/items/9fe6e061c3a036689a36

再び環境を作成したので、vcpkgのみで構築してみました。

* https://qiita.com/RivaleDgg/items/0462882296ad6d658e2e

# 使うもの(バージョン)
- [Visual Studio Community](https://visualstudio.microsoft.com/ja/downloads/)(2017)
- [CMake](https://cmake.org/)(3.11.4)
- [CPPAN](https://cppan.org/)
- [tesseract-ocr](https://github.com/tesseract-ocr/tesseract/)(3.05.01)
- [OpenCV](https://opencv.org/)(3.4.1)

# CMakeインストール
Windowsでよく使われるであろうMakeツール。
[CMakeのダウンロード](https://cmake.org/download/)から環境にあったものをインストール。 (今回は「Windows win64-x64 Installer」)
インストーラで聞かれるけど環境変数のPATHはお好みで

# CPPANインストール
必要なライブラリをまとめてダウンロード&ビルドするツール?
~~情報が少なくてよくわからん。~~
[CPPANのインデックス](https://cppan.org/client/)からcppan-master-Windows-client.zipをダウンロード&解凍すれば良い。
こちらも環境変数のPATHを・・・

# tesseract-ocrビルド
## ダウンロード
- [tesseract](https://github.com/tesseract-ocr/tesseract/releases)

## ビルド手順(tesseractの展開先で実行)
- cppan.ymlの以下コメントを外し、インストールされているVisual Studioに合わせて変更。

```cppan.yml(変更前)
local_settings:
    #use_shared_libs: true
    #generator: Visual Studio 14 2015 Win64
```

```cppan.yml
local_settings:
    #use_shared_libs: true
    generator: Visual Studio 15 2017 Win64
```

- 以下コマンドをコマンドプロンプトで実行(管理者)

```
mkdir build && cd build
cppan ..
cmake .. -G "Visual Studio 15 2017 Win64"
cppan --generate .
```

- コントロールパネルの地域「管理->システムロケールの変更」から「英語(英国)」を選択して再起動(日本語だとビルドが失敗する)
- Visual Studioでbuildフォルダに作成されたtesseract.slnを開いてビルド(Debug、Release)
- ビルドが完了したら日本語に戻していい

## インストール
- buildフォルダにあるcmake_install.cmakeで以下のインストール設定を変更(「C:/Program Files」に権限なくて失敗する)

```cmake_install.cmake
# Set the install prefix
if(NOT DEFINED CMAKE_INSTALL_PREFIX)
  set(CMAKE_INSTALL_PREFIX "C:/tesseract")
```

- Visual Studioでbuildフォルダのtesseract.slnを開いてINSTALLプロジェクトのみビルド(Debug、Release)

# OpenCVビルド
## ダウンロード
- [opencv](https://github.com/opencv/opencv/tree/3.4.1)
- [opencv_contrib](https://github.com/opencv/opencv_contrib/releases)

## ビルド手順
- CMakeのGUIツールを起動
- source codeに解凍したopencvフォルダを指定
- build the binariesにVisual Studioのソリューション作成先フォルダを指定
- Configureを実行
- OPENCV_EXTRA_MODULES_PATHに解凍したopenCV_contribのmodulesフォルダを指定
- 再度Configureを実行
- contribモジュールが読み込まれるのでBUILD_***となっているモジュールをBUILD_text以外チェックを外す(今回はOCRのみ使用)
- インストールしたtesseractの設定を以下のように指定する(C:/tesseractにインストールしたとする)

```
Lept_LIBRARY=C:/tesseract/lib/pvt.cppan.demo.danbloomberg.leptonica-1.74.4.lib
Tesseract_INCLUDE_DIR=C:/tesseract/include
Tesseract_LIBRARY=C:/tesseract/lib/tesseract305.lib
```

- Configure実行後、Generateでソリューションファイルを作成

- Visual Studioでbuildフォルダに作成されたtesseract.slnを開いてReleaseビルド(Debugでビルドする場合はtesseract305d.libを指定)

## インストール
- buildフォルダにあるcmake_install.cmakeで以下のインストール設定を変更(「C:/Program Files」に権限なくて失敗する)

```cmake_install.cmake
# Set the install prefix
if(NOT DEFINED CMAKE_INSTALL_PREFIX)
  set(CMAKE_INSTALL_PREFIX "C:/opencv")
```

- Visual Studioでbuildフォルダのtesseract.slnを開いてINSTALLプロジェクトのみReleaseビルド(Debugもしているならそちらも実行)


# 使うための設定
Visual Studioで使用するための設定(プロジェクトのプロパティ)
- 構成プロパティ > デバッグ > 環境に「PATH=C:\opencv\x64\vc15\bin;C:\tesseract\bin;%PATH%」
- 構成プロパティ > VC++ディレクトリ > インクルードディレクトリに「C:\opencv\include」
- 構成プロパティ > VC++ディレクトリ > ライブラリディレクトリに「C:\opencv\x64\vc15\lib」
- 構成プロパティ > リンカー > 入力 > 追加の依存ファイルにC:\opencv\x64\vc15\lib内にあるlibファイルをすべて指定

# 参考
- [tesseractのビルドガイド](https://github.com/tesseract-ocr/tesseract/wiki/Compiling#windows)
- [OpenCV3.2 tesseract-ocr TEXT VS2015 64bit であきらめないで！(改)](https://qiita.com/nsugimot/items/74cf8a2a05b3fb3634c0)
- [opencvで文字認識その１　Tesseractラッパ](http://whoopsidaisies.hatenablog.com/entry/2014/11/12/003100)