光学识别Tesseract的使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/flyking2/article/details/82923059

光学识别文件列表

1.Tesseract.dll

2.

这里有三个文件夹

tessdata文件夹里是字库文件,x64与x86里为两个动态连接库

这几个文件夹一定要与你的EXE文件放在一起,添加引用Tesseract.dll,就能使用了

看下面的实例代码:

       

/// <summary>
/// 读取数字
/// </summary>
/// <param name="Handle"></param>
/// <param name="rect"></param>
/// <returns></returns>
public static int readNum(Handle,Rectangle rect)
 {
   string s = string.Empty;

    //这是自己写的一个截窗口图的函数,需为PixelFormat.Format32bppArgb的图
    Bitmap  b = MapColor.Getmap(Handle, rect, true); 
              
    //这里可以添加Bitmap b的图像除里函数,使图像更容易识别

    //这里自己写的一个图像放大的函数,如果识别不准确的话,可以尝一下放大图像
    //Bitmap d= MyBitmap.KiResizeImage(b, b.Width * 2, b.Height * 2);
    try
    {
        //这里我们加载英文字库,来识别数字
        Tesseract.TesseractEngine ocr = new Tesseract.TesseractEngine(Application.StartupPath + @"\tessdata", "eng");

        //这里我们设置识别的范围,识别从0-9的数字(如果要识别英文和数字,这句可省略)
        //若只需识别 A,a,C,D,也可以用此句设置“AaCD”
        //若这句省略,也就是找所有的字母和数字,当然查找范围越大,识别准确率也越低
        //我常设置这句以提高识别准确性
        ocr.SetVariable("tessedit_char_whitelist", "1234567890");

        //从Bitmap b里来识别获取的字符串
        s = ocr.Process(b).GetText();

        s.Trim();
        ocr.Dispose();
        b.Dispose();     
     }
     catch{}
     return int.Parse( s);
 }

/// <summary>
/// 读取中文
/// </summary>
/// <param name="Handle"></param>
/// <param name="rect"></param>
/// <param name="search">识别的中文范围</param>
/// <param name="n">放大倍数,默认为2</param>
/// <returns></returns>
public static string Readwords(Handle, Rectangle rect,string search="",int n=2)
  {
    string str="";
    try
    {                
       Bitmap b = MapColor.Getmap(Handle, rect, true);

       b.MakeTransparent();//设置透明,转化为PixelFormat.Format32bppArgb

       //为提高识别准确性,也可进行图象的二值化处理

       //这里第二个参数为简体字库文件,具体可查看tessdata文件夹下的字库
       Tesseract.TesseractEngine ocr = new Tesseract.TesseractEngine(Application.StartupPath + @"\tessdata", "chi_sim");

                if (search != "")
                    ocr.SetVariable("tessedit_char_whitelist", search);
                if (n > 1)
                {
                    Bitmap d = MyBitmap.KiResizeImage(b, b.Width * n, b.Height * n);//放大2倍
                    str = ocr.Process(d).GetText();
                    ocr.Dispose();
                    b.Dispose();
                    d.Dispose();
                }
                else
                {
                    str = ocr.Process(b).GetText();
                    ocr.Dispose();
                    b.Dispose();
                }
                return str;
            }
            catch(Exception ex)
            {
                MessageBox.Show("Readwords读取错误"+ex);
            }
            return str;
        }

注意代码里的注释,不能识别PixelFormat.Format24bpp的图,所以设置一下透明度或其它方式转成32bpp的才行

相关文件可在下载资源里找或者GitHub上,我已经打好包了,有兴趣的朋友可以研究一下,这个是Tesseract.dll 3.0版的,

下载资源地址https://download.csdn.net/download/flyking2/10699525

猜你喜欢

转载自blog.csdn.net/flyking2/article/details/82923059