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

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

准备:

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

2.学习,初步识别

3.校正学习库

测试:

1.待识别图像,预处理

2.根据学习库 识别

例子1:图片反色

 private static void Reverse(string fileName,string outName)
{
using (var pic = Image.FromFile(fileName) as Bitmap)
{
for (int i = ; i < pic.Width; i++)
{
for (int j = ; j < pic.Height; j++)
{
var c = pic.GetPixel(i, j);
c = Color.FromArgb( - c.R, - c.G, - c.B);
pic.SetPixel(i, j, c);
}
}
pic.Save(outName);
}
}

Reverse

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

 private Image Analyse(string fileName)//为方便,方法参数没有用Image
{
using (var map = Image.FromFile(fileName) as Bitmap)
{
if (map == null) return null;
Point p1;
Point p2;
var p = GetConfig(out p1, out p2);
var pic = new Bitmap(p.X, p.Y);
var x = ;
var y = ;
for (int i = ; i < map.Height; i++)
{
if (i >= p1.Y && i <= p2.Y)
{
for (int j = ; j < map.Width; j++)
{
if (j >= p1.X && j <= p2.X)
{
pic.SetPixel(x, y, map.GetPixel(j, i));
x++;
}
}
x = ;
y++;
}
}
return pic;
}
} private Point GetConfig(out Point p1, out Point p2)
{
var p1Str = ConfigurationManager.AppSettings["p1"].Split(',');
var p2Str = ConfigurationManager.AppSettings["p2"].Split(',');
p1 = new Point() { X = int.Parse(p1Str[]), Y = int.Parse(p1Str[]) };
p2 = new Point() { X = int.Parse(p2Str[]), Y = int.Parse(p2Str[]) };
return new Point() { X = p2.X - p1.X + , Y = p2.Y - p1.Y + };
} class Point
{
/// <summary>
/// 点的X坐标,或者宽度
/// </summary>
public int X { get; set; }
/// <summary>
/// 点的Y坐标,或者高度
/// </summary>
public int Y { get; set; }
}

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.

工具下载:点击下载

[Solution] 简单数字识别之Tesseract的更多相关文章

  1. kNN算法python实现和简单数字识别

    kNN算法 算法优缺点: 优点:精度高.对异常值不敏感.无输入数据假定 缺点:时间复杂度和空间复杂度都很高 适用数据范围:数值型和标称型 算法的思路: KNN算法(全称K最近邻算法),算法的思想很简单 ...

  2. 使用ImageMagick和Tesseract进行简单数字图像识别

    使用ImageMagick和Tesseract进行简单数字图像识别 由于直接使用 tesseract 进行识别,识别率很低, ImageMagick 安装.配置及使用: 平台:winXP 1. 安装I ...

  3. opencv +数字识别

    现在很多场景需要使用的数字识别,比如银行卡识别,以及车牌识别等,在AI领域有很多图像识别算法,大多是居于opencv 或者谷歌开源的tesseract 识别. 由于公司业务需要,需要开发一个客户端程序 ...

  4. 【转】机器学习教程 十四-利用tensorflow做手写数字识别

    模式识别领域应用机器学习的场景非常多,手写识别就是其中一种,最简单的数字识别是一个多类分类问题,我们借这个多类分类问题来介绍一下google最新开源的tensorflow框架,后面深度学习的内容都会基 ...

  5. 简单验证码识别(matlab)

    简单验证码识别(matlab) 验证码识别, matlab 昨天晚上一个朋友给我发了一些验证码的图片,希望能有一个自动识别的程序. 1474529971027.jpg 我看了看这些样本,发现都是很规则 ...

  6. C#中调用Matlab人工神经网络算法实现手写数字识别

    手写数字识别实现 设计技术参数:通过由数字构成的图像,自动实现几个不同数字的识别,设计识别方法,有较高的识别率 关键字:二值化  投影  矩阵  目标定位  Matlab 手写数字图像识别简介: 手写 ...

  7. CNN 手写数字识别

    1. 知识点准备 在了解 CNN 网络神经之前有两个概念要理解,第一是二维图像上卷积的概念,第二是 pooling 的概念. a. 卷积 关于卷积的概念和细节可以参考这里,卷积运算有两个非常重要特性, ...

  8. OpenCV 玩九宫格数独(二):knn 数字识别

    欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者:刘潇龙 前言 首先需要说明,这里所说的数字识别不是手写数字识别! 但凡对机器学习有所了解的人,相信看到数 ...

  9. 【深度学习系列】PaddlePaddle之手写数字识别

    上周在搜索关于深度学习分布式运行方式的资料时,无意间搜到了paddlepaddle,发现这个框架的分布式训练方案做的还挺不错的,想跟大家分享一下.不过呢,这块内容太复杂了,所以就简单的介绍一下padd ...

随机推荐

  1. Android UI系列-----EditText和AutoCompleteTextView

    在这篇随笔里将主要讲解一下EditText和AutoCompleteTextView这个控件 1.EditText 首先我们先简单来说说EditText这个控件,这个就相当于我们平常web开发中的文本 ...

  2. [转] 配置Log4j

    Log4J的配置文件(Configuration File)就是用来设置记录器的级别.存放器和布局的,它可接key=value格式的设置或xml格式的设置信息.通过配置,可以创建出Log4J的运行环境 ...

  3. DataGridView隔行显示不同的颜色

      如果该dataGridView是跟数据库绑定的,则可以触发DataBindingComplete事件:  1private   void   dataGridView1_DataBindingCo ...

  4. 推荐算法——距离算法

    本文内容 用户评分表 曼哈顿(Manhattan)距离 欧式(Euclidean)距离 余弦相似度(cos simliarity) 推荐算法以及数据挖掘算法,计算"距离"是必须的~ ...

  5. PCM音频设备的操作(转)

    对音频设备的操作主要是初始化音频设备以及往音频设备发送 PCM(Pulse Code Modulation)数据.为了方便,本文使用 ALSA(Advanced Linux Sound Archite ...

  6. python排序算法的实现-冒泡

    1.算法描述: (1)共循环 n-1 次 (2)每次循环中,如果 前面的数大于后面的数,就交换 (3)设置一个标签,如果上次没有交换,就说明这个是已经好了的. 2.代码 #!/usr/bin/pyth ...

  7. ASP.NET MVC学习系列(二)-WebAPI请求

    继续接着上文 ASP.NET MVC学习系列(一)-WebAPI初探 来看看对于一般前台页面发起的get和post请求,我们在Web API中要如何来处理. 这里我使用Jquery 来发起异步请求实现 ...

  8. WPF 转义字符

    下面是五个在XML文档中预定义好的实体: < < 小于号 > > 大于号 & & 和 &apos; ' 单引号 " " 双引号 实体 ...

  9. Navi.Soft30.开放平台.腾讯.开发手册

    1系统简介 1.1功能简述 现在是一个信息时代,并且正在高速发展.以前获取信息的途径非常少,可能只有电视台,收音机等有限的来源,而现在的途径数不胜数,如:QQ,微信,官方网站,个人网站等等 本开发手册 ...

  10. MySQL解决插入emoji表情失败的问题

    普通的字符串或者表情都是占位3个字节,所以utf8足够用了,但是移动端的表情符号占位是4个字节,普通的utf8就不够用了,为了应对无线互联网的机遇和挑战.避免 emoji 表情符号带来的问题.涉及无线 ...