search
LoginSignup
3

posted at

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

はじめに

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

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

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

ん、Tesseract とは?

See also:

  • WinSoft <- Delphi 用の各種コンポーネントを開発・販売している

Tesseract (テッセラクト)

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

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

See also:

TTesseractOCR4

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

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

TTesseractOCR4 の使い方

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

デモプログラムの使い方

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

image.png
[Text] タブに認識結果が出力されます。
image.png

日本語の認識

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

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

こんな感じで。

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

image.png
まあまあイケてます。
image.png
傾きを補正したり、二値化するなりの前処理をすれば認識率も向上するかもしれません。
image.png

おわりに

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

See also:

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
3