Python 对 验证码的使用

1.安装好 python3 之后
2.安装 pillow 第三方库文件
# /usr/local/python3/bin
# ./pip3 install pillow

pip 升级:python -m pip install --upgrade pip

安装 pytesser 跟 ocr ,将 ocr 里面的 data 目录拷贝到 pytesser 模块下的 data

3.使用 方法
from PIL import Image

4.例子
#!/usr/bin/python
# -*- coding:utf-8 -*-

from PIL import Image
from pytesser import *

# 打开一个jpg图像文件,注意是当前路径:
#im = Image.open('v1.jpg')
# 获得图像尺寸:
#w, h = im.size
#print('Original image size: %sx%s' % (w, h))
# 缩放到50%:
#im.thumbnail((w//2, h//2))
#print('Resize image to: %sx%s' % (w//2, h//2))
# 把缩放后的图像用jpeg格式保存:
#im.save('thumbnail.jpg', 'jpeg')

# 二值化
threshold = 140
table = []
for i in range(256):
    if i < threshold:
        table.append(0)
    else:
        table.append(1)

im = Image.open('/root/sbin/python/spider/v1.jpg')
#转化到亮度
imgry = im.convert('L')
imgry.save('gv1.jpg')
#二值化
out = imgry.point(table,'1')
out.save('bv1.jpg')

#识别
text = image_to_string(out)

#识别是否对
#text = text.strip()
#text = text.upper()

#for r in rep:
#    text = text.replace(r,rep[r])

print(text)













#encoding=utf-8
###利用点的密度计算
from PIL import Image,ImageEnhance,ImageFilter,ImageDraw
import sys
from pytesser import *
#计算范围内点的个数
def numpoint(im):
    w,h = im.size
    data = list( im.getdata() )
    mumpoint=0
    for x in range(w):
        for y in range(h):
            if data[ y*w + x ] !=255:#255是白色
                mumpoint+=1
    return mumpoint
                
#计算5*5范围内点的密度
def pointmidu(im):
    w,h = im.size
    p=[]
    for y in range(0,h,5):
        for x in range(0,w,5):
            box = (x,y, x+5,y+5)
            im1=im.crop(box)
            a=numpoint(im1)
            if a<11:##如果5*5范围内小于11个点,那么将该部分全部换为白色。
                for i in range(x,x+5):
                    for j in range(y,y+5):
                        im.putpixel((i,j), 255)
    im.save(r'img.jpg')
        
def ocrend():##识别
    image_name = "img.jpg"
    im = Image.open(image_name)
    im = im.filter(ImageFilter.MedianFilter())
    enhancer = ImageEnhance.Contrast(im)
    im = enhancer.enhance(2)
    im = im.convert('1')
    im.save("1.tif")
    print(image_file_to_string('1.tif'))
    
if __name__=='__main__':
    image_name = "1.png"
    im = Image.open(image_name)
    im = im.filter(ImageFilter.DETAIL)
    im = im.filter(ImageFilter.MedianFilter())
    
    enhancer = ImageEnhance.Contrast(im)
    im = enhancer.enhance(2)
    im = im.convert('1')
    ##a=remove_point(im)
    pointmidu(im)
    ocrend()

你可能感兴趣的:(Python 对 验证码的使用)