File size: 4,126 Bytes
3c87883 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# file to get json data of results
import numpy as np
import logging
# Configure the logger
logging.basicConfig(
level=logging.DEBUG,
format="%(asctime)s - %(levelname)s - %(message)s",
filename="logs.log",
)
# Create a logger
logger = logging.getLogger("pipline")
def get_json_data(json_data,enhanced_images,detected_activity,distances_list):
"""
Args:
json_data (json Array): get json data of image
enhanced_images (list of numpy array): list of enhanced images
detected_activity (list of strings): list of activities of person
distances_list (lsit of integers): list of distances of each object
Returns:
results(json Array): contains all informations needed for frontend
{'zoomed_img':np.array([]) ,
'actual_boxes':[],
'merged_boundries':{},
}
"""
logger.info("get_json_data function is called... ")
try:
results = []
object_count = 0
activity_count = 0
for idx,box in enumerate(json_data):
final_json_output = {'zoomed_img':np.array([]) ,
'actual_boxes':[],
'merged_boundries':{},
}
final_json_output['zoomed_img'] = enhanced_images[idx]
final_json_output['merged_boundries'] = { "top_left": box['merged_boundries']['top_left'],
"bottom_right": box['merged_boundries']['bottom_right']}
for actual_box in box['actual_boundries']:
single_object_details = {"top_left": actual_box['top_left'],
"bottom_right": actual_box['bottom_right'],
"class": actual_box['class'],
"distance":distances_list[object_count],
"activity":'none'}
object_count+=1
if single_object_details['class'] == 'person':
single_object_details['activity'] = detected_activity[activity_count]
activity_count+=1
final_json_output['actual_boxes'].append(single_object_details)
final_json_output = fix_distance(final_json_output)
results.append(final_json_output)
return results
except Exception as e:
logger.error("Something went wrong in generated results function")
logger.error(e)
def fix_distance(final_json_output):
"""
Args:
final_json_output (json Array): array of json object
Returns:
final_json_output (json Array): array of json object
"""
logger.info("fix distance function is called... ")
try:
distances = []
DIFF = 90
for idx,box in enumerate(final_json_output['actual_boxes']):
distances.append({'idx':idx,'distance':int(box['distance'][:-1])})
sorted_dist = sorted(distances, key=lambda d: d['distance'])
sum_dist = []
idx= 0
sum_dist.append({'sum':sorted_dist[0]['distance'],'idxes':[sorted_dist[0]['idx']]})
for i in range(1,len(sorted_dist)):
if abs(sorted_dist[i]['distance']-sorted_dist[i-1]['distance']) <=DIFF:
sum_dist[idx]['sum']+= sorted_dist[i]['distance']
sum_dist[idx]['idxes'].append(sorted_dist[i]['idx'])
else:
sum_dist.append({'sum':sorted_dist[i]['distance'],'idxes':[sorted_dist[i]['idx']]})
idx+=1
#change values in distance array
for data in sum_dist:
count = len(data['idxes'])
mean = data['sum']//count
for i in data['idxes']:
final_json_output['actual_boxes'][i]['distance'] = str(mean)+'m'
return final_json_output
except Exception as e:
logger.error("Something went wrong in get_json_data function...")
logger.error(e)
|