Beispiel #1
0
    def __init__(self, datadir, crop=None, transform=None):
        self.datadir = datadir
        self.crop = crop  #has form of tuple of ((y,x),(height, width))
        self.transform = transform  #has form of np.mat with shape (2,2)
        self.haar_cascade = cv2.CascadeClassifier(
            os.path.join(datadir, 'haarcascade_russian_plate_number.xml'))
        self.letter_svm = {}

        for letter in [
                '0O', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B',
                'C', 'E', 'H', 'K', 'M', 'P', 'T', 'X', 'Y', '8dot', 'dotH',
                'dotM', 'dotO', 'dotE', 'dotC', 'dotP', 'dotB'
        ]:
            svm_file = os.path.join(datadir,
                                    'svm_letter_' + letter + '_stage_1.xml')
            self.letter_svm[letter] = cv2.SVM()
            self.letter_svm[letter].load(svm_file)

        svm_file = os.path.join(datadir, 'svm_left_border.xml')
        self.left_border = cv2.SVM()
        self.left_border.load(svm_file)

        svm_file = os.path.join(datadir, 'svm_right_border.xml')
        self.right_border = cv2.SVM()
        self.right_border.load(svm_file)

        svm_file = os.path.join(datadir, 'svm_plate.xml')
        self.plate_svm = cv2.SVM()
        self.plate_svm.load(svm_file)

        svm_file = os.path.join(datadir, 'svm_vertical_stage1.xml')
        self.vertical_stage1_svm = cv2.SVM()
        self.vertical_stage1_svm.load(svm_file)
Beispiel #2
0
    def __init__(self, num_classes, mode="one-vs-all", params=None):
        """
            The constructor makes sure the correct number of classifiers is
            initialized, depending on the mode ("one-vs-all" or "one-vs-one").

            :param num_classes: The number of classes in the data.
            :param mode:        Which classification mode to use.
                                "one-vs-all": single classifier per class
                                "one-vs-one":  single classifier per class pair
                                Default: "one-vs-all"
            :param params:      SVM training parameters.
                                For now, default values are used for all SVMs.
                                Hyperparameter exploration can be achieved by
                                embedding the MultiClassSVM process flow in a
                                for-loop that classifies the data with
                                different parameter values, then pick the
                                values that yield the best accuracy.
                                Default: None
        """
        self.num_classes = num_classes
        self.mode = mode
        self.params = params or dict()

        # initialize correct number of classifiers
        self.classifiers = []
        if mode == "one-vs-one":
            # k classes: need k*(k-1)/2 classifiers
            for _ in xrange(num_classes * (num_classes - 1) / 2):
                self.classifiers.append(cv2.SVM())
        elif mode == "one-vs-all":
            # k classes: need k classifiers
            for _ in xrange(num_classes):
                self.classifiers.append(cv2.SVM())
        else:
            print "Unknown mode ", mode
def predict_shape(path, val):
    training_set = []
    test_set = []
    test_set1 = []
    color_test_set = []
    training_labels = []
    result_list = []

    ######     SVM training     ########################

    svm = cv2.SVM()
    svm.load('hog_svm_data1.dat')

    svm1 = cv2.SVM()
    svm1.load('hog_svm_data2.dat')

    ######     Now testing HOG     ########################

    img = cv2.imread(path)
    res = cv2.resize(img, (400, 300))
    h = hog(res)
    test_set.append(h)
    testData = np.float32(test_set)
    pre_shape = svm.predict(testData)
    if val == 3:
        if pre_shape == 2:
            img = cv2.imread(path)
            res = cv2.resize(img, (400, 300))
            h = hog(res)
            test_set1.append(h)
            testData = np.float32(test_set1)
            pre_shape = svm1.predict(testData)
            print 'inside'
            return pre_shape
    return pre_shape
