江苏省电子税务局中文点选验证码识别研究

news/2024/11/29 5:31:29/

最近突发奇想,想研究一下中文识别。因为之前研究过简单数字,字母类的识别,这种识别种类很少,数字就10个,字母顶多就26个。但是一到中文,常用字就有3000多个,数量级有了巨大提升。不知道传统的方法还是否有效,所以想研究一下。

于是找到了一个比较好的研究对象,江苏省电子税务局中文点选验证码。识别对象样例如下:

由于从来没有接触过中文识别,所以我首先百度了一下,有没有现成的,可以直接调用的,免费的识别方法。

ddddocr(带带弟弟OCR)首先进入了我的视野,根据介绍这是一个非常不错的通用识别,不仅可以识别数字,还可以识别中文。我看别人的测试,识别极验的中文点选效果非常好。于是我马上进行测试,效果不是很好。

这是 ddddocr 的识别效果,5个汉字就对了1个,完全不能使用的状态。看样子一个模型只针对一种识别,应该是我的图片和他的训练样本差异太大,所以效果不好。

解决办法

只有自己针对性的训练这一个中文识别了。

第一步:标记数据

这是一项非常枯燥的工作,必须非常有耐心才行,我一个人标记了两个月。

第二步:搭建模型、训练模型

首先划分训练集与测试集,训练集取90%数据量,测试集取10%数据量。我这里首先对图片预处理,去除颜色等无效特征,让文字更加清晰。最后构建深度学习神经网络训练这些数据。

第三步:测试验证

训练好的模型测试集ACC可以达到95%。识别效果如下:

识别代码如下:

__author__ = "dengxinyan"import requests
import base64
from PIL import Image
from io import BytesIO#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)return base64_str# 接口地址
url = "https://www.detayun.cn/tool/verify_code_identify/"
# 请求头,需要使用自己的Cookie
header = {"Host": "www.detayun.cn","User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0","Accept": "application/json, text/javascript, */*; q=0.01","Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2","Accept-Encoding": "gzip, deflate, br","Referer": "https://www.detayun.cn/tool/verifyCodeIdentifyPage/?verify_idf_id=15&_=1662691208701","Content-Type": "application/x-www-form-urlencoded; charset=UTF-8","X-Requested-With": "XMLHttpRequest","Content-Length": "66159","Origin": "https://www.detayun.cn","Connection": "keep-alive","Cookie": 'Hm_lvt_3eecc7feff77952670b7c24e952e8773=1662376740,1662514492,1662616792,1662642119; token="MTY2MjY5NDgxNS45MzY1NTczOjA2NGU2NzM0M2ZiY2Z0ODRiN2U4MmJkMzFjOTZmNDI4ZWRmYThiZWE="; sessionid=nyqsx4g4h2uvjh1xxuyvmcl5cuob4vqe',"TE": "Trailers",
}
# 请求参数
data = {'verify_idf_id':'15','img_base64': None, #需要识别的图片'words':'润疲狗',  # 需要识别的文字'_':'1662691244530'
}
# 打开需要识别的图片
img = Image.open(r'E:\Python\learning\江苏省电子税务局验证码\big_img\1657696065-润疲狗.jpg')
# 图片转为base64格式
img_base64 = PIL_base64(img)
# 配置图片到请求参数中
data['img_base64'] = img_base64# 发送请求
response = requests.post(url=url, headers=header, data=data)response_data = response.json()
if response_data['code'] == 200:print('文字坐标:',response_data['data']['res_str'])
else:print('请完成登录,登录地址:https://www.detayun.cn')


http://www.ppmy.cn/news/830996.html

相关文章

java正则校验企业中征码

延续上一篇,此则文为java版本校验企业中征码. 校验规则在上一篇中已经提过.所以话不多说,直接上代码. //校验中征码public static boolean checkZZM(String value){//先进行正则匹配String reg "^[A-Z0-9]{3}[0-9]{13}$";if(!value.matches(reg)){return false;}//…

JS企业中征码证件校验正则

这段时间,公司进行的项目需要用到一些个人证件和企业证件的校验,参考了一些网上的代码,其实现在很多的规则都已经被大佬们编写出来,并且正常使用.所以在网上搜集了一些资料.经过一些修改,大部分都能直接用了,唯独少了中征码的校验.在此之前,我其实也不知道啥叫中征码. 不过呢,管…

【Python】Locust持续优化:InfluxDB与Grafana实现数据持久化与可视化分析

在进行性能测试时,我们需要对测试结果进行监控和分析,以便于及时发现问题并进行优化。 Locust在内存中维护了一个时间序列数据结构,用于存储每个事件的统计信息。 这个数据结构允许我们在Charts标签页中查看不同时间点的性能指标&#xff0c…

网络编程【TCP单向通信、TCP双向通信、一对多应用、一对多聊天服务器】(二)-全面详解(学习总结---从入门到深化)

目录 Java网络编程中的常用类 TCP通信的实现和项目案例 TCP通信入门案例 TCP单向通信 TCP双向通信 创建点对点的聊天应用 一对多应用 一对多聊天服务器 Java网络编程中的常用类 Java为了跨平台,在网络应用通信时是不允许直接调用操作系统接 口的&#xff0…

3.2V 磷酸铁锂电池充电芯片介绍--FS4057B

概述: FS4057B是一款完整的多模单节锂离子电池充电器, 可对 3.7V 锂电池, 3.2V 磷酸铁锂电池及 2.4V 钛酸锂电池充电, 充电器具有电池正负极反接保护,采用恒定电流/恒定电压线性控制。 FS4057B可以适合 USB 电源和适配器电源工作。由于采用了…

单节磷酸铁锂电池充电管理芯片IC驱动方案3.6V充电芯片手电筒_低压应急球泡灯适用

单节磷酸铁锂电池充电管理芯片IC驱动方案3.6V充电芯片手电筒_低压应急球泡灯适用 2:品牌名称:泛海微 3方案特点: 4.(1)产品特点 特点:  3.6V独立的单节磷酸铁锂电池充电管理  输入电压范围&…

锂电池驱动分析

锂电池的驱动程序要实现以下五个功能: 1.可以自动检测到当前给电池充电的是USB还是AC 2.组织过大的充电电流 3.坏电池检测 4.死亡温度的检测 5.电池电压的测量 当我们要写一个锂电池的驱动程序的时候,首先要知道内核提供给驱动的接口,就…