验证码识别

验证码识别(分类问题)

  • 首先利用PIL中的画布、画笔等工具制作出验证码图片

    • 获取随机RGB格式的颜色值 (xxx,xxx,xxx)
    • 获取验证码数字,该数字需要存储为label,该逻辑回归为有监督的学习
    • 使用Image创建画布、ImageDraw创建画笔

    note: 其中可以使用ImageFont实例化字体对象,但是需要将字体文件存储到虚拟环境的Script文件夹中

    • 在绘制验证码时需要绘制噪点和斜线,来模拟生产环境中的验证码识别
  • 验证码识别步骤

    • 首先将RGB图片转化为灰度图,它的每个像素用8个bit表示,0表示黑,255表示白,其他数字表示不同的灰度

    • 再将灰度图转化为二值图(返回的是一个数组,即每一个像素块的值)

    def binarization(path):
        image = Image.open(path)
        img_gray = image.convert('L')
        # 转化为数组形式
        img_gray = np.array(img_gray)
        height, width = img_gray.shape
        for x in range(width):
            for y in range(height):
                if img_gray[y, x] <= 220:
                    img_gray[y, x] = 0
                else:
                    img_gray[y, x] = 1
        # plt.imshow(img_gray, cmap='gray')
        # plt.show()
        return img_gray
    
    • 对二值图进行降噪处理(主要是对周围点的判断,周围点很少则判断其为异常点,消除为白色)
    # 降噪处理
    def noiseReduction(img_gray, label):
        height, width = img_gray.shape
    
        for x in range(width):
            for y in range(height):
                # 该像素点旁边的黑点个数
                black_point = 0
                if img_gray[y, x] == 1:
                    continue
                else:
                    try:
                        if img_gray[y, x + 1] == 0:
                            black_point += 1
                    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值