感谢做者分享-http://bjbsair.com/2020-04-07/tech-info/30740.htmlhtml
图片验证码基本上是有数字和字母或者数字或者字母组成的字符串,而后经过一些干扰线的绘制而造成图片验证码。app
例如:知网的注册就有图片验证码scrapy
首先咱们须要获取验证码图片,经过开发者工具咱们能够获得验证码url连接工具
其次就是经过Pillow类库和tesserocr进行识别,代码以下:学习
# -*- coding:utf-8 -*- import tesserocr from PIL import Image import requests # 经过url连接获取验证码图片,并写入本地文件夹里 def get_image(path,url): """ :param path: 文件夹路径 :param url: 验证码url连接 """ respon = requests.get(url=url) # 请求验证码url with open(path,"wb") as file: file.write(respon.content) # 将验证码写到本地 # 因为验证码图片过小,须要对验证码图片放大处理,以便识别 def reset_image_size(image_path): """ :param image_path: 图片所在的路径 :return: """ image = Image.open(fp=image_path) # 打开图片 pic_resize = 5 # 设置图片放大或者缩小倍数 (x, y) = image.size # 获取图片的大小 x_s = int(x * pic_resize) # 放大5倍(可调) y_s = int(y * pic_resize) # 放大5倍(可调) out = image.resize((x_s, y_s), Image.ANTIALIAS) # ANTIALIAS表示高质量图片 out.save(image_path) # 读取验证码图片文本 def read_image(image_path): """ :param image_path: 验证码图片路径 :return: """ image = Image.open(fp=image_path) # 打开验证码图片 image = image.convert('L') # 将验证码图片转换为灰度图(L表示灰度图) threshold = 127 # 设置灰度图二值化阈值 table = [] for i in range(256): # 像素为256 if i < threshold: table.append(0) else: table.append(1) image = image.point(table, '1') # 二值化处理后的副本(1表示二值化) image.show() result = tesserocr.image_to_text(image) # 验证码图片转换为文本 return result # 验证码识别信息脏数据处理 def VerifInfo(result): """ :param result: 验证码图片经过初步识别后获得的脏数据 :return: """ verif_str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" verif_list = [] for i in result: if i in verif_str: verif_list.append(i) return "".join(verif_list) if __name__ == '__main__': img_path = "D:\photo\image" # 文件夹目录 img_path = img_path + "\VerificationCode.png" # 验证码图片所在的目录及名称 img_url = "http://my.cnki.net/elibregister/CheckCode.aspx" # 验证码url get_image(img_path,img_url) # 获取验证码图片 reset_image_size(img_path) # 调整验证码图片大小 result = read_image(img_path) # 读取验证码图片内容 verif_info = VerifInfo(result) # 验证码内容数据处理 verif_len = len(verif_info) # 验证码识别长度 if verif_len == 4 and verif_info: print(verif_info) else: pass
最后就是看看识别的效果吧。前者为原始验证码图片,后者是通过二值化处理的图片。url
输出的结果为:FZug.net
显然使用tesserocr识别仍是有偏差的,之后能够用深度学习的方式训练处一个模型,能够提升识别效率,后期会跟进实现的。感谢做者分享-http://bjbsair.com/2020-04-07/tech-info/30740.htmlcode
图片验证码基本上是有数字和字母或者数字或者字母组成的字符串,而后经过一些干扰线的绘制而造成图片验证码。htm
例如:知网的注册就有图片验证码blog
首先咱们须要获取验证码图片,经过开发者工具咱们能够获得验证码url连接
其次就是经过Pillow类库和tesserocr进行识别,代码以下:
# -*- coding:utf-8 -*- import tesserocr from PIL import Image import requests # 经过url连接获取验证码图片,并写入本地文件夹里 def get_image(path,url): """ :param path: 文件夹路径 :param url: 验证码url连接 """ respon = requests.get(url=url) # 请求验证码url with open(path,"wb") as file: file.write(respon.content) # 将验证码写到本地 # 因为验证码图片过小,须要对验证码图片放大处理,以便识别 def reset_image_size(image_path): """ :param image_path: 图片所在的路径 :return: """ image = Image.open(fp=image_path) # 打开图片 pic_resize = 5 # 设置图片放大或者缩小倍数 (x, y) = image.size # 获取图片的大小 x_s = int(x * pic_resize) # 放大5倍(可调) y_s = int(y * pic_resize) # 放大5倍(可调) out = image.resize((x_s, y_s), Image.ANTIALIAS) # ANTIALIAS表示高质量图片 out.save(image_path) # 读取验证码图片文本 def read_image(image_path): """ :param image_path: 验证码图片路径 :return: """ image = Image.open(fp=image_path) # 打开验证码图片 image = image.convert('L') # 将验证码图片转换为灰度图(L表示灰度图) threshold = 127 # 设置灰度图二值化阈值 table = [] for i in range(256): # 像素为256 if i < threshold: table.append(0) else: table.append(1) image = image.point(table, '1') # 二值化处理后的副本(1表示二值化) image.show() result = tesserocr.image_to_text(image) # 验证码图片转换为文本 return result # 验证码识别信息脏数据处理 def VerifInfo(result): """ :param result: 验证码图片经过初步识别后获得的脏数据 :return: """ verif_str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" verif_list = [] for i in result: if i in verif_str: verif_list.append(i) return "".join(verif_list) if __name__ == '__main__': img_path = "D:\photo\image" # 文件夹目录 img_path = img_path + "\VerificationCode.png" # 验证码图片所在的目录及名称 img_url = "http://my.cnki.net/elibregister/CheckCode.aspx" # 验证码url get_image(img_path,img_url) # 获取验证码图片 reset_image_size(img_path) # 调整验证码图片大小 result = read_image(img_path) # 读取验证码图片内容 verif_info = VerifInfo(result) # 验证码内容数据处理 verif_len = len(verif_info) # 验证码识别长度 if verif_len == 4 and verif_info: print(verif_info) else: pass
最后就是看看识别的效果吧。前者为原始验证码图片,后者是通过二值化处理的图片。
输出的结果为:FZug
显然使用tesserocr识别仍是有偏差的,之后能够用深度学习的方式训练处一个模型,能够提升识别效率,后期会跟进实现的。感谢做者分享-http://bjbsair.com/2020-04-07/tech-info/30740.html
图片验证码基本上是有数字和字母或者数字或者字母组成的字符串,而后经过一些干扰线的绘制而造成图片验证码。
例如:知网的注册就有图片验证码
首先咱们须要获取验证码图片,经过开发者工具咱们能够获得验证码url连接
其次就是经过Pillow类库和tesserocr进行识别,代码以下:
# -*- coding:utf-8 -*- import tesserocr from PIL import Image import requests # 经过url连接获取验证码图片,并写入本地文件夹里 def get_image(path,url): """ :param path: 文件夹路径 :param url: 验证码url连接 """ respon = requests.get(url=url) # 请求验证码url with open(path,"wb") as file: file.write(respon.content) # 将验证码写到本地 # 因为验证码图片过小,须要对验证码图片放大处理,以便识别 def reset_image_size(image_path): """ :param image_path: 图片所在的路径 :return: """ image = Image.open(fp=image_path) # 打开图片 pic_resize = 5 # 设置图片放大或者缩小倍数 (x, y) = image.size # 获取图片的大小 x_s = int(x * pic_resize) # 放大5倍(可调) y_s = int(y * pic_resize) # 放大5倍(可调) out = image.resize((x_s, y_s), Image.ANTIALIAS) # ANTIALIAS表示高质量图片 out.save(image_path) # 读取验证码图片文本 def read_image(image_path): """ :param image_path: 验证码图片路径 :return: """ image = Image.open(fp=image_path) # 打开验证码图片 image = image.convert('L') # 将验证码图片转换为灰度图(L表示灰度图) threshold = 127 # 设置灰度图二值化阈值 table = [] for i in range(256): # 像素为256 if i < threshold: table.append(0) else: table.append(1) image = image.point(table, '1') # 二值化处理后的副本(1表示二值化) image.show() result = tesserocr.image_to_text(image) # 验证码图片转换为文本 return result # 验证码识别信息脏数据处理 def VerifInfo(result): """ :param result: 验证码图片经过初步识别后获得的脏数据 :return: """ verif_str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" verif_list = [] for i in result: if i in verif_str: verif_list.append(i) return "".join(verif_list) if __name__ == '__main__': img_path = "D:\photo\image" # 文件夹目录 img_path = img_path + "\VerificationCode.png" # 验证码图片所在的目录及名称 img_url = "http://my.cnki.net/elibregister/CheckCode.aspx" # 验证码url get_image(img_path,img_url) # 获取验证码图片 reset_image_size(img_path) # 调整验证码图片大小 result = read_image(img_path) # 读取验证码图片内容 verif_info = VerifInfo(result) # 验证码内容数据处理 verif_len = len(verif_info) # 验证码识别长度 if verif_len == 4 and verif_info: print(verif_info) else: pass
最后就是看看识别的效果吧。前者为原始验证码图片,后者是通过二值化处理的图片。
输出的结果为:FZug
显然使用tesserocr识别仍是有偏差的,之后能够用深度学习的方式训练处一个模型,能够提升识别效率,后期会跟进实现的。感谢做者分享-http://bjbsair.com/2020-04-07/tech-info/30740.html
图片验证码基本上是有数字和字母或者数字或者字母组成的字符串,而后经过一些干扰线的绘制而造成图片验证码。
例如:知网的注册就有图片验证码
首先咱们须要获取验证码图片,经过开发者工具咱们能够获得验证码url连接
其次就是经过Pillow类库和tesserocr进行识别,代码以下:
# -*- coding:utf-8 -*- import tesserocr from PIL import Image import requests # 经过url连接获取验证码图片,并写入本地文件夹里 def get_image(path,url): """ :param path: 文件夹路径 :param url: 验证码url连接 """ respon = requests.get(url=url) # 请求验证码url with open(path,"wb") as file: file.write(respon.content) # 将验证码写到本地 # 因为验证码图片过小,须要对验证码图片放大处理,以便识别 def reset_image_size(image_path): """ :param image_path: 图片所在的路径 :return: """ image = Image.open(fp=image_path) # 打开图片 pic_resize = 5 # 设置图片放大或者缩小倍数 (x, y) = image.size # 获取图片的大小 x_s = int(x * pic_resize) # 放大5倍(可调) y_s = int(y * pic_resize) # 放大5倍(可调) out = image.resize((x_s, y_s), Image.ANTIALIAS) # ANTIALIAS表示高质量图片 out.save(image_path) # 读取验证码图片文本 def read_image(image_path): """ :param image_path: 验证码图片路径 :return: """ image = Image.open(fp=image_path) # 打开验证码图片 image = image.convert('L') # 将验证码图片转换为灰度图(L表示灰度图) threshold = 127 # 设置灰度图二值化阈值 table = [] for i in range(256): # 像素为256 if i < threshold: table.append(0) else: table.append(1) image = image.point(table, '1') # 二值化处理后的副本(1表示二值化) image.show() result = tesserocr.image_to_text(image) # 验证码图片转换为文本 return result # 验证码识别信息脏数据处理 def VerifInfo(result): """ :param result: 验证码图片经过初步识别后获得的脏数据 :return: """ verif_str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" verif_list = [] for i in result: if i in verif_str: verif_list.append(i) return "".join(verif_list) if __name__ == '__main__': img_path = "D:\photo\image" # 文件夹目录 img_path = img_path + "\VerificationCode.png" # 验证码图片所在的目录及名称 img_url = "http://my.cnki.net/elibregister/CheckCode.aspx" # 验证码url get_image(img_path,img_url) # 获取验证码图片 reset_image_size(img_path) # 调整验证码图片大小 result = read_image(img_path) # 读取验证码图片内容 verif_info = VerifInfo(result) # 验证码内容数据处理 verif_len = len(verif_info) # 验证码识别长度 if verif_len == 4 and verif_info: print(verif_info) else: pass
最后就是看看识别的效果吧。前者为原始验证码图片,后者是通过二值化处理的图片。
输出的结果为:FZug
显然使用tesserocr识别仍是有偏差的,之后能够用深度学习的方式训练处一个模型,能够提升识别效率,后期会跟进实现的。感谢做者分享-http://bjbsair.com/2020-04-07/tech-info/30740.html
图片验证码基本上是有数字和字母或者数字或者字母组成的字符串,而后经过一些干扰线的绘制而造成图片验证码。
例如:知网的注册就有图片验证码
首先咱们须要获取验证码图片,经过开发者工具咱们能够获得验证码url连接
其次就是经过Pillow类库和tesserocr进行识别,代码以下:
# -*- coding:utf-8 -*- import tesserocr from PIL import Image import requests # 经过url连接获取验证码图片,并写入本地文件夹里 def get_image(path,url): """ :param path: 文件夹路径 :param url: 验证码url连接 """ respon = requests.get(url=url) # 请求验证码url with open(path,"wb") as file: file.write(respon.content) # 将验证码写到本地 # 因为验证码图片过小,须要对验证码图片放大处理,以便识别 def reset_image_size(image_path): """ :param image_path: 图片所在的路径 :return: """ image = Image.open(fp=image_path) # 打开图片 pic_resize = 5 # 设置图片放大或者缩小倍数 (x, y) = image.size # 获取图片的大小 x_s = int(x * pic_resize) # 放大5倍(可调) y_s = int(y * pic_resize) # 放大5倍(可调) out = image.resize((x_s, y_s), Image.ANTIALIAS) # ANTIALIAS表示高质量图片 out.save(image_path) # 读取验证码图片文本 def read_image(image_path): """ :param image_path: 验证码图片路径 :return: """ image = Image.open(fp=image_path) # 打开验证码图片 image = image.convert('L') # 将验证码图片转换为灰度图(L表示灰度图) threshold = 127 # 设置灰度图二值化阈值 table = [] for i in range(256): # 像素为256 if i < threshold: table.append(0) else: table.append(1) image = image.point(table, '1') # 二值化处理后的副本(1表示二值化) image.show() result = tesserocr.image_to_text(image) # 验证码图片转换为文本 return result # 验证码识别信息脏数据处理 def VerifInfo(result): """ :param result: 验证码图片经过初步识别后获得的脏数据 :return: """ verif_str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" verif_list = [] for i in result: if i in verif_str: verif_list.append(i) return "".join(verif_list) if __name__ == '__main__': img_path = "D:\photo\image" # 文件夹目录 img_path = img_path + "\VerificationCode.png" # 验证码图片所在的目录及名称 img_url = "http://my.cnki.net/elibregister/CheckCode.aspx" # 验证码url get_image(img_path,img_url) # 获取验证码图片 reset_image_size(img_path) # 调整验证码图片大小 result = read_image(img_path) # 读取验证码图片内容 verif_info = VerifInfo(result) # 验证码内容数据处理 verif_len = len(verif_info) # 验证码识别长度 if verif_len == 4 and verif_info: print(verif_info) else: pass
最后就是看看识别的效果吧。前者为原始验证码图片,后者是通过二值化处理的图片。
输出的结果为:FZug
显然使用tesserocr识别仍是有偏差的,之后能够用深度学习的方式训练处一个模型,能够提升识别效率,后期会跟进实现的。感谢做者分享-http://bjbsair.com/2020-04-07/tech-info/30740.html
图片验证码基本上是有数字和字母或者数字或者字母组成的字符串,而后经过一些干扰线的绘制而造成图片验证码。
例如:知网的注册就有图片验证码
首先咱们须要获取验证码图片,经过开发者工具咱们能够获得验证码url连接
其次就是经过Pillow类库和tesserocr进行识别,代码以下:
# -*- coding:utf-8 -*- import tesserocr from PIL import Image import requests # 经过url连接获取验证码图片,并写入本地文件夹里 def get_image(path,url): """ :param path: 文件夹路径 :param url: 验证码url连接 """ respon = requests.get(url=url) # 请求验证码url with open(path,"wb") as file: file.write(respon.content) # 将验证码写到本地 # 因为验证码图片过小,须要对验证码图片放大处理,以便识别 def reset_image_size(image_path): """ :param image_path: 图片所在的路径 :return: """ image = Image.open(fp=image_path) # 打开图片 pic_resize = 5 # 设置图片放大或者缩小倍数 (x, y) = image.size # 获取图片的大小 x_s = int(x * pic_resize) # 放大5倍(可调) y_s = int(y * pic_resize) # 放大5倍(可调) out = image.resize((x_s, y_s), Image.ANTIALIAS) # ANTIALIAS表示高质量图片 out.save(image_path) # 读取验证码图片文本 def read_image(image_path): """ :param image_path: 验证码图片路径 :return: """ image = Image.open(fp=image_path) # 打开验证码图片 image = image.convert('L') # 将验证码图片转换为灰度图(L表示灰度图) threshold = 127 # 设置灰度图二值化阈值 table = [] for i in range(256): # 像素为256 if i < threshold: table.append(0) else: table.append(1) image = image.point(table, '1') # 二值化处理后的副本(1表示二值化) image.show() result = tesserocr.image_to_text(image) # 验证码图片转换为文本 return result # 验证码识别信息脏数据处理 def VerifInfo(result): """ :param result: 验证码图片经过初步识别后获得的脏数据 :return: """ verif_str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" verif_list = [] for i in result: if i in verif_str: verif_list.append(i) return "".join(verif_list) if __name__ == '__main__': img_path = "D:\photo\image" # 文件夹目录 img_path = img_path + "\VerificationCode.png" # 验证码图片所在的目录及名称 img_url = "http://my.cnki.net/elibregister/CheckCode.aspx" # 验证码url get_image(img_path,img_url) # 获取验证码图片 reset_image_size(img_path) # 调整验证码图片大小 result = read_image(img_path) # 读取验证码图片内容 verif_info = VerifInfo(result) # 验证码内容数据处理 verif_len = len(verif_info) # 验证码识别长度 if verif_len == 4 and verif_info: print(verif_info) else: pass
最后就是看看识别的效果吧。前者为原始验证码图片,后者是通过二值化处理的图片。
输出的结果为:FZug
显然使用tesserocr识别仍是有偏差的,之后能够用深度学习的方式训练处一个模型,能够提升识别效率,后期会跟进实现的。