Tesseract 5 を使って C# で簡単なOCRアプリを作ってみる

はじめに

以前にもC#でOCRを作りました。

touch-sp.hatenablog.com

前回はTesseract 4でしたが今回はTesseract 5を使ってみます。

環境

Windows11
Visual Studio Community 2026
.NET Framework 4.8

二つのNugetパッケージ(「Tesseract」と「TesseractOCR」)で試してみました。

「Tesseract」パッケージ

Visual Studio 2026

>プロジェクト

>Nugetパッケージの管理

から「Tesseract 5.2.0」をインストールしました。

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

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

学習済みデータは「fast」と「best」の2種類があります。

「fast」はこちら

「best」はこちら

Windowsフォームの作成

フォームにボタンとテキストボックスを配置してボタンにクリックイベントを追加します。

テキストボックスはマルチラインにチェックして下さい。

C#コード

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

namespace ocr_csharp
{
    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」または「切り取り&スケッチ」を使って画面の一部を選択しクリップボードにコピーして下さい。

その後フォーム上に配置したボタンをクリックするとテキストボックスに結果が表示されます。

このような感じです。

「TesseractOCR」パッケージ

Visual Studio 2026

>プロジェクト

>Nugetパッケージの管理

から「TesseractOCR 5.5.1」をインストールしました。

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

「Tesseract」の場合と同じです。

Windowsフォームの作成

フォームにボタンとテキストボックスを配置してボタンにクリックイベントを追加します。

テキストボックスはマルチラインにチェックして下さい。

C#コード

using System;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
using TesseractOCR;
using TesseractOCR.Enums;

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

        private void button1_Click(object sender, EventArgs e)
        {
            if (Clipboard.ContainsImage())
            {
                using (var img = (Bitmap)Clipboard.GetImage())
                {
                    // 2. TesseractOCR では TesseractEngine クラスを使用
                    // コンストラクタの引数は (tessdataパス, 言語, エンジンモード)
                    using (var engine = new Engine(@"./", "jpn", EngineMode.Default))
                    {
                        using (var ms = new MemoryStream())
                        {
                            img.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
                            using (var pix = TesseractOCR.Pix.Image.LoadFromMemory(ms.ToArray()))
                            {
                                // 4. 画像の処理 (PageSegMode を明示)
                                using (var page = engine.Process(pix, PageSegMode.SparseText))
                                {
                                    // GetText() で結果を取得
                                    var text = page.Text;
                                    textBox1.Text = text.Replace("\n", "\r\n");
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

使い方

「Tesseract」の場合と同じです。