感謝做者分享-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識別仍是有偏差的,之後能夠用深度學習的方式訓練處一個模型,能夠提升識別效率,後期會跟進實現的。