数据训练和过程但没有得到正确的结果,为什么? [英] data train and process but dont get the correct result,why?

查看:130
本文介绍了数据训练和过程但没有得到正确的结果,为什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

火车

Train

import cv2
import numpy as np
from datetime import datetime
import os
from PIL import Image
import hashlib, os, math, time
import Image
#from PIL 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)

推荐答案

这篇关于数据训练和过程但没有得到正确的结果,为什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