使用pytesser实现简单的验证码识别

from PIL import Image
import pytesseract


class Verification():
    def __init__(self,path):
        self.image = Image.open(path)
        self.w, self.h = self.image.size
        self.num = 0

    def my_grayscale(self):  # 自定义灰度化
        for i in range(self.w):
            for j in range(self.h):
                R,G,B = self.image.getpixel((i,j))
                pixel = int(R*0.3+G*0.59+B*0.11)
                self.image.putpixel((i,j),(pixel,pixel,pixel))
        print('自定义灰度化完成')
        self.saveimage()

    def grayscale(self):  # 库方法灰度化
        self.image = self.image.convert('L')
        print('灰度化完成')
        self.saveimage()

    def sharp(self):  # 二值化
        tem = 0
        for i in range(self.w):
            for j in range(self.h):
                tem += self.image.getpixel((i,j))[0]
        pixel_ave = tem/self.w/self.h
        for i in range(self.w):
            for j in range(self.h):
                p = self.image.getpixel((i,j))[0]
                if p > pixel_ave:
                    self.image.putpixel((i,j),(255,255,255))
                else:
                    self.image.putpixel((i,j),(0,0,0))
        print("二值化完成")
        self.saveimage()

    def reduction_noise(self):  # 降噪
        RANGE = 4
        K = 0.03

        def function(x,y):  # 生成附近点的坐标
            for i in range(x-RANGE,x+RANGE+1):
                for j in range(y-RANGE,y+RANGE+1):
                    lib = [i,j]
                    yield tuple(lib)

        for i in range(self.w):
            for j in range(self.h):
                if i<self.w*K or i>self.w*(1-K) or j<self.h*K or j>self.h*(1-K):
                    self.image.putpixel((i,j),(255,255,255))
                    continue
                num = 0
                if self.image.getpixel((i,j))[0]==0:
                    for x in function(i,j):
                        if self.image.getpixel(x)[0]<128:
                            num += 1
                    if num<0.4*((RANGE*2+1)**2-1):
                        self.image.putpixel((i, j),(255,255,255))

        print('降噪完成')
        self.saveimage()

    def saveimage(self):  # 存图片
        self.num += 1
        self.image.save(f'{self.num}.jpg')
        print('图片已储存')

    def img_to_str(self):  # 识别转换
        string = pytesseract.image_to_string(self.image)
        print(string)
        return string

    def run(self):
        self.my_grayscale()
        # self.grayscale()
        self.sharp()
        self.reduction_noise()
        self.img_to_str()


if __name__ == "__main__":
    path = r'D:\qq聊天记录\480299053\FileRecv\1.jpg'
    im = Verification(path)
    im.run()


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值