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

普通数字加字母验证码破解

from pytesseract import pytesseract
from PIL import Image, ImageDraw
import random
# 降噪
# 二值数组
t2val = {}
def twoValue(image, G):
    for y in range(0, image.size[1]):
        for x in range(0, image.size[0]):
            g = image.getpixel((x, y))
            if g > G:
                t2val[(x, y)] = 1
            else:
                t2val[(x, y)] = 0
# 根据一个点A的RGB值,与周围的8个点的RBG值比较,设定一个值N(0 <N <8),当A的RGB值与周围8个点的RGB相等数小于N时,此点为噪点
# G: Integer 图像二值化阀值
# N: Integer 降噪率 0 <N <8
# Z: Integer 降噪次数
# 输出
#  0:降噪成功
#  1:降噪失败
def clearNoise(image, N, Z):
    for i in range(0, Z):
        t2val[(0, 0)] = 1
        t2val[(image.size[0] - 1, image.size[1] - 1)] = 1
        for x in range(1, image.size[0] - 1):
            for y in range(1, image.size[1] - 1):
                nearDots = 0
                L = t2val[(x, y)]
                if L == t2val[(x - 1, y - 1)]:
                    nearDots += 1
                if L == t2val[(x - 1, y)]:
                    nearDots += 1
                if L == t2val[(x - 1, y + 1)]:
                    nearDots += 1
                if L == t2val[(x, y - 1)]:
                    nearDots += 1
                if L == t2val[(x, y + 1)]:
                    nearDots += 1
                if L == t2val[(x + 1, y - 1)]:
                    nearDots += 1
                if L == t2val[(x + 1, y)]:
                    nearDots += 1
                if L == t2val[(x + 1, y + 1)]:
                    nearDots += 1

                if nearDots < N:
                    t2val[(x, y)] = 1
def saveImage(filename, size):
    image = Image.new("1", size)
    draw = ImageDraw.Draw(image)
    for x in range(0, size[0]):
        for y in range(0, size[1]):
            draw.point((x, y), t2val[(x, y)])
    image.save(filename)
for i in range(1,21):
    path = r"C:\Users\Administrator\PycharmProjects\测试\he.jpg"
    image = Image.open(path).convert("L")
    twoValue(image, 80)
    clearNoise(image, 3, 2)
    path1 = r"C:\Users\Administrator\PycharmProjects\测试\he2.jpg"
    saveImage(path1, image.size)
out = Image.open('he2.jpg')
result = pytesseract.image_to_string(out).split(' ')
print(result)
math_num = '0'
if math_num in result:
    result[result.index(math_num)] = 'o'
res = ''.join(result)
print(res)

识别有误差可以通过以下两个函数里面的参数进行调节

twoValue(image, 80)
clearNoise(image, 3, 2)

转载于:https://www.cnblogs.com/542684416-qq/p/10904621.html

相关文章:

  • 取出类似这种格式的时间 06-01 只取月份和日
  • Java 线程高级
  • 快速生成树协议RSTP
  • Linux centos 安装 Node.js
  • Linux系统配置文件
  • 剑指offer——03从尾至头打印列表(Python3)
  • 用python做的windows和linx文件夹同步。解决自动同步、加快传输大量小文件的速度、更丰富的文件上传过滤设置。...
  • 隐私政策--Privacy Policy
  • ModelViewSet的继承关系
  • Day24 正则表达式 正则函数 正则命名分组 正则表达式修饰符号
  • zookeeper原理浅析(二)
  • 自己出题
  • 关于字符串中含有中英文逗号,分号获取,判断并转换
  • 2019最新Python学习教程_Python学习路线:分支结构
  • codeforces 827B. High Load
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • Linux Process Manage
  • mongo索引构建
  • node入门
  • Shell编程
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • Vue.js 移动端适配之 vw 解决方案
  • Webpack 4x 之路 ( 四 )
  • 讲清楚之javascript作用域
  • 前端技术周刊 2019-02-11 Serverless
  • 前嗅ForeSpider中数据浏览界面介绍
  • 算法-图和图算法
  • 问题之ssh中Host key verification failed的解决
  • 一道面试题引发的“血案”
  • scrapy中间件源码分析及常用中间件大全
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​如何防止网络攻击?
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • #{}和${}的区别?
  • $ git push -u origin master 推送到远程库出错
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (5)STL算法之复制
  • (C#)一个最简单的链表类
  • (Git) gitignore基础使用
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (五)IO流之ByteArrayInput/OutputStream
  • (一)基于IDEA的JAVA基础12
  • (转载)hibernate缓存
  • ... 是什么 ?... 有什么用处?
  • .Net FrameWork总结
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .net 微服务 服务保护 自动重试 Polly
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?
  • .skip() 和 .only() 的使用
  • ?
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...
  • @EnableWebMvc介绍和使用详细demo
  • @FeignClient注解,fallback和fallbackFactory