導航:首頁 > 編程語言 > python驗證碼

python驗證碼

發布時間:2022-01-23 08:00:46

『壹』 python驗證碼識別

orc文字識別,現在比較流行的是通過人工智慧訓練CNN神經網路來識別。

大體流程

  1. 准備訓練數據。訓練數據可以自己寫個程序生成驗證碼,和標准答案。

  2. 構建CNN模型。這個比較簡單,使用keras框架,5分鍾的事情。

  3. 訓練。不停地把數據feed給程序,直到准確率達到你的期望,推薦使用GPU加速

  4. 預測。載入模型,把驗證碼圖片feed給模型,得出結果

希望對你有幫助。

『貳』 python+selenium中驗證碼怎麼定位

驗證碼的問題是測試中常見的。基本上有三種方法:

  1. 和研發協商去掉驗證碼,或者提供萬用驗證碼。這是比較符合實際且實用的。

  2. 如果可以從資料庫中獲取相應的驗證碼,那就讀取資料庫。

  3. 驗證碼識別方法,通過某些中間件去識別驗證碼,但是成功率不高,這和工作的本質思想相違背,不建議使用。

建議實用1和2.

『叄』 怎麼通過python獲取驗證碼圖片

因為驗證碼圖片是禁止緩存的 ,當然無法用緩存函數獲取了。 解決方法有很多。可以用同樣的會話再次請求得到圖片。

『肆』 python怎麼模擬登陸含有驗證碼的網站

爬取網站時經常會遇到需要登錄的問題,這是就需要用到模擬登錄的相關方法。Python提供了強大的url庫,想做到這個並不難。這里以登錄學校教務系統為例,做一個簡單的例子。
首先得明白cookie的作用,cookie是某些網站為了辨別用戶身份、進行session跟蹤而儲存在用戶本地終端上的數據。因此我們需要用Cookielib模塊來保持網站的cookie。
這個是要登陸的地址 http://202.115.80.153/ 和驗證碼地址 http://202.115.80.153/CheckCode.aspx
可以發現這個驗證碼是動態更新的每次打開都不一樣,一般這種驗證碼和cookie是同步的。其次想識別驗證碼肯定是吃力不討好的事,因此我們的思路是首先訪問驗證碼頁面,保存驗證碼、獲取cookie用於登錄,然後再直接向登錄地址post數據。

『伍』 如何利用Python 做驗證碼識別

用python加「驗證碼」為關鍵詞在里搜一下,可以找到很多關於驗證碼識別的文章。我大體看了一下,主要方法有幾類:一類是通過對圖片進行處理,然後利用字型檔特徵匹配的方法,一類是圖片處理後建立字元對應字典,還有一類是直接利用ocr模塊進行識別。不管是用什麼方法,都需要首先對圖片進行處理,於是試著對下面的驗證碼進行分析。
一、圖片處理
這個驗證碼中主要的影響因素是中間的曲線,首先考慮去掉圖片中的曲線。考慮了兩種演算法
第一種是首先取到曲線頭的位置,即x=0時,黑點的位置。然後向後移動x的取值,觀察每個x下黑點的位置,判斷前後兩個相鄰黑點之間的距離,如果距離在一定范圍內,可以基本判斷該點是曲線上的點,最後將曲線上的點全部繪成白色。試了一下這種方法,結果得到的圖片效果很一般,曲線不能完全去除,而且容量將字元的線條去除。
第二種考慮用單位面積內點的密度來進行計算。於是首先計算單位面積內點的個數,將單位面積內點個數少於某一指定數的面積去除,剩餘的部分基本上就是驗證碼字元的部分。本例中,為了便於操作,取了5*5做為單位范圍,並調整單位面積內點的標准密度為11。處理後的效果:
二、字元驗證
這里我使用的方法是利用pytesser進行ocr識別,但由於這類驗證碼字元的不規則性,使得驗證結果的准確性並不是很高。具體哪位大牛,有什麼好的辦法,希望能給指點一下。
三、准備工作與代碼實例
1、PIL、pytesser、tesseract
(1)安裝PIL:下載地址:http:// www. pythonware. com/procts/pil/(2)pytesser:下載地址:http :/ /code. google. com/p/pytesser/,下載解壓後直接放在代碼相同的文件夾下,即可使用。
(3)Tesseract OCR engine下載:http: / / code.google. com/p/tesseract-ocr/,下載後解壓,找到tessdata文件夾,用其替換掉pytesser解壓後的tessdata文件夾即可。
2、具體代碼
復制代碼
#encoding=utf-8
###利用點的密度計算
import Image,ImageEnhance,ImageFilter,ImageDrawimport 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 pointmi(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)
pointmi(im)
ocrend()

