200块找人帮忙写一个简单的数字识别程序
本帖最后由 passkalilo 于 2009-11-26 10:19 编辑将类似于上图中数字和荷官的名字识别成文本, 应该不是很难吧
有能做的希望能联系我的,急用!!
" 还是没人能接, 泱泱论坛竟连个做这程序的都找不到, 唉...,高手们都到哪去了"
有人对这句话比较反感, 我要说明的是我这话并不是与论坛为敌,只是希望能够大家能多关注一下任务, 如果这个论坛里高手一个个都是视金钱如粪土,一涉及到钱就不沾手,新手又不会做,那创立这个脚本交易区就没什么意义了, 希望大家能多讨论一下技术方面的问题, 没必要在别的方面进行无意义的争论, 高手不在乎钱的也可以在下面给点思路, 十分感谢
已有人接了, 谢谢大家的关注, 完工后贴代码大家交流
本项目已顺利结束, 非常感谢sanmoking 和 foboy 两位朋友, 代码见19楼 纯粹靠图形来识别的话,相当有难度啊`` 本帖最后由 passkalilo 于 2009-11-20 22:14 编辑
纯粹靠图形来识别的话,相当有难度啊``
gapkiller 发表于 2009-11-20 22:08 http://www.autoitx.com/images/common/back.gif
这些都是标准字体, 截图->去背景色, 然后直接调用OCR组件来识别就可以了吧,应该比验证码识别简单多了, 出到200大洋都没人做, 郁闷... 没研究过验证码的新手飘过。。。 还是没人能接, 泱泱论坛竟连个做这程序的都找不到, 唉...,高手们都到哪去了 谁说没有,你这个这么简单,人家验证码的都做了,你自己去论坛搜索...... 有高手就一定要给你编写程序吗?
200块钱算什么? 路过看看热闹 本帖最后由 flew0214 于 2009-11-23 11:40 编辑
还是没人做,我是刚上。我还弄不来。不过看图片好象挺标准的么?比论坛的验证码简单多了。 楼主联系我吧,工作之余帮你弄弄 楼上的是高手哦。等待您的好东东。 这个应该不难的
可惜我这儿上网条件不太好 昨天下午公司有事,今天上午已经完成80%的工作量了.. 本帖最后由 sanmoking 于 2009-11-25 10:55 编辑
给大家看看效果哈:
在游戏界面按快捷键~(数字1左边那个键,不用按shift),开始读取数据:
读取数据的时候屏蔽键盘鼠标,以免使用者乱动造成程序出错:
读取出来的数据,正确率高达99%,没有时间测试,基本上没有问题:
如果网站更新的话,荷官的名字应该是他们游戏提供商自己的GM,所以名字是任何可能的字符,所以一般靠图像识别会累死了哈.:
而本人靠一个小聪明解决了这个问题,不过准确率没有统计,理论上会根据荷官的数量越多准确率越低,不过在一般情况下准确率是100%.
这个是记录新荷官名字之后,下次识别就能认出来了..
exe程序给大家测试..不过貌似得安装那个游戏的程序,大家考虑一下...
刚才发现屏幕分辨率算法有点问题,已经更新...
请大家重新下载:
更新:
1 修改一处错误:桌面截图的参数解释的错误导致程序窗口移动的话就不能正常识别图像了,汗,最大的bug,现在已更正,不管在何种分辨率下,不管窗口位置在什么地方(尽量在桌面中央啊)都不会出错了,完美!
2 修改提示条的位置,放到广告栏的地方了,以免遮挡住数据图案.....汗
因为楼主把项目给别人了,所以源码回头再说,至于楼主要求里面的要把数据写入excel,那个很简单,上面提供的测试程序就不做了..... 本帖最后由 sanmoking 于 2009-11-26 22:46 编辑
楼上程序解决了以下几个问题:
1 图像识别任意字符串的方法(指图片数量-不是字符数量-比较少的情况下,比如那个荷官的名字,估计他整个网站全部算下来也就十几二十个吧,将来增加的话也是一点一点的增加的,那时候手动增加识别数据也不麻烦),如果没有数据可以自动添加,以便下次识别.
2 不同位数数字图像的识别(有的数字是一位数,有的数字是两位),这种情况如何识别的方法,以往验证码识别都是固定位数(4位哈)
3 怎样用一个算法去计算在窗体位置和桌面分辨率不同的情况下的截图位置
4 网格状的图片的截取....嵌套循环..
楼主公开源码跟论坛网友一起交流学习,我也把我的源码放出来让各位网友一起切磋哈..:
源码里面有很详细的注释..源码其实很短的,100来行左右........
压缩包里面包含如下文件:
lunpan.au3 -------源码
识别数据.exe -------编译后的exe
卸载.bat -------卸载验证码识别组件Captchio.dll
注册.bat -------注册验证码识别组件Captchio.dll
11111.cdb ------36个数字的识别库
Captchio.dll -------验证码识别组件
cls.ini---------------存储荷官识别数据的ini
下面说明一下我的思路,以便各位网友互相讨论:
拿到这个轮盘游戏之后,一开始想通过读取内存来进行数据统计,后来跟了一下Cheat Engine,本人菜鸟,没弄出来个头绪(关键是没找出来几个重要的基址)
于是放弃内存,转为图像识别...
但是遇到了数字位数的困扰,有些数字1位,有些2位,本想着Captchio.dll这样的通用组件算没戏了,不过灵机一动,开始研究那些数字的规律,
虽然那些色块的底色看上去没什么规律,但是后来发现,其实每个数字的底色都是固定的,只不过位置不同罢了..而且所有的数字颜色都是白的,哈哈
说明总的算下来其实只有38张图片(0-36,空白),用Captchio.dll轻松搞定.....
因为Captchio.dll必须指定每张验证码的字符位数必须一致,多亏我脑袋够用,哈哈,直接把所有37张图片都作为只有一个字符来对待,
0-9对应0-9,10-35对应a-z,36对应◇(菱形方块),其实这都无所谓,随便哪个汉字对应就行了,回头识别出来之后在还原成数字呗....
比如Captchio.dll识别出来Q,那就翻译成26,哈哈,大家仔细看我源码就好了,其实也幸亏就37个图片,再多我就该头大啦........
为什么说37张图片,不是38张么,因为还有个空白图片,用Captchio.dll来进行识别的时候,这张空白的图片颜色是ffffff,而其他有字符的图片上文字的颜色也是ffffff,那会使识别库出现混乱(所有那些带字符的图片都识别成空白了,汗...)而使验证失败...怎么解决这个问题呢?
用文件大小来解决!
因为jpg图片的原理,同样大小的图片颜色越单一的文件体积越小,所以,截取下来的图片(17*18像素)是空白的话那么体积一定小于750字节(基本上是630左右),而其他有字符的图片一定大于800字节(基本上超过1k了),仅靠这个就能完全识别出来空白图片,所以先把空白图片减出去之后,再用Captchio.dll来识别....,识别率99%是谦虚啦.....
另外大家可能会怀疑每次截图的准确性,应该会有个别像素上的误差吧,,哈哈,,精确到0素误差都没有...靠读取窗体坐标,控件坐标,屏幕分辨率这三个参数来计算的.截取到的每张数字图片一定是标准的17*18像素,一个像素都不错,对于jpg的损耗问题,<ScreenCapture.au3>可以设置jpg用100%的原始质量保存,每个像素点都不会有误差....
怎么识别窗口\识别控件\读取窗口坐标\控件坐标\以及怎么截图.....这就不说了.....
最后说下荷官的识别.......
这个游戏的荷官算来算去就那十几个,另外荷官的名字是人家GM根据自己爱好随机取的,可能是英文,也可能是中文,更可能是任意的奇怪字符.所以图片靠识别那算白费劲了,如果哪天人家gm起个[饕餮簩罫]的名字,靠图片识别的话就该吐血去死了......所以不可能为了这十几个人去做这么大的工作....
不过我的方法也还是得截图来进行识别........
[就算截图没有截全或者截得多了都没关系的]
上边的图片都是我的程序截取的,机器般的精确(不过你们拿到的exe在识别完图片都就删除了....我有源码嘛,不让删掉就删不掉喽....)
这里截取荷官名称的方法和上面截取数字图块的一样,所以截图的像素准确性是100%,每次截取的位置没有一点误差,再加上100%的jpg质量保存下来的文件,所以同一个荷官每次截取到的文件数据肯定丝毫不差.......
就因为这个丝毫不差,再加上jpg文件的保存算法,,所以只要显示的图案有一个像素不一样,那么截图保存的文件肯定不同(我猜的)....这个不同就体现在文件(大小,md5等hash值)上,我使用的就是文件体积(偷懒了,没有去验证hash值是否一样....回头再说把,不过光靠文件大小真的很不准确的,大家可别用这招....)......汗吧......
把每个荷官截取到的图片文件hash值保存到ini里面就是识别数据了.....如果遇到两个文件hash一点都不差,却图像显示的内容不同,那么就和中了3.6亿彩票的概率差不多(相对的,没经过考证,哈哈,别相信我啊)...哈哈
如果发现ini没有记录这个hash的话,就显示个InputBox,让使用者保存一下这个新出现的荷官好了,没几个荷官,不会影响使用者的操作的,这个可不是缺点,这是可扩充性,哈哈.........
其实楼主的题目,看似很简单,其实很麻烦,其实还是很简单,
编程就是用最合理的方法去解决问题...条条大路通罗马,哪个最近,哪个最通畅,哪个最合理......大家给我加分吧,自从论坛提高下载附件的收费之后,我都快穷死了....
我大概看了一下楼主那个方案的使用方法,虽然使用的技术很高级,但是有点高射炮打蚊子的感觉,所耗费的工作量难度都有点太高啦...另外程序使用的时候占用资源等方面估计也得高,特别是识别荷官的时候,,.....
刚才测试了一下,发现只要截图参数正确一致,前后截取到的相同画面保存下来的文件,结论是hash值完全相tong(包括文件大小,md5,crc32,SHA1等hash值都一摸一样),所以以后对于数量比较少但是识别难度太大的图像识别可以使用这些hash值来验证了........所以貌似最上面那38张图片也可以用这个办法来识别了哈???
注意:没有测试网页验证码程序生成的相同画面的图像hash值是否一致........
这是一个小代码用来证明我上面的结论