• 发票查验 验证码 识别


    验证码分析

    如图所示:图像验证码,识别指定颜色的文字。
    在这里插入图片描述

    7.14 更新

    后来想想94不好看,就跑到96.7%了,测试次数为一千个官网请求,这样又是全网最高识别率。
    在这里插入图片描述

    7.13 更新

    由于没有更高的需求,中文字符集训练过于耗时,GPU资源也不能一直用来跑这个,决定停止训练,目前版本官网实测5千次请求,94.3%准确率。

    7.12 更新

    最新的思路:样本生成器自动调参的方法,当然了写生成器需要有一定的技术含量,需要弄清楚哪些是变量,CSDN有位大佬写过python版本的生成器,我下载来生成了一波,发现相似度比我简书放出的钓鱼版本还低hhhh,通过预留参数接口基于给出的一张样图,生成各种参数的生成样本,自动对比生成样本和给定对照样本的相似度,取最佳参数即可获得官网算法的最佳参数,调参成本也就生成w级别的样本即可找出最佳参数,对于计算机而言1分钟不到。这样只要掌握的通用生成器,只要在一定范围内更新都不是问题。此方法过于偏门,其实就算公开了思路,但是能写出来的人估计也没几个。有钱的大公司每次更新无脑去人工打码采集样本就好了,小公司还是不要做什么发票查验了,实力劝退。

    7.6 更新

    由于官网会测试本接口,对生成参数进行算法微调,不论是字体样式,颜色配比,字符集等等都针对这CSDN的两篇文章的生成器做了对抗,由于之前训练的时候尽可能考虑到模型的泛化能力,测试接口识别率降比不大,目前仍有90%的识别率,为了保证模型的持续抗更新能力,目前在线接口已不再进行更新,新的模型能更好的对抗和适应各种参数的更新,后续心情好或会开放最新的防更新思路,如何提高模型的泛化能力,最新接口请直接联系我,白嫖勿扰。

    7.3

    【98识别率模型】将在2020.7.10永久停售,有些不懂技术又自以为是老板们,天真的以为这个很简单的,先看看这些财税公司招的图像算法是什么水平,公司又愿意负担多少样本采集的成本。或者以为能白嫖到高质量的样本,网上的文章生成算法包括给你们的模型都不是商业化的技术成果,都是挖坑的半成品,拿打码的成本换一整套模型+源码+样本都不舍得,那些打算买但是要等开发完其他东西的老板们也请不要再来骚扰,边问我怎么调参一边说自己是打算买模型,真当别人傻子吗,就等着后悔错过了市面上最好的版本吧,恕我直言网上能买到的没有性能和识别率比我强的,可以自行比对,打码平台能有我一半就不错了,我不是吹牛,自己可以对接官网测。不敢给你们提供接口测试的都是吹牛的。本文也不打算再继续更新了,反正有技术能花成本的公司也能做出来,想白嫖的也不可能花一分钱,哪怕是打码都觉得贵甚至想让开发手动标注,多数小公司的领导们真是不敢恭维,干啥啥不会,以为自己聪明在省钱,那就去体验一下社会的毒打吧,还有想白嫖就直说,找一堆理由拖着观望求指导,我没空陪聊,模型样本就算删掉也一定不会便宜这些人,测试接口会长期开放,必须让他们知道什么叫后悔,求而不得。

    识别思路

    首先有几条道路可以通向罗马,这里不分先后优劣一一讲述。

    1. 颜色提取的思路,可以采用HSV/K-means聚类进行颜色的分离提取:效果如下:
      在这里插入图片描述
      弊端显而易见,会有较大的特征丢失,识别率有较大的提升瓶颈,经过测试,中英文+汉字的识别率在90%左右。
    2. 不分离颜色的思路,该方案有两种处理方法:
      (1)同时预测颜色和字符内容,这种方法看起来比较正统,但是成本较高,需要标注每张图的颜色字符内容,这个要求有多高呢,一般的打码平台是无法提供这样的结果的,打码平台只返回对应颜色的内容,只能人工标注,那么需要多少样本呢?笔者训练的识别率98的模型用了100w左右的样本。一张这样的样本标注假设需要0.1元,那么100w样本需要10w标注费用,假设0.01元,也要1w的标注费用。但是验证码高质量的人工标注几乎是不存在的,因为很多样本,人眼的识别率是不如机器的,总体标注的准确率大概也只能在85左右。看起来并不可取,有一种节约成本的办法,可以通过算法生成样本,但是呢,生成的识别率英文数字还可以,中文的识别率就低的可怜了。附上生成方法:https://www.jianshu.com/p/da1b972e24f2
      (2)每个颜色分别训练一个模型, 这种方法看起来有点蠢,但是确实比较合适有效的办法了,可以轻松借助打码平台的返回结果标注样本。需要的颜色可以通过官网提供的字段取到,返回结果通过打码平台识别得到,这样一组合,样本就有了。这种方法的成本相对较低,样本数不变的前提下,打码价格低于人工标注的成本。但是笔者训练的是一种颜色的样本用了100w。每个颜色分别训练这样成本还是下不来。四种颜色就是500w样本。官网的每次获取图片的时候颜色随机出现的概率也不一定是1/4。
      在这里插入图片描述

    (3)把所有颜色都通过颜色变换为一种颜色,整体思路同(2)。如下图,笔者将黑色转换为红色,但是样本成本只有采集一种颜色的成本。看起来是目前位置最佳的方案了,事实也是如此的。但是呢,100w的样本对于普通人来说也是一笔不小的花销,即便有了样本能做出来也需要花费不少的时间和精力。

    有些算法工作者可能会低估样本的实际需求量,3.6k分类,中文字体小,容易混淆相似的字多,不同的角度重叠干扰都会大大增加,过于复杂的网络对性能的要求也高,为了平衡性能和准确率,足够数量的样本支撑是必须的,100w样本量其实不大,一点都不要惊讶

    不过采集样本不是单纯的接打码平台就完事了,需要经过官网判断,只有通过验证,正确的样本才保存下来。这样有效的样本对提高识别率才有帮助。
    在这里插入图片描述

    实验成果

    在这里插入图片描述
    在这里插入图片描述
    笔者实时对接官网对实验模型进行检验,结果如上图,测试了200+次,识别率达到98%以上,识别速度的话,CPU大概5-8毫秒左右,模型大概3mb。

    附上接口,为了防止滥用,接口每天只支持请求500次:

    请求地址 Content-Type 参数形式 请求方法
    http://152.136.207.29:19812/captcha/v1 application/json JSON POST

    具体参数:

    参数名 必选 类型 说明
    image Yes String Base64 编码
    param_key No String 颜色,redluegreenlackyellow

    请求为JSON格式,形如:
    {"image": "iVBORw0KGgoAAAANSUhEUgAAAFoAAAAjCAIAAA...base64编码后的图像二进制流", "param_key ": "blue"}

    注意:图片只能是 90x35 尺寸的原图,请勿截图

    也请勿使用 模拟浏览器 的截图获取,如果不知道如何使用协议获取验证码,可以参考这个文章的方法:
    https://blog.csdn.net/kerlomz/article/details/106793781
    若对最新的JS逆向感兴趣可以关注作者。

    若以上方法都不清楚,可以【另存为图片】,本模型针对【原图】训练。
    截图无法识别,不理解的可以先了解下深度学习 图像识别原理 ,或咨询 作者

    返回结果:

    参数名 类型 说明
    message String 识别结果或错误消息
    code String 状态码
    success String 是否请求成功

    该返回为JSON格式,形如:
    {'uid': "9b5a6a34-9693-11ea-b6f9-525400a21e62", "message": "xxxx", "code": 0, "success": true}

    请勿恶意使用,若超出当日限制将返回:
    {'uid': "9b5a6a34-9693-11ea-b6f9-525400a21e62", 'message': '超出当日请求限制,请联系作者QQ:27009583', 'success': False, 'code': -555}

    若返回 400 则表示数据包格式有误,请检查是否符合JSON标准。
    若返回 405 则请检查确保使用POST方式请求。

    Python示例:

    import requests
    import base64
    
    with open(r"C:1.png", "rb") as f:
        b = f.read()
    
    # param_key: black-全黑色,red-红色,blue-蓝色,yellow-黄色
    r = requests.post("http://152.136.207.29:19812/captcha/v1", json={
        "image": base64.b64encode(b).decode(), "param_key": "yellow"
    })
    print(r.json())
    

    如有疑问可以加我QQ:27009583

  • 相关阅读:
    angularJS实现无刷新文件下载
    入门程序,hello world
    rabbitMQ概念详细介绍
    rabbitMQ安装
    truncate与delete的区别
    Java 并发编程:线程间的协作(wait/notify/sleep/yield/join)
    Java多线程编程:Callable、Future和FutureTask浅析
    定时任务 Crontab命令 详解
    使用Spring Session做分布式会话管理
    AngularJS ui-router (嵌套路由)
  • 原文地址:https://www.cnblogs.com/kerlomz/p/12990705.html
Copyright © 2020-2023  润新知