『陸』 python如何生成網頁驗證碼

我這里找了一個python生成驗證碼的代碼,操作十分方便簡單,Python生成隨機驗證碼

『柒』 如何利用Python做簡單的驗證碼識別

最近在折騰驗證碼識別。最終的腳本的識別率在92%左右,9000張驗證碼大概能識別出八千三四百張左右。好吧,其實是驗證碼太簡單。下面就是要識別的驗證碼。

接下來對圖片進行分割。遍歷圖片中所有像素點,計算每一列像素為0的點的個數(jd)。對於相鄰兩列,若其中一列jd=0,而另一列jd!=0,則可以認為這一列是驗證碼中字元邊界,由此對驗證碼進行分割。這樣分割能達到比較好的效果,分割後得到的字元圖片幾乎能與模板完全相同。

(Width,Height) = img2.size
pix2 = img2.load()
x0 = []
y0 = []for x in range(1,Width):
jd = 0
# print x
for y in range(1,Height): # print y
if pix2[x,y] == 0:
jd+=1
y0.append(jd) if jd > 0:
x0.append(x)#分別對各個字元邊界進行判斷,這里只舉出一個 for a in range(1,Width): if (y0[a] != 0)&(y0[a+1] != 0):
sta1 = a+1

分割完成後,對於識別,目前有幾種方法。可以遍歷圖片的每一個像素點,獲取像素值,得到一個字元串,將該字元串與模板的字元串進行比較,計算漢明距離或者編輯距離(即兩個字元串的差異度),可用Python-Levenshtein庫來實現。

我採用的是比較特徵向量來進行識別的。首先設定了4個豎直特徵向量,分別計算第0、2、4、6列每一列像素值為0的點的個數,與模板進行比較,若小於閾值則認為該字元與模板相同。為了提高識別率,如果通過豎直特徵向量未能識別成功,引入水平特徵向量繼續識別,原理與豎直特徵向量相同。

另外,還可以通過局部特徵進行識別。這對於加入了旋轉干擾的驗證碼有很好效果。由於我寫的腳本識別率已經達到了要求,所以並沒有用到這個。

最後的結果是這樣的:

最終在模板庫只有25條的情況下,識別率在92%左右(總共測試了一萬六千張驗證碼)。好吧,只能說驗證碼太簡單。。

以上。

『捌』 python如何識別驗證碼

我們首先識別最簡單的一種驗證碼,即圖形驗證碼。這種驗證碼最早出現,現在也很常見,一般由4位字母或者數字組成。例如,中國知網的注冊頁面有類似的驗證碼,頁面如下所示:

表單中最後一項就是圖形驗證碼,我們必須完全正確輸入圖中的字元才可以完成注冊。

更多有關驗證碼的知識,可以參考這些文章:

Python3爬蟲進階:識別圖形驗證碼

Python3爬蟲進階:識別極驗滑動驗證碼

Python3爬蟲進階:識別點觸點選驗證碼

Python3爬蟲進階:識別微博宮格驗證碼

·本節目標以知網的驗證碼為例,講解利用OCR技術識別圖形驗證碼的方法。

