| | |
| | |
| | """ |
| | Created on Tue Oct 19 19:14:47 2021 |
| | |
| | @author: dinesh |
| | """ |
| | import glob |
| | from .utils import bb_intersection_over_union_unoccluded |
| | import numpy as np |
| | from PIL import Image |
| | import datetime |
| | import cv2 |
| | import os |
| | from tqdm import tqdm |
| |
|
| |
|
| | def get_image(time, folder): |
| | for week_loop in range(5): |
| | try: |
| | image = np.array(Image.open(folder+'/week' +str(week_loop)+'/'+ str(time).replace(' ','T').replace(':','-').split('+')[0] + '.jpg')) |
| | break |
| | except: |
| | continue |
| | if image is None: |
| | print('file not found') |
| | return image |
| |
|
| | def get_mask(segm, image): |
| | poly = np.array(segm).reshape((int(len(segm)/2), 2)) |
| | mask = image.copy()*0 |
| | cv2.fillConvexPoly(mask, poly, (255, 255, 255)) |
| | return mask |
| |
|
| | def get_unoccluded(indices, tracks_all): |
| | unoccluded_indexes = [] |
| | unoccluded_index_all =[] |
| | while 1: |
| | unoccluded_clusters = [] |
| | len_unocc = len(unoccluded_indexes) |
| | for ind in indices: |
| | if ind in unoccluded_indexes: |
| | continue |
| | occ = False |
| | for ind_compare in indices: |
| | if ind_compare in unoccluded_indexes: |
| | continue |
| | if bb_intersection_over_union_unoccluded(tracks_all[ind], tracks_all[ind_compare]) > 0.01 and ind_compare != ind: |
| | occ = True |
| | if occ==False: |
| | unoccluded_indexes.extend([ind]) |
| | unoccluded_clusters.extend([ind]) |
| | if len(unoccluded_indexes) == len_unocc and len_unocc != 0: |
| | for ind in indices: |
| | if ind not in unoccluded_indexes: |
| | unoccluded_indexes.extend([ind]) |
| | unoccluded_clusters.extend([ind]) |
| | |
| | unoccluded_index_all.append(unoccluded_clusters) |
| | if len(unoccluded_indexes) > len(indices)-5: |
| | break |
| | return unoccluded_index_all |
| |
|
| | def primes(n): |
| | odds = range(3, n+1, 2) |
| | sieve = set(sum([list(range(q*q, n+1, q+q)) for q in odds], [])) |
| | return [2] + [p for p in odds if p not in sieve] |
| |
|
| | def save_image(image_read, save_path, data, path): |
| | tracks = data['tracks_all_unoccluded'] |
| | segmentations = data['segmentation_all_unoccluded'] |
| | timestamps = data['timestamps_final_unoccluded'] |
| |
|
| | image = image_read.copy() |
| | indices = np.random.randint(len(tracks),size=30) |
| | prime_numbers = primes(1000) |
| | unoccluded_index_all = get_unoccluded(indices, tracks) |
| | |
| | mask_stacked = image*0 |
| | mask_stacked_all =[] |
| | count = 0 |
| | time = datetime.datetime.now() |
| |
|
| | for l in indices: |
| | try: |
| | image_crop = get_image(timestamps[l], path) |
| | except: |
| | continue |
| | try: |
| | bb_left, bb_top, bb_width, bb_height, confidence = tracks[l] |
| | except: |
| | bb_left, bb_top, bb_width, bb_height, confidence, track_id = tracks[l] |
| | mask = get_mask(segmentations[l], image) |
| | |
| | image[mask > 0] = image_crop[mask > 0] |
| | mask[mask > 0] = 1 |
| | for count, mask_inc in enumerate(mask_stacked_all): |
| | mask_stacked_all[count][cv2.bitwise_and(mask, mask_inc) > 0] = 2 |
| | mask_stacked_all.append(mask) |
| | mask_stacked += mask |
| | count = count+1 |
| | |
| | cv2.imwrite(save_path + '/images/'+str(time).replace(' ','T').replace(':','-').split('+')[0] + '.jpg', image[:, :, ::-1]) |
| | cv2.imwrite(save_path + '/Segmentation/'+str(time).replace(' ','T').replace(':','-').split('+')[0] + '.jpg', mask_stacked[:, :, ::-1]*30) |
| | np.savez_compressed(save_path+'/Segmentation/'+str(time).replace(' ','T').replace(':','-').split('+')[0], mask=mask_stacked_all) |
| | |
| | def CWALT_Generation(camera_name): |
| | save_path_train = 'data/cwalt_train' |
| | save_path_test = 'data/cwalt_test' |
| | |
| | json_file_path = 'data/{}/{}.json'.format(camera_name,camera_name) |
| | path = 'data/' + camera_name |
| | |
| | data = np.load(json_file_path + '.npz', allow_pickle=True) |
| | |
| | |
| | |
| | data_train=dict() |
| | data_test=dict() |
| | |
| | split_index = int(len(data['timestamps_final_unoccluded'])*0.8) |
| | |
| | data_train['tracks_all_unoccluded'] = data['tracks_all_unoccluded'][0:split_index] |
| | data_train['segmentation_all_unoccluded'] = data['segmentation_all_unoccluded'][0:split_index] |
| | data_train['timestamps_final_unoccluded'] = data['timestamps_final_unoccluded'][0:split_index] |
| | |
| | data_test['tracks_all_unoccluded'] = data['tracks_all_unoccluded'][split_index:] |
| | data_test['segmentation_all_unoccluded'] = data['segmentation_all_unoccluded'][split_index:] |
| | data_test['timestamps_final_unoccluded'] = data['timestamps_final_unoccluded'][split_index:] |
| |
|
| | image_read = np.array(Image.open(path + '/T18-median_image.jpg')) |
| | image_read = cv2.resize(image_read, (int(image_read.shape[1]/2), int(image_read.shape[0]/2))) |
| | |
| | try: |
| | os.mkdir(save_path_train) |
| | except: |
| | print(save_path_train) |
| |
|
| | try: |
| | os.mkdir(save_path_train + '/images') |
| | os.mkdir(save_path_train + '/Segmentation') |
| | except: |
| | print(save_path_train+ '/images') |
| |
|
| | try: |
| | os.mkdir(save_path_test) |
| | except: |
| | print(save_path_test) |
| |
|
| | try: |
| | os.mkdir(save_path_test + '/images') |
| | os.mkdir(save_path_test + '/Segmentation') |
| | except: |
| | print(save_path_test+ '/images') |
| |
|
| | for loop in tqdm(range(3000), desc="Generating training CWALT Images "): |
| | save_image(image_read, save_path_train, data_train, path) |
| | |
| | for loop in tqdm(range(300), desc="Generating testing CWALT Images "): |
| | save_image(image_read, save_path_test, data_test, path) |
| |
|
| |
|