最近自己做公司系統(tǒng)的UI自動(dòng)化嗤谚,結(jié)果遇到了前端同事搞得圖形驗(yàn)證碼棺蛛,干擾線(xiàn)比較多,PIL識(shí)別率很低巩步,因此自己優(yōu)化了一下旁赊,現(xiàn)在識(shí)別率從20%提高到了70%左右
處理前:
1.jpg
處理后
test.png
下面是具體代碼:
__author__ = "LandiLiu"
from PIL import ImageEnhance, Image
import pytesseract
def getSecurityCode(path):
# 原始圖像
image = Image.open (path)
# 亮度增強(qiáng)
enh_bri = ImageEnhance.Brightness (image)
brightness = 1.5
image_brightened = enh_bri.enhance (brightness)
image_brightened.save (path)
# 色度增強(qiáng)
image = Image.open (path)
enh_col = ImageEnhance.Color (image)
color = 1.5
image_colored = enh_col.enhance (color)
image_colored.save (path)
# 對(duì)比度增強(qiáng)
image = Image.open (path)
enh_con = ImageEnhance.Contrast (image)
contrast = 1.5
image_contrasted = enh_con.enhance (contrast)
image_contrasted.save (path)
# 銳度增強(qiáng)
image = Image.open (path)
enh_sha = ImageEnhance.Sharpness (image)
sharpness = 3.0
image_sharped = enh_sha.enhance (sharpness)
image_sharped.save (path)
# 黑白化處理
image = Image.open (path)
img_blacked = image.convert ('L')
img_blacked.save (path)
# text = pytesseract.image_to_string (img_blacked)
# print (text)
#去除干擾線(xiàn)
data = Image.open (path)
size = data.size
w = size[0]
h = size[1]
buffer = 0
#進(jìn)行像素點(diǎn)過(guò)濾,判斷干擾線(xiàn)像素點(diǎn)8個(gè)方向的像素值
try:
for i in range (1, w - 1):
for j in range (1, h - 1):
if data.getpixel ((i, j - 1)) > 150:
buffer += 1
if data.getpixel ((i, j + 1)) > 150:
buffer += 1
if data.getpixel ((i - 1, j)) > 150:
buffer += 1
if data.getpixel ((i + 1, j)) > 150:
buffer += 1
if data.getpixel ((i - 1, j - 1)) > 150:
buffer += 1
if data.getpixel ((i - 1, j + 1)) > 150:
buffer += 1
if data.getpixel ((i + 1, j - 1)) > 150:
buffer += 1
if data.getpixel ((i + 1, j + 1)) > 150:
buffer += 1
# print (buffer)
#對(duì)干擾線(xiàn)所在像素點(diǎn)進(jìn)行置白
if buffer > 4:
data.putpixel ((i, j), 255)
buffer = 0
data.save ('test.png')
text = pytesseract.image_to_string (data)
return text.replace(' ','')
except:return -1
如果有其他的優(yōu)化方法椅野,歡迎留言
ps:未經(jīng)作者授權(quán)禁止轉(zhuǎn)載