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

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. COM是一个更好的C++

    昨天看了<COM本质论>的第一章”COM是一个更好的C++”,觉得很有必要做一些笔记,于是整理成这篇文章,我相信你值得拥有. 这篇文章主要讲的内容是:一个实现了快速查找功能的类FastSt ...

  2. Scala 基础入门【翻译】

    原文地址 本文只是带你进入 Scala 的世界,包括安装.不可变量 val.可变量 var.定义类.集合(包括列表(list).集(set).映射(map))以及集合遍历和集合库(能达到并行/并发效果 ...

  3. 【linux】如何将Vim打造成一个成熟的IDE

    如果你稍微写过一点代码,就能知道“集成开发环境”(IDE)是多么的便利.不管是Java.C还是Python,当IDE会帮你检查语法.后台编译,或者自动导入你需要的库时,写代码就变得容易许多.另外,如果 ...

  4. Jquery+artTemplate+layPage 封装datagrid

    导言 在日常开发中经常会用到列表,相信用过easyui,Ext等很多,的确很强大,但想修改确实也不容易,我也用了几年的easyui,有时间时会想一下,自已随然没有前端的精湛技术,但可以在有这些技术的开 ...

  5. Nginx负载均衡深入浅出

    nginx不单可以作为强大的web服务器,也可以作为一个反向代理服务器,而且nginx还可以按照调度规则实现动态.静态页面的分离,可以按照轮询.ip哈希.URL哈希.权重等多种方式对后端服务器做负载均 ...

  6. 【Cocos2d-Js基础教学 入门目录】

    本教程视地址频在: 九秒课堂 完全免费 从接触Cocos2dx-Js以来,它的绽放的绚丽让我无法不对它喜欢.我觉得Js在不断带给我们惊喜:在开发过程中,会大大提升我们对原型开发的利用率,使用Js语言做 ...

  7. T-SQL 公用表表达式(CTE)

    公用表表达式(CTE) 在编写T-SQL代码时,往往需要临时存储某些结果集.前面我们已经广泛使用和介绍了两种临时存储结果集的方法:临时表和表变量.除此之外,还可以使用公用表表达式的方法.公用表表达式( ...

  8. 关于STM32 CAN回环可用,正常不可用情况分析

    1.回环下应该与GPIO无关 2.GPIO是否初始化正确,时钟启用 3.是否复用,AFIO时钟是否启用 4.回环下是否有CAN_Tx应该有输出 5.终端电阻是否有 6.CAN收发器电路电压是否正常 7 ...

  9. SSAS:概念梳理

    Dimension Objects 原文 A simple Dimension object is composed of basic information, attributes, and hie ...

  10. SSAS:OLE DB 错误: OLE DB 或 ODBC 错误 : Login failed for user 'NT Service\MSSQLServerOLAPService'

    问题描述 按照微软官方教程尝试使用SSAS做OLAP时,出现如下错误信息: Severity Code Description Project File Line Suppression State ...