Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: utf-8 -*-
- """
- Created on Fri Mar 15 18:19:51 2019
- @author: Luke
- """
- from PIL import Image, ImageDraw
- import glob
- import math
- import numpy as np
- import csv
- import ast
- import os
- import time
- from optparse import OptionParser
- #from patchify import patchify
- def read_csv(url,scale):
- global frame_dict
- frame_dict = {}
- with open(url, mode='r') as csv_file:
- csv_reader = csv.DictReader(csv_file)
- line_count = 0
- for row in csv_reader:
- if row["Name"] not in frame_dict:
- frame_dict[row["Name"]] = []
- if line_count == 0:
- line_count += 1
- continue
- for key in row.items():
- if key[0] != "Name" and key[0] != "URL":
- if key[1:][0] is None:
- #print("None!")
- continue
- if type(key[1:][0]) == list:
- #print("ACTIVATING")
- #frame_dict[row["Name"]] +=
- coords = [ast.literal_eval(item) for item in key[1:][0]] #generate UL, UR, LL, LR coordinates
- frame_dict[row["Name"]] += [convert_data_coords(coord,scale) for coord in coords]
- else:
- #print("ACTIVATING 2")
- coords = [ast.literal_eval(item) for item in key[1:]]
- frame_dict[row["Name"]] += [convert_data_coords(coord,scale) for coord in coords]
- #print("\n")
- return frame_dict
- def convert_data_coords(coord,scale): #assume we took in a valid coord list
- coordinate = []
- coordinate.append([int(coord[0]/scale),int(coord[1]/scale)])
- coordinate.append([int((coord[0]+coord[3])/scale),int(coord[1]/scale)])
- coordinate.append([int(coord[0]/scale),int((coord[1]+coord[2])/scale)])
- coordinate.append([int((coord[0]+coord[3])/scale),int((coord[1]+coord[2])/scale)])
- return coordinate #returns (upper left, upper right, lower left, lower right)
- def convert_back(coords):
- new_coords = []
- for coord in coords:
- print(coord)
- x0 = coord[0][0]
- y0 = coord[0][1]
- print(coord)
- print(coord[2][1])
- print(coord[0][1])
- w = coord[1][0] - coord[0][0]
- h = coord[2][1] - coord[0][1]
- new_coords.append([x0,y0,h,w])
- return new_coords
- def resize(image, scale):
- width, height = image.size
- new_width = int(width / scale)
- new_height = int(new_width * height / width)
- new_height = int(height / scale)
- new_width = int(new_height * width / height)
- image = image.resize((new_width, new_height), Image.ANTIALIAS)
- return image
- def load_images(url, scale=2):
- image_list = []
- for filename in glob.glob(url):
- name = os.path.basename(filename)
- im=Image.open(filename)
- #print(im)
- im = resize(im, scale)
- print("name:", name)
- draw_rect(im, name)
- image_list.append((name,im))
- im.show()
- #raise ValueError("break!")
- return image_list
- def draw_rect(image, name):
- draw = ImageDraw.Draw(image)
- print("frame_dict")
- print(frame_dict)
- print(name)
- for box in frame_dict[name]: #all bounding boxes for this image4
- upper_left = box[0]
- upper_right = box[1]
- lower_left = box[2]
- lower_right = box[3]
- draw.ellipse((upper_left[0]-4,upper_left[1]-4,upper_left[0]+4,upper_left[1]+4), fill='red') #UPPER LEFT
- draw.ellipse((upper_right[0]-4,upper_right[1]-4,upper_right[0]+4,upper_right[1]+4), fill='orange') #UPPER RIGHT
- draw.ellipse((lower_left[0]-4,lower_left[1]-4,lower_left[0]+4,lower_left[1]+4), fill='yellow') #LOWER LEFT
- draw.ellipse((lower_right[0]-4,lower_right[1]-4,lower_right[0]+4,lower_right[1]+4), fill='green') #LOWER RIGHT
- draw.point(lower_left, 'yellow')
- draw.point(lower_right, 'green')
- print(upper_left[0],upper_left[1],lower_right[0],lower_right[1])
- draw.rectangle((upper_left[0],upper_left[1],lower_right[0],lower_right[1]))
- #image.show()
- def crop(image, name, height, width):
- #all assuming imgheigh > height <- fix
- #iterate for each image
- patch_list = []
- imgwidth, imgheight = image.size
- print(imgwidth)
- #vertical-wise
- num_vert_boxes = math.ceil(imgheight/height)
- vertical_offset = (num_vert_boxes * height - imgheight)/num_vert_boxes + 1
- #horizontal-wise
- num_horiz_boxes = math.ceil(imgwidth/width)
- horizontal_offset = int((num_horiz_boxes * width - imgwidth)/num_horiz_boxes + 1)
- horizontal_offset += int((1/3)*horizontal_offset + (2/3)*((2*num_horiz_boxes)**2)) #not sure why I had to hack it by adding that extra term. Will investigate later
- #horizontal_offset += int((1/3)*horizontal_offset)
- previous_right = None
- previous_top = None
- cropped_images_with_names = []
- vert = 0
- for i in range(num_vert_boxes):
- if previous_top is None:
- bottom = 0
- else:
- bottom = previous_top - vertical_offset
- top = bottom + height
- #HORIZONTAL scan (left to right)
- previous_right = None
- horiz=0
- vert += 1
- for j in range(num_horiz_boxes):
- if previous_right is None:
- left = 0
- else:
- left = previous_right - horizontal_offset
- right = left + width
- horiz += 1
- boundary = (left,top,right,bottom)
- #draw_patch_border(image,left,top,right,bottom)
- patch_list.append((left,top,right,bottom))
- print((left,top,right,bottom))
- draw_patch_border(image,left,top,right,bottom)
- previous_right = right
- patch_name = name[:-4] + "_H" + str(horiz) + "_V" + str(vert)
- cropped = image.crop((left,bottom,right,top))
- cropped_images_with_names.append((patch_name,cropped,boundary))
- previous_top = top
- #print(len(cropped_images))
- print("CROPPED IMAGES:", cropped_images_with_names)
- print("\n", image)
- image.show()
- #for image in cropped_images_with_names:
- #image[1].show()
- # print(image[1].size)
- #image.show()
- print("FINAL OUTPUT")
- return cropped_images_with_names
- def draw_patch_border(image, left,top,right,bottom):
- draw = ImageDraw.Draw(image)
- print(left,top,right,bottom)
- draw.rectangle((left,top,right,bottom), outline=tuple(np.random.choice(range(256), size=3)))
- def check_if_in(cropped_image, patch_boundary, frame_name, coord_list): #patch_boundary = (left, bottom, right, top)
- #coord_list = frame_dict[frame_name] #coord = (upper_left, upper_right, lower_left, lower_right)
- left, bottom, right, top = patch_boundary[0], patch_boundary[1], patch_boundary[2], patch_boundary[3]
- coord_output = []
- for coord in coord_list:
- upper_left = coord[0] #in [][]
- upper_right = coord[1]
- lower_left = coord[2]
- lower_right = coord[3]
- labeled_coords = [upper_left, upper_right, lower_left, lower_right]
- print("COORD:", coord)
- #generate corners_inside:
- corners_inside = []
- for elem in labeled_coords:
- if corner_in(patch_boundary, elem):
- corners_inside.append(elem)
- #upper left and lower right corner in patch - whole thing is in
- if corner_in(patch_boundary, upper_left) and corner_in(patch_boundary, lower_right):
- print("WE GOT IT")
- new_upper_left = [upper_left[0] - left, upper_left[1] - top]
- new_upper_right = [upper_right[0] - left, upper_right[1] - top]
- new_lower_left = [lower_left[0] - left, lower_left[1] - top]
- new_lower_right = [lower_right[0] - left, lower_right[1] - top]
- #do nothing. it's all in here
- #do clip to get the others
- coord_output.append( [new_upper_left, new_upper_right, new_lower_left, new_lower_right] )
- #return final coord
- elif len(corners_inside) == 3:
- print("WEIRD CASE!")
- print("\n\nATTEMPTING ADVANCED CLIPPING")
- #new_lower_left = [lower_left[0] - left, lower_left[1] - top]
- self_coord = lower_left
- self_x = self_coord[0]
- self_y = self_coord[1]
- output_scaled = []
- draw = ImageDraw.Draw(cropped_image)
- color_choice = ['pink', 'purple', 'white', 'blue']
- print("Labeled coords:", labeled_coords)
- for elem in labeled_coords:
- x = elem[0]
- y = elem[1]
- print("choice:", elem)
- el_x = np.clip(elem[0], left, right)
- el_y = np.clip(elem[1], top, bottom)
- print("el_x", el_x)
- print("el_y", el_y)
- new_elem = [el_x - left, el_y - top]
- output_scaled.append(new_elem)
- draw.ellipse((new_elem[0]-4,new_elem[1]-4,new_elem[0]+4,new_elem[1]+4), fill=color_choice[output_scaled.index(new_elem)])
- draw.rectangle((output_scaled[0][0]-1,output_scaled[0][1]-1,output_scaled[3][0]-1,output_scaled[3][1]-1), outline=tuple(np.random.choice(range(256), size=3)))
- output_coord = ([output_scaled[0],output_scaled[1],output_scaled[2],output_scaled[3]])
- #generate area
- ul = output_coord[0]
- ur = output_coord[1]
- ll = output_coord[2]
- width = ur[0] - ul[0]
- height = ll[1] - ul[1]
- area = width * height
- print("OUTPUT")
- print("original box:", coord)
- print("scaled (unsorted):", output_scaled)
- if area != 0:
- #do nothing
- cropped_image.show()
- coord_output.append(output_coord)
- #raise ValueError("Emptiness case!")
- else:
- print("area is zero! moving on.")
- elif len(corners_inside) == 0:
- print("\n\nATTEMPTING ADVANCED CLIPPING")
- #new_lower_left = [lower_left[0] - left, lower_left[1] - top]
- self_coord = lower_left
- self_x = self_coord[0]
- self_y = self_coord[1]
- output_scaled = []
- draw = ImageDraw.Draw(cropped_image)
- color_choice = ['pink', 'purple', 'white', 'blue']
- print("Labeled coords:", labeled_coords)
- for elem in labeled_coords:
- x = elem[0]
- y = elem[1]
- print("choice:", elem)
- el_x = np.clip(elem[0], left, right)
- el_y = np.clip(elem[1], top, bottom)
- print("el_x", el_x)
- print("el_y", el_y)
- new_elem = [el_x - left, el_y - top]
- output_scaled.append(new_elem)
- draw.ellipse((new_elem[0]-4,new_elem[1]-4,new_elem[0]+4,new_elem[1]+4), fill=color_choice[output_scaled.index(new_elem)])
- draw.rectangle((output_scaled[0][0]-1,output_scaled[0][1]-1,output_scaled[3][0]-1,output_scaled[3][1]-1), outline=tuple(np.random.choice(range(256), size=3)))
- output_coord = ([output_scaled[0],output_scaled[1],output_scaled[2],output_scaled[3]])
- #generate area
- ul = output_coord[0]
- ur = output_coord[1]
- ll = output_coord[2]
- width = ur[0] - ul[0]
- height = ll[1] - ul[1]
- area = width * height
- print("OUTPUT")
- print("original box:", coord)
- print("scaled (unsorted):", output_scaled)
- if area != 0:
- #do nothing
- cropped_image.show()
- coord_output.append(output_coord)
- #raise ValueError("Emptiness case!")
- else:
- print("area is zero! moving on.")
- elif len(corners_inside) == 1:
- print("\n\nATTEMPTING ADVANCED CLIPPING")
- #new_lower_left = [lower_left[0] - left, lower_left[1] - top]
- self_coord = lower_left
- self_x = self_coord[0]
- self_y = self_coord[1]
- output_scaled = []
- draw = ImageDraw.Draw(cropped_image)
- color_choice = ['pink', 'purple', 'white', 'blue']
- print("Labeled coords:", labeled_coords)
- for elem in labeled_coords:
- x = elem[0]
- y = elem[1]
- print("choice:", elem)
- el_x = np.clip(elem[0], left, right)
- el_y = np.clip(elem[1], top, bottom)
- print("el_x", el_x)
- print("el_y", el_y)
- new_elem = [el_x - left, el_y - top]
- output_scaled.append(new_elem)
- draw.ellipse((new_elem[0]-4,new_elem[1]-4,new_elem[0]+4,new_elem[1]+4), fill=color_choice[output_scaled.index(new_elem)])
- draw.rectangle((output_scaled[0][0]-1,output_scaled[0][1]-1,output_scaled[3][0]-1,output_scaled[3][1]-1), outline=tuple(np.random.choice(range(256), size=3)))
- output_coord = ([output_scaled[0],output_scaled[1],output_scaled[2],output_scaled[3]])
- print("OUTPUT")
- print("original box:", coord)
- print("scaled (unsorted):", output_scaled)
- cropped_image.show()
- coord_output.append(output_coord)
- #raise ValueError("One corner only case!")
- elif corner_in(patch_boundary, upper_right) and corner_in(patch_boundary, lower_right):
- #case 4 - perform clip
- print("\n\nATTEMPTING CLIPPING")
- new_upper_right = [upper_right[0] - left, upper_right[1] - top]
- new_lower_right = [lower_right[0] - left, lower_right[1] - top]
- print(new_upper_right)
- print(new_lower_right)
- #draw circles where it's happening
- draw = ImageDraw.Draw(cropped_image)
- draw.ellipse((new_upper_right[0]-4,new_upper_right[1]-4,new_upper_right[0]+4,new_upper_right[1]+4), fill='white') #UPPER LEFT
- draw.ellipse((new_lower_right[0]-4,new_lower_right[1]-4,new_lower_right[0]+4,new_lower_right[1]+4), fill='white') #UPPER RIGHT
- #draw.ellipse(new_upper_left)
- #print("BOTTOM", bottom)
- #print("TOP", top)
- #print("original ll_y:", lower_left[1])
- new_ul_x = np.clip(upper_left[0], left, right) #will need to change
- print("new_ur_x", new_ul_x)
- new_upper_left = [new_ul_x,upper_left[1]]
- new_ll_x = np.clip(lower_left[0], left, right) #will need to change
- print("new_ll_x", new_ll_x)
- new_lower_left = [new_ll_x,lower_left[1]]
- new_upper_left = [new_upper_left[0] - left, upper_left[1] - top] #not working!!!
- new_lower_left = [new_lower_left[0] - left, lower_left[1] - top]
- #draw X over new things
- #draw.text(tuple(new_lower_left), "X", fill="white")
- #draw.text(tuple(new_lower_right), "X", fill="white")
- draw.ellipse((new_upper_left[0]-4,new_upper_left[1]-4,new_upper_left[0]+4,new_upper_left[1]+4), fill='red') #CLIPPED OFF UPPER RIGHT
- draw.ellipse((new_lower_left[0]-4,new_lower_left[1]-4,new_lower_left[0]+4,new_lower_left[1]+4), fill='blue') #CLIPPED OFF LOWER RIGHT
- print("OUTPUT")
- print("original box:", coord)
- print("clipped box:", (new_upper_left, new_upper_right, new_lower_left, new_lower_right))
- draw.rectangle((new_upper_left[0],new_upper_left[1],new_lower_right[0],new_lower_right[1]-2), outline=tuple(np.random.choice(range(256), size=3)))
- cropped_image.show()
- coord_output.append( [new_upper_left, new_upper_right, new_lower_left, new_lower_right] )
- #if frame_name ==
- print("UR and LR case!")
- elif corner_in(patch_boundary, lower_left) and corner_in(patch_boundary, lower_right):
- #case 4 - perform clip
- print("\n\nATTEMPTING CLIPPING")
- new_lower_left = [lower_left[0] - left, lower_left[1] - top]
- new_lower_right= [lower_right[0] - left, lower_right[1] - top]
- print(new_lower_left)
- print(new_lower_right)
- #draw circles where it's happening
- draw = ImageDraw.Draw(cropped_image)
- draw.ellipse((new_lower_left[0]-4,new_lower_left[1]-4,new_lower_left[0]+4,new_lower_left[1]+4), fill='purple') #UPPER LEFT
- draw.ellipse((new_lower_right[0]-4,new_lower_right[1]-4,new_lower_right[0]+4,new_lower_right[1]+4), fill='pink') #UPPER RIGHT
- #draw.ellipse(new_upper_left)
- #print("BOTTOM", bottom)
- #print("TOP", top)
- #print("original ll_y:", lower_left[1])
- new_ul_y = np.clip(upper_left[1], top, bottom)
- print("new_ul_y", new_ul_y)
- new_upper_left = [upper_left[0],new_ul_y]
- new_ur_y = np.clip(upper_right[1], top, bottom) #remember that top < bottom
- print("new_ur_y", new_ur_y)
- new_upper_right = [upper_right[0], new_ur_y]
- print("top:", top)
- print("bottom:", bottom)
- new_upper_left = [upper_left[0] - left, new_upper_left[1] - top] #not working!!!
- new_upper_right = [upper_right[0] - left, new_upper_right[1] - top]
- #draw X over new things
- #draw.text(tuple(new_lower_left), "X", fill="white")
- #draw.text(tuple(new_lower_right), "X", fill="white")
- draw.ellipse((new_upper_left[0]-4,new_upper_left[1]-4,new_upper_left[0]+4,new_upper_left[1]+4), fill='blue') #CLIPPED OFF LOWER LEFT
- draw.ellipse((new_upper_right[0]-4,new_upper_right[1]-4,new_upper_right[0]+4,new_upper_right[1]+4), fill='blue') #CLIPPED OFF LOWER RIGHT
- draw.rectangle((new_upper_left[0],new_upper_left[1],new_lower_right[0],new_lower_right[1]-2), outline=tuple(np.random.choice(range(256), size=3)))
- print("OUTPUT")
- print("original box:", coord)
- print("clipped box:", (new_upper_left, new_upper_right, new_lower_left, new_lower_right))
- #cropped_image.show()
- coord_output.append( [new_upper_left, new_upper_right, new_lower_left, new_lower_right] )
- print("LL and LR case!")
- #raise ValueError
- elif corner_in(patch_boundary, upper_left) and corner_in(patch_boundary, upper_right):
- #case 4 - perform clip
- print("\n\nATTEMPTING CLIPPING")
- new_upper_left = [upper_left[0] - left, upper_left[1] - top]
- new_upper_right= [upper_right[0] - left, upper_right[1] - top]
- print(new_upper_left)
- print(new_upper_right)
- #draw circles where it's happening
- draw = ImageDraw.Draw(cropped_image)
- draw.ellipse((new_upper_left[0]-4,new_upper_left[1]-4,new_upper_left[0]+4,new_upper_left[1]+4), fill='purple') #UPPER LEFT
- draw.ellipse((new_upper_right[0]-4,new_upper_right[1]-4,new_upper_right[0]+4,new_upper_right[1]+4), fill='pink') #UPPER RIGHT
- #draw.ellipse(new_upper_left)
- #print("BOTTOM", bottom)
- #print("TOP", top)
- #print("original ll_y:", lower_left[1])
- new_ll_y = np.clip(lower_left[1], 0, bottom)
- #print("new_ll_y", new_ll_y)
- new_lower_left = [lower_left[0],new_ll_y]
- new_lr_y = np.clip(lower_right[1], 0, bottom)
- #print("new_lr_y", new_lr_y)
- new_lower_right = [lower_right[0], new_lr_y]
- new_lower_left = [lower_left[0] - left, new_lower_left[1] - top] #not working!!!
- new_lower_right = [lower_right[0] - left, new_lower_right[1] - top]
- #draw X over new things
- #draw.text(tuple(new_lower_left), "X", fill="white")
- #draw.text(tuple(new_lower_right), "X", fill="white")
- draw.ellipse((new_lower_left[0]-4,new_lower_left[1]-4,new_lower_left[0]+4,new_lower_left[1]+4), fill='blue') #CLIPPED OFF LOWER LEFT
- draw.ellipse((new_lower_right[0]-4,new_lower_right[1]-4,new_lower_right[0]+4,new_lower_right[1]+4), fill='blue') #CLIPPED OFF LOWER RIGHT
- draw.rectangle((new_upper_left[0],new_upper_left[1],new_lower_right[0],new_lower_right[1]-2), outline=tuple(np.random.choice(range(256), size=3)))
- #cropped_image.show()
- coord_output.append( [new_upper_left, new_upper_right, new_lower_left, new_lower_right] )
- print("UL and UR case!")
- elif corner_in(patch_boundary, upper_left) and corner_in(patch_boundary, lower_left):
- #case 4 - perform clip
- print("\n\nATTEMPTING CLIPPING")
- new_upper_left = [upper_left[0] - left, upper_left[1] - top]
- new_lower_left = [lower_left[0] - left, lower_left[1] - top]
- print(new_upper_left)
- print(new_lower_left)
- #draw circles where it's happening
- draw = ImageDraw.Draw(cropped_image)
- draw.ellipse((new_upper_left[0]-4,new_upper_left[1]-4,new_upper_left[0]+4,new_upper_left[1]+4), fill='purple') #UPPER LEFT
- draw.ellipse((new_lower_left[0]-4,new_lower_left[1]-4,new_lower_left[0]+4,new_lower_left[1]+4), fill='pink') #UPPER RIGHT
- #draw.ellipse(new_upper_left)
- #print("BOTTOM", bottom)
- #print("TOP", top)
- #print("original ll_y:", lower_left[1])
- new_ur_x = np.clip(upper_right[0], 0, right)
- print("new_ur_x", new_ur_x)
- new_upper_right = [new_ur_x,upper_right[1]]
- new_lr_x = np.clip(lower_right[0], 0, right)
- print("new_lr_x", new_lr_x)
- new_lower_right = [new_lr_x,lower_right[1]]
- new_upper_right = [new_upper_right[0] - left, upper_right[1] - top] #not working!!!
- new_lower_right = [new_lower_right[0] - left, lower_right[1] - top]
- #draw X over new things
- #draw.text(tuple(new_lower_left), "X", fill="white")
- #draw.text(tuple(new_lower_right), "X", fill="white")
- draw.ellipse((new_upper_right[0]-4,new_upper_right[1]-4,new_upper_right[0]+4,new_upper_right[1]+4), fill='red') #CLIPPED OFF UPPER RIGHT
- draw.ellipse((new_lower_right[0]-4,new_lower_right[1]-4,new_lower_right[0]+4,new_lower_right[1]+4), fill='blue') #CLIPPED OFF LOWER RIGHT
- print("OUTPUT")
- print("original box:", coord)
- print("clipped box:", (new_upper_left, new_upper_right, new_lower_left, new_lower_right))
- draw.rectangle((new_upper_left[0],new_upper_left[1],new_lower_right[0],new_lower_right[1]-2), outline=tuple(np.random.choice(range(256), size=3)))
- #cropped_image.show()
- coord_output.append( [new_upper_left, new_upper_right, new_lower_left, new_lower_right] )
- #if frame_name ==
- #raise ValueError("UL and LL case!")
- if coord_output == []:
- return [[[0,0],[0,0],[0,0],[0,0]]]
- else:
- return coord_output
- def corner_in(patch_boundary, corner):
- left, bottom, right, top = patch_boundary[0], patch_boundary[1], patch_boundary[2], patch_boundary[3]
- print("\n")
- print("CORNER:", corner)
- print("left", left)
- print(corner[0])
- print("right", right)
- print("bottom", bottom)
- print(corner[1])
- print("top", top)
- print("\n")
- return (left <= corner[0] <= right) and (bottom >= corner[1] >= top) #ordering here might be off. fix it
- def generate_dataset(images_path,csv_path,height,width,scale,image_output_path, csv_output_path):
- print("Generating images from " + str(images_path) + " at " + str(width) + "x" + str(height))
- read_csv(csv_path,scale)
- images = []
- images = load_images(images_path, scale)
- patch_dict = {}
- print("Iterating through " + str(len(images)) + " images...")
- time.sleep(1)
- for image in images: #large process - go through each image, create patches, generate new bounding boxes, post to csv
- print("Analyzing image " + str(image))
- patches = []
- name = image[0]
- patches += crop(image[1],image[0],height,width) #generates rectangles & crops - anything else?
- print("are there any patcches???")
- print("PATCHES!", patches)
- for patch in patches:
- #check if in bounds given boundaryy
- boundary = patch[2]
- cropped_image = patch[1]
- cropped_name = patch[0]
- #output files into folder
- print("saving image...")
- print(image_output_path+cropped_name)
- cropped_image.save(image_output_path+"/"+cropped_name + ".jpg")
- print("saved!")
- #for box in frame_dict[name]:
- print(image)
- print(name)
- box_list = frame_dict[name]
- print("GETTING NEW COORDS")
- new_coords = check_if_in(cropped_image, boundary, cropped_name, box_list) #return new coords
- print(new_coords)
- if cropped_name not in patch_dict:
- patch_dict[cropped_name] = []
- if new_coords is not None:
- patch_dict[cropped_name] += new_coords
- if new_coords is None:
- continue
- #convert coords BACK TO (X,Y,H,W)
- #convert_back([new_coords]) #takes in list of coords
- #add to csv
- #patch_dict[cropped_name] = new_coords
- #convert patch_dict back into original supplied coordinate
- print("done:", patch_dict)
- for key in patch_dict:
- print("ABOUT TO CONVERT")
- print("\n", patch_dict[key])
- converted_list = convert_back(patch_dict[key])
- print("CONVERTED LIST")
- print(converted_list)
- patch_dict[key] = converted_list
- #patch_dict[key] = convert_back([patch_dict[key]])
- #print("done:", patch_dict)
- print("\nGenerated dict of all coords!")
- print(patch_dict)
- print("\n")
- print("Generating CSV....\n\n")
- gen_csv(csv_output_path, patch_dict)
- print("DONE!")
- def gen_csv(path, patch_dict):
- with open(path, 'w') as csvfile:
- print("Creating CSV")
- filewriter = csv.writer(csvfile, delimiter=',', quoting=csv.QUOTE_NONNUMERIC)
- filewriter.writerow(["Name", "URL", "X0 Y0 H0 W0"])
- print(patch_dict)
- for key in patch_dict:
- print(key)
- print([key, None] + [value for value in patch_dict[key]])
- filewriter.writerow([key, None] + [value for value in patch_dict[key]])
- print("finished making CSV!")
- #instantiate and configure parser
- parser = OptionParser()
- parser.add_option("-images_path", ')
- if __name__ == "__main__":
- images_path = "C:/Users/Luke/Documents/mitdriverless/testbed/*.jpg"
- csv_path = "C:/Users/Luke/Documents/mitdriverless/data-labels_hive-ai-round-2.csv"
- output_path = "C:/Users/Luke/Documents/mitdriverless/testbed_output/"
- csv_output = "C:/Users/Luke/Documents/mitdriverless/hive-ai-round-2_scaled.csv"
- generate_dataset(images_path, csv_path,256,800,1,output_path, csv_output)
- #read_csv("C:/Users/Luke/Documents/mitdriverless/data-labels_hive-ai-round-2.csv")
- #images = load_images("C:/Users/Luke/Documents/mitdriverless/testbed/*.jpg")
- #print("csv read")
- #draw_rect(images[0], "vid_36_frame_117.jpg")
- #print(images[0])
- #images[0].show()
- #print(images)
- #crop(images[0][1],images[0][0],200,800,1)
- #print(frame_dict)
- #test_case()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement