[Solution] 简单数字识别之Tesseract
图像识别涉及的理论:傅里叶变换,图形形态学,滤波,矩阵变换等等.
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的更多相关文章
- kNN算法python实现和简单数字识别
kNN算法 算法优缺点: 优点:精度高.对异常值不敏感.无输入数据假定 缺点:时间复杂度和空间复杂度都很高 适用数据范围:数值型和标称型 算法的思路: KNN算法(全称K最近邻算法),算法的思想很简单 ...
- 使用ImageMagick和Tesseract进行简单数字图像识别
使用ImageMagick和Tesseract进行简单数字图像识别 由于直接使用 tesseract 进行识别,识别率很低, ImageMagick 安装.配置及使用: 平台:winXP 1. 安装I ...
- opencv +数字识别
现在很多场景需要使用的数字识别,比如银行卡识别,以及车牌识别等,在AI领域有很多图像识别算法,大多是居于opencv 或者谷歌开源的tesseract 识别. 由于公司业务需要,需要开发一个客户端程序 ...
- 【转】机器学习教程 十四-利用tensorflow做手写数字识别
模式识别领域应用机器学习的场景非常多,手写识别就是其中一种,最简单的数字识别是一个多类分类问题,我们借这个多类分类问题来介绍一下google最新开源的tensorflow框架,后面深度学习的内容都会基 ...
- 简单验证码识别(matlab)
简单验证码识别(matlab) 验证码识别, matlab 昨天晚上一个朋友给我发了一些验证码的图片,希望能有一个自动识别的程序. 1474529971027.jpg 我看了看这些样本,发现都是很规则 ...
- C#中调用Matlab人工神经网络算法实现手写数字识别
手写数字识别实现 设计技术参数:通过由数字构成的图像,自动实现几个不同数字的识别,设计识别方法,有较高的识别率 关键字:二值化 投影 矩阵 目标定位 Matlab 手写数字图像识别简介: 手写 ...
- CNN 手写数字识别
1. 知识点准备 在了解 CNN 网络神经之前有两个概念要理解,第一是二维图像上卷积的概念,第二是 pooling 的概念. a. 卷积 关于卷积的概念和细节可以参考这里,卷积运算有两个非常重要特性, ...
- OpenCV 玩九宫格数独(二):knn 数字识别
欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者:刘潇龙 前言 首先需要说明,这里所说的数字识别不是手写数字识别! 但凡对机器学习有所了解的人,相信看到数 ...
- 【深度学习系列】PaddlePaddle之手写数字识别
上周在搜索关于深度学习分布式运行方式的资料时,无意间搜到了paddlepaddle,发现这个框架的分布式训练方案做的还挺不错的,想跟大家分享一下.不过呢,这块内容太复杂了,所以就简单的介绍一下padd ...
随机推荐
- 如何增强 Linux 系统的安全性,第一部分: Linux 安全模块(LSM)简介
http://www.ibm.com/developerworks/cn/linux/l-lsm/part1/ 1.相关背景介绍:为什么和是什么 近年来Linux系统由于其出色的性能和稳定性,开放源代 ...
- 【转】安装OpenSSL缺失Microsoft Visual C++ 2008 Redistributables的解决方案
from: http://www.cnblogs.com/luguo3000/p/3539815.html 在安装OpenSSL的时候通常会提示以下错误: "The Win32 OpenSS ...
- Windows 7下安装MongoDB
1.下载mongodb-win32-x86_64-2008plus-2.6.7-signed.msi(如今最新版本号已经到了3.0) 2.如果为64位操作系统则双击 mongodb-win32-x86 ...
- LeetCode: Unique Paths 解题报告
A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The ...
- 更换TFS账户
1.通过命令行启动“rundll32.exe keymgr.dll, KRShowKeyMgr"2.更改TFS账户3.重新启动VS2005
- java -jar shell 启动、停止
启用 vi start.sh #!/bin/sh # ################################################################## # Powe ...
- struts2:非表单标签
非表单标签主要用于输出在Action中封装的信息,这在实际运用中是很常见的. 1. actionerror标签 <s:actionerror>标签主要用于输出错误信息到客户端,该标签将Ac ...
- Haproxy配置支持https获取用户IP地址
global log 127.0.0.1 local0 chroot /var/lib/haproxy #chroot运行路径 pidfile /var/run/haproxy.pid #haprox ...
- 使用python pylab库 画线
pylab 提供了比较强大的画图功能,但是函数和参数都比较多,很容易搞混.我们平常使用最多的应该是画线了.下面,简单的对一些常用的划线函数进行了封装,方便使用. # -*- coding: utf-8 ...
- MTNET 自用ios网络库开源
短短两天就在https://git.oschina.net/gangwang/MTNET这里收获15个星 github 5星, 值得收藏! MTNET 自用ios网络库开源, 自用很久了,在数歀上架的 ...