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()
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脚本开头两行的:#!/usr/bin/python和# -*- coding: utf-8 -*-的作用 – 指定文件编码类型
- python的IDE:PyCharm
- python中sort sorted() reverse() reversed() 的区别
- python 类修饰器
- 【Python】批量创建线程
- python 3.x 关键字 (保留字)
- Python编程中归并排序算法的实现步骤详解
- [python]面试题:交换两数且不使用临时变量
- 学习TensorFlow,浅析MNIST的python代码
- 学习tensorflow,浅析MNIST的python代码
- python email模块的使用实例
- 神奇的getattr - Python
- Python手机号码归属地查询代码
- 165. Compare Version Numbers [easy] (Python)
- 图文讲解选择排序算法的原理及在Python中的实现
- Python——正则表达式
- Python安装BeautifulSoup库(Windows平台下)
- 浅谈插入排序算法在Python程序中的实现及简单改进
- python文件的读写与合并
- Python中使用插入排序算法的简单分析与代码示例