paip.手写OCR识别方法总结基于验证码识别... 1

paip.手写OCR识别方法总结--基于验证码识别

paip.手写OCR识别方法总结--基于验证码识别... 1

前言... 1

需要达到的技术指标... 1

版面分析与分行... 2

分词截取图片... 2

去色--灰度处理... 2

去噪点... 2

去杂色,转换为黑白图片... 2

分割图片... 3

得到每个字符的特征码... 3

进行字母特征码匹配与单词拼写检查... 3

Deathbycaptcha人工打码... 4

GOOGLE  reCAPTCHA社会化工程... 4

参考... 4

 

前言

很多情况下,我们需要手写识别文字处理对于印刷体我们可以用OCR来解决..

但对于手写体的识别。则效果不佳。即使有训练功能的OCR。。

而验证码的识别技术则很大程序上与手写OCR识别相同

需要达到的技术指标

识别文字:  英文手写体(正规大写),数字,标点

字号限制:可以适当限制普通字号

识别时间:机器方式1, 人工打码 10秒左右..

识别率: 需要达到99%左右

书写纸张:普通纸张,最好有格式线,可以限定行的位置.。纸颜色为白色

书写工具:普通笔

图片来源:最好扫描仪

文字颜色:常用的兰色或者黑色

书写时的注意事项:全部大写,尽可能正规书写..标点符号写在中间,要醒目..单词间的间隔适当多一些空白..以利于识别

 

版面分析与分行

分行可以使用指定TOPHEIGHT来人工做模块进行分行,以简化操作

 

 

分词截取图片

由于是基于验证码进行手写体的识别,所以必须进行分词来识别,否则过长无法识别..

 

 

 

去色--灰度处理

将文字图片去色(将彩色转换为灰度)去色是为了进一步做成黑白双色图片。

C# code

Color c = sourcebm.GetPixel(xy); int luma = (int)(c.R * 0.3 + c.G * 0.59 + c.B * 0.11);//转换灰度的算法 sourcebm.SetPixel(xyColor.FromArgb(lumalumaluma));

 

 

 

去噪点

将周边噪点去除然后文字周围的离散的点去除..

 

 

去杂色,转换为黑白图片
从灰度图片中可以看出,数字的颜色比较深,而杂色都是比较浅,所以可以设定一个临界颜色值,颜色高于或等于这个值的设置为白色,低于这个值的设置为黑色。

C# code

Color c = sourcebm.GetPixel(xy); if (c.R >= critical_value) sourcebm.SetPixel(xyColor.FromArgb(255255255));

C# code

else sourcebm.SetPixel(xyColor.FromArgb(000));

 

 

 

 

分割图片

书写的时候尽可能每个字母宽度一致,字母间要有空白..以利于切割单个字母图片

 

 

 

得到每个字符的特征码
在每个字符的边界内,检测每个像素,如果象素为白色则为「0」,如果象素为黑色则为「1」,将「0」「1」连起来就是该数字或字符的特征码。

C# code

Color c = sourcebm.GetPixel(xy); if (c.R == 0) str = str + "1"; else str = str + "0";

 

 

 

进行字母特征码匹配与单词拼写检查

特征码与库的进行匹配。。可以使用字串匹配算法进行匹配。。

然后再结合单词字典进行拼写检查从而得出最佳匹配字符..

 


Deathbycaptcha人工打码

Deathbycaptcha提供的验证码服务可以来用识别手写文字..95%的识别率,结合字典进行拼写检查,应该可以达到99%的识别率.. 好向不能识别标点符号..

不过唯一的缺点是成本。。识别一个单词大约需要1分钱。..一篇文章识别下来估计就要一百块了,成本太高了..

 

GOOGLE  reCAPTCHA社会化工程

GOOGLE  reCAPTCHA比较好.。。可以大规模实施降低成本

 

 

 

参考

【转】C#识别验证码百度空间

天涯博客里的评论验证码为例,说明验证码识别的基本思路和方法:

 

原文地址:https://www.cnblogs.com/attilax/p/15199859.html