当前位置: 首页 > news >正文

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

中文验证码一直是识别的难题,首先他分类的种类很多,常见中文都有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)

识别结果可视化效果如下

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【python/pytorch】已解决ModuleNotFoundError: No module named ‘torch‘
  • 【Python入门与进阶】常见问题与解决方法
  • 服务器数据恢复—强制上线raid5阵列离线硬盘导致raid不可用的数据恢复案例
  • 双Token方案实现Token自动续期(基于springboot+vue前后端分离项目)
  • 利用ffmpeg把视频分解成图片(每秒x张图)再图片合成视频
  • liquibase做数据库版本管理
  • MySQL系列-安装配置使用说明(MAC版本)
  • BIO,NIO,AIO
  • 【图解IO与Netty系列】Netty核心组件解析
  • 地图元素。
  • MySQL快速入门(极简)
  • Buildroot和Debian文件系统修改方法
  • Java的IO流
  • VBA即用型代码手册:删除重复行Delete Duplicate Rows
  • 七天进阶elasticsearch[two]
  • ES6指北【2】—— 箭头函数
  • Android Volley源码解析
  • css的样式优先级
  • ES6语法详解(一)
  • happypack两次报错的问题
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • JavaScript 基础知识 - 入门篇(一)
  • Java深入 - 深入理解Java集合
  • Mysql数据库的条件查询语句
  • Vue2.x学习三:事件处理生命周期钩子
  • VuePress 静态网站生成
  • Vue官网教程学习过程中值得记录的一些事情
  • 百度地图API标注+时间轴组件
  • 百度小程序遇到的问题
  • 程序员该如何有效的找工作?
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 模仿 Go Sort 排序接口实现的自定义排序
  • PostgreSQL之连接数修改
  • 关于Android全面屏虚拟导航栏的适配总结
  • 交换综合实验一
  • 浅谈sql中的in与not in,exists与not exists的区别
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​2020 年大前端技术趋势解读
  • ​HTTP与HTTPS:网络通信的安全卫士
  • #laravel 通过手动安装依赖PHPExcel#
  • (4)logging(日志模块)
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (pycharm)安装python库函数Matplotlib步骤
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (强烈推荐)移动端音视频从零到上手(下)
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (三)docker:Dockerfile构建容器运行jar包
  • (顺序)容器的好伴侣 --- 容器适配器
  • (算法)前K大的和
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (一)utf8mb4_general_ci 和 utf8mb4_unicode_ci 适用排序和比较规则场景