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)