DHPR commited on
Commit
f704fbe
1 Parent(s): b11c555

Upload 3 files

Browse files
data/anno_val_direct.json ADDED
The diff for this file is too large to render. See raw diff
 
data/anno_val_indirect.json ADDED
The diff for this file is too large to render. See raw diff
 
visualize_data.py ADDED
@@ -0,0 +1,146 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # %%
2
+ import os
3
+ import json
4
+ import numpy as np
5
+ import matplotlib.pyplot as plt
6
+ from pathlib import Path
7
+ from pprint import pprint
8
+ from omegaconf import OmegaConf
9
+ from PIL import Image, ImageDraw
10
+ import streamlit as st
11
+ # %%
12
+
13
+ os.environ['ROOT'] = '/mnt/Documents/traffic_var_server/visualization'
14
+ print("os.environ['ROOT'] :",os.environ['ROOT'])
15
+ # %%
16
+ class ImageRetriever:
17
+
18
+ def __init__(self, root_path, anno_path):
19
+ self.root_path = Path(root_path)
20
+ self.anno = json.load(open(anno_path))
21
+
22
+ def key2img_path(self, key):
23
+ file_paths = [
24
+ self.root_path / f"var_images/{key}.jpg",
25
+ self.root_path / f"var_images/{key}.png",
26
+ self.root_path / f"images/{key}.jpg",
27
+ self.root_path / f"img/train/{key.split('_')[0]}/{key}.png",
28
+ self.root_path / f"img/val/{key.split('_')[0]}/{key}.png",
29
+ self.root_path / f"img/test/{key.split('_')[0]}/{key}.png",
30
+ self.root_path / f"img/{key}.png",
31
+ self.root_path / f"img/{key}.jpg",
32
+ self.root_path / f"{key}.png",
33
+ self.root_path / f"{key}.jpg",
34
+ ]
35
+ print("file_paths!!!!!!!!", file_paths)
36
+ for file_path in file_paths:
37
+ if file_path.exists():
38
+ return file_path
39
+
40
+
41
+ def key2img(self, key, draw_bbox=True):
42
+ file_path = self.key2img_path(key)
43
+
44
+ print("file_path!!@@@@", key, file_path)
45
+
46
+ image = Image.open(file_path)
47
+ if draw_bbox:
48
+ meta = self.anno[key]['details'][-1]
49
+ bboxes = [meta['bounding_box'].get(str(box_idx + 1), None) for box_idx in range(3)]
50
+ image = self.hide_region(image, bboxes)
51
+ return image
52
+
53
+ def hide_region(self, image, bboxes):
54
+ self.hide_true_bbox = 2
55
+
56
+ image = image.convert('RGBA')
57
+
58
+ if self.hide_true_bbox == 1: # hide mode
59
+ draw = ImageDraw.Draw(image, 'RGBA')
60
+
61
+ if self.hide_true_bbox in [2, 5, 7, 8, 9]: #highlight mode
62
+ overlay = Image.new('RGBA', image.size, '#00000000')
63
+ draw = ImageDraw.Draw(overlay, 'RGBA')
64
+
65
+ if self.hide_true_bbox == 3 or self.hide_true_bbox == 6: #blackout mode or position only mode
66
+ overlay = Image.new('RGBA', image.size, '#7B7575ff')
67
+ draw = ImageDraw.Draw(overlay, 'RGBA')
68
+
69
+ color_fill_list = ['#ff05cd3c', '#00F1E83c', '#F2D4003c'] # Green, Blue, Yellow?
70
+
71
+ for idx, bbox in enumerate(bboxes):
72
+ if bbox == None:
73
+ continue
74
+
75
+ color_fill = color_fill_list[idx]
76
+ x, y = bbox['left'], bbox['top']
77
+
78
+ if self.hide_true_bbox == 1: # hide mode
79
+ draw.rectangle([(x, y), (x + bbox['width'], y + bbox['height'])], fill='#7B7575')
80
+ elif self.hide_true_bbox in [2, 5, 7, 8, 9]: # highlight mode
81
+ draw.rectangle([(x, y), (x + bbox['width'], y + bbox['height'])], fill=color_fill, outline='#05ff37ff',
82
+ width=3) # Fill with Pink 60% ##00F1E8
83
+ elif self.hide_true_bbox == 3: # blackout mode
84
+ draw.rectangle([(x, y), (x + bbox['width'], y + bbox['height'])], fill='#00000000')
85
+ elif self.hide_true_bbox == 6: # position only mode
86
+ draw.rectangle([(x, y), (x + bbox['width'], y + bbox['height'])], fill=color_fill)
87
+
88
+ if self.hide_true_bbox in [2, 3, 5, 6, 7, 8, 9]:
89
+ image = Image.alpha_composite(image, overlay)
90
+ return image
91
+
92
+ def retrive_data(file_index, mode='direct'):
93
+ split = 'val'
94
+ mode = mode.lower()
95
+ main_dataset = json.load(open(os.path.join(os.environ['ROOT'], f"data/anno_{split}_{mode}.json")))
96
+ temp_data = main_dataset[list(main_dataset.keys())[file_index]]['details'][-1]
97
+
98
+ message_dict = {}
99
+
100
+ message_dict['img'] = temp_data['img']
101
+ message_dict['plausible_speed'] = temp_data['plausible_speed']
102
+ message_dict['bounding_box'] = temp_data['bounding_box']
103
+ try:
104
+ message_dict['hazard'] = temp_data['hazard']
105
+ except:
106
+ message_dict['hazard'] = temp_data['rationale']
107
+ message_dict['Entity #1'] = temp_data['Entity #1']
108
+ message_dict['Entity #2'] = temp_data['Entity #2']
109
+ message_dict['Entity #3'] = temp_data['Entity #3']
110
+
111
+ img_retriever = ImageRetriever(
112
+ root_path=os.path.join(os.environ['ROOT'], ''),
113
+ anno_path=os.path.join(os.environ['ROOT'], f'data/anno_{split}_{mode}.json'),
114
+ )
115
+ img = img_retriever.key2img(list(main_dataset.keys())[file_index])
116
+ img = img.resize((img.width // 2, img.height // 2))
117
+
118
+ return img, message_dict
119
+
120
+ # %%
121
+ if __name__ == '__main__':
122
+ st.title("DHPR: Driving Hazard Prediction and Reasoning")
123
+ st.subheader("Data Visualization")
124
+
125
+ option = st.selectbox(
126
+ 'Select the hazard type',
127
+ ('Direct', 'Indirect'))
128
+
129
+ st.write('You selected:', option)
130
+
131
+ image_index = st.slider('Please Select The Image Index', 0, 999, 0)
132
+ st.write("You select the data index of ", image_index," for visualization from the validation set")
133
+
134
+ img, message_dict = retrive_data(image_index, option)
135
+
136
+ st.write("---")
137
+
138
+ st.image(img)
139
+ st.subheader("Annotation Details")
140
+ st.json(message_dict)
141
+ st.write('---')
142
+ # !streamlit run visualize_data.py --server.fileWatcherType none
143
+
144
+
145
+ # %%
146
+