def trainSVM(input_, response_):
	logger.info('...training SVM')

	svmParams = dict(kernel_type = cv2.SVM_RBF, svm_type = cv2.SVM_C_SVC, term_crit=(cv2.TERM_CRITERIA_COUNT | cv2.TERM_CRITERIA_EPS, 10000, 0.0000000001))

	svm_auto = cv2.SVM()
	svm_auto.train_auto(input_, response_, None, None, params=svmParams, k_fold=7)

	svmParams['C'] = 100
	svmParams['gamma'] = 2
	svm = cv2.SVM()
	svm.train(input_, response_, params=svmParams)

	return [svm, svm_auto]
Beispiel #5
0
 def test_472(self):
     # 47.2使用SVM进行手写数据OCR
     SZ = 20
     bin_n = 16  # Number of bins
     svm_params = dict(kernel_type=cv2.SVM_LINEAR,
                       svm_type=cv2.SVM_C_SVC,
                       C=2.67,
                       gamma=5.383)
     affine_flags = cv2.WARP_INVERSE_MAP | cv2.INTER_LINEAR
     img = cv2.imread('digits.png', 0)
     cells = [np.hsplit(row, 100) for row in np.vsplit(img, 50)]
     # First half is trainData, remaining is testData
     train_cells = [i[:50] for i in cells]
     test_cells = [i[50:] for i in cells]
     ###### Now training ########################
     deskewed = [map(deskew, row) for row in train_cells]
     hogdata = [map(hog, row) for row in deskewed]
     trainData = np.float32(hogdata).reshape(-1, 64)
     responses = np.float32(np.repeat(np.arange(10), 250)[:, np.newaxis])
     svm = cv2.SVM()
     svm.train(trainData, responses, params=svm_params)
     svm.save('svm_data.dat')
     ###### Now testing ########################
     deskewed = [map(deskew, row) for row in test_cells]
     hogdata = [map(hog, row) for row in deskewed]
     testData = np.float32(hogdata).reshape(-1, bin_n * 4)
     result = svm.predict_all(testData)
     ####### Check Accuracy ########################
     mask = result == responses
     correct = np.count_nonzero(mask)
     print("")
def predict_color(path):

    training_set = []
    test_set = []
    color_test_set = []
    training_labels = []
    result_list = []
    ######     Now testing Color      ########################

    svm1 = cv2.SVM()
    svm1.load('color_svm_data.dat')

    img = cv2.imread(path)
    res = cv2.resize(img, (400, 300))
    crop_img = res[50:150, 100:200]
    cv2.imwrite("d:/Emmanu/project-data/color-test.jpg", crop_img)

    img = Image.open('d:/Emmanu/project-data/color-test.jpg')
    img200 = img.convert('RGBA')
    arr = np.array(img200)
    flat_arr = arr.ravel()
    color_test_set.append(flat_arr)
    testData = np.float32(color_test_set)
    pre_color = svm1.predict(testData)
    return pre_color
Beispiel #7
0
def train_classifier(svm_data_dir):
    with open(os.path.join(svm_data_dir, "training_data")) as f:
        training_data = np.load(f)
    with open(os.path.join(svm_data_dir, "training_labels")) as f:
        training_labels = np.load(f)
    with open(os.path.join(svm_data_dir, "testing_data")) as f:
        testing_data = np.load(f)
    with open(os.path.join(svm_data_dir, "testing_labels")) as f:
        testing_labels = np.load(f)

    svm = cv2.SVM()
    svm_params = dict(kernel_type=cv2.SVM_LINEAR, svm_type=cv2.SVM_C_SVC)

    svm.train_auto(training_data,
                   training_labels,
                   None,
                   None,
                   params=svm_params,
                   k_fold=50)
    svm.save(os.path.join(svm_data_dir, 'svm_data.dat'))

    results = svm.predict_all(testing_data)
    mask = results == testing_labels.reshape((-1, 1))
    correct = np.count_nonzero(mask)
    print correct * 100.0 / results.size
Beispiel #8
0
def load_svm(svm_file, x, y, svm_par):
    """Loads the SVM module"""
    if os.path.isfile(svm_file):
        svm_vec = pickle.load(open(svm_file))
    else:
        svm_obj = cv2.SVM()
        svm_obj.train_auto(x,
                           y,
                           None,
                           None,
                           params=svm_par,
                           k_fold=5,
                           balanced=True)
        # svm_obj.train(x, y, None, None, params=svm_par)
        svm_obj.save("svm.xml")
        tree = Et.parse('svm.xml')
        root = tree.getroot()
        sup_vec = root.getchildren()[0].getchildren()[-2].getchildren()[0]
        rho = float(root.getchildren()[0].getchildren()[-1].getchildren()
                    [0].getchildren()[1].text)
        svm_vec = [
            float(x)
            for x in re.sub('\s+', ' ', sup_vec.text).strip().split(' ')
        ]
        svm_vec.append(-rho)
        pickle.dump(svm_vec, open(svm_file, 'w'))
    return svm_vec
Beispiel #9
0
def main():
    for vertorNum in range(1, 201):
        xTrain_, yTrain, xTest_, yTest = loadImageSet()
        num_train, num_test = xTrain_.shape[0], xTest_.shape[0]

        xTrain_, yTrain, xTest_, yTest = loadImageSet()
        num_train, num_test = xTrain_.shape[0], xTest_.shape[0]

        xTrain, data_mean, V = pca(xTrain_, vertorNum)
        xTest = np.array(
            (xTest_ - np.tile(data_mean, (num_test, 1))) * V)  # 得到测试脸在特征向量下的数据

        # yPredict = [yTrain[np.sum((xTrain - np.tile(d, (num_train, 1))) ** 2, 1).argmin()] for d in xTest]
        # print u'欧式距离法识别率: %.2f%%' % ((yPredict == yTest).mean() * 100)

        svm = cv2.SVM()
        svm.train(np.float32(xTrain),
                  np.float32(yTrain),
                  params={'kernel_type': cv2.SVM_LINEAR})
        yPredict = [svm.predict(d) for d in np.float32(xTest)]
        # yPredict = svm.predict_all(xTest.astype(np.float64))
        # average = 0
        # for index in range(1,11):
        #     average += ((yPredict == yTest).mean() * 100)
        #     if(index == 10 ):
        #         print '%d' % (vertorNum) + u' : 支持向量机识别率: %.2f%% \n' %  (average/10)
        #         # print '%d' % (vertorNum) + u' %.2f%% \n' % (average / 10)
        print "选择的特征值的个数:%d" % vertorNum
        print "准确度:%.2f%%" % ((yPredict == yTest).mean() * 100)
        print "测试的具体情况"
        for index, item in enumerate(yPredict):
            print index / 5, item, index / 5 == item
        print '\n'
 def __init__(self, trainName, testName, save = 0):
     self.save = save
     self.trainName = trainName
     self.testName = testName
     self.trainData = np.empty(shape = [0, 3])
     self.testData = self.trainData.copy()
     self.svm = cv2.SVM()
Beispiel #11
0
def teamMain():
    DIR = '/home/archer/Documents/maxent/data/basketball/leaguerank/'
    teamIds = loadTeamIds(DIR + 'teamidshortname.csv')
    teamNames = [x[1] for x in loadMatrixFromFile(DIR + 'teamidshortname.csv')]
    countTotal = 0
    total = 0

    for team in teamIds:
        trainData = buildTrainingSets(DIR + team + '-train.csv.knn')
        trainLabels = buildTrainingLabels(DIR + team + '-train.csv.knn')
        testData = buildTestingSets(DIR + team + '-test.csv.knn')
        testLabels = buildTestingLabels(DIR + team + '-test.csv.knn')
        total = total + len(testLabels)

        svm = cv2.SVM()
        svm.train(trainData, trainLabels, params=svm_params)
        svm.save('svm_data.dat')

        # Accuracy
        count = 0
        for i in range(len(testLabels)):
            ret = svm.predict(np.array([testData[i]]))
            if ret == testLabels[i][0]:
                count = count + 1
        countTotal = countTotal + count
        print 'INFO: Accuracy(', team, ')', count / float(len(testLabels))
    print 'INFO: Total Accuracy: ', countTotal / float(total)
