首頁 後端開發 Python教學 Python3實作的簡單驗證碼識別功能範例

Python3實作的簡單驗證碼識別功能範例

May 02, 2018 pm 02:09 PM
python3 識別 驗證

這篇文章主要介紹了Python3實現的簡單驗證碼識別功能,涉及Python針對驗證碼圖片識別處理相關操作技巧,需要的朋友可以參考下

本文實例講述了Python3實現的簡單驗證碼識別功能。分享給大家供大家參考,具體如下:

這次的需求是自動登入某機構網站, 其驗證碼很具特色, 很適合做驗證碼識別入門demo, 先貼主要代碼, 其中圖片比較使用了編輯距離演算法, 腳本使用了pillow函式庫

from PIL import Image
import requests
import re
splitter = re.compile(r'\d{30}') # 分割二值化后的图片
# distance('11110000', '00000000')
# 比较两个字符串有多少位不同, 返回不同的位数
def distance(string1, string2):
  d_str1 = len(string1)
  d_str2 = len(string2)
  d_arr = [[0] * d_str2 for i in range(d_str1)]
  for i in range(d_str1):
    for j in range(d_str2):
      if string1[i] == string2[j]:
        if i == 0 and j == 0:
          d_arr[i][j] = 0
        elif i != 0 and j == 0:
          d_arr[i][j] = d_arr[i - 1][j]
        elif i == 0 and j != 0:
          d_arr[i][j] = d_arr[i][j - 1]
        else:
          d_arr[i][j] = d_arr[i - 1][j - 1]
      else:
        if i == 0 and j == 0:
          d_arr[i][j] = 1
        elif i != 0 and j == 0:
          d_arr[i][j] = d_arr[i - 1][j] + 1
        elif i == 0 and j != 0:
          d_arr[i][j] = d_arr[i][j - 1] + 1
        else:
          d_arr[i][j] = min(d_arr[i][j - 1], d_arr[i - 1][j], d_arr[i - 1][j - 1]) + 1
  current = max(d_arr[d_str1 - 1][d_str2 - 1], abs(d_str2 - d_str1))
  # print("Levenshtein Distance is",current)
  # print(current)
  return current
# 去除字符串里面连续的1
def no_one(string):
  n_arr = splitter.findall(string)
  n_arr = filter(lambda each_str: each_str != '111111111111111111111111111111', n_arr)
  n_result = ''
  for n_each in n_arr:
    n_result += str(n_each)
  return n_result
opener = requests.session()
res = opener.get('http://60.211.254.236:8402/Ajax/ValidCodeImg.ashx').content
with open('verify.gif', 'wb') as v:
  v.write(res)
img = Image.open('verify.gif')
img = img.convert('L')
size = img.size
# img = img.point(table, '1')
img_arr = img.load()
# for x in range(size[0]):
#   for y in range(size[1]):
#     if img_arr[x, y] > 210:
#       img_arr[x, y] = 1
#     else:
#       img_arr[x, y] = 0
# img.save('after.gif')
inc = 0
str1 = ''
str2 = ''
str3 = ''
cur_str = ''
for x in range(size[0]):
  for y in range(size[1]):
    if img_arr[x, y] > 210:
      cur_str += '1'
    else:
      cur_str += '0'
    # print(img_arr[i, j], end='')
    # cur_str += str(img_arr[x, y])
  inc += 1
  # if inc % 18 == 0:
  #   print('\n----')
  # else:
  #   print('')
  if inc == 18:
    str1 = cur_str
    cur_str = ''
  elif inc == 36:
    str2 = cur_str
    cur_str = ''
  elif inc == 54:
    str3 = cur_str
    cur_str = ''
str1 = str1[:-60]
str2 = str2[:-60]
str3 = str3[:-60]
str1 = no_one(str1)
str2 = no_one(str2)
str3 = no_one(str3)
str1 = str1.strip('1')
str2 = str2.strip('1')
str3 = str3.strip('1')
# print(str1)
# print(str3)
with open('./dict/plus') as plus:
  with open('./dict/minus') as minus:
    p = plus.read()
    m = minus.read()
    is_add = 1 if distance(p, str2) < distance(m, str2) else 0
