Delphi から Tesseract OCR エンジンを使う

# はじめに
以前、Embarcadero さんのブログ記事にこんなのがありました。

 - [Optical Character Recognition using Winsoft’s component (Embarcadero Blog)](https://blogs.embarcadero.com/optical-character-recognition-using-winsofts-component/)
 - [WinSoft コンポーネントを使って OCR 文字認識を行う (Embarcadero Blog)](https://blogs.embarcadero.com/ja/optical-character-recognition-using-winsofts-component-ja/)

「あー Winsoft さんの有償コンポーネントの紹介か～」と思って英語版の記事をざっとしか読んでいなかったのですが、日本語版の記事をちょっと読み返してみたらこんな事が書いてありました。

> このOCRコンポーネントは、TesseractのOCRエンジンを使用しています。

ん、**Tesseract** とは？

**See also:**

 - [WinSoft](https://winsoft.sk/index.htm) &lt;- Delphi 用の各種コンポーネントを開発・販売している

# Tesseract (テッセラクト)

調べてみたら、**Tesseract (テッセラクト)** というのはオープンソースの OCR (Apache License) で、WinSoft さんのコンポーネントはこれのラッパーのようです。

んー、オープンソースのラッパーコンポーネントが有償ってのにちょっと引っ掛かりを覚えますが、それ以前に Tesseract の素性を真っ先に書くべきだと思うんですよね。日本語版記事の元になった英語版記事には `Tesseract` の文字は一切出てきません。それってどうなのさ～？


**See also:**

 - [Tesseract (Wikipedia)](https://ja.wikipedia.org/wiki/Tesseract_(%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2))
 - [Tesseract (GitHub: @tesseract-ocr)](https://github.com/tesseract-ocr/tesseract)

## TTesseractOCR4
それで、この Tesseract を WinSoft さんのコンポーネントを使わずに Delphi から使う方法を調べようとしたら、**TTesseractOCR4** というリポジトリが GitHub にあるのを発見しました。

 - [TTesseractOCR4 (GitHub: @r1me)](https://github.com/r1me/TTesseractOCR4)

折角なので、こちらを試してみたいと思います。ライセンスは MIT となっています。

### TTesseractOCR4 の使い方

 1. リポジトリを任意の場所にクローンするか ZIP でダウンロードして解凍します。
 2. `lib\tesseractocr-master.zip` を解凍し、DLL を `bin` フォルダにコピーします。
 3. 学習済み言語データファイルを [tesseract-ocr/tessdata/](https://github.com/tesseract-ocr/tessdata_fast) からダウンロードし、`bin\tessdata` にコピーします。
 4. `examples` フォルダにある `DelphiExamples.groupproj` を Delphi で開いてコンパイルします。

### デモプログラムの使い方

 1. `[Open Image]` ボタンを押して画像ファイルを開きます。サンプル画像は `bin\samples` にあります。
 2. `[Recognize]` ボタンを押して文字認識させます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/04221e3e-edf9-b0d5-7552-5af98e9fd5d4.png)
`[Text]` タブに認識結果が出力されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/9df572dd-c121-1d2a-e129-747afd5139bc.png)

:::note warn
日本語ファイル名だと読み込めない事があるようです。
:::

## 日本語の認識

日本語版ブログ記事にあったのと同様の修正を行えばよいようです。

```pascal:FormTesseractOCRImage.pas
  if not Tesseract.Initialize('tessdata' + PathDelim, 'eng', oemDefault) then
    ...
```

こんな感じで。

```pascal:FormTesseractOCRImage.pas
  if not Tesseract.Initialize('tessdata' + PathDelim, 'jpn+jpn_vert', oemDefault) then
    ...
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/69486458-6991-fe60-9283-df1bac71c29e.png)
まあまあイケてます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/d2fd8739-58eb-1db4-7649-3dd6b19b9f7c.png)
傾きを補正したり、二値化するなりの前処理をすれば認識率も向上するかもしれません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/104ee3a9-70d0-3939-7125-eb5a053161b3.png)


# おわりに

この TTesseractOCR4 は Tesseract v4 に対応したもののようですが、現時点 (2023/01) での Tesseract の最新バージョンは 5.3.0 となっています。最新版に対応させるには修正が必要かもしれません。

**See also:**

 - [Tesseract (GitHub: @tesseract-ocr)](https://github.com/tesseract-ocr/tesseract) &lt;- 本家サイトです
 - [tesseract (GitHub: @UB-Mannheim)](https://github.com/UB-Mannheim/tesseract/wiki) &lt;- プレビルドバイナリがあります
 - [tessdata_fast (GitHub: @tesseract-ocr)](https://github.com/tesseract-ocr/tessdata_fast) &lt;- v4 の学習済み言語データがあります
 - [TTesseractOCR4 (GitHub: @r1me)](https://github.com/r1me/TTesseractOCR4)  &lt;- Delphi で v4 を使うサンプルが含まれています