同盾中文点选验证码识别方法

中文验证码一直是识别的难题,首先他分类的种类很多,常见中文都有3500个,而且一般中文验证码都会有变形,导致每一个文字都需要大量训练样本。假设每一个汉字样本需要100个,100×3500=35万个样本,所以标记的样本数量巨大,训练周期长,成本高。

而且通常需要点选的文字数量很多,需要同时全对也是一件不容的事情。假设单个字的正确率是90%,假设需要点选4个汉字,全对的正确率就是0.9的4次方,正确率也只有65%。所以非常困难。

下面我们就以同盾中文验证码为例提供了一个识别方案。只需要点击的中文大图,决定点击顺序的中文小图。如下图所示

import base64
import requests
import datetime
from io import BytesIO
from PIL import Imaget1 = datetime.datetime.now()#PIL图片保存为base64编码
def PIL_base64(img, coding='utf-8'):img_format = img.formatif img_format == None:img_format = 'JPEG'format_str = 'JPEG'if 'png' == img_format.lower():format_str = 'PNG'if 'gif' == img_format.lower():format_str = 'gif'if img.mode == "P":img = img.convert('RGB')if img.mode == "RGBA":format_str = 'PNG'img_format = 'PNG'output_buffer = BytesIO()# img.save(output_buffer, format=format_str)img.save(output_buffer, quality=100, format=format_str)byte_data = output_buffer.getvalue()base64_str = 'data:image/' + img_format.lower() + ';base64,' + base64.b64encode(byte_data).decode(coding)# base64_str = base64.b64encode(byte_data).decode(coding)return base64_str# 加载图片
img1 = Image.open(r'E:\Python\lixin_project\OpenAPI接口测试\test_img\48-1.jpg')
# 图片转base64
img1_base64 = PIL_base64(img1)
# 加载图片
img2 = Image.open(r'E:\Python\lixin_project\OpenAPI接口测试\test_img\48-2.jpg')
# 图片转base64
img2_base64 = PIL_base64(img2)# 验证码识别接口
url = "http://www.detayun.cn/openapi/verify_code_identify/"
data = {# 用户的key"key":"JX61hWThaR9DQUT4gIBg",# 验证码类型"verify_idf_id":"48",# 点击中文大图"img1":img1_base64,# 点击顺序的中文小图"img2":img2_base64,
}
header = {"Content-Type": "application/json"}# 发送请求调用接口
response = requests.post(url=url, json=data, headers=header)# 获取响应数据,识别结果
print(response.text)
print("耗时:", datetime.datetime.now() - t1)

识别结果可视化效果如下

想了解更多验证码识别请访问:得塔云

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/851125.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

excel拖拽怎么使单元格序号不递增

拖拽下来不仅不递增,而且右下角没有倒三角可以设置改变,(即没有下图这个) 则,可以采用以下方法 excel数值拖拽不递增还有一个更快更快捷的方法,这就运用到了excel快捷键,我们把鼠标放到单元格的…

C/C++|Pimpl Idiom(Pointer to IMPLementation) 指针实现模式浅析

Pimpl Idiom(Pointer to IMPLementation),也称为 “Opaque Pointer”(不透明指针)或 “Cheshire Cat”(柴郡猫)模式或者"指针实现模式"和"实现隐藏模式"。这种模式通过将类…

模板字符串

