基于冷月免费exe实现通用验证码识别服务

959 阅读5分钟

介绍一个超高识别率windows程序,基于这个exe实现一个稳定可用识别服务

识别程序介绍

冷月的验证码识别程序核心文件有三个:如下图红色框三文件 image.png

  • 各文件说明 | 文件 | 说明 | 备注 | | --- | --- | --- | | 识别.exe | window下可执行识别程序 | 名称可修改 | | ty.dll | 识别程序所需动态库 | 名称不可修改 | | 配置.conf | 程序所需配置文件 | 文件名称不可修改,配置文件中端口、线程数、超时时间参数可修改 | | restart.bat | 服务重启脚本 | 非必须程序,后面会介绍用途,主要完成服务重启 |
配置文件内容如下图所示

image.png 在window下直接双击《识别.exe》文件,即可启动识别程序,启动之后界面如下图: image.png 本地启动之后,可以使用下面的python测试代码,测试本地识别是否可用

import json
import requests
import urllib3
urllib3.disable_warnings()
def download_yzm():
    '''
    下载验证码
    '''
    headers = {"User-Agent":"Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"}
    url = "https://neris.csrc.gov.cn/shixinchaxun/login/ycode.do"
    resp = requests.get(url=url, headers=headers, verify=False)
    if resp.status_code == 200:
        return resp.content
    else:
        return None
def recogition(yzm_data):
    '''
    验证码识别
    :param yzm_data:
    :return:
    '''
    resp = requests.post('http://127.0.0.1:7788', data=yzm_data)
    return resp.text

def run():
    yzm_data = download_yzm()
    if yzm_data:
        res = recogition(yzm_data)
        json_obj = json.loads(res)
        print(json_obj)
if __name__ == "__main__":
    run()

python程序运行之后截图:红色框中结果为识别结果,可以看出识别结果为json对象 image.png exe识别服务截图:红色输出为服务收到识别请求之后输出日志,由日志可以看出识别结果和识别时间,识别时间都在几十毫秒. image.png 基于以上python测试代码,可以自行修改测试代码中验证码链接地址,测试不同验证码识别效果,本人测试截图: image.png

image.png

image.png

image.png 由上图不同样式、不同长度验证码识别结果看出,冷月这个验证码识别程序识别准确率都很高,应对目前常见由26字母+10数字组成的字符验证码识别来说,准确率相当高。

基于冷月exe实现识别服务

这个验证码识别程序是一个windows下的exe,需要在windows下运行,而且直接运行还会弹出一个如上图中的黑色窗口。有没有一个办法让他像后台服务一样运行?

普通exe程序如何注册成后台服务

要把普通的exe应用程序注册为服务,需要两个小软件:Instsrv.exe和Srvany.exe。Instsrv.exe可以给系统安装和删除服务,Srvany.exe可以让程序以服务的方式运行。 首先网上下载这两个exe程序,下载之后放到本地任何一个路径下面,我放在c盘installfiles文件夹下,之后打开cmd,在cmd窗口下执行如下命令

>> C:\\installfiles\\instsrv.exe MyServer1 C:\\installfiles\\srvany.exe
//运行这个命令时建议全路径

MyServer1为你要注册的服务名称,以上命令运行成功之后,检查任务管理器,就会看到MyServer1这样一个名称的服务

注册表添加参数:
注册表:位置
计算机\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\MyServer1\Parameters
添加如下内容:
AppDirectory     C:\YZMRecognition
Application        C:\YZMRecognition\yzmsb.exe
AppParameters

yzmsb.exe为《通用识别.exe》改名之后的识别程序名称(不习惯中文名称)。

注册表添加完以上参数,现在就可以通过任务管理器来启动和关闭识别服务了,可以按照上面操作流程注册多个服务,识别程序复制多份,放在不同路径下,记得改名,同时修改配置文件中的端口号,下图是我注册的多个服务截图:

image.png

注意事项

实际应用中发现,一个服务在稳定运行一段时间之后,就会存在无法提供识别的情况(特别识别并发高时),重启服务又可正常识别,所以也是推荐大家实际使用时部署多个的原因,这些识别服务定时重启,就可以达到一只可以访问的目的。访问识别接口时可以从多个识别接口中随机获取一个来访问,失败之后尝试重试,这样就可以实现一个稳定可用的识别服务。

如何让服务自动重启:

windows下新建一个后缀为bat的restart.bat文件,文件内容如下图,MyServer1为你注册的服务名称。

image.png

有了这个重启服务脚本文件,定时让这个脚本自动运行一次,即可达到重启识别服务的目的。windows下定时任务详细配置方法可百度,附定时主要配置截图: image.png

image.png

总结

实际部署时我用了一台windows服务器去部署了多个识别服务,每一个识别服务每隔15分钟自动重启一次,保证每个识别服务都可以7*24h可用。

有了这个识别服务,对于日常打码可以节省很多时间和经历。需要文中所有程序文件的,留邮箱地址,看到之后会及时发送截图中所有文件到邮箱之中,大家也可以自行网上查找下载。敬畏法律,请勿做非法用途!!!

附我日常使用的识别流程图:

image.png

在此感谢冷月提供的通用识别exe,有需要的同学也可以百度搜索冷月,阅读他的博客文章和验证码识别开源代码

敬畏法律,请勿做非法用途!!!

敬畏法律,请勿做非法用途!!!

敬畏法律,请勿做非法用途!!!