1. 如何使用python識別驗證碼
第一種,將驗證碼保存本地,然後手動輸入。
第二種,外包給驗證碼識別公司
第三種,學習演算法識別
2. 如何python爬蟲識別驗證碼
在用爬蟲爬取網站數據時,有些站點的一些關鍵數據的獲取需要使用賬號登錄,這里可以使用requests發送登錄請求,並用Session對象來自動處理相關Cookie。
另外在登錄時,有些網站有時會要求輸入驗證碼,比較簡單的驗證碼可以直接用pytesser來識別,復雜的驗證碼可以依據相應的特徵自己採集數據訓練分類器。
以CSDN網站的登錄為例,這里用Python的requests庫與pytesser庫寫了一個登錄函數。如果需要輸入驗證碼,函數會首先下載驗證碼到本地,然後用pytesser識別驗證碼後登錄,對於CSDN登錄驗證碼,pytesser的識別率很高。
3. python怎樣調用第三方平台識別驗證碼
一、pytesseract介紹
1、pytesseract說明
pytesseract最新版本0.1.6,網址:h
Python-tesseract is a wrapper for google's Tesseract-OCR
( ht-ocr/ ). It is also useful as a
stand-alone invocation script to tesseract, as it can read all image types
supported by the Python Imaging Library, including jpeg, png, gif, bmp, tiff,
and others, whereas tesseract-ocr by default only supports tiff and bmp.
Additionally, if used as a script, Python-tesseract will print the recognized
text in stead of writing it to a file. Support for confidence estimates and
bounding box data is planned for future releases.
翻譯一下大意:
a、Python-tesseract是一個基於google's Tesseract-OCR的獨立封裝包;
b、Python-tesseract功能是識別圖片文件中文字,並作為返回參數返回識別結果;
c、Python-tesseract默認支持tiff、bmp格式圖片,只有在安裝PIL之後,才能支持jpeg、gif、png等其他圖片格式;
2、pytesseract安裝
INSTALLATION:
Prerequisites:
* Python-tesseract requires python 2.5 or later or python 3.
* You will need the Python Imaging Library (PIL). Under Debian/Ubuntu, this is
the package "python-imaging" or "python3-imaging" for python3.
* Install google tesseract-ocr from hsseract-ocr/ .
You must be able to invoke the tesseract command as "tesseract". If this
isn't the case, for example because tesseract isn't in your PATH, you will
have to change the "tesseract_cmd" variable at the top of 'tesseract.py'.
Under Debian/Ubuntu you can use the package "tesseract-ocr".
Installing via pip:
See the [pytesseract package page](hi/pytesseract)
```
$> sudo pip install pytesseract
翻譯一下:
a、Python-tesseract支持python2.5及更高版本;
b、Python-tesseract需要安裝PIL(Python Imaging Library) ,來支持更多的圖片格式;
c、Python-tesseract需要安裝tesseract-ocr安裝包,具體參看上一篇博文。
綜上,Pytesseract原理:
1、上一篇博文中提到,執行命令行 tesseract.exe 1.png output -l eng ,可以識別1.png中文字,並把識別結果輸出到output.txt中;
2、Pytesseract對上述過程進行了二次封裝,自動調用tesseract.exe,並讀取output.txt文件的內容,作為函數的返回值進行返回。
二、pytesseract使用
USAGE:
```
> try:
> import Image
> except ImportError:
> from PIL import Image
> import pytesseract
> print(pytesseract.image_to_string(Image.open('test.png')))
> print(pytesseract.image_to_string(Image.open('test-european.jpg'),))
可以看到:
1、核心代碼就是image_to_string函數,該函數還支持-l eng 參數,支持-psm 參數。
用法:
image_to_string(Image.open('test.png'),lang="eng" config="-psm 7")
2、pytesseract里調用了image,所以才需要PIL,其實tesseract.exe本身是支持jpeg、png等圖片格式的。
實例代碼,識別某公共網站的驗證碼(大家千萬別干壞事啊,思慮再三,最後還是隱掉網站域名,大家去找別的網站試試吧……):
View Code
4. python抓取網頁時是如何處理驗證碼的
python抓取網頁時是如何處理驗證碼的?下面給大家介紹幾種方法:
1、輸入式驗證碼
這種驗證碼主要是通過用戶輸入圖片中的字母、數字、漢字等進行驗證。如下圖:
解決思路:這種是最簡單的一種,只要識別出裡面的內容,然後填入到輸入框中即可。這種識別技術叫OCR,這里我們推薦使用Python的第三方庫,tesserocr。對於沒有什麼背影影響的驗證碼如圖2,直接通過這個庫來識別就可以。但是對於有嘈雜的背景的驗證碼這種,直接識別識別率會很低,遇到這種我們就得需要先處理一下圖片,先對圖片進行灰度化,然後再進行二值化,再去識別,這樣識別率會大大提高。
相關推薦:《Python入門教程》
2、滑動式驗證碼
這種是將備選碎片直線滑動到正確的位置,如下圖:
解決思路:對於這種驗證碼就比較復雜一點,但也是有相應的辦法。我們直接想到的就是模擬人去拖動驗證碼的行為,點擊按鈕,然後看到了缺口的位置,最後把拼圖拖到缺口位置處完成驗證。
第一步:點擊按鈕。然後我們發現,在你沒有點擊按鈕的時候那個缺口和拼圖是沒有出現的,點擊後才出現,這為我們找到缺口的位置提供了靈感。
第二步:拖到缺口位置。
我們知道拼圖應該拖到缺口處,但是這個距離如果用數值來表示?
通過我們第一步觀察到的現象,我們可以找到缺口的位置。這里我們可以比較兩張圖的像素,設置一個基準值,如果某個位置的差值超過了基準值,那我們就找到了這兩張圖片不一樣的位置,當然我們是從那塊拼圖的右側開始並且從左到右,找到第一個不一樣的位置時就結束,這是的位置應該是缺口的left,所以我們使用selenium拖到這個位置即可。
這里還有個疑問就是如何能自動的保存這兩張圖?
這里我們可以先找到這個標簽,然後獲取它的location和size,然後 top,bottom,left,right = location['y'] ,location['y']+size['height']+ location['x'] + size['width'] ,然後截圖,最後摳圖填入這四個位置就行。
具體的使用可以查看selenium文檔,點擊按鈕前摳張圖,點擊後再摳張圖。最後拖動的時候要需要模擬人的行為,先加速然後減速。因為這種驗證碼有行為特徵檢測,人是不可能做到一直勻速的,否則它就判定為是機器在拖動,這樣就無法通過驗證了。
3、點擊式的圖文驗證和圖標選擇
圖文驗證:通過文字提醒用戶點擊圖中相同字的位置進行驗證。
圖標選擇: 給出一組圖片,按要求點擊其中一張或者多張。借用萬物識別的難度阻擋機器。
這兩種原理相似,只不過是一個是給出文字,點擊圖片中的文字,一個是給出圖片,點出內容相同的圖片。
這兩種沒有特別好的方法,只能藉助第三方識別介面來識別出相同的內容,推薦一個超級鷹,把驗證碼發過去,會返回相應的點擊坐標。
然後再使用selenium模擬點擊即可。具體怎麼獲取圖片和上面方法一樣。
4、宮格驗證碼
這種就很棘手,每一次出現的都不一樣,但是也會出現一樣的。而且拖動順序都不一樣。
但是我們發現不一樣的驗證碼個數是有限的,這里採用模版匹配的方法。我覺得就好像暴力枚舉,把所有出現的驗證碼保存下來,然後挑出不一樣的驗證碼,按照拖動順序命名,我們從左到右上下到下,設為1,2,3,4。上圖的滑動順序為4,3,2,1,所以我們命名4_3_2_1.png,這里得手動搞。當驗證碼出現的時候,用我們保存的圖片一一枚舉,與出現這種比較像素,方法見上面。如果匹配上了,拖動順序就為4,3,2,1。然後使用selenium模擬即可。
5. 如何利用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%左右(總共測試了一萬六千張驗證碼)。好吧,只能說驗證碼太簡單。。
以上。
6. 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,之後我們來看看我們的結果:
我們可以看到現在的二維碼就比較方便我們進行識別了;那麼對於一些有干擾的圖片,我們做一些灰度和二值化處理,這會提高圖片識別的正確率。
7. 如何用Python巧妙識別web驗證碼
要安裝pytesseract庫,必須先安裝其依賴的PIL及tesseract-ocr,其中PIL為圖像處理庫,而後面的tesseract-ocr則為google的ocr識別引擎。 pytesseract安裝 直接使用pip install pytesseract安裝即可,或者使用easy_install pytesseract Python驗證...
8. 如何利用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()
9. python驗證碼識別
orc文字識別,現在比較流行的是通過人工智慧訓練CNN神經網路來識別。
大體流程
准備訓練數據。訓練數據可以自己寫個程序生成驗證碼,和標准答案。
構建CNN模型。這個比較簡單,使用keras框架,5分鍾的事情。
訓練。不停地把數據feed給程序,直到准確率達到你的期望,推薦使用GPU加速
預測。載入模型,把驗證碼圖片feed給模型,得出結果
希望對你有幫助。