Train
import cv2
import numpy as np
from datetime import datetime
import os
from PIL import Image
import hashlib, os, math, time
import Image
import ImageEnhance
from pytesser import *
from urllib import urlretrieve
import math
import random
import glob
iconset = ['0','0','0','3','3','3','3','3','3','3','3','5','5','5','5','7','7',
'7','7','7','7','7','7','7','4','4','4','4','4','4','4','4','2','2','2','2','2','2','2','2','2','2']
iconset = [0,1,20,5,6,7,8,10,11,15,17,2,12,21,22,3,4,
13,14,16,18,19,23,9,24,25,26,27,28,29,30,31,32,
33,34,35,36,37,38,39,40,41]
samples=np.empty((0,100))
responses =[]
for f in range(filen):
img =Image.open('./iconset/'+str(f)+'.gif')
img.convert('RGB').save ('img.jpg','JPEG')
img= cv2.imread('img.jpg')
im3= img.copy()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(gray,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
fg = cv2.erode(thresh,None,iterations = 2)
bgt = cv2.dilate(thresh,None,iterations = 3)
ret,bg = cv2.threshold(bgt,1,128,1)
marker = cv2.add(fg,bg)
marker32 = np.int32(marker)
cv2.watershed(img,marker32)
m = cv2.convertScaleAbs(marker32)
ret,thresh = cv2.threshold(m,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
roismall = cv2.resize(thresh,(10,10))
sample = roismall.reshape((1,100))
samples = np.append(samples,sample,0)
responses.append(iconset[f])
responses = np.array(responses,np.float32)
responses = responses.reshape((responses.size,1))
print "training complete"
np.savetxt('general-samples.data',samples)
np.savetxt('general-responses.data',responses)
def train():
samples = np.loadtxt('general-samples.data',np.float32)
responses = np.loadtxt('general-responses.data',np.float32)
responses = responses.reshape((1,responses.size))
model = cv2.KNearest()
model.train(samples,responses)
return model
breaking-captcha:
import cv2
import numpy as np
samples = np.loadtxt('general-samples.data', np.float32)
responses = np.loadtxt('general-responses.data', np.float32)
responses = responses.reshape((responses.size,1))
model = cv2.KNearest()
model.train(samples, responses)
image = cv2.imread('captcha1.png')
out = np.zeros(image.shape, np.uint8)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(gray,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
fg = cv2.erode(thresh,None,iterations = 2)
bgt = cv2.dilate(thresh,None,iterations = 3)
ret,bg = cv2.threshold(bgt,1,128,1)
marker = cv2.add(fg,bg)
marker32 = np.int32(marker)
cv2.watershed(image,marker32)
m = cv2.convertScaleAbs(marker32)
ret,thresh = cv2.threshold(m,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
res = cv2.bitwise_and(image,image,mask = thresh)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_LIST
, cv2.CHAIN_APPROX_SIMPLE)
for contour in contours:
if cv2.contourArea(contour) > 50:
[x, y, w, h] = cv2.boundingRect(contour)
if h > 28:
cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2)
roi = thresh[y:y+h, x:x+w]
roi_small = cv2.resize(roi,(10,10))
roi_small = roi_small.reshape((1,100))
roi_small = np.float32(roi_small)
retval, results, neigh_resp, dists = model.find_nearest(roi_small
, k = 1)
string = str(int((results[0][0])))
cv2.putText(out, string, (x, y+h), 0, 1, (0, 255, 0))
cv2.imshow('im',image)
cv2.imshow('out',out)
cv2.waitKey(0)