Beispiel #12
0
def inflate_classifier(classifier_root_dir):
    vocab_path, unlabelled_dir, labelled_dir, features_dir, svm_data_dir = \
        get_classifier_directories(classifier_root_dir)
    with open(vocab_path, "rb") as f:
        vocab = np.load(f)

    # FLANN parameters
    flann_index_kdtree = 0
    index_params = dict(algorithm=flann_index_kdtree, trees=5)
    search_params = dict(checks=50)  # or pass empty dictionary
    matcher = cv2.FlannBasedMatcher(index_params, search_params)
    detector = cv2.SIFT()
    extractor = cv2.DescriptorExtractor_create("SIFT")
    bow_de = cv2.BOWImgDescriptorExtractor(extractor, matcher)
    bow_de.setVocabulary(vocab)

    svm = cv2.SVM()
    svm.load(os.path.join(svm_data_dir, "svm_data.dat"))

    def classifier(image):
        keypoints = detector.detect(image)
        descriptor = bow_de.compute(image, keypoints)
        return svm.predict(descriptor)

    return classifier
Beispiel #13
0
def seasonMain():
    DIR = '/home/archer/Documents/maxent/data/basketball/leaguerank/'
    seasons = loadSeasons(DIR + 'seasons-18-Nov-2014.txt')
    countTotal = 0
    total = 0

    for season in seasons:
        trainData = buildTrainingSets(DIR + season + '-train.csv.knn')
        testData = buildTestingSets(DIR + season + '-test.csv.knn')
        trainLabels = buildTestingLabels(DIR + season + '-train.csv.knn')
        testLabels = buildTestingLabels(DIR + season + '-test.csv.knn')
        total = total + len(testLabels)

        svm = cv2.SVM()
        svm.train(trainData, trainLabels, params=svm_params)
        svm.save('svm_data.dat')

        # Accuracy
        count = 0
        for i in range(len(testLabels)):
            ret = svm.predict(np.array([testData[i]]))
            if ret == testLabels[i][0]:
                count = count + 1

        countTotal = countTotal + count
        print 'INFO: Accuracy(', season, ')', count / float(len(testLabels))

    print 'INFO: Total Accuracy: ', countTotal / float(total)
Beispiel #14
0
def TrainNSaveSVM(TrainingData, LabelData, SvmDataFileName='svm_data.dat'):
    ''' Trains and saves SVM into (.dat) file. Pass None in Filename to avoid saving.'''
    svm_params = dict(kernel_type=cv2.SVM_LINEAR, svm_type=cv2.SVM_C_SVC)
    svm = cv2.SVM()
    svm.train(TrainingData, LabelData, params=svm_params)
    if SvmDataFileName:  # if None, do not save
        svm.save(SvmDataFileName)
Beispiel #15
0
def trainInMyWay(target, labels):
    # First half is trainData, remaining is testData
    train_cells = target
    ######     Now training      ########################
    deskewed = [map(deskew, row) for row in train_cells]
    hogdata = [map(hog, row) for row in deskewed]
    trainData = np.float32(train_cells).reshape(-1, 64)
    print(trainData.shape)
    #response is array of n * 1, i.e. [[1],[2],[3]...]
    responses = np.float32(labels)[:, np.newaxis]
    svm = cv2.SVM()
    svm.train(trainData, responses, params=svm_params)
    #svm.save('svm_data.dat')

    ######     Now testing      ########################
    testData = trainData
    result = svm.predict_all(testData)

    #######   Check Accuracy   ########################
    mask = result == responses

    #for c in result:
    #    print(chr(c + ord('A')))
    mask = mask.astype(np.uint8)
    #print(mask)
    correct = np.count_nonzero(mask)
    #print(correct)
    print(correct * 100.0 / result.size)