arr1 = []
arr3 = []
for each in range(1, 10):
  with open(&#39;./dict/{}&#39;.format(each)) as f:
    ff = f.read()
    arr1.append([each, distance(ff, str1)])
    arr3.append([each, distance(ff, str3)])
arr1 = sorted(arr1, key=lambda item: item[1])
arr3 = sorted(arr3, key=lambda item: item[1])
result = arr1[0][0] + arr3[0][0] if is_add else arr1[0][0] - arr3[0][0]
print(result)
# login_url = &#39;http://60.211.254.236:8402/Ajax/Login.ashx?Method=G3_Login&#39;
# login_data = {
#   &#39;loginname&#39;: usn,
#   &#39;password&#39;: pwd,
#   &#39;validcode&#39;: result,
#
# }
# opener.get(login_url, login_data)
登入後複製

相關推薦:

##Python3 中把txt資料檔讀入到矩陣中的方法


以上是Python3實作的簡單驗證碼識別功能範例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1319
25
PHP教程
1269
29
C# 教程
1248
24
如何在PDF中驗證簽名 如何在PDF中驗證簽名 Feb 18, 2024 pm 05:33 PM

我們通常會接收到政府或其他機構發送的PDF文件,有些文件有數位簽章。驗證簽名後,我們會看到SignatureValid訊息和一個綠色勾號。如果簽章未驗證,會顯示有效性未知。驗證簽名很重要,以下看看如何在PDF中進行驗證。如何在PDF中驗證簽名驗證PDF格式的簽名使其更可信,文件更容易被接受。您可以透過以下方式驗證PDF文件中的簽名。在AdobeReader中開啟PDF右鍵點選簽名,然後選擇顯示簽名屬性點選顯示簽署者憑證按鈕從「信任」標籤將簽名新增至「受信任的憑證」清單中點選驗證簽名以完成驗證讓

微信好友輔助驗證解封的詳細方法 微信好友輔助驗證解封的詳細方法 Mar 25, 2024 pm 01:26 PM

1.打開微信進入後,點選搜尋圖標,輸入微信團隊,點選下方的服務進入。 2、進入後,點選左下方的自助工具的選項。 3、點選後,在上方的選項內,點選解封/申訴輔助驗證的選項。

如何使用正規表示式驗證IFSC代碼? 如何使用正規表示式驗證IFSC代碼? Aug 26, 2023 pm 10:17 PM

印度金融系統代碼是縮寫。參與電子資金轉移系統的印度銀行分行由一個特殊的11位元字元代碼進行識別。印度儲備銀行在網路交易中使用此代碼在銀行之間轉移資金。 IFSC程式碼分為兩個部分。銀行由前四個字元進行標識,而分行由最後六個字元進行標識。 NEFT(全國電子資金轉移)、RTGS(即時毛額結算)和IMPS(即時支付服務)是一些需要IFSC代碼的電子交易。 Method使用正規表示式驗證IFSC程式碼的一些常見方法有:檢查長度是否正確。檢查前四個字元。 Checkthefifthcharacter.Che

golang中如何驗證輸入是否為全角字符 golang中如何驗證輸入是否為全角字符 Jun 25, 2023 pm 02:03 PM

在golang中,驗證輸入是否為全角字元需要用到Unicode編碼和rune類型。 Unicode編碼是一種將字元集中的每個字元分配一個唯一的數字碼位元的字元編碼標準,其中包含了全角字元和半角字元。而rune類型是golang中用來表示Unicode字元的類型。第一步,需要將輸入轉換為rune類型的切片。這可以透過使用golang的[]rune類型來轉換,例如

golang中如何驗證輸入是否為大寫字母 golang中如何驗證輸入是否為大寫字母 Jun 24, 2023 am 09:06 AM

Golang是一門高效能、現代化的程式語言,在日常開發中經常涉及字串的處理。其中,驗證輸入是否為大寫字母是常見的需求。本文將介紹在Golang中如何驗證輸入是否為大寫字母。方法一:使用unicode包Golang中的unicode包提供了一系列函數來判斷字元的編碼類型。對於大寫字母,其對應的編碼範圍為65-90(十進位),因此我們可以使用unicod

如何實現C++中的語音辨識與語音合成? 如何實現C++中的語音辨識與語音合成? Aug 26, 2023 pm 02:49 PM

如何實現C++中的語音辨識與語音合成?語音辨識和語音合成是當今人工智慧領域的熱門研究方向之一,它們在許多應用場景中扮演了重要的角色。本文將介紹如何使用C++實現基於百度AI開放平台的語音辨識和語音合成功能,並提供相關的程式碼範例。一、語音辨識語音辨識是將人說的語音轉換為文字的技術,在語音助理、智慧家庭、自動駕駛等領域有廣泛應用。以下是使用C++實現語音識

PHP 8 新功能:增加了驗證和簽名 PHP 8 新功能:增加了驗證和簽名 Mar 27, 2024 am 08:21 AM

PHP8是PHP的最新版本,為程式設計師帶來了更多的便利性和功能。這個版本特別關注安全性和效能,其中一個值得注意的新功能是增加了驗證和簽章功能。在本文中,我們將深入了解這些新的功能及其用途。驗證和簽名是電腦科學中非常重要的安全概念。它們通常用於確保傳輸的數據是完整和真實的。在處理線上交易和敏感資訊時,驗證和簽名變得尤為重要,因為如果有人能夠篡改數據,可能會對

使用Java實現的人臉偵測與辨識技術 使用Java實現的人臉偵測與辨識技術 Jun 18, 2023 am 09:08 AM

隨著人工智慧技術的不斷發展,人臉偵測和辨識技術在日常生活中得到了越來越廣泛的應用。在各種場合,如人臉門禁系統、人臉支付系統、人臉搜尋引擎等等,人臉偵測和辨識技術都被廣泛應用。而Java作為一種廣泛使用的程式語言,也可以實現人臉偵測和辨識技術。本文將介紹如何使用Java實現人臉偵測與辨識技術。一、人臉偵測技術人臉偵測技術是指在影像或影片中偵測到人臉的技術。在J

See all articles