爬蟲的時候遇到一些圖片形式的驗證碼,比如數字字母組合,通過CNN我們可以訓練一個模型,進行識別;下面是針對法院失信、執行的驗證碼,準確率達到90%+,基本夠用。
先看下效果吧!
import torch
from torch.autograd import Variable
import numpy as np
from PIL import Image
from torchvision import transforms
import os
charlist = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k',
'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
transforms_sequence=transforms.Compose(
[
transforms.ToTensor(),
transforms.Normalize([0.5], [0.5])
]
)
#加載模型
model=torch.load("/root/ftrain2.pkl")
model.eval()
def predict(file):
# 輸入
img=Image.open(file)
# 灰度化
img_gray=img.convert("L")
# 轉化爲矩陣
img_array=np.array(img_gray)
# 轉換爲模型的輸入
test=transforms_sequence(img_array)
test=test.unsqueeze(0)
pred = model(Variable(test))
# 預測結果
c1=charlist[torch.argmax(pred[0][0:36])]
c2=charlist[torch.argmax(pred[0][36:72])]
c3=charlist[torch.argmax(pred[0][72:108])]
c4=charlist[torch.argmax(pred[0][108:144])]
result=c1+c2+c3+c4
return result
if __name__=="__main__":
result=predict("/root/2a3i_num19365.png")
print(result)