C#でOCRを作ってみる

環境

Windows10 Pro 64bit
Visual Studio Community 2017

準備

  • こちらから「tesseract-ocr-3.02.eng.tar.gz」をダウンロードして解凍する
  • 実行ファイルと同じフォルダに入れる

tesseractの導入

Visual Studio 2017
>ツール
>Nugetパッケージマネージャー
>ソリューションのNugetパッケージの管理
で「tesseract3.0.2」をインストールする
(注:最新版でなく「3.0.2」を指定する)

コード

using System;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Imaging;

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

        private void button1_Click(object sender, EventArgs e)
        {
            if (Clipboard.ContainsImage())
            {
                string langPath = "tessdata";

                //言語
                string lngStr = "eng";

                //画像ファイルを取得
                var img = (Bitmap)Clipboard.GetImage();

                //フォーマットの変換
                var bitmap24 = new Bitmap(img.Width, img.Height, PixelFormat.Format24bppRgb);
                using (var gr = Graphics.FromImage(bitmap24))
                {
                    gr.DrawImage(img, new Rectangle(0, 0, bitmap24.Width, bitmap24.Height));
                }

                using (var tesseract = new Tesseract.TesseractEngine(langPath, lngStr))
                {
                    // 文字を指定
                    tesseract.SetVariable("tessedit_char_whitelist", "1234567890.,");

                    // OCRの実行
                    Tesseract.Page page = tesseract.Process(bitmap24);

                    //表示
                    MessageBox.Show(page.GetText());
                }
            }
        }
    }
}

工夫した点

  • Windowsに付属する「Snipping Tool」で画面の一部をキャプチャ
  • それをClipboardにコピー
  • Clipboardから画像を取得できるようにした

苦労した点

「Format32bppRgb」から「Format24bppRgb」にフォーマットを変換するのに苦労した