Advertisement
Guest User

kek3

a guest
Aug 30th, 2015
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.16 KB | None | 0 0
  1. from numpy import zeros, squeeze
  2. from skimage.morphology import disk
  3. from skimage.io import imread, imsave
  4. from skimage.exposure import adjust_log, adjust_gamma, equalize_hist
  5. from skimage.filters import denoise_bilateral, threshold_otsu, threshold_adaptive,gaussian_filter, median, rank,inverse
  6. from scipy import ndimage
  7. from math import gamma
  8. from sklearn import svm, datasets, feature_extraction
  9. from skimage.segmentation import felzenszwalb, clear_border
  10. from skimage import morphology
  11. import matplotlib
  12. import matplotlib.pyplot as plt
  13. from itertools import permutations
  14. from skimage.transform import resize
  15. from skimage import data
  16. from skimage.filters import rank
  17. from skimage.util import img_as_ubyte, img_as_float
  18. from skimage.feature import hog
  19. from os import listdir
  20.  
  21. def filtering(image):
  22.     image = denoise_bilateral(rank.autolevel(image, disk(5)))
  23.     black_white = threshold_otsu(image)
  24.     for i in range(len(image)):
  25.         for j in range(len(image[1])):
  26.             if image[i][j] >= black_white:
  27.                 image[i][j] = 1
  28.             else:
  29.                 image[i][j] = 0
  30.     return image
  31.  
  32. def generate_template(digit_dir_path):
  33.     ans=[]
  34.     for name in listdir(digit_dir_path):
  35.         img = imread(digit_dir_path + "/" + name)
  36.         img = resize(img, (25, 15))
  37.         img = img.ravel()
  38.         ans.append(img)
  39.     return ans
  40.  
  41. def recognize(image, digit_templates):
  42.     image = filtering(image)
  43.     image = image >= rank.otsu(image, disk(20))
  44.     image = image == False
  45.     image = clear_border(image)
  46.     morphology.remove_small_objects(image, min_size=60, connectivity=1, in_place=True)
  47.     marked, objects = ndimage.label(image)
  48.     founded_obj =[]
  49.     for obj in range(objects):
  50.         temp = ndimage.find_objects(marked)[obj]
  51.         founded_obj.append((marked[temp], temp))
  52.     for numb in permutations(founded_obj, 3):
  53.         calibrate_numbers = numb[0][1][1].start < numb[1][1][1].start < numb[2][1][1].start
  54.         calibrate_height = abs(len(numb[0][0]) - len(numb[1][0])) < 5 and abs(len(numb[1][0]) - len(numb[2][0])) < 5 and abs(len(numb[0][0]) - len(numb[2][0])) < 5
  55.         calibrate_width = abs(len(numb[0][0][0]) - len(numb[1][0][0])) < 5 and abs(len(numb[1][0][0]) - len(numb[2][0][0])) < 5 and abs(len(numb[0][0][0]) - len(numb[2][0][0])) < 5
  56.         if calibrate_numbers == True and calibrate_width == True and calibrate_height == True:
  57.             numbers = numb
  58.             break
  59.     image = img_as_ubyte(image)
  60.     dataset = []
  61.  
  62.     for i in range(0, 10):
  63.         for number in digit_templates:
  64.             dataset.append([i, number])
  65.  
  66.     goal = [array[0] for array in dataset]
  67.     attemt = [array[1] for array in dataset]
  68.  
  69.     kek = svm.SVC(kernel = "poly", degree = 2)
  70.     kek.fit(attemt, goal)
  71.     try:
  72.         one = img_as_ubyte(numbers[0][0] == 0)
  73.         two = img_as_ubyte(numbers[1][0] == 0)
  74.         three = img_as_ubyte(numbers[2][0] == 0)
  75.     except:
  76.         return -1
  77.     predict1 = kek.predict(resize(one, (25,15)).ravel())[0]
  78.     predict2 = kek.predict(resize(two, (25,15)).ravel())[0]
  79.     predict3 = kek.predict(resize(three, (25,15)).ravel())[0]
  80.     return predict1, predict2, predict3
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement