最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python3實(shí)現(xiàn)的簡單驗(yàn)證碼識別功能示例

 更新時(shí)間:2018年05月02日 09:27:45   作者:hldh214  
這篇文章主要介紹了Python3實(shí)現(xiàn)的簡單驗(yàn)證碼識別功能,涉及Python針對驗(yàn)證碼圖片識別處理相關(guān)操作技巧,需要的朋友可以參考下

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

這次的需求是自動登錄某機(jī)構(gòu)網(wǎng)站, 其驗(yàn)證碼很具特色, 很適合做驗(yàn)證碼識別入門demo, 先貼主要代碼, 其中圖片對比使用了編輯距離算法, 腳本使用了pillow庫

from PIL import Image
import requests
import re
splitter = re.compile(r'\d{30}') # 分割二值化后的圖片
# distance('11110000', '00000000')
# 比較兩個(gè)字符串有多少位不同, 返回不同的位數(shù)
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
# 去除字符串里面連續(xù)的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('./dict/{}'.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 = 'http://60.211.254.236:8402/Ajax/Login.ashx?Method=G3_Login'
# login_data = {
#   'loginname': usn,
#   'password': pwd,
#   'validcode': result,
#
# }
# opener.get(login_url, login_data)

字庫已經(jīng)部署到GitHub地址:https://github.com/hldh214/validCode/

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python圖片操作技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • 如何解決PyCharm顯示:無效的Python?SDK

    如何解決PyCharm顯示:無效的Python?SDK

    這篇文章主要介紹了在不同電腦之間傳輸Python項(xiàng)目時(shí)遇到的路徑問題,并提供了解決方法,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2025-01-01
  • python實(shí)現(xiàn)數(shù)通設(shè)備tftp備份配置文件示例

    python實(shí)現(xiàn)數(shù)通設(shè)備tftp備份配置文件示例

    這篇文章主要介紹了python實(shí)現(xiàn)數(shù)通設(shè)備tftp備份配置文件示例,需要的朋友可以參考下
    2014-04-04
  • Python繪圖庫之pyqtgraph的用法詳解

    Python繪圖庫之pyqtgraph的用法詳解

    PyQtGraph建立在Qt QGraphicsScene的原生庫,可提供更好更高性能繪圖能力,特別是對于實(shí)時(shí)數(shù)據(jù),可以提供交互性和使用Qt圖形小部件輕松自定義繪圖的能力。本文就來解釋一下pyqtgraph的用法,需要的可以收藏一下
    2022-12-12
  • 解讀torch.cuda.amp自動混合精度訓(xùn)練之節(jié)省顯存并加快推理速度

    解讀torch.cuda.amp自動混合精度訓(xùn)練之節(jié)省顯存并加快推理速度

    這篇文章主要介紹了torch.cuda.amp自動混合精度訓(xùn)練之節(jié)省顯存并加快推理速度問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • python人民幣小寫轉(zhuǎn)大寫輔助工具

    python人民幣小寫轉(zhuǎn)大寫輔助工具

    這篇文章主要為大家詳細(xì)介紹了python人民幣小寫轉(zhuǎn)大寫輔助工具,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Python Django模板系統(tǒng)詳解

    Python Django模板系統(tǒng)詳解

    這篇文章主要介紹Django模板系統(tǒng)Django模板系統(tǒng)的實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-11-11
  • 簡潔的十分鐘Python入門教程

    簡潔的十分鐘Python入門教程

    這篇文章主要介紹了簡潔的十分鐘Python入門教程,Python語言本身的簡潔也使得網(wǎng)絡(luò)上各種Python快門入門教程有著很高的人氣,本文是國內(nèi)此類其中的一篇,需要的朋友可以參考下
    2015-04-04
  • python?配置uwsgi?啟動Django框架的詳細(xì)教程

    python?配置uwsgi?啟動Django框架的詳細(xì)教程

    這篇文章主要介紹了python?配置uwsgi?啟動Django框架,本文給大家講解的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • pytorch 如何使用amp進(jìn)行混合精度訓(xùn)練

    pytorch 如何使用amp進(jìn)行混合精度訓(xùn)練

    這篇文章主要介紹了pytorch 使用amp進(jìn)行混合精度訓(xùn)練的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • python之停止打印日志/重復(fù)打印日志方式

    python之停止打印日志/重復(fù)打印日志方式

    這篇文章主要介紹了python停止打印日志/重復(fù)打印日志方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09

最新評論

日喀则市| 东宁县| 清原| 芜湖市| 云阳县| 霍林郭勒市| 巩义市| 榕江县| 广宗县| 霍邱县| 旺苍县| 上饶县| 淮安市| 合川市| 牟定县| 洛隆县| 扶绥县| 吉安县| 迁西县| 商河县| 封丘县| 通榆县| 新巴尔虎右旗| 万宁市| 平远县| 屏东县| 富顺县| 岑巩县| 大丰市| 华阴市| 赞皇县| 深州市| 右玉县| 剑阁县| 新兴县| 香格里拉县| 衡东县| 运城市| 工布江达县| 全州县| 体育|