Python技能共建】驗證碼實操2案例 r21

      網友投稿 871 2022-05-29

      Python 驗證碼是什么

      如果你是一個數據挖掘愛好者,那么驗證碼是你避免不過去的一個天坑,和各種驗證碼斗爭,必然是你成長的一條道路,

      本篇文章為你帶來驗證碼的入門案例,來吧,一起 Coding 吧。

      怎么用

      數字+字母的驗證碼

      我隨便在百度圖片搜索了一個驗證碼,如下

      【Python技能樹共建】驗證碼實操2案例 r21

      今天要做的是驗證碼識別中最簡單的一種辦法,采用pytesseract解決,它屬于 Python 當中比較簡單的OCR識別庫

      使用pytesseract之前,你需要通過 pip 安裝一下對應的模塊 ,需要兩個

      pytesseract 庫還有圖像處理的 pillow 庫了

      pip install pytesseract pip install pillow

      如果你安裝了這兩個庫之后,編寫一個識別代碼,一般情況下會報下面這個錯誤

      pytesseract.pytesseract.TesseractNotFoundError: tesseract is not installed or it's not in your path

      這是由于你還缺少一部分內容

      安裝一個 Tesseract-OCR 軟件。這個軟件是由 Google 維護的開源的 OCR 軟件。

      - > https://github.com/tesseract-ocr/tesseract/wiki

      中文包的- > https://github.com/tesseract-ocr/tessdata

      選擇你需要的版本進行下載即可

      from PIL import Image, ImageFilter im = Image.open(‘1.png’) # 高斯模糊 im.filter(ImageFilter.GaussianBlur) # 普通模糊 im.filter(ImageFilter.BLUR) # 邊緣增強 im.filter(ImageFilter.EDGE_ENHANCE) # 找到邊緣 im.filter(ImageFilter.FIND_EDGES) # 浮雕 im.filter(ImageFilter.EMBOSS) # 輪廓 im.filter(ImageFilter.CONTOUR) # 銳化 im.filter(ImageFilter.SHARPEN) # 平滑 im.filter(ImageFilter.SMOOTH) # 細節 im.filter(ImageFilter.DETAIL)

      format 屬性定義了圖像的格式,如果圖像不是從文件打開的,那么該屬性值為 None;

      size 屬性是一個 tuple,表示圖像的寬和高(單位為像素);

      mode 屬性為表示圖像的模式,常用的模式為:L 為灰度圖,RGB 為真彩色,CMYK 為 pre-press 圖像。如果文件不能打開,則拋出 IOError 異常。

      注意安裝完畢,如果還是報錯,請找到模塊 pytesseract.py 這個文件,對這個文件進行編輯

      一般這個文件在 C:\Program Files\Python36\Lib\site-packages\pytesseract\pytesseract.py 位置

      文件中 tesseract_cmd = 'tesseract' 改為自己的地址 例如: tesseract_cmd = 'C:\Program Files (x86)\Tesseract-OCR\tesseract.exe'

      如果報下面的 BUG,請注意

      Error opening data file \Program Files (x86)\Tesseract-OCR\tessdata/chi_sim.traineddata Please make sure the TESSDATA_PREFIX environment variable

      解決辦法也比較容易,按照它的提示,表示缺失了 TESSDATA_PREFIX 這個環境變量。你只需要在系統環境變量中添加一條即可

      將 TESSDATA_PREFIX=C:\Program Files (x86)\Tesseract-OCR 添加環境變量

      重啟 IDE 或者重新 CMD,然后繼續運行代碼,這個地方注意需要用管理員運行你的 py 腳本

      步驟分為

      打開圖片 Image.open()

      pytesseract 識別圖片

      import pytesseract from PIL import Image def main(): image = Image.open("1.jpg") text = pytesseract.image_to_string(image,lang="chi_sim") print(text) if __name__ == '__main__': main()

      測試英文,數字什么的基本沒有問題,中文簡直慘不忍睹。空白比較大的可以識別出來。唉~不好用

      當然剛才那個7364 十分輕松的就識別出來了。

      帶干擾的驗證碼識別

      接下來識別如下的驗證碼,我們首先依舊先嘗試一下。運行代碼發現沒有任何顯示。接下來需要對這個圖片進行處理

      基本原理都是完全一樣的

      彩色轉灰度

      灰度轉二值

      二值圖像識別

      彩色轉灰度

      im = im.convert('L')

      灰度轉二值,解決方案比較成套路,采用閾值分割法,threshold 為分割點

      def initTable(threshold=140): table = [] for i in range(256): if i < threshold: table.append(0) else: table.append(1) return table

      調用

      binaryImage = im.point(initTable(), '1') binaryImage.show()

      調整之后

      今天你要學習的驗證碼采用通過第三方 AI 平臺開放的 OCR 接口實現,OCR 文字識別技術目前已經比較成熟了,而且第三方比較多,今天采用的是百度的。

      借用第三方平臺解決驗證碼

      官方網址:http://ai.baidu.com/

      接下來申請

      接下來創建一個簡單應用之后,就可以使用了,我們找到

      你需要具備基本的閱讀第三方文檔的能力,打開我們需要的文檔

      https://cloud.baidu.com/doc/OCR/OCR-API.html

      這個頁面基本上已經把我們需要做的所有內容都已經標識清楚了

      在目前主流的 API 開發模式下,都是需要你進行 accesstoken 的獲取的

      代碼如下 ,重點需要參照文檔進行傳參的設計

      def get_accesstoken(self): res = requests.post(self.url.format(self.key,self.secret),headers=self.header) content = res.text if (content): return json.loads(content)["access_token"]

      得到 accesstoken 之后,你可以繼續下面的操作

      import requests import json import base64 import urllib.request, urllib.parse class GetCode(object): def __init__(self): self.url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={}&client_secret={}" self.api = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token={}" self.header = { "Content-Type":'application/json; charset=UTF-8' } self.key = "你的KEY" self.secret = "你的SECRET"

      普通沒有干擾的驗證碼,我們直接識別即可,但是有的驗證碼還是有干擾的,在識別之前,需要對它進行基本的處理,我們采用和上篇文章類似的辦法進行,對它進行灰度處理和二值化操作。部分代碼我直接硬編碼了,不過最終識別的效果并沒有比想象的優化多少。

      def init_table(self,threshold=155): table = [] for i in range(256): if i < threshold: table.append(0) else: table.append(1) return table def opt_image(self): im = Image.open("66.png") im = im.convert('L') im = im.point(self.init_table(), '1') im.save('66_s.png') return "66_s.png"

      調用百度的驗證碼接口,不使用百度給的模塊直接編寫。按照它對應的文檔,書寫即可。

      在這個地方尤其注意官方文檔提示

      def get_file_content(self,file_path): with open(file_path, 'rb') as fp: base64_data = base64.b64encode(fp.read()) s = base64_data.decode() data = {} data['image'] = s decoded_data = urllib.parse.urlencode(data) return decoded_data def show_code(self): image = self.get_file_content(self.opt_image()) headers = { "Content-Type": "application/x-www-form-urlencoded" } res = requests.post(self.api.format(self.get_accesstoken()),headers=headers,data=image) print(res.text)

      通過百度模塊調用驗證碼識別

      pip install baidu-aip

      安裝之后,就可以使用啦

      聲明一些常量,你在百度創建應用之后就可以獲取

      初始化文字識別類

      調用對應的方法

      from aip import AipOcr # 定義常量 APP_ID = '15736693' API_KEY = '你的KEY' SECRET_KEY = '你的SECRET' # 初始化文字識別 aipOcr=AipOcr(APP_ID, API_KEY, SECRET_KEY) # 讀取圖片 filePath = "1.jpg" def get_file_content(filePath): with open(filePath, 'rb') as fp: return fp.read() # 定義參數變量 options = { 'detect_direction': 'true', 'language_type': 'CHN_ENG', } # 網絡圖片文字文字識別接口 result = aipOcr.webImage(get_file_content(filePath),options) print(result)

      擴展部分

      這種通過第三方 OCR 技術識別驗證碼的方式,本質上和上篇文章的原理是一致的

      在實測過程中發現,沒有太多干擾線,搜狗,騰訊,有道 基本表現一致

      對于這種方式,學會即可~,道理都是一致的,當然你可以用 Python 實現一個圖片轉文字的小應用是沒有任何問題的

      OCR Python

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:基于JavaSwing ATM取款機系統的設計和實現
      下一篇:如何設置具有 HDFS 高可用性的 Hadoop 集群
      相關文章
      亚洲国产精品13p| 亚洲黄色在线视频| 亚洲综合色自拍一区| 亚洲国产精品人久久电影| 久久精品夜色国产亚洲av| 亚洲成AV人网址| 国产精品成人亚洲| 国产亚洲人成在线影院| 精品无码专区亚洲| 国产在亚洲线视频观看| 亚洲AV无码一区二区大桥未久| 亚洲av乱码一区二区三区| 亚洲三级在线免费观看| 亚洲av无码片区一区二区三区| 亚洲AV无码一区二区三区在线| 亚洲日本视频在线观看| 亚洲激情电影在线| 亚洲精品第一国产综合野| 亚洲一卡2卡3卡4卡乱码 在线 | 亚洲AV成人噜噜无码网站| 亚洲一区二区三区免费观看| 97久久国产亚洲精品超碰热| 亚洲kkk4444在线观看| 亚洲国产精品自在自线观看| 国产亚洲综合一区二区三区| 亚洲精品国产自在久久| 曰韩亚洲av人人夜夜澡人人爽| 亚洲精品乱码久久久久久| 亚洲AV日韩AV永久无码久久 | 老子影院午夜伦不卡亚洲| 亚洲国产成人精品久久久国产成人一区二区三区综 | 久久精品国产精品亚洲毛片| 亚洲欧洲精品久久| 亚洲 日韩经典 中文字幕| 亚洲aⅴ天堂av天堂无码麻豆| 亚洲精品无码99在线观看| 亚洲人成人无码网www电影首页 | 九月丁香婷婷亚洲综合色| 久久久久亚洲av无码专区导航| 亚洲人成在久久综合网站| 亚洲中文字幕乱码熟女在线|