·准備工作識別圖形驗證碼需要庫tesserocr,以mac安裝為例:在mac下,我們首先使用Homebrew安裝ImageMagick和tesseract庫: brew install imagemagickbrew install tesseract 接下來再安裝tesserocr即可:pip3 install tesserocr pillow這樣我們就完成了 tesserocr的安裝。

·獲取驗證碼為了便於實驗,我們先將驗證碼的圖片保存到本地。打開開發者工具,找到驗證碼元素。驗證碼元素是一張圖片,它的ser屬 性是CheckCode.aspk。所以我們直接打開如下鏈接就可以看到一個驗證碼,右鍵保存即可,將其命名為code.jpg:

這樣我們就得到一張驗證碼圖片,以供測試識別使用。

相關推薦:《Python教程》

識別測試

接下來新建一個項目,將驗證碼圖片放到項目根目錄下,用tesserocr庫識別該驗證碼,代碼如下所示:

這里我們新建了一個Image對戲那個,調用了tesserocr的image_to_text( )方法。傳入該Image對象即可完成識別,實現過程非常簡單,結果如下:

我們可以看到,識別的結果和實際結果有偏差,這是因為驗證碼內的多餘線條干擾了圖片的識別。

另外,tesserocr還有一個更加簡單的方法,這個方法可以直接將圖片文件轉為字元串,代碼如下:

不過這種方法的識別效果不如上一種的好。

驗證碼處理

對於上面的圖片,我們可以看到其實並沒有完全識別正確,所以我們需要對圖像作進一步的處理,如灰度轉換、二值化等操作。

我們可以利用Image對象的convert( )方法參數傳入L,即可將圖片轉化為灰度圖像,代碼如下:

傳入1即可將圖片進行二值化處理,如下所示:

我們還可以指定二值化的閾值。上面的方法採用的是默認閾值127。不過我們不能直接轉化原圖,要將原圖先轉化為灰度圖像,然後再指定二值化閾值,代碼如下:

在這里,變數threshold代表二值化閾值,閾值設置為160,之後我們來看看我們的結果:

我們可以看到現在的二維碼就比較方便我們進行識別了;那麼對於一些有干擾的圖片,我們做一些灰度和二值化處理,這會提高圖片識別的正確率。

『玖』 python怎麼生成隨機圖形驗證碼

