您的位置:首页 > 编程语言 > Python开发

Python 对 验证码的使用

2016-05-04 11:21 543 查看
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()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: