热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python通用验证码识别OCR库之ddddocr验证码识别

dddd_ocr也是一个用于识别验证码的开源库,又名带带弟弟ocr,爬虫界大佬sml2h3开发,识别效果也是非常不错,下面这篇文章主要给大家介绍了关于Python通用验证码识别OCR库之ddddocr验证码识别的相关资料,需要的朋友可以参考下

前言

相信做自动化测试的同学一定不可忽视的问题就是验证码,他几乎是一个网站登录的标配,当然,我一般是不建议在这上面浪费时间去做识别的。

举个例子,现在你的目的是进入自己家的房子,房子为了防止小偷进入于是上了一把锁。我们没必要花费力气去研究开锁技术。去找锁匠配置一把万能钥匙(让开发设置验证码的万能码),或者干脆先去上锁匠把验证码去掉(让开发暂时屏蔽验证码)。严格来说识别验证码不是我们自动化测试的重点。除非你是验证码厂商的员工,破解识别验证码是你的工作。

那么,如果有很简单的方式去识别验证码的话,我们其实就可以不用麻烦开发针对验证码做屏蔽开关了。

ddddocr: 带带弟弟OCR通用验证码识别SDK 就是这样一款强大验证码识别工具。

为什么我会想到:hhhhhhhh 红红火火恍恍惚惚, 哈哈~!

传统验证码

传统验证就是数字、字母、汉字等,把背景搞得模糊一些,这些验证码在他前面就是个弟弟。

以第一个为例,要想识别他非常容易了。

import ddddocr
ocr = ddddocr.DdddOcr(old=True)
# 第一个验证截图保存:verification_code_1.png
with open("./verification_code_1.png", 'rb') as f:
    image = f.read()
res = ocr.classification(image)
print(res)

运行结果:

iepv

滑动验证码

当然,传统验证码现在已经比较少网站在使用了,几年前开始流行滑动验证码,当时,也有类似的识别方案,主要通过selenium模拟滑动。

首先,需要准备两张图片

  • 有缺口的图片

  • 滑块缝合的图片

import ddddocr
import cv2

slide = ddddocr.DdddOcr(det=False, ocr=False)

# 滑块缝合的图片
with open('./verification_code_2-2.png', 'rb') as f:
    target_bytes = f.read()

# 有缺口的图片
with open('./verification_code_2-1.png', 'rb') as f:
    background_bytes = f.read()

# 滑块缝合的图片
img = cv2.imread("./verification_code_2-2.png")
res = slide.slide_comparison(target_bytes, background_bytes)
print(res)

运行结果

{'target': [17, 78]}

从文档中没找到这个坐标是滑块的初始坐标还是滑到正确位置的坐标。

当然,这种方案想要运行到自动化中还是比较难的,首先我们很难得到滑块缝合的图片,除非你将验证码的所有图片和缺口图片都保存下来,当验证码随机生成一张图片后,先截图和本地保存的图片对比,然后,找到对应的滑块缝合的图片。通过ddddocr找到元素坐标。

总之,太麻烦了,我选择放弃~!

文字点选验证码

这种验证码现在也比较常见,我们需要按照顺序点击图片中的文字。

import ddddocr
import cv2

det = ddddocr.DdddOcr(det=True)

# 验证码图片
with open("./verification_code_3.png", 'rb') as f:
    image = f.read()

poses = det.detection(image)
print(poses)

# 验证码图片
im = cv2.imread("verification_code_3.png")

for box in poses:
    x1, y1, x2, y2 = box
    im = cv2.rectangle(im, (x1, y1), (x2, y2), color=(0, 0, 255), thickness=2)

# 结果图片
cv2.imwrite("result.jpg", im)

运行结果:

[[17, 28, 82, 92], [55, 95, 118, 158], [39, 160, 103, 222]]

这里给出的坐标就是识别的三个文字的图片坐标。

这种方案同样会面临两个问题;

  • 文字的识别顺序不一定是要你点击的顺序。例如识别出来的文字顺序是: 荷叶饭, 验证码可能提示你点击的顺序是:叶饭荷。

  • 生成的坐标只是图片的坐标,不管是web还是app,验证码图片只是屏幕的一部分,除非你截取整个屏幕。那么识别率就无法控制了。

总结

  • ddddorc 针对传统的输入验证码还是很好用的。

  • 针对新型的验证码,识别率还行,但是,如何与自动化结合是个难题。

  • OCR技术本来就是以图片文字识别为主,它并不包含模拟鼠标点击、滑动、键盘输入等动作。

到此这篇关于Python通用验证码识别OCR库之ddddocr验证码识别的文章就介绍到这了,更多相关Python ddddocr验证码识别内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!


推荐阅读
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
  • ShiftLeft:将静态防护与运行时防护结合的持续性安全防护解决方案
    ShiftLeft公司是一家致力于将应用的静态防护和运行时防护与应用开发自动化工作流相结合以提升软件开发生命周期中的安全性的公司。传统的安全防护方式存在误报率高、人工成本高、耗时长等问题,而ShiftLeft提供的持续性安全防护解决方案能够解决这些问题。通过将下一代静态代码分析与应用开发自动化工作流中涉及的安全工具相结合,ShiftLeft帮助企业实现DevSecOps的安全部分,提供高效、准确的安全能力。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • intellij idea的安装与使用(保姆级教程)
    intellijidea的安装与使用(保姆级教程)IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(gi ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • ***byte(字节)根据长度转成kb(千字节)和mb(兆字节)**parambytes*return*publicstaticStringbytes2kb(longbytes){ ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • 本文介绍了在Ubuntu 11.10 x64环境下安装Android开发环境的步骤,并提供了解决常见问题的方法。其中包括安装Eclipse的ADT插件、解决缺少GEF插件的问题以及解决无法找到'userdata.img'文件的问题。此外,还提供了相关插件和系统镜像的下载链接。 ... [详细]
author-avatar
Laiio120669
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有