java o 验证码识别_验证码识别(一)

开始做简单的ORC,从昨天到今天总算有个小小的成绩了。图像的文字识别我拿验证码开刀,因为验证码稍微简单点,说说验证思路:一、获取验证图片二、程序加载要验证的字体库三、程序加载需匹配的文字库(字符数组即可)四、将验证码图片进行中值滤波处理,然后再将其锐化(也可进行取色彩最多的几个点进行采样再锐化)五、将验证码的字符进行拆字(扫描行、列的间隙,然后就可以将字找出来),然后将拆分之后的图像保存到内存中,...
摘要由CSDN通过智能技术生成

开始做简单的ORC,从昨天到今天总算有个小小的成绩了。

图像的文字识别我拿验证码开刀,因为验证码稍微简单点,说说验证思路:

一、获取验证图片

二、程序加载要验证的字体库

三、程序加载需匹配的文字库(字符数组即可)

四、将验证码图片进行中值滤波处理,然后再将其锐化(也可进行取色彩最多的几个点进行采样再锐化)

五、将验证码的字符进行拆字(扫描行、列的间隙,然后就可以将字找出来),然后将拆分之后的图像保存到内存中,为以后提供匹配

六、此步骤为循环

6.0依次取字体库中的字符

6.1将取出的字符的字体设置成需验证的字体

6.2图像化此字符

6.3将内存的字与验证的字放大至同样的大小(高或者宽取最小公倍数)

6.4然后开始记录源与目标的验证点(用数组保存值,如果在像素点上有待验证的点,值为1,否则为0)

6.5然后将验证点进行匹配像素块,记录块的匹配度(我这里拿4方格,4个像素做匹配块,一个像素0.25个匹配度)

6.6累加匹配度,匹配完成之后再计算均值

6.7当均值大于某个值时则匹配成功

七、退出循环

八、××程序上的业务逻辑××

当然,思路是这样的,中间有几个地方在今天的代码中没有体现出来:

1.中值滤波(现在暂时还没有搞懂图像的计算公式)

2.字体库(这个确实不晓得我的电脑今天是不是大姨夫来了,字体库居然加载不上)

3.拆字(从图片中我都能够把字取出来,扫描行、列的文字也暂时不用实现)

4.字体缩放(节约时间没有做)

测试的来源是两个bmp的图片,一个作为匹配,一个作为待验证的,字体、大小不要太过于差异了,位置可以随便放,只要目测能够看出来是那个字。

当然,验证的时候不可能把验证库保存为图片文件,这是不科学的……

67f3c5351a84cf35fa5b2bdae1c96f25.png

53384f674b63f02b92cdc46fd5e79a55.png 

这两个字是不同的字体,匹配度只有那么多点了……

62a316870a9831a4acfdd6bd647636df.png

1f1d2a587bc9167669ddd466c1326957.png

这个是当图形处理的。

9c60ae63814b50c9026fe165a7cdb3de.png

fd021c6b48987cdc6458e67dc93e2ae1.png

虽然字体不一样,但匹配度是很高的(这个好像……没有做锐化处理)

贴代码:

import java.awt.Color;

import java.awt.Point;

import java.awt.RenderingHints;

import java.io.File;

import java.util.ArrayList;

import java.util.Collections;

import java.util.Comparator;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

/**

* 读取验证码

* @author Administrator

*/

public class ReadSerCode {

public static final int east = 1;//东

public static final int south = 2;//南

public static final int west = 3;//西

public static final int north = 4;//北

public static final int northeast = 5;//东北

public static final int southwest = 6;//西南

public sta

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值