首頁 > 軟體

Python使用Cv2模組識別驗證碼的操作方法

2023-11-04 06:01:01

業務需求

        識別驗證碼圖片中的數位資訊,用python的圖形表示出來了

需求分析

        使用Cv2模組、pytesseract模組進行操作。CV2是計算機建模識別的庫,用來給影象進行灰度處理,降噪處理,形態學分析。pytesseract模組將智慧識別圖片字型數位,用於列印出來。

程式碼一

# -*- conding:utf-8 -*-
#二維條碼識別,呈現不同效果。
#匯入計算機學習開源資料庫
import cv2 as cv
#匯入計算機識別模組
import pytesseract
#匯入影象模組,形成影象
from PIL import Image
#定義函數,匯入影象
def recognize_text(image):
    #邊緣保留濾波,去除噪
    dst = cv.pyrMeanShiftFiltering(image,sp=10,sr=150)
    #灰度影象
    gray = cv.cvtColor(dst,cv.COLOR_BGR2GRAY)
    #影象二值化
    ret,binary = cv.threshold(gray,0,225,cv.THRESH_BINARY_INV | cv.THRESH_OTSU)
    #形態學操作 ,腐蝕,膨脹
    erode = cv.erode(binary,None,iterations=2)
    dilate = cv.dilate(erode,None,iterations=1)
    #邏輯運算,背景設定為白色,字型為黑色,便於識別
    cv.imshow('dilate',dilate)
    cv.bitwise_not(dilate,dilate)
    cv.imshow('binary-image',dilate)
    #識別影象
    test_message = Image.fromarray(dilate)
    text = pytesseract.image_to_string(test_message)
    print(f'define result:{text}')
#匯入影象
src = cv.imread(r'./image.png')
#顯示影象名字為input image,第二個是匯入的影象。
cv.imshow('input image',src)
#調取函數匯入影象
recognize_text(src)
cv.waitKey(0)
cv.destroyWindow()

結果分析

        匯入的原圖image的圖片情況: 

編譯結果呈現:

 程式碼二

驗證碼圖片Image5.png:

程式碼模組

import cv2 as cv
import pytesseract
from PIL import Image
 
 
def recognize_text(image):
    # 邊緣保留濾波  去噪
    blur = cv.pyrMeanShiftFiltering(image, sp=8, sr=60)
    cv.imshow('dst', blur)
    # 灰度影象
    gray = cv.cvtColor(blur, cv.COLOR_BGR2GRAY)
    # 二值化
    ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU)
    print(f'二值化自適應閾值:{ret}')
    cv.imshow('binary', binary)
    # 形態學操作  獲取結構元素  開操作
    kernel = cv.getStructuringElement(cv.MORPH_RECT, (3, 2))
    bin1 = cv.morphologyEx(binary, cv.MORPH_OPEN, kernel)
    cv.imshow('bin1', bin1)
    kernel = cv.getStructuringElement(cv.MORPH_OPEN, (2, 3))
    bin2 = cv.morphologyEx(bin1, cv.MORPH_OPEN, kernel)
    cv.imshow('bin2', bin2)
    # 邏輯運算  讓背景為白色  字型為黑  便於識別
    cv.bitwise_not(bin2, bin2)
    cv.imshow('binary-image', bin2)
    # 識別
    test_message = Image.fromarray(bin2)
    text = pytesseract.image_to_string(test_message)
    print(f'識別結果:{text}')
 
 
src = cv.imread(r'./image5.png')
cv.imshow('input image', src)
recognize_text(src)
cv.waitKey(0)
cv.destroyAllWindows()

結果呈現

總結經驗

cv2,pytesseract的使用不復雜了,按照官方操作手冊來使用即可。安裝時候記得更換一下源的地址,有一些官方的源不容易搜尋到CV2和pytesseract模組了,要更換地址源才可以用。不過程式碼模組只能識別圖片中的數位,對圖片中的中文還沒有識別出來。可能需要重新寫程式碼。

 參考文獻

使用Python中的pytesseract模組實現抓取圖片中文字

Py之cv2:cv2(OpenCV,opencv-python)庫的簡介、安裝、使用方法(常見函數、影象基本運算等)最強詳細攻略

anaconda安裝open cv

Python程式碼實現驗證碼識別

到此這篇關於Python使用Cv2模組識別驗證碼的文章就介紹到這了,更多相關Python Cv2驗證碼識別內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com