python简单识别验证码去噪

验证码多种多样,我这里提供的方法仅对有噪点的验证码进行识别有效。

首先,这是我准备的原始图片 4.png

具体的实现代码

import tesserocr
from PIL import Image, ImageDraw
import time

# image = Image.open("img/4_1.png")
# fh = open("img/1.txt", "w")
# w, h = image.size
# 图片转文本,测试用
# for i in range(h):
#     for j in range(w):
#         cl = image.getpixel((j, i))
#         clall = cl[0] + cl[1] + cl[2]
#         # clall == 0即当前像素为黑色
#         if clall == 0:
#             fh.write("0")
#         else:
#             fh.write("1")
#     fh.write("\n")
# fh.close()

# 将图片转为黑白二色
def black_white(image):
    w, h = image.size
    for i in range(h):
        for j in range(w):
            cl = image.getpixel((j, i))
            clall = cl[0] + cl[1] + cl[2]
            # clall == 0即当前像素为黑色
            if clall >= 155*3:  # 根据具体的图片修改
                image.putpixel((j, i), (255, 255, 255))
            else:
                image.putpixel((j, i), (0, 0, 0))

#二值数组
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 降噪次数
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)

def start(img_path,save_img_path):
    image = Image.open(img_path)
    black_white(image)
    image = image.convert("L")
    twoValue(image,100)
    clearNoise(image,4,1)
    saveImage(save_img_path,image.size)
    print(tesserocr.file_to_text(save_img_path))

img_path = "img/4.png"
save_img_path = "img/4_1.png"
start(img_path, save_img_path)

经过处理后得到以下图片 4_1.png


控制台输出结果

ziri

不过以上是在理想情况下的实现,对于某些图片的识别率不高

等后期加上一些算法提高识别率把。

 

原文地址:https://www.cnblogs.com/YLTzxzy/p/11331128.html

时间: 2024-11-10 13:20:20

python简单识别验证码去噪的相关文章

python 简单图像识别--验证码

python  简单图像识别--验证码 记录下,准备工作安装过程很是麻烦. 首先库:pytesseract,image,tesseract,PIL windows安装PIL,直接exe进行安装更方便(https://files.cnblogs.com/files/Oran9e/PILwin64.zip)(https://files.cnblogs.com/files/Oran9e/PILwin32.zip) 安装 image:pip install image 安装 pytesseract:pi

python 简单图像识别--验证码Ⅲ

python  简单图像识别--验证码Ⅲ 实现自动登陆网站 登录学校图书馆管理系统为例,做一个简单的例子.python识别简单的没有干扰的纯数字验证码还是可以的,但是识别字母数字再加上干扰因素,误报率很高,因此这个我是采用"人工识别",人工输入. 首先得明白cookie的作用,cookie是某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据.因此我们需要用Cookielib模块来保持网站的cookie. 登录学校图书馆管理系统登陆(http://122.207

基于SVM的python简单实现验证码识别

验证码识别是一个适合入门机器学习的项目,之前用knn 做过一个很简单的,这次用svm来实现.svm直接用了开源的库libsvm.验证码选的比较简单,代码也写得略乱,大家看看就好. 1. 爬取验证码图片 1 import urllib 2 from urllib import request 3 4 5 def download_pics(pic_name): 6 url = 'http://smart.gzeis.edu.cn:8081/Content/AuthCode.aspx' 7 res

Python验证码识别--利用pytesser识别简单图形验证码

一.探讨 识别图形验证码可以说是做爬虫的必修课,涉及到计算机图形学,机器学习,机器视觉,人工智能等等高深领域…… 简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形.以及利用计算机进行图形的计算.处理和显示的相关原理与算法.图形通常由点.线.面.体等几何元素和灰度.色彩.线型.线宽等非几何属性组成.计算机涉及到的几何图形处理一般有 2维到n维图形处理,边界区分,面积计算,体积计算,扭曲变形校正.对于颜色则有色彩空间的计算与转换,图形上色,阴影,色差处理等等. 在破解验证码中需要用

Python验证码识别:利用pytesser识别简单图形验证码

一.探讨 识别图形验证码可以说是做爬虫的必修课,涉及到计算机图形学,机器学习,机器视觉,人工智能等等高深领域--    简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形.以及利用计算机进行图形的计算.处理和显示的相关原理与算法.图形通常由点.线.面.体等几何元素和灰度.色彩.线型.线宽等非几何属性组成.计算机涉及到的几何图形处理一般有 2维到n维图形处理,边界区分,面积计算,体积计算,扭曲变形校正.对于颜色则有色彩空间的计算与转换,图形上色,阴影,色差处理等等. 在破解验证码中

简单的验证码识别

https://blog.csdn.net/qq_35923581/article/details/79487579 这是我尝试写的第一篇技术博客,借鉴了很多博客和教程,写出了自己的代码,代码较为冗杂而且程序十分耗时.所以本文主要提供验证码识别的一个简单的思路,代码实现的部分还望各位大佬指点. 看了好几篇验证码图片识别的博文,不难归纳出验证码识别的大概思路是收集训练集-->图像处理-->得到图片特征值-->训练-->识别,其中图像处理部分又包括了灰度化.二值化.去噪.分割等过程.本

使用python识别验证码

公司的登录注册等操作有验证码,测试环境可以让开发屏蔽掉验证码,但是如果到线上的话就要想办法识别验证码或必过验证码了. 识别验证码主要分为三部分,一.对验证码进行二值化.二.将二值化后的图片分割.三.进行识别.理论上在识别之前有一个标准化的操作,是将图片进行旋转等操作,尽量将字符弄成一样的格式,方便识别,避免随进图片的差异. 用这个验证码作为例子:.下面是代码: 一.打开图片,将图片二值化. 图片是由RGB三个通道组成的,图片的验证码和他的干扰,比如点或横线等,RGB的阙值有很大的区别,我们可以使

Ubuntu上python识别验证码遇到的问题

python有专门图片识别的库我用的是pytesseract pytesseract说明 Python-tesseract is a wrapper for google's Tesseract-OCR( http://code.google.com/p/tesseract-ocr/ ). It is also useful as astand-alone invocation script to tesseract, as it can read all image typessupporte

Python 代码实现验证码识别

Python 代码实现验证码识别 测试开发社区  1周前 源 /  j_hao104 一.探讨 识别图形验证码可以说是做爬虫的必修课,涉及到计算机图形学,机器学习,机器视觉,人工智能等等高深领域…… 简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形.以及利用计算机进行图形的计算.处理和显示的相关原理与算法.图形通常由点.线.面.体等几何元素和灰度.色彩.线型.线宽等非几何属性组成.计算机涉及到的几何图形处理一般有 2维到n维图形处理,边界区分,面积计算,体积计算,扭曲变形校正.