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

python簡單驗(yàn)證碼識(shí)別的實(shí)現(xiàn)方法

 更新時(shí)間:2019年05月10日 15:06:45   作者:u011337769  
這篇文章主要給大家介紹了關(guān)于python簡單驗(yàn)證碼識(shí)別的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

利用SVM向量機(jī)進(jìn)行4位數(shù)字驗(yàn)證碼識(shí)別

       主要是思路和步驟如下:

一,素材收集

檢查環(huán)境是否包含有相應(yīng)的庫:

1.在cmd中,通過 pip list命令查看安裝的庫

2.再使用pip installRequests 安裝Requests庫

3.再次使用pip list 命令

4.利用python獲取驗(yàn)證碼資源

編寫代碼:_DownloadPic.py

#!/usr/bin/nev python3
#利用python從站點(diǎn)下載驗(yàn)證碼圖片

import requests

## 1.在 http://www.xxx.com
# 獲取驗(yàn)證碼URL
def Downloads_Pic(strPath, strName):
 #設(shè)置url
 url = 'http://www.xxx.com'

 #以二進(jìn)制方式發(fā)送Get請求,
 #將stream = True,
 #數(shù)據(jù)讀取完成前不要斷開鏈接
 rReq = requests.get(url, stream = True)

 #嘗試保存圖片
 with open(strPath + strName + '.png', 'wb') as fpPic:
  #循環(huán)讀取1024Byte到byChunk中,讀完則跳出
  for byChunk in rReq.iter_content(chunk_size = 1024):
   if byChunk:
    fpPic.write(byChunk)
    fpPic.flush()
  fpPic.close()

for i in range(1, 10 + 1):
 strFileName = "%03d" % i
 Downloads_Pic('D:/1/', strFileName)

二,素材處理

1.二值化處理,增加對比度,銳化,增加亮度,濾鏡,轉(zhuǎn)為黑白

2.去除噪點(diǎn)

3.切割圖片

編寫代碼:_PicDealWith.py

#!/usr/bin/env python3
import os
import os.path
from PIL import Image, ImageEnhance, ImageFilter
import random

#二值化處理
#strImgPath 圖片路徑
def BinaryzationImg(strImgPath):
 #打開圖片
 imgOriImg = Image.open(strImgPath)

 #增加對比度
 pocEnhance = ImageEnhance.Contrast(imgOriImg)
 #增加255%對比度
 imgOriImg = pocEnhance.enhance(2.55)

 #銳化
 pocEnhance = ImageEnhance.Sharpness(imgOriImg)
 #銳化200%
 imgOriImg = pocEnhance.enhance(2.0)

 #增加亮度
 pocEnhance = ImageEnhance.Brightness(imgOriImg)
 #增加200%
 imgOriImg = pocEnhance.enhance(2.0)

 #添加濾鏡效果
 imgGryImg = imgOriImg.convert('L').filter(ImageFilter.DETAIL)

 #二值化處理
 imgBinImg = imgGryImg.convert('1')

 return imgBinImg

#去除噪點(diǎn)
def ClearNoise(imgBinImg):
 for x in range(1, (imgBinImg.size[0]-1)):
  for y in range(1,(imgBinImg.size[1] - 1)):
  #一個(gè)點(diǎn)為黑色,周圍8個(gè)點(diǎn)為白色,則此點(diǎn)為噪點(diǎn),設(shè)置為白色
   if imgBinImg.getpixel((x, y)) == 0 \
    and imgBinImg.getpixel(((x - 1), (y + 1))) == 255 \
    and imgBinImg.getpixel(((x - 1), y)) == 255 \
    and imgBinImg.getpixel(((x - 1), (y - 1))) == 255 \
    and imgBinImg.getpixel(((x + 1), (y + 1))) == 255 \
    and imgBinImg.getpixel(((x + 1), y)) == 255 \
    and imgBinImg.getpixel(((x + 1), (y - 1))) == 255 \
    and imgBinImg.getpixel((x, (y + 1))) == 255 \
    and imgBinImg.getpixel((x, (y - 1))) == 255:
    imgBinImg.putpixel([x, y], 255)

 return imgBinImg

#切割圖片
def GetCropImgs(imgClrImg):
 ImgList = []
 for i in range(4):
  x = 6 + i * 13
  y = 3
  SubImg = imgClrImg.crop((x, y, x + 13, y + 15))
  ImgList.append(SubImg)
 return ImgList


#調(diào)用部分
def main():
 g_Count = 0
 strStep1Dir = 'D:/1/step1/'
 strStep2Dir = 'D:/1/step2/'
 for ParentPath, DirName, FileNames in os.walk(strStep1Dir):
  for i in FileNames:
   #圖片文件路徑信息
   strFullPath = os.path.join(ParentPath, i)
   imgBinImg = BinaryzationImg(strFullPath)
   imgClrImg = ClearNoise(imgBinImg)
   ImgList = GetCropImgs(imgClrImg)
   for img in ImgList:
    strImgName = "%04d%04d.png" % (g_Count, random.randint(0, 9999))
    strImgPath = os.path.join(strStep2Dir, strImgName)
    img.save(strImgPath)
    g_Count += 1

 print("OK!")

if __name__ == '__mian__':
 main()

三,手工分類

將第二步切割好的圖片進(jìn)行分類,體力活

四,利用SVM向量機(jī)建立模型

1.安裝svm庫

  下載libsvm庫,并解壓

  將庫中的windows目錄的路徑添加到path環(huán)境變量中

將libsvm下的python文件夾中的svm.py和svmutil.py文件拷貝到你的python的路徑中l(wèi)ib文件夾中

from svmutil import *

2.生成模型文件

  2.1.將分好類的圖片信息進(jìn)行提取,生成特征值

  2.2.輸出向量數(shù)據(jù)

  2.3.根據(jù)數(shù)據(jù)輸出SVM模型文件

 

編寫代碼:_SVMDemo.py

#!/usr/bin/env python3

#SVM,驗(yàn)證碼識(shí)別

import os
import sys
import random
import os.path
from PIL import Image, ImageEnhance, ImageFilter
from svmutil import *

##記錄像素點(diǎn)的值,描述特征,采用遍歷每個(gè)像素點(diǎn)統(tǒng)計(jì)黑色點(diǎn)的數(shù)量
def GetFeature(imgCropImg, nImgHeight, nImgWidth):
 PixelCountList = []
 for y in range(nImgHeight):
  CountX = 0
  for x in range(nImgWidth):
   if imgCropImg.getpixel((x, y)) == 0:
    CountX += 1
  PixelCountList.append(CountX)
 for x in range(nImgWidth):
  CountY = 0
  for y in range(nImgHeight):
   if imgCropImg.getpixel((x, y)) == 0:
    CountY += 1
  PixelCountList.append(CountY)
 return PixelCountList

##輸出向量數(shù)據(jù)
def OutPutVectorData(strID, strMaterialDir, strOutPath):
 for ParentPath, DirNames, FileNames in os.walk(strMaterialDir):
  with open(strOutPath, 'a') as fpFea:
   for fp in FileNames:
    #圖片文件路徑信息
    strFullPath = os.path.join(ParentPath, fp)

    #打開圖片
    imgOriImg = Image.open(strFullPath)

    #生成特征值
    FeatureList = GetFeature(imgOriImg, 15, 13)

    strFeature = strID + ' '
    nCount = 1
    for i in FeatureList:
     strFeature = '%s%d:%d ' % (strFeature, nCount, i)
     nCount += 1
    fpFea.write(strFeature + '\n')
    fpFea.flush()
  fpFea.close()

#訓(xùn)練SVM模型
def TrainSvmModel(strProblemPath, strModelPath):
 Y, X = svm_read_problem(strProblemPath)
 Model = svm_train(Y, X)
 svm_save_model(strModelPath, Model)

#SVM模型測試
def SvmModelTest(strProblemPath, strModelPath):
 TestY, TestX = svm_read_problem(strProblemPath)
 Model = svm_load_model(strModelPath)
 #返回識(shí)別結(jié)果
 pLabel, pAcc, pVal = svm_predict(TestY, TestX, Model)
 return pLabel


##輸出測試向量數(shù)據(jù)
def OutPutTestVectorData(strID, strDir, strOutPath):
 fileList = []
 for parentPath, strDir, fileName in os.walk(strDir):
  fileList = fileName
 with open(strOutPath, 'a') as fpFea:
  for fp in fileList:
   #圖片文件路徑信息
   strFullPath = os.path.join(parentPath, fp)

   #打開圖片
   imgOriImg = Image.open(strFullPath)

   #生成特征值
   FeatureList = GetFeature(imgOriImg, 15, 13)

   strFeature = strID + ' '
   nCount = 1
   for i in FeatureList:
    strFeature = '%s%d:%d ' % (strFeature, nCount, i)
    nCount += 1
   fpFea.write(strFeature + '\n')
   fpFea.flush()
  fpFea.close()


def main():
# 1.循環(huán)輸出向量文件
 for i in range(0, 10):
  strID = '%d' % i
  OutPutVectorData(strID, 'D:/1/step3/' + strID, 'D:/1/step4/Vector.txt')

# 2.調(diào)用函數(shù)訓(xùn)練SVM模型
 TrainSvmModel('D:/1/step4/Vector.txt', 'D:/1/step5/Model.txt')
# 3.調(diào)用函數(shù)識(shí)別結(jié)果
 pLabel = SvmModelTest('D:/1/step6/Vector.txt', 'D:/1/step5/Model.txt')
 for i in pLabel:
  print('%d' % i)



if __name__ == '__main__':
 main()

五,測試

1.利用模型文件和向量文件進(jìn)行測試驗(yàn)證碼識(shí)別

    ##1.獲取一張驗(yàn)證碼圖片

    ##2.對圖片進(jìn)行處理

    ##  2.1.二值化處理,增加對比度,銳化,增加亮度,濾鏡,轉(zhuǎn)為黑白,

    ##  2.2.去除噪點(diǎn)

    ##  2.3.切割圖片

    ##3.生成向量文件

    ##4.再利用之前的模型文件進(jìn)行識(shí)別測試

編寫代碼:_SVMTest.py

#!/usr/bin/env python3
#對一張驗(yàn)證碼圖片進(jìn)行識(shí)別測試

##1.獲取一張驗(yàn)證碼圖片
##2.對圖片進(jìn)行處理
## 2.1.二值化處理,增加對比度,銳化,增加亮度,濾鏡,轉(zhuǎn)為黑白,
## 2.2.去除噪點(diǎn)
## 2.3.切割圖片
##3.生成向量文件
##4.再利用之前的模型文件進(jìn)行識(shí)別測試

################
import _PicDealWith
import os
import random
import _SVMDemo


##測試
g_Count = 0
strDirPath = 'D:/1/test/'
strFileName = '001.png'
#1.圖片文件路徑信息
strFullPath = os.path.join(strDirPath, strFileName)
#2.對圖片進(jìn)行處理
#2.1二值化處理
imgBinImg = _PicDealWith.BinaryzationImg(strFullPath)
#2.2去除噪點(diǎn)
imgClrImg = _PicDealWith.ClearNoise(imgBinImg)
#2.3切割圖片
ImgList = _PicDealWith.GetCropImgs(imgClrImg)
#2.3循環(huán)寫入文件
for img in ImgList:
 strImgName = "%04d%04d.png" % (g_Count, random.randint(0, 9999))
 strImgPath = os.path.join(strDirPath, strImgName)
 img.save(strImgPath)
 g_Count += 1

print("OK")

os.remove(strFullPath)

#3.生成向量文件
_SVMDemo.OutPutTestVectorData('0', 'D:/1/test/', 'D:/1/test/Vector.txt')

#4.利用之前的模型文件進(jìn)行識(shí)別測試
pLabel = _SVMDemo.SvmModelTest('D:/1/test/Vector.txt', 'D:/1/step5/Model.txt')
for i in pLabel:
 print('%d' % i, end = '')

