[Solution] 簡單數字識別之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 Point
43     {
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.

 

工具下載:點擊下載


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM