C#/C# 프로그래밍/

C# tesseract를 이용한 OCR

2019. 10. 1.

2019/10/01 - [프로그래밍/C# 프로그래밍] - C# tesseract 설치

 

tesseract 설치는 링크참조

 

프로젝트를 만들어 줍시다.

저는 ocrtest라고 만들었습니다.

 

위 그림과 같이 picturebox, textbox, button3개를 추가해줍니다

 

using문 추가

using Tesseract;

 

버튼1 클릭 이벤트 추가

		private void Button1_Click(object sender, EventArgs e)
        {
            string imgfile = string.Empty;

            OpenFileDialog dialog = new OpenFileDialog();
            dialog.InitialDirectory = @"C:\";

            if (dialog.ShowDialog() == DialogResult.OK)
            {
                imgfile = dialog.FileName;
            }

            try
            {
                bmp = new Bitmap(imgfile);

                pictureBox1.Image = bmp;
            }
            catch { }
        }
        

 

버튼1 클릭 이벤트는 그림파일을 열어서

picturebox1에 띄워주는 소스입니다.

 

버튼2 클릭 이벤트 추가

		 private void Button2_Click(object sender, EventArgs e)
        {
            for (int i = 0; i &lt bmp.Width; i++)
            {
                for (int j = 0; j &lt bmp.Height; j++)
                {
                    Color c = bmp.GetPixel(i, j);
                    int binary = (c.R + c.G + c.B) / 3;

                    if (binary &gt 200)
                        bmp.SetPixel(i, j, Color.Black);
                    else
                        bmp.SetPixel(i, j, Color.White);
                }
            }

            pictureBox1.Image = bmp;
        }
        
  

 

for문을 이용한 간단한 binary소스입니다.

 

버튼3 클릭 이벤트 추가

	 
		private void Button3_Click(object sender, EventArgs e)
        {
            Pix pix = PixConverter.ToPix(bmp);

            var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.TesseractAndCube);
            //string whitelist = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
            //화이트리스트 사용할시 화이트리스트 목록
            //engine.SetVariable("tessedit_char_whitelist", whitelist);
            //화이트리스트 적용

            var result = engine.Process(pix);

            textBox1.Text = result.GetText();
        }        

 

tesseract를 이용하여 문자인식하는 소스입니다.

 

디버깅 하고 테스트해봅시다

버튼1을 눌러 파일을 불러옵니다.

 

저는 포털사이트의 로고를 캡처해서 사용했습니다.

 

버튼 2를 누르면

이진화가 됩니다.

이제 버튼3을 누르면

 

잘 작동하는군요.

 

전체코드

더보기
using System;
using System.Drawing;
using System.Windows.Forms;
using Tesseract;

namespace ocrtest
{
    public partial class Form1 : Form
    {
        Bitmap bmp;

        public Form1()
        {
            InitializeComponent();
        }

        private void Button1_Click(object sender, EventArgs e)
        {
            string imgfile = string.Empty;

            OpenFileDialog dialog = new OpenFileDialog();
            dialog.InitialDirectory = @"C:\";

            if (dialog.ShowDialog() == DialogResult.OK)
            {
                imgfile = dialog.FileName;
            }

            try
            {
                bmp = new Bitmap(imgfile);

                pictureBox1.Image = bmp;
            }
            catch { }
        }

        private void Button2_Click(object sender, EventArgs e)
        {
            for (int i = 0; i &lt bmp.Width; i++)
            {
                for (int j = 0; j &lt bmp.Height; j++)
                {
                    Color c = bmp.GetPixel(i, j);
                    int binary = (c.R + c.G + c.B) / 3;

                    if (binary &gt 200)
                        bmp.SetPixel(i, j, Color.Black);
                    else
                        bmp.SetPixel(i, j, Color.White);
                }
            }

            pictureBox1.Image = bmp;
        }

        private void Button3_Click(object sender, EventArgs e)
        {
            Pix pix = PixConverter.ToPix(bmp);

            var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.TesseractAndCube);
            //string whitelist = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
            //화이트리스트 사용할시 화이트리스트 목록
            //engine.SetVariable("tessedit_char_whitelist", whitelist);
            //화이트리스트 적용

            var result = engine.Process(pix);

            textBox1.Text = result.GetText();
        }
    }
}