效果圖:

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Python中的裝飾器鏈(decorator chain)詳解

    Python中的裝飾器鏈(decorator chain)詳解

    在Python中,裝飾器是一種高級(jí)功能,它允許你在不修改函數(shù)或類代碼的情況下,為它們添加額外的功能,裝飾器通常用于日志記錄、性能測量、權(quán)限檢查等場景,當(dāng)多個(gè)裝飾器應(yīng)用于同一個(gè)函數(shù)或類時(shí),形成裝飾器鏈,這篇文章主要介紹了Python中的裝飾器鏈詳解,需要的朋友可以參考下
    2024-06-06
  • python函數(shù)的兩種嵌套方法小結(jié)

    python函數(shù)的兩種嵌套方法小結(jié)

    這篇文章主要介紹了python函數(shù)的兩種嵌套方法小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01
  • 淺析Python的命名空間與作用域

    淺析Python的命名空間與作用域

    這篇文章主要介紹了Python的命名空間與作用域的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-11-11
  • python文件處理筆記之文本文件

    python文件處理筆記之文本文件

    相信大家在測試任務(wù)過程中都或多或少遇到自己處理文本文件的情況,這篇文章主要給大家介紹了關(guān)于python文件處理筆記之文本文件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-08-08
  • python爬蟲 正則表達(dá)式解析

    python爬蟲 正則表達(dá)式解析

    這篇文章主要介紹了python爬蟲 正則表達(dá)式解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 分享十個(gè)Python提高工作效率的自動(dòng)化腳本

    分享十個(gè)Python提高工作效率的自動(dòng)化腳本

    在這個(gè)自動(dòng)化時(shí)代,我們有很多重復(fù)無聊的工作要做。 想想這些你不再需要一次又一次地做的無聊的事情,讓它自動(dòng)化,讓你的生活更輕松。本文分享了10個(gè)Python自動(dòng)化腳本,希望對大家有所幫助
    2022-10-10
  • Python使用pymysql模塊操作mysql增刪改查實(shí)例分析

    Python使用pymysql模塊操作mysql增刪改查實(shí)例分析

    這篇文章主要介紹了Python使用pymsql模塊操作mysql增刪改查,結(jié)合實(shí)例形式分析了Python使用pymsql模塊針對mysql進(jìn)行增刪改查操作的相關(guān)實(shí)現(xiàn)方法與操作注意事項(xiàng),需要的朋友可以參考下
    2019-12-12
  • 利用python畫一顆心的方法示例

    利用python畫一顆心的方法示例

    最近工作中要用到python的統(tǒng)計(jì)和繪圖功能,無意間搜索到了這個(gè),還挺有意思的。就分享給大家,下面這篇文章主要介紹了利用python畫一顆心的方法示例,需要的朋友可以參考借鑒,一起來看看吧。
    2017-01-01
  • Python endswith()函數(shù)的具體使用

    Python endswith()函數(shù)的具體使用

    本文主要介紹了Python endswith()函數(shù)的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • python中如何正確使用正則表達(dá)式的詳細(xì)模式(Verbose mode expression)

    python中如何正確使用正則表達(dá)式的詳細(xì)模式(Verbose mode expression)

    許多程序設(shè)計(jì)語言都支持利用正則表達(dá)式進(jìn)行字符串操作,python自然也不例外,下面這篇文章主要給大家介紹了關(guān)于在python中如何正確使用正則表達(dá)式的詳細(xì)模式(Verbose mode expression)的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-11-11

最新評論

上栗县| 龙泉市| 额济纳旗| 黄石市| 洪洞县| 古浪县| 黄浦区| 泰和县| 泗洪县| 岫岩| 军事| 迁安市| 革吉县| 成都市| 兴隆县| 台中县| 营山县| 永新县| 准格尔旗| 秦安县| 和田市| 偃师市| 宁海县| 咸阳市| 龙井市| 稻城县| 涞水县| 余姚市| 洞头县| 丹阳市| 武穴市| 定远县| 靖江市| 大关县| 郧西县| 内黄县| 阳新县| 台江县| 贡嘎县| 罗平县| 三门县|