def testing():
	svm_model = cv2.SVM()
	svm_model.load('svm_data.dat')
	feature_mat = []
	response = []
	image_names = []
	pix_cm = []
	fruit_contours = []
	fruit_areas = []
	fruit_volumes = []
	fruit_mass = []
	fruit_calories = []
	skin_areas = []
	fruit_calories_100grams = []
	for j in [1,2,3,4,5,6,7,8,9,10,11,12,13,14]:
		for i in range(21,26):	
			img_path = "../Dataset/images/Test_Images/"+str(j)+"_"+str(i)+".jpg"
			print img_path
			fea, farea, skinarea, fcont, pix_to_cm = readFeatureImg(img_path)
			pix_cm.append(pix_to_cm)
			fruit_contours.append(fcont)
			fruit_areas.append(farea)
			feature_mat.append(fea)
			skin_areas.append(skinarea)
			response.append([float(j)])
			image_names.append(img_path)

	testData = np.float32(feature_mat).reshape(-1,94)
	responses = np.float32(response)
	result = svm_model.predict_all(testData)
	mask = result==responses

	#calculate calories
	for i in range(0, len(result)):
		volume = getVolume(result[i], fruit_areas[i], skin_areas[i], pix_cm[i], fruit_contours[i])
		mass, cal, cal_100 = getCalorie(result[i], volume)
		fruit_volumes.append(volume)
		fruit_calories.append(cal)
		fruit_calories_100grams.append(cal_100)
		fruit_mass.append(mass)

	#write into csv file
	with open('output.csv', 'w') as outfile:
		writer = csv.writer(outfile)
		data = ["Image name", "Desired response", "Output label", "Volume (cm^3)", "Mass (grams)", "Calories for food item", "Calories per 100 grams"]
		writer.writerow(data)
		for i in range(0, len(result)):
			if (fruit_volumes[i] == None):
				data = [str(image_names[i]), str(responses[i][0]), str(result[i][0]), "--", "--", "--", str(fruit_calories_100grams[i])]
			else:
				data = [str(image_names[i]), str(responses[i][0]), str(result[i][0]), str(fruit_volumes[i]), str(fruit_mass[i]), str(fruit_calories[i]), str(fruit_calories_100grams[i])]
			writer.writerow(data)
		outfile.close()
	
	for i in range(0, len(mask)):
		if mask[i][0] == False:	
			print "(Actual Reponse)", responses[i][0], "(Output)", result[i][0], image_names[i]

	correct = np.count_nonzero(mask)
	print correct*100.0/result.size
Beispiel #17
0
def main():
    img = cv2.imread('digits.png', 0)

    cells = [np.hsplit(row, 100) for row in np.vsplit(img, 50)]

    # First half is trainData, remaining is testData
    train_cells = [i[:50] for i in cells]
    test_cells = [i[50:] for i in cells]

    ######     Now training      ########################

    deskewed = [map(deskew, row) for row in train_cells]
    hogdata = [map(hog, row) for row in deskewed]
    trainData = np.float32(hogdata).reshape(-1, 64)
    responses = np.float32(np.repeat(np.arange(10), 250)[:, np.newaxis])

    svm = cv2.SVM()
    svm.train(trainData, responses, params=svm_params)
    svm.save('svm_data.dat')

    ######     Now testing      ########################

    deskewed = [map(deskew, row) for row in test_cells]
    hogdata = [map(hog, row) for row in deskewed]
    testData = np.float32(hogdata).reshape(-1, bin_n * 4)
    result = svm.predict_all(testData)

    #######   Check Accuracy   ########################
    mask = result == responses
    correct = np.count_nonzero(mask)
    print(correct * 100.0 / result.size)
def classify():
    svm = cv2.SVM()
    svm.load("svmV2.clf")
    centers = np.load('Temp/voc.npy')
    
    total = 0; correct = 0; dictIdx = 0
    dirs = os.listdir(testset_path)
    print 'start testing'
    print 'classify', dirs
    for dir in dirs:
        count = 0; crt = 0
        files = os.listdir(os.path.join(testset_path, dir))
        for f in files:
            count += 1
            im = cv2.imread(os.path.join(testset_path,dir,f))
            des = calcSiftFeature(im)
            feature = calcImageFeature(des, centers)
            feature = feature*idf
            feature = preprocessing.normalize(feature, norm='l2')
            if dictIdx == svm.predict(feature):
                crt += 1
        print 'Accuracy Class', dir, crt, '/', count, '=',float(crt)/count
        total += count
        correct += crt
        dictIdx += 1
    print 'Total Accuracy ', correct, '/', total, float(correct)/total
