C#で簡単なOCRアプリを作ってみる(Tesseract 4)

はじめに

以前にもC#OCRを作りました。
touch-sp.hatenablog.com
前回はTesseract 3でしたが今回はTesseract 4を使ってみます。

環境

Windows10 Pro 64bit
Visual Studio Community 2019
.NET Framework 4.5.2

Visual Studio 2019
>ツール
>Nugetパッケージマネージャー
>ソリューションのNugetパッケージの管理
で「tesseract4.1.1」をインストールします。

「tesseract」が見つけられない時には図の赤丸のところに注意して下さい。
f:id:touch-sp:20210722110511p:plain:w400

f:id:touch-sp:20210722112351p:plain:w400
このような選択画面が出たら「プロジェクトファイルのPackageReference」を選択して下さい。

学習済みデータのダウンロード

こちらから「jpn.traineddata」をダウンロードして実行ファイル(exeファイル)と同じフォルダに保存します。

Windowsフォームの作成

フォームにボタンとテキストボックスを配置してボタンにクリックイベントを追加します。
テキストボックスはマルチラインにチェックして下さい。

C#コード

using System;
using System.Drawing;
using System.Windows.Forms;
using Tesseract;

namespace WindowsFormsApp2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)

        {
            if (Clipboard.ContainsImage())
            {
                var img = (Bitmap)Clipboard.GetImage();
 
                using (var tesseract = new TesseractEngine("./", "jpn"))
                {
                    Pix pix = PixConverter.ToPix(img);
                    Page page = tesseract.Process(pix);
                    textBox1.Text = page.GetText().Replace("\n", "\r\n");
                }
            }
        }
    }
}

使い方

Snipping Tool」または「切り取り&スケッチ」を使って画面の一部を選択しクリップボードにコピーして下さい。その後フォーム上に配置したボタンをクリックするとテキストボックスに結果が表示されます。

このような感じです。
f:id:touch-sp:20210328120323p:plain

Tesseract 3とTesseract 4の違い

Tesseract 4では「PixConverter.ToPix」を使うことによって「Format32bppRgb」から「Format24bppRgb」へのフォーマット変換が不要になっています。

その他

PythonでもOCRを作りました。よかったらそちらも読んで下さい。
touch-sp.hatenablog.com

注意点(エラーの対処法)

PixConverterが使えない

このエラーが出る人が多いらしくよく検索されています。
一番最初にプロジェクトを作成する段階で「Windowsフォームアプリ」ではなく「Windowsフォームアプリケーション(.NET Framework)」を選択する必要があります。自分もここで一回つまづきました。
f:id:touch-sp:20210722111238p:plain:w400