日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

python 中文识别 不用tesseract_Python——验证码识别 Pillow + tesseract-ocr

發(fā)布時間:2025/3/13 65 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 中文识别 不用tesseract_Python——验证码识别 Pillow + tesseract-ocr 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

簡介

圖片驗證碼識別的可以分為幾個步驟,一般用 Pillow 庫或 OpenCV 來實現(xiàn),這幾個過程是:

灰度處理&二值化

降噪

字符分割

標準化

識別

灰度化:在RGB模型中,如果R=G=B時,則彩色表示一種灰度顏色,其中R=G=B的值叫做灰度值,因此,灰度圖像每個像素值只需一個字節(jié)存放灰度值(又稱強度值、亮度值),灰度范圍為0-255。

二值化:二值化可以把灰度圖片轉換成二值圖像,把大于某個臨界灰度值的像素灰度設置為灰度極大值,把小于這個值的像素灰度設為灰度極小值,從而實現(xiàn)二值化。

降噪就是把不需要的信息通通去除,比如背景,干擾線,干擾像素等等,只留下需要識別的字符,讓圖片變成2進制點陣,方便代入模型訓練。

灰度處理:

灰度化:在RGB模型中,如果R=G=B時,則彩色表示一種灰度顏色,其中R=G=B的值叫做灰度值,因此,灰度圖像每個像素值只需一個字節(jié)存放灰度值(又稱強度值、亮度值),灰度范圍為0-255。

from PIL import Image # 用于打開圖片和對圖片處理

def img_to_gray(path):

"""

圖片轉灰度

:param path:

:return:

"""

img = Image.open(path)

img = img.convert('L') #轉灰度

img.show() #顯示圖片

return img

path = '../files/verifyimg_edit_1.jpg'

im = img_to_gray(path)

path = path.replace('jpg','png')

im.save(path) #保存圖片

處理前后的圖片:

輸入原始圖片:

輸出轉灰度后的圖片:

二值化:

二值化:二值化可以把灰度圖片轉換成二值圖像,把大于某個臨界灰度值的像素灰度設置為灰度極大值,把小于這個值的像素灰度設為灰度極小值,從而實現(xiàn)二值化。

from PIL import Image # 用于打開圖片和對圖片處理

def processing_image(path):

img = Image.open(path)

pixdata = img.load()

w, h = img.size

threshold = 160 # 該閾值不適合所有驗證碼,具體閾值請根據(jù)驗證碼情況設置

# 遍歷所有像素,大于閾值的為黑色

for y in range(h):

for x in range(w):

if pixdata[x, y] < threshold:

pixdata[x, y] = 0

else:

pixdata[x, y] = 255

return img

path = '../files/verifyimg_edit_1.png' #已經(jīng)完成轉灰度的圖片

im = processing_image(path)

path = path.replace('png','jpeg')

im.save(path)

輸入轉灰度后的圖片:

輸出二值化后的圖片:

降噪

降噪就是把不需要的信息通通去除,比如背景,干擾線,干擾像素等等,只留下需要識別的字符,讓圖片變成2進制點陣,方便代入模型訓練。

from PIL import Image, ImageDraw

# 二值數(shù)組

t2val = {}

def twoValue(image, G):

for y in xrange(0, image.size[1]):

for x in xrange(0, image.size[0]):

g = image.getpixel((x, y))

if g > G:

t2val[(x, y)] = 1

else:

t2val[(x, y)] = 0

# 根據(jù)一個點A的RGB值,與周圍的8個點的RBG值比較,設定一個值N(0

# G: Integer 圖像二值化閥值

# N: Integer 降噪率 0

# Z: Integer 降噪次數(shù)

# 輸出

# 0:降噪成功

# 1:降噪失敗

def clearNoise(image, N, Z):

for i in xrange(0, Z):

t2val[(0, 0)] = 1

t2val[(image.size[0] - 1, image.size[1] - 1)] = 1

for x in xrange(1, image.size[0] - 1):

for y in xrange(1, image.size[1] - 1):

nearDots = 0

L = t2val[(x, y)]

if L == t2val[(x - 1, y - 1)]:

nearDots += 1

if L == t2val[(x - 1, y)]:

nearDots += 1

if L == t2val[(x - 1, y + 1)]:

nearDots += 1

if L == t2val[(x, y - 1)]:

nearDots += 1

if L == t2val[(x, y + 1)]:

nearDots += 1

if L == t2val[(x + 1, y - 1)]:

nearDots += 1

if L == t2val[(x + 1, y)]:

nearDots += 1

if L == t2val[(x + 1, y + 1)]:

nearDots += 1

if nearDots < N:

t2val[(x, y)] = 1

def saveImage(filename, size):

image = Image.new("1", size)

draw = ImageDraw.Draw(image)

for x in xrange(0, size[0]):

for y in xrange(0, size[1]):

draw.point((x, y), t2val[(x, y)])

image.save(filename)

path = u'../files/verifyimg_edit_二值化.jpg' #已經(jīng)完成二值化的圖片

image = Image.open(path)

twoValue(image, 100)

clearNoise(image, 2, 1)

path1 = u'../files/verifyimg_edit_降噪11.jpg'

saveImage(path1, image.size)

輸入二值化后的圖片:

輸出降噪后圖片:

文字識別

def image_recognition(image):

'''

文字識別

:param image:

:return:

'''

pytesseract.pytesseract.tesseract_cmd = r"d:\Program Files\Tesseract-OCR\tesseract.exe" # 設置pyteseract路徑

result = pytesseract.image_to_string(image) # 圖片轉文字

print(result)

path = u'../files/verifyimg_edit_降噪11.jpg' #已經(jīng)完成降噪的圖片

image = Image.open(path)

image_recognition(image)

輸出:6032

總結

以上是生活随笔為你收集整理的python 中文识别 不用tesseract_Python——验证码识别 Pillow + tesseract-ocr的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。