zoukankan      html  css  js  c++  java
  • [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: est\,{1}为学习库文件名,不需要扩展名.

    var result = tp.Recognize(pic);

    3.生成目标平台x86.

    工具下载:点击下载

  • 相关阅读:
    关于使用stanfordcorenlp一直运行不报错的解决方法
    小程序项目报错
    小程序项目学习笔记
    如何将知网下载的caj文件转换为pdf文件
    干眼症治疗方法
    事务基础
    Android的四大组件
    异步任务AsyncTask使用解析
    Android Service的生命周期
    2016 校招, Android 开发,一个本科应届的坎坷求职之路(转)
  • 原文地址:https://www.cnblogs.com/neverc/p/4575313.html
Copyright © 2011-2022 走看看