你的位置:首页 > ASP.net教程

[ASP.net教程][Tesseract]简单数字识别


图像识别涉及的理论:傅里叶变换,图形形态学,滤波,矩阵变换等等.

Tesseract的出现为了解决在没有这些复杂的理论基础,快速识别图像的框架.

 

 

准备:

1.样本图像学习,预处理  (平均每1个元素出现20次)

2.学习,初步识别

3.校正学习库

 

测试:

1.待识别图像,预处理

2.根据学习库 识别

 

 

例子1:图片反色

 1 private static void Reverse(string fileName,string outName) 2     { 3       using (var pic = Image.FromFile(fileName) as Bitmap) 4       { 5         for (int i = 0; i < pic.Width; i++) 6         { 7           for (int j = 0; j < pic.Height; j++) 8           { 9             var c = pic.GetPixel(i, j);10             c = Color.FromArgb(255 - c.R, 255 - c.G, 255 - c.B);11             pic.SetPixel(i, j, c);12           }13         }14         pic.Save(outName);15       }16     }

Reverse

 

例子2:取一个图片的指定区域

 1 private Image Analyse(string fileName)//为方便,方法参数没有用Image 2     { 3       using (var map = Image.FromFile(fileName) as Bitmap) 4       { 5         if (map == null) return null; 6         Point p1; 7         Point p2; 8         var p = GetConfig(out p1, out p2); 9         var pic = new Bitmap(p.X, p.Y);10         var x = 0;11         var y = 0;12         for (int i = 0; i < map.Height; i++)13         {14           if (i >= p1.Y && i <= p2.Y)15           {16             for (int j = 0; j < map.Width; j++)17             {18               if (j >= p1.X && j <= p2.X)19               {20                 pic.SetPixel(x, y, map.GetPixel(j, i));21                 x++;22               }23             }24             x = 0;25             y++;26           }27         }28         return pic;29       }30     }31 32     private Point GetConfig(out Point p1, out Point p2)33     {34       var p1Str = ConfigurationManager.AppSettings["p1"].Split(',');35       var p2Str = ConfigurationManager.AppSettings["p2"].Split(',');36       p1 = new Point() { X = int.Parse(p1Str[0]), Y = int.Parse(p1Str[1]) };37       p2 = new Point() { X = int.Parse(p2Str[0]), Y = int.Parse(p2Str[1]) };38       return new Point() { X = p2.X - p1.X + 2, Y = p2.Y - p1.Y + 2 };39     }40 41 42 class Point43   {44     /// <summary>45     /// 点的X坐标,或者宽度46     /// </summary>47     public int X { get; set; }48     /// <summary>49     /// 点的Y坐标,或者高度50     /// </summary>51     public int Y { get; set; }52   }

Image Analyse(string fileName)

 

 

识别步骤:

1.将图片转成tif格式,通过jTessBoxEditor程序把所有tif图片打包成1个tif图片.

2.安装tesseract-ocr-setup-3.01-1.exe(用安装包版不需要配环境变量).

3.dos命令:输入tesseract.exe {0}.tif {0} batch.nochop makebox生成box文件  ({0}为文件名)

4.dos命令:输入tesseract.exe {0}.tif {0} nobatch box.train生成tr文件

5.dos命令:输入unicharset_extractor.exe tj.box生成unicharset文件

6.同一目录下新建一个文件font_properties无扩展名.写入{0} 1 0 0 1 0

7.dos命令:输入cntraining.exe {0}.tr

8.dos命令:输入mftraining.exe -F font_properties -U unicharset {0}.tr

9.4个文件名加前缀:{0}. (1.有.  2.4个:unicharset inttemp normproto pfftable)

10:dos命令:combine_tessdata {0}.(合并所有文件,生成学习库,{0}.traineddata)

 

代码步骤:

1.解压tesseractdotnet_v301_r590.zip,添加tesseract.dll引用

2.

var tp= new TesseractProcessor();

tp.SetPageSegMode(ePageSegMode.PSM_SINGLE_LINE);

tp.Init("{0}","{1}", (int)eOcrEngineMode.OEM_DEFAULT);//{0}为Path名,如c:\test\,{1}为学习库文件名,不需要扩展名.

var result = tp.Recognize(pic);

3.生成目标平台x86.

 

工具下载:点击下载