欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python腳本實現(xiàn)驗證碼識別

 更新時間:2018年06月07日 10:46:25   作者:y0nghum1ng  
這篇文章主要為大家詳細(xì)介紹了python腳本實現(xiàn)驗證碼識別的實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

我主要用的是Python中的PIL庫。

首先進(jìn)行二值化處理。由于圖片中的噪點顏色比較淺,所以可以設(shè)定一個閾值直接過濾掉。這里我設(shè)置的閾值是150,像素大于150的賦值為1,小于的賦為0.

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

img = Image.open("D:/python/單個字體/A"+str(i)+".jpg")
pix = img.load()

#將圖片進(jìn)行灰度化處理
img1 = img.convert('L')

#閾值為150,參數(shù)為1,將圖片進(jìn)行二值化處理
img2 = img1.point(set_table(150),'1') 

處理后的圖片如下。

閾值不同產(chǎn)生的不同效果:

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

(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)

#分別對各個字符邊界進(jìn)行判斷,這里只舉出一個    
for a in range(1,Width):
  if (y0[a] != 0)&(y0[a+1] != 0):
    sta1 = a+1
    break

分割完成后,對于識別,目前有幾種方法??梢员闅v圖片的每一個像素點,獲取像素值,得到一個字符串,將該字符串與模板的字符串進(jìn)行比較,計算漢明距離或者編輯距離(即兩個字符串的差異度),可用Python-Levenshtein庫來實現(xiàn)。

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

另外,還可以通過局部特征進(jìn)行識別。這對于加入了旋轉(zhuǎn)干擾的驗證碼有很好效果。由于我寫的腳本識別率已經(jīng)達(dá)到了要求,所以并沒有用到這個。

最后的結(jié)果是這樣的:

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 淺析Python中的join()方法的使用

    淺析Python中的join()方法的使用

    這篇文章主要介紹了Python中的join()方法的使用,是Python入門中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-05-05
  • python 生成器和迭代器的原理解析

    python 生成器和迭代器的原理解析

    這篇文章主要介紹了python 生成器和迭代器的原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • python3將變量輸入的簡單實例

    python3將變量輸入的簡單實例

    在本篇文章里小編給大家整理的是一篇關(guān)于python3將變量輸入的簡單實例內(nèi)容,有需要的朋友們可以參考下。
    2020-08-08
  • python空元組在all中返回結(jié)果詳解

    python空元組在all中返回結(jié)果詳解

    在本篇文章里小編給大家整理的是一篇關(guān)于python空元組在all中返回結(jié)果詳解內(nèi)容,有需要的朋友們可以學(xué)習(xí)參考下。
    2020-12-12
  • Python?常用模塊threading和Thread模塊之線程池

    Python?常用模塊threading和Thread模塊之線程池

    這篇文章主要介紹了Python?threading和Thread模塊之線程池,線程池如消費者,負(fù)責(zé)接收任務(wù),并將任務(wù)分配到一個空閑的線程中去執(zhí)行。并不關(guān)心是哪一個線程執(zhí)行的這個任務(wù),具體介紹需要的小伙伴可以參考下面文章詳細(xì)內(nèi)容
    2022-06-06
  • 解決python報錯:AttributeError:?'ImageDraw'?object?has?no?attribute?'textbbox'

    解決python報錯:AttributeError:?'ImageDraw'?object?h

    這篇文章主要給大家介紹了關(guān)于解決python報錯:AttributeError:?'ImageDraw'?object?has?no?attribute?'textbbox'的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • Python使用Bokeh實現(xiàn)交互式圖表的創(chuàng)建

    Python使用Bokeh實現(xiàn)交互式圖表的創(chuàng)建

    Bokeh?是一個流行的?Python?數(shù)據(jù)可視化庫,可以生成高質(zhì)量的交互式圖表,這篇文章主要就介紹了Python如何使用Bokeh實現(xiàn)交互式圖表的創(chuàng)建,需要的可以參考一下
    2023-06-06
  • 最新評論