def svmEvaluate(model, digits, samples, labels): predictions = svmPredict(model, samples) print predictions accuracy = (labels == predictions).mean() print('Percentage Accuracy: %.2f %%' % (accuracy * 100)) confusion = np.zeros((CLASS_N + 1, CLASS_N + 1), np.int32) print predictions.shape print labels.shape for i, j in zip(labels, predictions): confusion[int(i), int(j)] += 1 vis = [] # i = 0 for img, flag in zip(digits, predictions == labels): img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR) if not flag: img[..., :2] = 0 # print str(unichr(int(labels[i]) + 96)) # print str(unichr(int(predictions[i]) + 96)) # cv2.imshow('dupaia', img) # cv2.waitKey(0) # i += 1 vis.append(img) return mosaic(25, vis)
def generate_svm(): digits, labels = load_digits(DIGITS_FN) print('preprocessing...') # shuffle digits rand = np.random.RandomState(321) shuffle = rand.permutation(len(digits)) digits, labels = digits[shuffle], labels[shuffle] digits2 = list(map(deskew, digits)) samples = preprocess_hog(digits2) train_n = int(0.9*len(samples)) cv2.imshow('test set', mosaic(25, digits[train_n:])) digits_train, digits_test = np.split(digits2, [train_n]) samples_train, samples_test = np.split(samples, [train_n]) labels_train, labels_test = np.split(labels, [train_n]) print('training SVM...') model = SVM(C=2.67, gamma=5.383) model.train(samples_train, labels_train) vis = evaluate_model(model, digits_test, samples_test, labels_test) print('saving SVM as "digits_svm.dat"...') return model cv2.waitKey(0)
def generate_mosaic(directory): digits = np.empty([0,SZ,SZ]) prefix = str(SZ)+'/cropped_img' suffix = '.png' for i in range(1,11): for j in range(20,100): infix= '%03d-%05d' % (i, j) fname = directory+prefix+infix+suffix img = cv2.imread(fname, 0) digits = np.append(digits, np.array([img]),0) cv2.imwrite('font'+str(SZ)+'.png', mosaic(20, digits))
def evaluate_model(model, digits, samples, labels): resp = model.predict(samples) err = (labels != resp).mean() print('error: %.2f %%' % (err * 100)) confusion = np.zeros((10, 10), np.int32) for i, j in zip(labels, resp): confusion[i, int(j)] += 1 print('confusion matrix:') print(confusion) print() vis = [] for img, flag in zip(digits, resp == labels): img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR) if not flag: img[..., :2] = 0 vis.append(img) return mosaic(25, vis)
def svmEvaluate(model, digits, samples, labels): predictions = svmPredict(model, samples) accuracy = (labels == predictions).mean() print('Percentage Accuracy: %.2f %%' % (accuracy*100)) confusion = np.zeros((10, 10), np.int32) for i, j in zip(labels, predictions): confusion[int(i), int(j)] += 1 print('confusion matrix:') print(confusion) vis = [] for img, flag in zip(digits, predictions == labels): img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR) if not flag: img[...,:2] = 0 vis.append(img) return mosaic(25, vis)
def evaluate_model(model, digits, samples, labels): resp = model.predict(samples) err = (labels != resp).mean() print 'error: %.2f %%' % (err*100) confusion = np.zeros((10, 10), np.int32) for i, j in zip(labels, resp): confusion[i, j] += 1 print 'confusion matrix:' print confusion print vis = [] for img, flag in zip(digits, resp == labels): img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR) if not flag: img[...,:2] = 0 vis.append(img) return mosaic(25, vis)
def evaluate_model(model, digits, samples, labels): resp = model.predict(samples) err = (labels != resp).mean() print('error: %.2f %%' % (err * 100)) # confusion table, where x is ground-truth and y is predicted confusion = np.zeros((10, 10), np.int32) for i, j in zip(labels, resp): confusion[i, int(j)] += 1 print('confusion matrix:') print(confusion) print() # if not correctly predicted, set 0 all channels except Red to make it red vis = [] for img, flag in zip(digits, resp == labels): img = np.uint8((img - img.min()) / (img.max() - img.min()) * 255.) img = cv.cvtColor(img, cv.COLOR_GRAY2BGR) if not flag: img[..., :2] = 0 vis.append(img) return mosaic(25, vis)
def main(): print __doc__ digits, labels = load_digits(DIGITS_FN) print 'preprocessing...' # shuffle digits rand = np.random.RandomState(321) shuffle = rand.permutation(len(digits)) digits, labels = digits[shuffle], labels[shuffle] digits2 = map(deskew, digits) samples = preprocess_hog(digits2) train_n = int(0.9*len(samples)) cv2.imshow('test set', mosaic(25, digits[train_n:])) digits_train, digits_test = np.split(digits2, [train_n]) samples_train, samples_test = np.split(samples, [train_n]) labels_train, labels_test = np.split(labels, [train_n]) print 'training KNearest...' model = KNearest(k=4) model.train(samples_train, labels_train) vis = evaluate_model(model, digits_test, samples_test, labels_test) cv2.imshow('KNearest test', vis) print 'training SVM...' model = SVM(C=2.67, gamma=5.383) model.train(samples_train, labels_train) vis = evaluate_model(model, digits_test, samples_test, labels_test) cv2.imshow('SVM test', vis) print 'saving SVM as "digits_svm.dat"...' model.save('digits_svm.dat') print 'training SimpleAI...' model = simpleai.SimpleAI(class_n = CLASS_N) model.train(samples_train, labels_train) vis = evaluate_model(model, digits_test, samples_test, labels_test) cv2.imshow('SimpleAI test', vis) cv2.waitKey(0)
def evaluate_model(model, items, samples, labels): resp = model.predict(samples) err = (labels != resp).mean() print 'error: %.2f %%' % (err*100) confusion = np.zeros((len(shoeCategory), len(shoeCategory)), np.int32) for i, j in zip(labels, resp): confusion[i, j] += 1 print 'confusion matrix:' print confusion print vis = [] for img, guess, actual in zip(items, resp, labels): img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR) cv2.putText(img, idCategory[int(guess)], (0,7), cv2.FONT_HERSHEY_SIMPLEX, 0.35, 255) cv2.putText(img, idCategory[int(actual)], (0,15), cv2.FONT_HERSHEY_SIMPLEX, 0.35, 255) # cv2.putText(img,"actual=" + idCategory[int(guess)], (0,15), cv2.FONT_HERSHEY_SIMPLEX, 0.25, 255) if not guess == actual: img[...,:2] = 0 vis.append(img) return mosaic(mosaic_SZ, vis), (err*100)
def evaluate_model(model, items, samples, labels): resp = model.predict(samples) err = (labels != resp).mean() print 'error: %.2f %%' % (err * 100) confusion = np.zeros((len(shoeCategory), len(shoeCategory)), np.int32) for i, j in zip(labels, resp): confusion[i, j] += 1 print 'confusion matrix:' print confusion print vis = [] for img, guess, actual in zip(items, resp, labels): img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR) cv2.putText(img, idCategory[int(guess)], (0, 7), cv2.FONT_HERSHEY_SIMPLEX, 0.35, 255) cv2.putText(img, idCategory[int(actual)], (0, 15), cv2.FONT_HERSHEY_SIMPLEX, 0.35, 255) # cv2.putText(img,"actual=" + idCategory[int(guess)], (0,15), cv2.FONT_HERSHEY_SIMPLEX, 0.25, 255) if not guess == actual: img[..., :2] = 0 vis.append(img) return mosaic(mosaic_SZ, vis), (err * 100)
print __doc__ args, _ = getopt.getopt(sys.argv[1:], '', ['input=']) args = dict(args) args.setdefault('--input', 'data/info.dat') print 'reading file %s' % args['--input'] lines = [line.strip() for line in open(args['--input'])] vis = [] f = open('./positives.txt', 'w') for line in lines: rows = line.split() source_file_name = rows[0] print line if len(rows) != 6: print line # print "%d:%d, %d:%d" % (int(rows[2]), int(rows[4])+ int(rows[2]), int(rows[3]), int(rows[5])+ int(rows[3])) img = cv2.imread('/' + source_file_name, cv2.CV_LOAD_IMAGE_GRAYSCALE) cr = img[int(rows[3]):int(rows[5]) + int(rows[3]), int(rows[2]):int(rows[4]) + int(rows[2])] vis.append(cv2.resize(cr, (50, 50))) fn = './positive_images/' + source_file_name.split('/')[2] f.write(fn + '\n') cv2.imwrite(fn, cr) cv2.imwrite('out/test_data.jpg', mosaic(50, np.array(vis))) f.close()
if __name__ == '__main__': print __doc__ digits, labels = load_digits(DIGITS_FN) print 'preprocessing...' # shuffle digits rand = np.random.RandomState(321) shuffle = rand.permutation(len(digits)) digits, labels = digits[shuffle], labels[shuffle] digits2 = map(deskew, digits) samples = preprocess_hog(digits2) train_n = int(0.9*len(samples)) cv2.imshow('test set', mosaic(25, digits[train_n:])) digits_train, digits_test = np.split(digits2, [train_n]) samples_train, samples_test = np.split(samples, [train_n]) labels_train, labels_test = np.split(labels, [train_n]) print 'training KNearest...' model = KNearest(k=4) model.train(samples_train, labels_train) vis = evaluate_model(model, digits_test, samples_test, labels_test) cv2.imshow('KNearest test', vis) print 'training SVM...' model = SVM(C=2.67, gamma=5.383) model.train(samples_train, labels_train) vis = evaluate_model(model, digits_test, samples_test, labels_test)
if __name__ == '__main__': print 'WORK PATH = ' + os.getcwd() model_path = r'E:\APC\sample_test\model.npy' vector_stub_path = r'e:\APC\feature\canditate.vec' vec_stu = stub.read(vector_stub_path) test_path = r'E:\APC\sample' test_files = os.listdir(test_path) for test_file in test_files: img = plt.imread(os.path.join(test_path, test_file))[45:246, 160:565, :] img = cv2.resize(img, (256, 128)) # num_features = len(get_hog_feature(img)) model = load_model(model_path, input_dim=5000, hidden_dim=200, out_dim=2) scale_set = np.arange(0.8, 1.2, 0.1) rect_init_size = [50, 30] step_size = [8, 8] head_p, head_n = detect(img, model, rect_init_size, scale_set, step_size, vec_stu) plt.subplot(1, 2, 1) plt.imshow(mosaic(10, head_p)) plt.title('HEAD') plt.subplot(1, 2, 2) plt.imshow(mosaic(20, head_n)) plt.title('NO HEAD') plt.show()
#digits = np.concatenate((digits, fonts), axis=0) #labels = np.concatenate((labels, fontlabels), axis=0) print digits.shape, labels.shape print 'preprocessing...' # shuffle digits rand = np.random.RandomState(321) shuffle = rand.permutation(len(digits)) digits, labels = digits[shuffle], labels[shuffle] digits2 = map(deskew, digits) samples = preprocess_hog(digits2) train_n = int(0.9*len(samples)) #train_n = int(1.0*len(samples)) cv2.imshow('train set', mosaic(25, digits[:train_n])) digits_train, digits_test = np.split(digits2, [train_n]) samples_train, samples_test = np.split(samples, [train_n]) labels_train, labels_test = np.split(labels, [train_n]) digits_img_test = cv2.imread('final'+str(SZ)+'.png', 0) digits_img_test = cv2.bitwise_not(digits_img_test) digits_test = split2d(digits_img_test, (SZ, SZ)) digits2_test = map(deskew, digits_test) samples_test = preprocess_hog(digits2_test) cv2.imshow('test set', mosaic(9, digits_test)) #cv2.imshow('test set', mosaic(25, digits_test)) print 'training SVM...' model = SVM(C=2.67, gamma=5.383)
image_source = option_dict['image_source'] shoes, samples, labels = preprocessShoes() print 'creating mosaic...' train_n = int(0.9 * len(samples)) shoes_train, shoes_test = np.split(shoes, [train_n]) samples_train, samples_test = np.split(samples, [train_n]) labels_train, labels_test = np.split(labels, [train_n]) for label in shoeCategory.values(): images = [i for i, l in zip(shoes_test, labels_test) if (l == label)] if (len(images) > 0): cv2.imwrite('out/test_' + idCategory[label] + '_set.jpg', mosaic(20, images)) for label in shoeCategory.values(): images = [i for i, l in zip(shoes_test, labels_test) if (l == label)] if (len(images) > 0): cv2.imwrite('out/test_' + idCategory[label] + '_set.jpg', mosaic(20, images)) cv2.imwrite('out/test_set.jpg', mosaic(20, shoes_test)) cv2.imwrite('out/train_set.jpg', mosaic(20, shoes_train)) print 'training KNearest...' model = KNearest(k=4) model.train(samples_train, labels_train) vis, knearestError = evaluate_model(model, shoes_test, samples_test, labels_test)
#!/usr/bin/python3 import cv2 import sys from common import mosaic, KNearest, SVM, OCR from pregrandbux import Grandbux if __name__ == '__main__': # model = KNearest(k=4) model = SVM(C=2.67, gamma=5.383) ABC = 'abcdefghijklmnopqrstuvwxyz' ocr = OCR(ABC, model) do_load = len(sys.argv) > 1 if do_load: # ocr.train('out-min', 'grandbux_svm.dat', 1.0) ocr.load('grandbux_svm.dat') samples = ocr.preprocess_hog(Grandbux(sys.argv[1]).segments(20)) print('SOLVE: {}'.format(''.join(ocr.labels(ocr.predict(samples))))) else: print('training SVM...') ocr.train('out-min', 'grandbux_svm.dat') cv2.imshow('SVM', mosaic(25, ocr.digits)) cv2.waitKey(0)
# get_hog_feature(cv2.imread(os.path.join(test_path, test_files[0])))) num_features = len(vec_stu) num_classes = 2 model = load_model(model_path, input_dim=num_features, hidden_dim=num_hidden_ep, out_dim=num_classes) head_p = [] head_n = [] for elem in test_files: if os.path.splitext(elem)[-1] not in EXT_DICT: continue data = cv2.imread(os.path.join(test_path, elem)) start = time() feature = get_icf_feature(data, vec_stu) prob, res = predict(model, feature) print "spend time: %f" % (time() - start) if res == 1: head_n.append(cv2.resize(data, (32, 32))) else: head_p.append(cv2.resize(data, (32, 32))) plt.subplot(1,2,1) plt.imshow(mosaic(20, head_p))#, aspect='auto') plt.title('HEAD') plt.subplot(1,2,2) plt.imshow(mosaic(20, head_n)) plt.title('NO HEAD') plt.show()
if __name__ == "__main__": print __doc__ digits, labels = load_digits(DIGITS_FN) print "preprocessing..." # shuffle digits rand = np.random.RandomState(321) shuffle = rand.permutation(len(digits)) digits, labels = digits[shuffle], labels[shuffle] digits2 = map(deskew, digits) samples = preprocess_hog(digits2) train_n = int(0.9 * len(samples)) cv2.imshow("test set", mosaic(25, digits[train_n:])) digits_train, digits_test = np.split(digits2, [train_n]) samples_train, samples_test = np.split(samples, [train_n]) labels_train, labels_test = np.split(labels, [train_n]) print "training KNearest..." model = KNearest(k=4) model.train(samples_train, labels_train) vis = evaluate_model(model, digits_test, samples_test, labels_test) cv2.imshow("KNearest test", vis) print "training SVM..." model = SVM(C=2.67, gamma=5.383) model.train(samples_train, labels_train) vis = evaluate_model(model, digits_test, samples_test, labels_test) cv2.imshow("SVM test", vis)
# process each cell - if the cell has a digit (largest contour area exceeds threshold area), then mark cell for training labels = [] samples = [] for i in range(81): cell = cells[i] contours, hierarchy = cv2.findContours(cell.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) if len(contours) > 0: largestContour = contours[np.argmax(map(cv2.contourArea, contours))] if cv2.contourArea(largestContour) >= DIGIT_MIN_AREA: cv2.imshow('What digit is this?', cell) label = cv2.waitKey(0)-48 if (label >= 1) and (label <= 9): labels.append(label) samples.append(cell) elif (label == 27): break cv2.imshow('Acquired data', mosaic(25, samples)) print labels cv2.waitKey(0) np.save('data/samples_sudoku' + iteration, samples) np.save('data/labels_sudoku' + iteration, labels) print 'Data #' + iteration + ' saved' # exit cv2.destroyAllWindows()
print __doc__ args, _ = getopt.getopt(sys.argv[1:], "", ["input="]) args = dict(args) args.setdefault("--input", "data/info.dat") print "reading file %s" % args["--input"] lines = [line.strip() for line in open(args["--input"])] vis = [] f = open("./positives.txt", "w") for line in lines: rows = line.split() source_file_name = rows[0] print line if len(rows) != 6: print line # print "%d:%d, %d:%d" % (int(rows[2]), int(rows[4])+ int(rows[2]), int(rows[3]), int(rows[5])+ int(rows[3])) img = cv2.imread("/" + source_file_name, cv2.CV_LOAD_IMAGE_GRAYSCALE) cr = img[int(rows[3]) : int(rows[5]) + int(rows[3]), int(rows[2]) : int(rows[4]) + int(rows[2])] vis.append(cv2.resize(cr, (50, 50))) fn = "./positive_images/" + source_file_name.split("/")[2] f.write(fn + "\n") cv2.imwrite(fn, cr) cv2.imwrite("out/test_data.jpg", mosaic(50, np.array(vis))) f.close()
print('preprocessing...') # shuffle digits rand = np.random.RandomState(321) #随机种子321 shuffle = rand.permutation(len(digits)) digits, labels = digits[shuffle], labels[shuffle] #打乱数字顺序 # deskew deskewed_digits = list(map(deskew, digits)) #纠正图片倾斜 # hog samples = preprocess_hog(deskewed_digits) #计算hog特征 # split into validation sets train_n = int(0.8 * len(samples)) #划分训练测试集 print(train_n) # what is mosaic? show('test set', mosaic(25, digits[train_n:])) # the original digits digits_train, digits_test = np.split(deskewed_digits, [train_n]) # the descriptors samples_train, samples_test = np.split(samples, [train_n]) labels_train, labels_test = np.split(labels, [train_n]) print('training KNearest...') #knn分类器 model = KNearest(k=4) model.train(samples_train, labels_train) # provide x, y vis = evaluate_model(model, digits_test, samples_test, labels_test) show('KNearest test', vis) print('training SVM...') #SVM分类器 model = SVM(C=2.67, gamma=5.383)
databaseUri = option_dict['database'] image_source = option_dict['image_source'] shoes, samples, labels = preprocessShoes() print 'creating mosaic...' train_n = int(0.9*len(samples)) shoes_train, shoes_test = np.split(shoes, [train_n]) samples_train, samples_test = np.split(samples, [train_n]) labels_train, labels_test = np.split(labels, [train_n]) for label in shoeCategory.values(): images = [i for i, l in zip(shoes_test, labels_test) if (l == label)] if (len(images) > 0): cv2.imwrite('out/test_' + idCategory[label] + '_set.jpg', mosaic(20, images)) for label in shoeCategory.values(): images = [i for i, l in zip(shoes_test, labels_test) if (l == label)] if (len(images) > 0): cv2.imwrite('out/test_' + idCategory[label] + '_set.jpg', mosaic(20, images)) cv2.imwrite('out/test_set.jpg', mosaic(20, shoes_test)) cv2.imwrite('out/train_set.jpg', mosaic(20, shoes_train)) print 'training KNearest...' model = KNearest(k=4) model.train(samples_train, labels_train) vis, knearestError = evaluate_model(model, shoes_test, samples_test, labels_test) cv2.imwrite('out/KNearest_test_' + str(SZ) + '.jpg', vis)
ri = i/10 ci = i%10 if ci != 9 and ri!=9: src = bm[ri:ri+2, ci:ci+2 , :].reshape((4,2)) dst = np.array( [ [ci*50,ri*50],[(ci+1)*50-1,ri*50],[ci*50,(ri+1)*50-1],[(ci+1)*50-1,(ri+1)*50-1] ], np.float32) retval = cv2.getPerspectiveTransform(src,dst) warp = cv2.warpPerspective(res2,retval,(450,450)) output[ri*50:(ri+1)*50-1 , ci*50:(ci+1)*50-1] = warp[ri*50:(ri+1)*50-1 , ci*50:(ci+1)*50-1].copy() output = cv2.cvtColor(output,cv2.COLOR_BGR2GRAY) output = cv2.GaussianBlur(output,(5,5),0) output = cv2.adaptiveThreshold(output,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,3,2) t = time.clock()-start imglist = [] print '(%.2f seconds)\n' % t for i in range(0,450,50): for j in range(0,450,50): #cv2.imshow('cell', output[i+2:i+48, j+2:j+48]) temp = output[i+2:i+48, j+2:j+48] temp = cv2.resize(temp,(20,20), interpolation = cv2.INTER_CUBIC) imglist.append(temp) #cv2.waitKey(0) from common import mosaic cv2.imwrite('final.png', mosaic(9, imglist)) cv2.imshow('final', mosaic(9, imglist)) cv2.waitKey(0) cv2.imwrite('output.png', output) cv2.imshow('img', output) cv2.waitKey(0) cv2.destroyAllWindows()
#!/usr/bin/python3 import cv2 import sys from common import mosaic, KNearest, SVM, OCR from pregrandbux import Grandbux if __name__ == "__main__": # model = KNearest(k=4) model = SVM(C=2.67, gamma=5.383) ABC = "abcdefghijklmnopqrstuvwxyz" ocr = OCR(ABC, model) do_load = len(sys.argv) > 1 if do_load: # ocr.train('out-min', 'grandbux_svm.dat', 1.0) ocr.load("grandbux_svm.dat") samples = ocr.preprocess_hog(Grandbux(sys.argv[1]).segments(20)) print("SOLVE: {}".format("".join(ocr.labels(ocr.predict(samples))))) else: print("training SVM...") ocr.train("out-min", "grandbux_svm.dat") cv2.imshow("SVM", mosaic(25, ocr.digits)) cv2.waitKey(0)
labels_train_unrolled = unroll_responses(labels_train, CLASS_N) model.train(digits_train, labels_train_unrolled, None, params=params) model.save('dig_nn.dat') model.load('dig_nn.dat') def evaluate(model, samples, labels): '''Evaluates classifier preformance on a given labeled samples set.''' ret, resp = model.predict(samples) resp = resp.argmax(-1) error_mask = (resp == labels) accuracy = error_mask.mean() return accuracy, error_mask # evaluate model train_accuracy, _ = evaluate(model, digits_train, labels_train) print 'train accuracy: ', train_accuracy test_accuracy, test_error_mask = evaluate(model, digits_test, labels_test) print 'test accuracy: ', test_accuracy # visualize test results vis = [] for img, flag in zip(digits_test, test_error_mask): img = np.uint8(img).reshape(SZ, SZ) img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR) if not flag: img[...,:2] = 0 vis.append(img) vis = mosaic(25, vis) cv2.imshow('test', vis) cv2.waitKey()