1.安裝pillow模塊
pip install pillow
2.pillow模塊的基本使用
1.創建圖片
from PIL import Image
#定義使用Image類實例化一個長為400px,寬為400px,基於RGB的(255,255,255)顏色的圖片
img1=Image.new(mode="RGB",size=(400,400),color=(255,255,255))
#把生成的圖片保存為"pic.png"格式
with open("pic.png","wb") as f:
img1.save(f,format="png")
#顯示圖片
img1.show()
運行程序,程序會在py文件的同級下生成一個名為"pic.png"的小圖片,圖片長為400px,寬為400px,顏色為白色.
2.創建畫筆
#創建畫筆,用於在圖片上生成內容
draw1=ImageDraw.Draw(img1,mode="RGB")
3.在圖片上生成點
#在(100,100)坐標上生成一個紅點,指定的坐標不能超過圖片的尺寸
draw1.point([100,100],pill="red")
#在(80,80)坐標上生成一個黑點,指定的坐標不能超過圖片的尺寸
draw1.point([80,80],fill=(0,0,0))
4.在圖片上畫線
#第一個括弧裡面的參數是坐標,前兩個數為開始坐標,後兩個數為結束坐標
#括弧里的第二個參數指定顏色,可以直接指定,也可以用RGB來表示顏色
draw1.line((100,100,100,300),fill="red")
draw1.line((100,200,200,100),fill="blue")
運行程序,畫筆會在(100,100)到(100,300)坐標之間畫一條紅色的豎線,在(100,200)到(200,100)坐標之間畫一根藍色的斜線
5.在圖片在畫圓
#括弧里的第一個參數是坐標,前兩個數為起始坐標,後兩個為結束坐標
#用這兩個坐標之間的正方形區域生成一個圓,大括弧里的第二個參數為圓的開始角度
#第三個參數為圓的結束角度,0到360表示所畫的是一個完整的圓形,
#也可以指定的數字來生成一段為圓弧,最後一個參數表示顏色,也可以用RGB來表示想要的顏色
draw1.arc((100,100,300,300),0,360,fill="red")
draw1.arc((0,0,300,300),0,90,fill="blue")
6.在圖片在寫文本
#使用畫筆的text方法在圖片上生成文本
#第一個參數為坐標,第二個參數為所有生成的文本的內容
#第三個參數為文本的顏色
draw1.text([0,0],"python","blue")
7.在圖片在生成指定字體的文本
#先實例化一個字體對象,第一個參數表示字體的路徑,第二個參數表示字體大小
font1=ImageFont.truetype("One Chance.ttf",28)
#在圖片上生成字體
#第一個括弧里的參數表示坐標,第二個參數表示寫入的內容
#第三個參數表示顏色,第四個參數表示使用的字體對象
draw1.text([200,200],"linux","red",font=font1)
圖片驗證碼的實例
#導入random模塊
import random
#導入Image,ImageDraw,ImageFont模塊
from PIL import Image,ImageDraw,ImageFont
#定義使用Image類實例化一個長為120px,寬為30px,基於RGB的(255,255,255)顏色的圖片
img1=Image.new(mode="RGB",size=(120,30),color=(255,255,255))
#實例化一支畫筆
draw1=ImageDraw.Draw(img1,mode="RGB")
#定義要使用的字體
font1=ImageFont.truetype("One Chance.ttf",28)
for i in range(5):
#每循環一次,從a到z中隨機生成一個字母或數字
#65到90為字母的ASCII碼,使用chr把生成的ASCII碼轉換成字元
#str把生成的數字轉換成字元串
char1=random.choice([chr(random.randint(65,90)),str(random.randint(0,9))])
#每循環一次重新生成隨機顏色
color1=(random.randint(0,255),random.randint(0,255),random.randint(0,255))
#把生成的字母或數字添加到圖片上
#圖片長度為120px,要生成5個數字或字母則每添加一個,其位置就要向後移動24px
draw1.text([i*24,0],char1,color1,font=font1)
#把生成的圖片保存為"pic.png"格式
with open("pic.png","wb") as f:
img1.save(f,format="png")

『拾』 python怎樣識別驗證碼

1. 如果重點在演算法,我覺得OCR不見得能識別好驗證碼,比較那玩意設計的就是用來防止機器識別的。
2. 如果只是想為了OCR而OCR:Linux和Mac的核心是一樣的,應該可以通用。請貼出更多的技術細節:比如是否已經驗證在Linux上好使,而同樣的代碼在Mac上遇到何種問題。

閱讀全文

與python驗證碼相關的資料

熱點內容
壓縮因子定義 瀏覽:968
cd命令進不了c盤怎麼辦 瀏覽:214
葯業公司招程序員嗎 瀏覽:974
毛選pdf 瀏覽:659
linuxexecl函數 瀏覽:727
程序員異地戀結果 瀏覽:374
剖切的命令 瀏覽:229
干什麼可以賺錢開我的世界伺服器 瀏覽:290
php備案號 瀏覽:990
php視頻水印 瀏覽:167
怎麼追程序員的女生 瀏覽:487
空調外壓縮機電容 瀏覽:79
怎麼將安卓變成win 瀏覽:459
手機文件管理在哪兒新建文件夾 瀏覽:724
加密ts視頻怎麼合並 瀏覽:775
php如何寫app介面 瀏覽:804
宇宙的琴弦pdf 瀏覽:396
js項目提成計算器程序員 瀏覽:944
pdf光子 瀏覽:834
自拍軟體文件夾名稱大全 瀏覽:328