模板字符串(Template Literals)是在ES6(ECMAScript 2015)中引入的一种新的字符串表示法,它提供了构建字符串的更加强大和灵活的方式。模板字符串可以通过反引号()(而不是普通的单引号…

04-4.2.4 KMP 算法的进一步优化

👋 Hi, I’m Beast Cheng👀 I’m interested in photography, hiking, landscape…🌱 I’m currently learning python, javascript, kotlin…📫 How to reach me --> 458290771qq.com 喜欢《数据结构》部分笔记的小伙伴可以订…

IP分片的隐患,以及TCP分片

好的,我们来用一个生活中的例子更详细地解释 MTU、MSS,以及 IP 和 TCP 分片。 MTU 和 MSS 的概念 MTU(Maximum Transmission Unit,最大传输单元): 假设你搬家,需要用卡车搬运家具。 卡车的最…

什么是动态联编、静态联编?

动态联编(Dynamic Binding)和静态联编(Static Binding)是面向对象编程中的两个重要概念,它们描述了程序在运行时如何确定调用哪个方法或属性。 静态联编(Static Binding) 静态联编&#xff0c…

Hadoop 2.0:主流开源云架构(一)

目录 一、引例(一)问题概述(二)常规解决方案(三)分布式下的解决方案(四)小结 自从云计算的概念被提出,不断地有IT厂商推出自己的云计算平台,但它们都是商业性…

Suno小技巧大揭秘,不会这些技巧别说你懂AI音乐

Suno是一个强大的AI音乐生成工具,它不仅可以帮你快速生成音乐,还能精确地根据你的需求进行调整。无论你是音乐小白还是专业音乐人,这篇文章将揭示一些鲜为人知的Suno技巧,帮助你最大化利用这个工具的潜力。 技巧一:精准…

解读下/etc/network/interfaces配置文件

/etc/network/interfaces 是一个常见的网络配置文件,通常在 Debian 及其衍生版本的 Linux 发行版中使用。该文件用于配置网络接口和网络连接参数,允许用户手动设置网络连接的属性,包括 IP 地址、子网掩码、网关、DNS 服务器等。 以下是一个可…

时间相关格式的转化

时间转秒越界 时间不加 L 就会越界 long l 90L * 24 * 60 * 60 * 1000;System.out.println(l);固定时间格式化 Date curTime new Date();SimpleDateFormat simpleDateFormat new SimpleDateFormat("HH:mm");// 19:30System.out.println(simpleDateFormat.format(…

POJ 2887:Big String ← 块状链表

【题目来源】http://poj.org/problem?id2887【题目描述】 You are given a string and supposed to do some string manipulations.【输入格式】 The first line of the input contains the initial string. You can assume that it is non-empty and its length does not exc…

基于JSP的班级同学录网站

你好呀,我是计算机学长猫哥!如果有相关需求,文末可以找到我的联系方式。 开发语言:Java 数据库:MySQL 技术:JSP技术 工具:IDEA/Eclipse、Navicat、Maven 系统展示 首页 个人中心 同学录管…

Qt for android :解决requestperssion后无法马上访问设备的问题

描述 当需要访问到设备硬件时, 涉及到Android权限,所以需要进行权限申请, 申请完之后访问常常发现权限不足, 为什么呢? 1. 从Qt库角度看问题: 无论是 QCoreApplication::requestPermission [since 6.5] te…

确保数据一致性的技术

禁止其他人同时使用数据 互联网提供的服务是可以供大量用户同时访问的。此时,就要求即使多人同时引用同一数据,或者同时更新数据,也不会产生冲突并且可以顺利执行处理。这种处理方式被称为并发控制。 但是,如果多人同时操作同一数…

51单片机独立按键控制LED灯,按键按一次亮,再按一次灭

1、功能描述 独立按键控制LED灯,按键按一次亮,再按一次灭 2、实验原理 轻触按键:相当于是一种电子开关,按下时开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动米实现接通和断开;…

网络网络层之(6)ICMPv6协议

网络网络层之(6)ICMPv6协议 Author: Once Day Date: 2024年6月2日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章可参考专栏: 通信网络技术_Once-Day的博客-CS…

WPF-UI布局

WPF布局元素有如下几个: Grid:网格。可以自定义行和列并通过行列的数量、行高和列宽来调整控件的布局。StackPanel:栈式面板。可将包含的元素在竖直或水平方向上排成一条直线,当移除一个元素后,后面的元素会自动向前移…

怎么使用useLayoutEffect

useLayoutEffect 是 React 中的一个 Hook,与 useEffect 类似,但它在浏览器绘制任何内容之前同步触发。这意味着,如果你需要在 DOM 更新后执行某些操作,并且这些操作可能会影响到组件的布局或渲染,那么使用 useLayoutEffect 会更合适。 以下是如何使用 useLayoutEffect 的…

SpringAI(二)

大模型:具有大规模参数和复杂计算结构的机器学习模型.通常由深度神经网络构建而成,拥有数十亿甚至数千亿个参数.其设计目的在于提高模型的表达能力和预测性能,应对复杂的任务和数据. SpringAI是一个AI工程领域的应用程序框架 大概推出时间是2023年7月份(不确定) 目的是将S…

细说NLP中的Embedding层

文章目录 前言一、为什么要引入Embedding层二、Embedding层是怎么发挥作用的?三、感受Embedding的强大四、为什么理解Embedding的底层原理?总结 前言 在构建高效的自然语言处理模型时,Embedding层是不可或缺的组成部分。它不仅可以帮助我们捕…