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

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. 关于SQLServer2008数据如何导入SQL2005的解决办法,高版本数据导入低版本中。

    最近需要把SqlServer2008 的数据库导入sqlserver2005 中.直接备份还原肯定不行.后来想到可以生成脚本执行sql语句,并选择数据可以一同进行执行. 点击右键--->任务-- ...

  2. Swift中对C语言接口缓存的使用以及数组、字符串转为指针类型的方法

    由于Swift编程语言属于上层编程语言,而Swift中由于为了低层的高性能计算接口,所以往往需要C语言中的指针类型,由此,在Swift编程语言刚诞生的时候就有了UnsafePointer与Unsafe ...

  3. 用户管理 之 Linux 用户(User)查询篇

    用户(User)和用户组(Group)的配置文件,是系统管理员最应该了解和掌握的系统基础文件之一,从另一方面来说,了解这些文件也是系统安全管理的重要组成部份:做为一个合格的系统管理员应该对用户和用户组 ...

  4. LeetCode: Unique Paths II 解题报告

    Unique Paths II Total Accepted: 31019 Total Submissions: 110866My Submissions Question Solution  Fol ...

  5. mysql用shell建100多字段表并导入

    excel列超过160多个,导入时报错,把excel第一行另存为逗号分隔的csv文件,用shell建表 vim createTable.sh #!/bin/sh str="CA6430M,H ...

  6. 【cocos2d-x 手游研发小技巧(8)通讯的数据压缩与解压 】

    今天说一下手机游戏通讯协议中的数据问题,大量的数据将给服务器端和客户端带来很大的压力,一般来说. 转载请注明出处:http://www.cnblogs.com/zisou/p/cocos2dxJQ-8 ...

  7. 99 Lisp Problems 列表处理(P1~P28)

    L-99: Ninety-Nine Lisp Problems 列表处理类问题的解答,用Scheme实现,首先定义几个在后续解题中用到的公共过程: ; common procedure (define ...

  8. jade模板引擎学习笔记(WebsStorm9.0.3+ nodejs+express+jade)

    jade环境搭建 jade标签写法 jade注释 jade添加类名.id.属性 jade添加脚本,css jade变量 jade多行文本显示 jade流程代码:for,each,while jade流 ...

  9. CSS基础(三):选择器

    常用选择器 元素选择器,即html标记如div,ul,li,p,h1~h6,table等. p { font-size:14px; } h1 { color:#F00; } 复合选择器, 由两个选择器 ...

  10. GPT分区基础知识

    大硬盘和WIN8系统,让我们从传统的BIOS+MBR模式升级到UEFI+GPT模式,现在购买的电脑,都是预装WIN8系统,为了更好的支持2TB硬盘,更快速的启动win8,预装系统都采取了GPT分区的格 ...