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

本文介绍了一种基于验证码的手写OCR识别方法,包括版面分析、分词截取、灰度处理、去噪等步骤,并探讨了特征码匹配与拼写检查的方法。

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#识别验证码百度空间

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

 

03-12
### PAIP编程珠玑中的示例代码解释 PAIP(Paradigms of Artificial Intelligence Programming)是一本深入探讨人工智能编程范式的书籍,其中包含了大量 Lisp 编写的程序实例。这些例子不仅展示了如何实现特定的人工智能算法,还提供了关于良好软件工程实践的重要见解。 #### 示例:通用求解器框架 书中介绍了一个名为 `defun` 的宏来定义函数,在构建通用问题解决器时非常有用[^1]: ```lisp (defun solve (problem) "Find a solution to the given problem." (let ((solution nil)) ;; Attempt to find a solution using backtracking. (labels ((try-next-option () (when (not solution) (if (no-more-options-p ()) (return-from try-next-option nil) (let* ((option (next-option))) (cond ((goal-reached-p option) (setf solution option)) (t (push-state option) (solve problem) (pop-state)))))))) (try-next-option) solution))) ``` 这段代码实现了回溯法解决问题的一般模式。通过递归调用自身并尝试不同的选项直到找到解决方案为止。如果当前路径无法通向目标,则会恢复之前的状态继续探索其他可能性。 此方法能够有效地处理许多复杂的组合优化类问题,并且由于其灵活性可以很容易地适应各种具体应用场景下的需求变化。 #### 示例:自然语言理解模块 另一个重要的部分涉及到了自然语言处理技术的应用案例——基于语法分析树结构来进行语义解析: ```lisp (defun parse-sentence (sentence) "Parse SENTENCE into its constituent parts and build an interpretation tree." (multiple-value-bind (subject verb-object) (split sentence 'verb) `(sentence :subject ,(parse-noun-phrase subject) :action ,verb-object))) (defun parse-noun-phrase (np-string) "Interpret NP-STRING as either a simple noun or compound phrase." ...) ``` 上述片段演示了如何将输入字符串分割成主谓宾成分,并进一步解析名词短语的具体含义。这种层次化的表示方式有助于后续更高级别的推理操作以及对话管理等功能的设计与实现。 #### 示例:专家系统规则引擎 最后值得一提的是书中对于专家系统的讨论,特别是有关于事实库管理和匹配机制的部分: ```lisp (defstruct fact id pattern bindings) (defun match-patterns (pattern facts) "Return all FACTS that unify with PATTERN, along with their BINDINGS." ...) (defun add-fact (kb new-fact) "Add NEW-FACT to knowledge base KB after checking consistency against existing rules." ...) ``` 这里展示了一种简单而有效的知识表达形式及其相应的查询接口设计思路。通过对模式进行统一化计算从而快速定位符合条件的事实条目;而在更新数据库前则需确保新加入的信息不会引起逻辑矛盾等问题的发生。 以上仅是从《Programming Pearls》一书摘取的一些精彩片段,实际上该著作涵盖了更为广泛的内容领域和技术细节等待读者去发掘学习。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值