コード例 #1
0
    def __init__(self, path, show_steps=False, save=False):
        self.image = Helpers.load_image(path)

        # build the prepocessing pipleine
        pipeline = Pipeline([
            Helpers.convert_to_grayscale, lambda image: Helpers.blur(image, 5),
            Helpers.thresholdify, Helpers.ellipse_morph
        ])

        processed_image = pipeline.process_pipeline(self.image)

        # get the contour, crop it out, find the corners and straighten
        contour = Helpers.largest_contour(processed_image)
        processed_image_cropped = Helpers.cut_out_rect(processed_image,
                                                       contour)
        corners = Helpers.get_corners(processed_image_cropped)

        # apply the same cropping and warping to the original image
        image_cropped = Helpers.cut_out_rect(self.image, contour)
        straigtened_image = Helpers.warp_perspective(corners, image_cropped)

        if show_steps:
            Helpers.show(processed_image, 'Preprocessing')
            Helpers.show(processed_image_cropped, 'Processed image cropped')
            Helpers.show(image_cropped, 'Original image cropped')
            Helpers.show(straigtened_image, 'Final image')

        self.final = straigtened_image

        if save:
            Helpers.save_image(
                f'{Helpers.IMAGE_DIRECTORY}/extractor_finish.png', self.final)

        return None
コード例 #2
0
def move(dy, dx, beliefs, blurring):
    height = len(beliefs)
    width = len(beliefs[0])
    #     print("height", height)
    #     print("width", width)
    #     print("d x", dx)
    #     print("d y", dy)
    #     print(beliefs)
    #     print("blu rring", blurring)
    new_G = [[0.0 for i in range(width)] for j in range(height)]
    for i, row in enumerate(beliefs):
        for j, cell in enumerate(row):
            #             print("i", i)
            #             print("j", j)

            if (i + dy) >= 0 and (i + dy) < height:
                new_i = (i + dy) % width
            else:
                new_i = ((i + dy) % width) - width

            if (j + dx) >= 0 and (i + dy) < width:
                new_j = (j + dx) % height
            else:
                new_j = ((j + dx) % height) - height
#             print("new_i", new_i)
#             print("new_j", new_j)
# pdb.set_trace()
            new_G[int(new_i)][int(new_j)] = cell
    return blur(new_G, blurring)
コード例 #3
0
    def get_student_responses(self):
        student_responses = {}
        for num, cell in enumerate(self.cells):
            # clean the cell
            gray = Helpers.convert_to_grayscale(cell)
            thresh = self.cell_pipeline.process_pipeline(cell)

            corners = self.find_corners_inside_largest_contour(thresh, gray)

            warp = Helpers.warp_perspective(corners,
                                            gray,
                                            size="same",
                                            verbose=False)
            #Helpers.show(warp, "clean cell")

            # find the contour of the text
            warp = Helpers.dilate(warp, 1)
            blur = Helpers.blur(warp, 3)

            thresh = cv2.threshold(blur, 0, 255,
                                   cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]

            contours = Helpers.find_contours(255 - thresh,
                                             mode_type="external",
                                             min_area=20)

            contours = Helpers.sort_contours(contours, method="left-to_right")

            rects = []
            for contour in contours:
                rect = Helpers.cut_out_rect(warp, contour)
                rects.append(rect)
            student_responses[num] = rects
        return student_responses
コード例 #4
0
ファイル: localization_v2.py プロジェクト: AndyAtUdacity/ISDC
 def move(self, dy, dx ):
     new_beliefs = [[0.0 for i in range(self.width)] for j in range(self.height)]
     for i in range(self.height):
         for j in range(self.width):
             previous_belief = self.beliefs[i][j]
             new_i = (i + dy) % self.height
             new_j = (j + dx) % self.width
             new_beliefs[int(new_i)][int(new_j)] = previous_belief
     self.beliefs = blur(new_beliefs)
コード例 #5
0
def move(dy, dx, beliefs, blurring):
    height = len(beliefs)
    width = len(beliefs[0])
    new_G = [[0.0 for i in range(width)] for j in range(height)]
    for i, row in enumerate(beliefs):
        for j, cell in enumerate(row):
            new_i = (i + dy) % height
            new_j = (j + dx) % width
            new_G[int(new_i)][int(new_j)] = cell
    return blur(new_G, blurring)
def move(dy, dx, beliefs, blurring):
    height = len(beliefs)
    width = len(beliefs[0])
    new_G = [[0.0 for i in range(width)] for j in range(height)]
    for i in range(height):
        for j in range(width):
            new_i = (i + dy) % height
            new_j = (j + dx) % width
            # pdb.set_trace()
            new_G[int(new_i)][int(new_j)] = beliefs[i][j]
    return blur(new_G, blurring)
コード例 #7
0
def move(dy, dx, beliefs, blurring):
    height = len(beliefs)
    width = len(beliefs[0])
    new_G = [[0.0 for i in range(width)] for j in range(height)]
    for i, row in enumerate(beliefs):
        for j, cell in enumerate(row):
            # debugging info : the "height" and "width" in the modulo part was interchanged.
            new_i = (i + dy) % height
            new_j = (j + dx) % width
            new_G[int(new_i)][int(new_j)] = cell
    return blur(new_G, blurring)
def move(dy, dx, beliefs, blurring):
    height = len(beliefs)   #rows
    width = len(beliefs[0])   #cols
    new_G = [[0.0 for j in range(width)] for i in range(height)]
    
    for i, row in enumerate(beliefs):    #row
        for j, cell in enumerate(row):    #col
            new_i = (i + dx) % height
            new_j = (j + dy) % width
            #pdb.set_trace()
            new_G[int(new_i)][int(new_j)] = cell
            
    return blur(new_G, blurring)
コード例 #9
0
ファイル: localizer.py プロジェクト: MuhammadAlBarham/Udacity
def move(dy, dx, beliefs, blurring):
    height = len(beliefs)
    width = len(beliefs[0])
    new_G = [[0.0 for i in range(width)] for j in range(height)]
    for i, row in enumerate(beliefs):
        for j, cell in enumerate(row):
            
            # There was error in the height and wisth positions in new_i  & new_j; sol : change them interchangably 
            new_i = (i + dy ) % height
            new_j = (j + dx ) % width
            # pdb.set_trace()
            new_G[int(new_i)][int(new_j)] = cell
    return blur(new_G, blurring)
コード例 #10
0
ファイル: localizer.py プロジェクト: ramanpreet9/CVND_udacity
def move(dy, dx, beliefs, blurring):
    height = len(beliefs)
    width = len(beliefs[0])
    new_G = [[0.0 for i in range(width)] for j in range(height)]
    for i, row in enumerate(beliefs):
        # i corresponds to height
        for j, cell in enumerate(row):
            # j corresponds to width
            new_i = (i + dy ) % height
            new_j = (j + dx ) % width #height
            # pdb.set_trace()
            new_G[int(new_i)][int(new_j)] = cell
    return blur(new_G, blurring)
コード例 #11
0
def move(dy, dx, beliefs, blurring):
    height = len(beliefs)
    width = len(beliefs[0])
    new_G = [[0.0 for i in range(width)] for j in range(height)]
    #     print("new_G",(len(new_G),len(new_G[0])),(dy,dx))
    for i, row in enumerate(beliefs):
        for j, cell in enumerate(row):
            new_i = (i + dy) % (height)
            new_j = (j + dx) % (width)
            #             pdb.set_trace()
            #             print(new_i,new_j)
            new_G[int(new_i)][int(new_j)] = cell
    return blur(new_G, blurring)
コード例 #12
0
def move(dy, dx, beliefs, blurring):
    height = len(beliefs)
    width = len(beliefs[0])
    new_G = [[0.0 for i in range(width)]
             for j in range(height)]  #np.zeros((width, height)) #
    for y, row in enumerate(beliefs):
        for x, cell in enumerate(row):
            new_y = (y + dy) % height
            new_x = (x + dx) % width
            #print("y:", y, "x:", x, '\n')
            #print("new y:", new_y, "new x:", new_x, '\n')
            #pdb.set_trace()
            new_G[int(new_y)][int(new_x)] = cell
    return blur(new_G, blurring)
コード例 #13
0
ファイル: localizer.py プロジェクト: vinayadiga/SDC
def move(dy, dx, beliefs, blurring):
    height = len(beliefs)
    width = len(beliefs[0])
    #new_G = [[0.0 for i in range(height)] for j in range(width)]
    new_G = [None] * height
    for i in range(height):
        new_G[i] = [None] * width
    for i, row in enumerate(beliefs):
        for j, cell in enumerate(row):
            new_i = (i + dy) % (height)
            new_j = (j + dx) % (width)
            # pdb.set_trace()
            new_G[int(new_i)][int(new_j)] = cell
    return blur(new_G, blurring)
def move(dy, dx, beliefs, blurring):
    height = len(beliefs)
    width = len(beliefs[0])
    new_G = [[0.0 for i in range(width)] for j in range(height)]
    for i, row in enumerate(beliefs):
        new_i = (i + dy) % height

        for j, cell in enumerate(row):
            new_j = (j + dx) % width
            #debugger, pasue code, and read temp value
            #pdb.set_trace()

            new_G[int(new_i)][int(new_j)] = cell
    return blur(new_G, blurring)
コード例 #15
0
def captureHistogram(source=None):
    source = 0 if source is None else source
    if source is not None and str(type(source)) != "<class 'int'>":
        raise ValueError("source: integer value expected")
    cap = cv2.VideoCapture(source)

    boxSize = 100
    centerX = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH) / 2)
    centerY = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT) / 3)
    padding = boxSize + 10
    while True:
        _, frame = cap.read()
        frame = cv2.flip(frame, 1)

        box1 = (centerY + padding * 0, centerX + padding * 0, boxSize, boxSize)
        box2 = (centerY + padding * 0, centerX + padding * 1, boxSize, boxSize)
        box3 = (centerY + padding * 1, centerX + padding * 0, boxSize, boxSize)
        box4 = (centerY + padding * 1, centerX + padding * 1, boxSize, boxSize)
        box5 = (centerY + padding * 2, centerX + padding * 0, boxSize, boxSize)
        box6 = (centerY + padding * 2, centerX + padding * 1, boxSize, boxSize)

        helpers.drawBoxes(frame, helpers.PURPLE, [box1, box2, box3, box4])

        boxOne = helpers.crop(frame, box1)
        boxTwo = helpers.crop(frame, box2)
        boxThree = helpers.crop(frame, box3)
        boxFour = helpers.crop(frame, box4)

        boxFourBlurred = helpers.blur(boxFour, 15)

        helpers.copyTo(frame, box5, boxFour)
        helpers.copyTo(frame, box6, boxFourBlurred)

        cv2.imshow("Video Feed", frame)
        key = cv2.waitKey(10)
        if key == 97:
            objectColor = finalHistImage
            cv2.destroyAllWindows()
            break
        if key == 27:
            cv2.destroyAllWindows()
            cap.release()
            exit()

    hsvObjectColor = cv2.cvtColor(objectColor, cv2.COLOR_BGR2HSV)
    objectHist = cv2.calcHist([hsvObjectColor], [0, 1], None, [12, 15],
                              [0, 180, 0, 256])
    cv2.normalize(objectHist, objectHist, 0, 255, cv2.NORM_MINMAX)
    return objectHist
コード例 #16
0
def move(dy, dx, beliefs, blurring):
    height = len(beliefs)
    width = len(beliefs[0])
    new_G = [[0.0 for i in range(width)] for j in range(height)]
    for i, row in enumerate(beliefs):
        for j, cell in enumerate(row):
            new_i = (i + dy) % width
            new_j = (j + dx) % height
            #pdb.set_trace()
            if new_i >= height:
                new_i = new_i - height
            if new_j >= width:
                new_j = new_j - width
            new_G[int(new_i)][int(new_j)] = cell
    return blur(new_G, blurring)
コード例 #17
0
    def process_image(self):
        '''
        Process the image by thresholding and other techniques to make the cells easy to extract.

        Return value
        ----------
        returns a black and white version of the image
        '''
        # build the prepocessing pipleine
        pipeline = Pipeline([
            Helpers.convert_to_grayscale, lambda image: Helpers.blur(image, 5),
            Helpers.thresholdify, Helpers.ellipse_morph
        ])

        return pipeline.process_pipeline(self.image)
コード例 #18
0
def move(dy, dx, beliefs, blurring):
    height = len(beliefs)
    width = len(beliefs[0])
    new_G = [[0.0 for i in range(width)] for j in range(height)]
    #print new_G[0][3]
    #print new_G
    for i, row in enumerate(beliefs):
        for j, cell in enumerate(row):
            new_i = (
                i + dy
            ) % height  #fix - previousltheight and width were interchanged
            new_j = (j + dx) % width
            #pdb.set_trace()
            new_G[int(new_i)][int(new_j)] = cell
    return blur(new_G, blurring)
コード例 #19
0
def move(dy, dx, beliefs, blurring):
    height = len(beliefs)
    width = len(beliefs[0])
    new_G = [[0.0 for i in range(width)] for j in range(height)]
    for i, row in enumerate(beliefs):
        for j, cell in enumerate(row):
            new_i = (
                i + dy
            ) % height  # the problem was here. It was being modulo'ed with width instead of height
            new_j = (
                j + dx
            ) % width  # the problem was here. It was being modulo'ed with height instead of width
            # pdb.set_trace()
            new_G[int(new_i)][int(new_j)] = cell
    return blur(new_G, blurring)
コード例 #20
0
ファイル: localizer.py プロジェクト: PGCodehub/SLAM
def move(dy, dx, beliefs, blurring):
    height = len(beliefs)
    width = len(beliefs[0])
    new_G = [[0.0 for i in range(width)] for j in range(height)]

    heighti = len(new_G)
    widthi = len(new_G[0])

    for i, row in enumerate(beliefs):
        for j, cell in enumerate(row):
            new_i = (i - dy ) % height
            new_j = (j - dx ) % width
            #pdb.set_trace()
            new_G[int(new_i)][int(new_j)] = cell
    return blur(new_G, blurring)
コード例 #21
0
def move(dy, dx, beliefs, blurring):
    height = len(beliefs)
    width = len(beliefs[0])
    #print('height', height)
    #print('width', width)
    new_G = [[0.0 for i in range(width)] for j in range(height)]
    #print('new_G', new_G)
    for i, row in enumerate(beliefs):
        new_i = 0
        for j, cell in enumerate(row):
            new_i = (i + dy) % height
            new_j = (j + dx) % width
            #pdb.set_trace()
            #print('new_i', new_i, 'new_j', new_j, 'dy', dy, 'dx', dx)
            new_G[int(new_i)][int(new_j)] = beliefs[i][j]
    return blur(new_G, blurring)
コード例 #22
0
def move(dy, dx, beliefs, blurring):
    #get the world size
    height = len(beliefs)
    width = len(beliefs[0])
    #creat a new belife grid
    new_G = [[0.0 for i in range(width)] for j in range(height)]
    #go through the original belief
    for i, row in enumerate(beliefs):
        for j, cell in enumerate(row):
            #calculate new position
            new_i = (i + dy) % height
            new_j = (j + dx) % width
            #pdb.set_trace()
            #update beliefs
            new_G[int(new_i)][int(new_j)] = cell
    #movement uncertainty
    return blur(new_G, blurring)
コード例 #23
0
ファイル: test.py プロジェクト: adriancarriger/experiments
from helpers import blur

new_G = [[0 for i in range(3)] for j in range(3)]
new_G[1][1] = 1
print(blur(new_G, 0.12))