Beispiel #19
0
 def get_classifier(self, feat, tag):
     samples = np.loadtxt(feat, np.float32)
     responses = np.loadtxt(tag, np.float32)
     responses = responses.reshape((responses.size, 1))
     model = cv2.SVM()
     model.train(samples, responses)
     return model
Beispiel #20
0
def main_func():
	
	#grab the image
	fileName = getImageName()
	grab(fileName)
	image = cv2.imread(fileName)
	
	# Need to add in Andres's code to grab an image
	coordinates = get_coordinates('coordinates.txt');
	positions = get_positions('positions.txt');
	crops = get_crops(image, coordinates);
	hogData = create_hog(crops);
	hogData = hogData.astype(np.float32);

	# Initialize SVM
	svm = cv2.SVM();
	svm.load('svm_data.dat');
	result = svm.predict_all(hogData);

	spaces_list = [];
	for i in range(len(result)):
		if (result[i][0] == 1):
			spaces_list.append(Spot(positions[i][0], positions[i][1]));
			cv2.circle(image, ((coordinates[i][2] + coordinates[i][3])/2, (coordinates[i][0] + coordinates[i][1])/2), 35, (0, 0, 255), 5);
	cv2.imwrite('Result.jpg', image);
	return spaces_list
def trainsvm(materials):
    svm = cv2.SVM()
    responses = []
    trainData = []
    labels = open('label.txt', 'a')
    for label, vectors in materials.items():
        labelhash = hash(label) % 1000000

        labels.write(str(labelhash) + '\t' + str(label))

        #inversehash[labelhash] = label
        charact = np.float32(vectors).reshape(-1, 64)
        for cha in charact:
            trainData.append(cha)
        for i in range(len(vectors)):
            responses.append(labelhash)

    trainData = np.array(trainData)
    # print "out",trainData
    responses = np.float32((np.array(responses))[:, np.newaxis])
    # print "reout",responses
    # responses =  np.float32((responses)[:,np.newaxis] )
    # print "responses",responses
    svm.train(trainData, responses, params=svm_params)
    svm.save('svm_image.dat')
    return svm
Beispiel #22
0
    def train_svm(self, file_name):
        '''DOCSTRING:
            Given .npz file of training data and labels, initializes, sets
            parameters/data for, and trains SVM to distinguish between chars in
            provided test data; returns SVM
            '''

        # Sets parameters of svm to use
        svm_params = dict(kernel_type = cv2.SVM_LINEAR, svm_type = \
                            cv2.SVM_NU_SVC, nu=.105)
        # gamma = 5.383

        # reads data in .svm file and formats for svm
        with np.load(self.PARAMS_PATH + '/params/' + file_name +
                     '.npz') as input_data:
            print('MSG: training data length: ' +
                  str(len(input_data['train'])))
            print('MSG: training data length: ' +
                  str(len(input_data['train_labels'])))
            train_data = input_data['train']
            data_labels = input_data['train_labels']

        SVM = cv2.SVM()
        SVM.train(train_data, data_labels, params=svm_params)
        return SVM
 def __init__(self, character_width=15, character_height=15, classifier_type="svm_linear"):
     self.character_width = character_width
     self.character_height = character_height
     self.classifier_type = classifier_type
     self.resize = 128
     
     if classifier_type == "knn":
         self.classifier = cv2.KNearest()
     else:
         self.classifier = cv2.SVM()
         
     if self.classifier_type == "svm_linear_hog":                
         winSize = (128,128)
         blockSize = (32,32)
         blockStride = (16,16)
         cellSize = (8,8)
         nbins = 9
         derivAperture = 1
         winSigma = 4.
         histogramNormType = 0
         L2HysThreshold = 2.0000000000000001e-01
         gammaCorrection = 0
         nlevels = 32
         self.hog = cv2.HOGDescriptor(winSize,blockSize,blockStride,cellSize,nbins,derivAperture,winSigma,
                                 histogramNormType,L2HysThreshold,gammaCorrection,nlevels)
Beispiel #24
0
def trainsvm(materials):
    svm = cv2.SVM()
    # svm.load('svm_image.txt')
    re1 = svm.get_support_vector_count()
    responses = []
    trainData = []
    for label, vectors in materials.items():
        labelhash = hash(label) % 1000000
        inversehash[labelhash] = label
        charact = np.float32(vectors).reshape(-1, 64)
        for cha in charact:
            trainData.append(cha)
        for i in range(len(vectors)):
            responses.append(labelhash)

    trainData = np.array(trainData)
    # print "out",trainData
    responses = np.float32((np.array(responses))[:, np.newaxis])
    # print "reout",responses
    # responses =  np.float32((responses)[:,np.newaxis] )
    # print "responses",responses
    svm.train(trainData, responses, params=svm_params)
    re2 = svm.get_support_vector_count()
    print "re1", re1, "re2", re2
    svm.save('svm_face.dat')
    return svm
    def __init__(self, features, label, C=1, gamma = 0.5,):

        ####UNCOMMENT TO USE SVM
        #self.params = dict(kernel_type=cv2.SVM_LINEAR,
        #                   svm_type=cv2.SVM_C_SVC,
        #                   C=C)

        ##### random trees parameters
        self.params = dict(max_depth=100,
                           min_sample_count=1,
                           use_surrogates=False,
                           max_categories=5,
                           calc_var_importance=False,
                           nactive_vars=0,
                           max_num_of_tree_in_the_forest=100,
                           term_crit=(cv2.TERM_CRITERIA_MAX_ITER,100,0.1))
       #####

        self.le = preprocessing.LabelEncoder()
        self.le.fit(label)
        leLabels = np.array(self.le.transform(label), dtype=np.float32)

        features_train, features_test = cross_validation.train_test_split(features, test_size=0.4, random_state=0)
        labels_train, labels_test = cross_validation.train_test_split(leLabels, test_size=0.4, random_state=0)

        #result = self.training(features_train, labels_train)     ### uncomment to use svm
        result = self.trainingForest(features_train, labels_train)
        self.crossValidation(result, features_test, labels_test)
        self.model = cv2.SVM()
Beispiel #26
0
 def training(self, features, label):
     features = np.array(features, dtype=np.float32)
     self.model = cv2.SVM()
     self.model.train(features, label, params=self.params)
     model_dir = settings.MODELS_ROOT
     svm_filename =  os.path.join(model_dir, "svm.xml")
     self.model.save(svm_filename)
Beispiel #27
0
def train_svm():

	# CV2 SVM
	svm_params = dict( kernel_type = cv2.SVM_RBF,
	                    svm_type = cv2.SVM_C_SVC,
	                    C=9.34, gamma=15.68 )
	svm=cv2.SVM()
	label_list=[]
	label_list.append('a')
	url='train_images/'
	train_set = []
	s_list=sorted(os.listdir(url))
	label = 0
	for i in s_list:
		s_list=glob.glob(url+i+'/*.png')
		# if(len(s_list)>25):
		if(len(s_list)>500):
			file=open(url+i+'/utf8',"r")
			i_uni=file.read()
			i_uni=i_uni[:-1]
			label_list.append(i_uni)
			label+=1
		else:
			continue
		print str(label),i,label_list[label],len(s_list)
		int test=10;
		for j in s_list:
			
			if(!test-=1)
				break;
			img=cv2.imread(j,0)
			img=pp.preprocess(img)
			f =train.find_feature(img.copy())
			# print len(f)
			s = [label,f]
			train_set.append(s)
	f=open('label','w')
	for l in label_list:
		f.write(l+'\n')
	f.close()

	shuffle(train_set)
	f_list = []
	label = []
	for t in train_set:
		label.append(t[0])
		f_list.append(t[1])
#	np.savetxt('feature.txt',f_list)
#	np.savetxt('label.txt',label)
#	samples = np.loadtxt('feature.txt',np.float32)
#	responses = np.loadtxt('label.txt',np.float32)
#	responses = responses.reshape((responses.size,1))  
	samples = np.array(f_list,np.float32)
	responses = np.array(label,np.float32)
	print 'auto training initiated'
	print 'please wait.....'
	svm.train(samples,responses,params=svm_params)
	# svm.train_auto(samples,responses,None,None,params=svm_params)
	svm.save("svm_class.xml")
def train_test_svm(tr_feat_targ, tst_feat_targ, retrain=True, model_fpath="models/svm.yaml",
                   C=2.0, gamma=3.0, iterations=50):
  """
  Function trains and tests svm using given data and returns training & testing
  errors

  Input:
  -----
  tr_feat_targ,
  tst_feat_targ: [mx(n+1)] matrices containing m samples, n features, targets
  retrain      : Trains new model if True, else loads model from model_fpath

  model_fpath: Path to store / load svm models from
               If there is an older model already in path & retrain is set 'True'
               older model get overwritten
  C, Gamma   : SVM parameters
  iterations : No of iterations to run SVM

  """
  tr_feat     = tr_feat_targ[:, :-1]
  tr_targets  = tr_feat_targ[:, -1]
  tst_feat    = tst_feat_targ[:, :-1]
  tst_targets = tst_feat_targ[:, -1]

  # Train/Load trained model and predict on training & testing set
  if retrain:
    svm, tr_preds = train_svm(tr_feat_targ, C, gamma, iterations, model_fpath)
  else:
    svm = cv2.SVM()
    svm_model = svm.load(model_fpath)
    tr_preds  = test_svm(tr_feat, svm)

  tst_preds = svm.predict(tst_feat)

  # Compute erfloat32rors
  tr_acc = (tr_targets == tr_preds[1].reshape(tr_preds[1].shape[0],)).astype(np.uint8)
  tst_acc = (tst_targets == tst_preds[1].reshape(tst_preds[1].shape[0],)).astype(np.uint8)
  mean_tr_acc  = tr_acc.sum() / tr_acc.shape[0] * 100   # Mean training accuracy
  mean_tst_acc = tst_acc.sum() / tst_acc.shape[0] * 100 # Mean testing accuracy
  np.savetxt("tr_preds.txt", tr_preds[1], fmt="%.1f")
  print "Training predictions written to tr_preds.txt"
  np.savetxt("tst_preds.txt", tst_preds[1], fmt="%.1f")
  print "Testing predictions written to tst_preds.txt"
  print "******calculating training and testing accuracy******"
  print "Training Accuracy: ", mean_tr_acc
  print "Testing  Accuracy: ", mean_tst_acc

  # Plot errors
  if ERR_VIS:
    plt.ioff()
    plt.plot(tr_acc)
    plt.savefig("results/tr_acc.png") 
    plt.close()
    plt.plot(tst_acc)
    plt.savefig("results/tst_acc.png")
    print "testing accuracy written to results/tst_acc.png"
    plt.close()

  return mean_tr_acc, mean_tst_acc
Beispiel #29
0
 def __init__(self, **kwargs):
     super(OTPFliesIdentificationLearning, self).__init__(**kwargs)
     self._svm = cv2.SVM()
     self._first = True
     self.params = dict(kernel_type=cv2.SVM_RBF,
                        svm_type=cv2.SVM_C_SVC,
                        C=1,
                        gamma=0.5)
    def __init__(self, trained_hog_file=None, trained_binary_file=None):
        self.trained_hog_file = trained_hog_file
        self.trained_binary_file = trained_binary_file
        self.svm_hog = cv2.SVM()
        #self.svm_binary = cv2.SVM()

        if trained_hog_file is not None and trained_binary_file is not None:
            self.load(trained_hog_file, trained_binary_file)