gouravs300 commited on
Commit
05a48f3
·
1 Parent(s): 480596b

Upload 33 files

Browse files
Files changed (34) hide show
  1. .gitattributes +4 -0
  2. app.py +248 -0
  3. eported_models/00000026.jpg +0 -0
  4. eported_models/efficientdet_d0_ocr_numberplate/.ipynb_checkpoints/label_map-checkpoint.pbtxt +144 -0
  5. eported_models/efficientdet_d0_ocr_numberplate/checkpoint/checkpoint +4 -0
  6. eported_models/efficientdet_d0_ocr_numberplate/checkpoint/ckpt-0.data-00000-of-00001 +3 -0
  7. eported_models/efficientdet_d0_ocr_numberplate/checkpoint/ckpt-0.index +0 -0
  8. eported_models/efficientdet_d0_ocr_numberplate/label_map.pbtxt +144 -0
  9. eported_models/efficientdet_d0_ocr_numberplate/pipeline.config +189 -0
  10. eported_models/efficientdet_d0_ocr_numberplate/saved_model/saved_model.pb +3 -0
  11. eported_models/efficientdet_d0_ocr_numberplate/saved_model/variables/variables.data-00000-of-00001 +3 -0
  12. eported_models/efficientdet_d0_ocr_numberplate/saved_model/variables/variables.index +0 -0
  13. eported_models/hyundai.jpg +0 -0
  14. eported_models/mahindra.jpg +0 -0
  15. eported_models/ssd_mobilnet_numberplate_region_detection/.ipynb_checkpoints/label_map-checkpoint.pbtxt +4 -0
  16. eported_models/ssd_mobilnet_numberplate_region_detection/.ipynb_checkpoints/pipeline-checkpoint.config +191 -0
  17. eported_models/ssd_mobilnet_numberplate_region_detection/checkpoint/checkpoint +4 -0
  18. eported_models/ssd_mobilnet_numberplate_region_detection/checkpoint/ckpt-0.data-00000-of-00001 +3 -0
  19. eported_models/ssd_mobilnet_numberplate_region_detection/checkpoint/ckpt-0.index +0 -0
  20. eported_models/ssd_mobilnet_numberplate_region_detection/label_map.pbtxt +4 -0
  21. eported_models/ssd_mobilnet_numberplate_region_detection/pipeline.config +191 -0
  22. eported_models/ssd_mobilnet_numberplate_region_detection/saved_model/saved_model.pb +3 -0
  23. eported_models/ssd_mobilnet_numberplate_region_detection/saved_model/variables/variables.data-00000-of-00001 +3 -0
  24. eported_models/ssd_mobilnet_numberplate_region_detection/saved_model/variables/variables.index +0 -0
  25. requirements.txt +7 -0
  26. test_images/desktop.ini +24 -0
  27. test_images/test1.png +0 -0
  28. test_images/test2.png +0 -0
  29. test_images/test3.png +0 -0
  30. test_images/test4.jpg +0 -0
  31. test_images/test5.jpg +0 -0
  32. test_images/test6.jpg +0 -0
  33. test_images/test7.jpg +0 -0
  34. test_images/test8.jpg +0 -0
.gitattributes CHANGED
@@ -32,3 +32,7 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
32
  *.zip filter=lfs diff=lfs merge=lfs -text
33
  *.zst filter=lfs diff=lfs merge=lfs -text
34
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
32
  *.zip filter=lfs diff=lfs merge=lfs -text
33
  *.zst filter=lfs diff=lfs merge=lfs -text
34
  *tfevents* filter=lfs diff=lfs merge=lfs -text
35
+ eported_models/efficientdet_d0_ocr_numberplate/checkpoint/ckpt-0.data-00000-of-00001 filter=lfs diff=lfs merge=lfs -text
36
+ eported_models/efficientdet_d0_ocr_numberplate/saved_model/variables/variables.data-00000-of-00001 filter=lfs diff=lfs merge=lfs -text
37
+ eported_models/ssd_mobilnet_numberplate_region_detection/checkpoint/ckpt-0.data-00000-of-00001 filter=lfs diff=lfs merge=lfs -text
38
+ eported_models/ssd_mobilnet_numberplate_region_detection/saved_model/variables/variables.data-00000-of-00001 filter=lfs diff=lfs merge=lfs -text
app.py ADDED
@@ -0,0 +1,248 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ from streamlit_image_select import image_select
3
+ import tensorflow as tf
4
+ import datetime
5
+ import os
6
+ import pandas as pd
7
+ import numpy as np
8
+ import cv2
9
+ from PIL import Image
10
+
11
+
12
+ # trained model files and paths
13
+ files = {
14
+ "label_map_ssd" : os.path.join('eported_models','ssd_mobilnet_numberplate_region_detection','label_map.pbtxt'),
15
+ "label_map_efficientdet" : os.path.join('eported_models','efficientdet_d0_ocr_numberplate','label_map.pbtxt')
16
+ }
17
+
18
+ paths = {
19
+ "saved_model_path_ssd" : os.path.join('eported_models','ssd_mobilnet_numberplate_region_detection','saved_model'),
20
+ "saved_model_path_efficientdet" : os.path.join('eported_models','efficientdet_d0_ocr_numberplate','saved_model')
21
+ }
22
+
23
+ def read_label_map(label_map_path):
24
+ item_id = None
25
+ item_name = None
26
+ items = {}
27
+ with open(label_map_path, "r") as file:
28
+ for line in file:
29
+ line.replace(" ", "")
30
+ if line == "item{":
31
+ pass
32
+ elif line == "}":
33
+ pass
34
+ elif "id" in line:
35
+ item_id = int(line.split(":", 1)[1].strip())
36
+ elif "name" in line:
37
+ item_name = {line.split(":")[0].replace("\"", " ").strip() : line.split(":")[1].replace("'", '').strip()}
38
+ if item_id is not None and item_name is not None:
39
+ items[item_id] = item_name
40
+ item_id = None
41
+ item_name = None
42
+ return items
43
+
44
+ #load model
45
+ @st.cache(allow_output_mutation = True)
46
+ def cache_model(path1, path2):
47
+ model1 = tf.saved_model.load(path1)
48
+ model2 = tf.saved_model.load(path2)
49
+ return (model1, model2)
50
+ detect_fn_ssd, detect_fn_efficientdet = cache_model(paths["saved_model_path_ssd"], paths["saved_model_path_efficientdet"])
51
+
52
+ # Creating category index
53
+ category_index_ssd = read_label_map(files["label_map_ssd"])
54
+ category_index_efficientdet = read_label_map(files["label_map_efficientdet"])
55
+
56
+ def image_resize_with_padding(image):
57
+ image = np.array(image)
58
+ image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
59
+ old_size = image.shape[:2] # old_size is in (height, width) format
60
+
61
+ if max(old_size) > 256:
62
+ desired_size = 512
63
+ else:
64
+ desired_size = 256
65
+
66
+ ratio = float(desired_size)/max(old_size)
67
+ new_size = tuple([int(x*ratio) for x in old_size])
68
+ # resize the image
69
+ resized = cv2.resize(image, (new_size[1],new_size[0]))
70
+
71
+ delta_w = desired_size - new_size[1]
72
+ delta_h = desired_size - new_size[0]
73
+ top, bottom = delta_h//2, delta_h-(delta_h//2)
74
+ left, right = delta_w//2, delta_w-(delta_w//2)
75
+ # print(top,bottom,left,right)
76
+
77
+ color = [255, 255, 255]
78
+ new_im = cv2.copyMakeBorder(resized, top, bottom, left, right, cv2.BORDER_CONSTANT,value=color)
79
+
80
+ return new_im
81
+
82
+ def ExtractBBoxes(bboxes, bclasses, bscores, im_width, im_height, threshold, category_index):
83
+ bbox = []
84
+ class_labels = []
85
+ for idx in range(len(bboxes)):
86
+ if bscores[idx] >= threshold:
87
+ y_min = int(bboxes[idx][0] * im_height)
88
+ x_min = int(bboxes[idx][1] * im_width)
89
+ y_max = int(bboxes[idx][2] * im_height)
90
+ x_max = int(bboxes[idx][3] * im_width)
91
+ class_label = category_index[int(bclasses[idx])]['name']
92
+ class_labels.append(class_label)
93
+ bbox.append([x_min, y_min, x_max, y_max, class_label, float(bscores[idx])])
94
+ return (bbox, class_labels)
95
+
96
+ def ocr_predict(img,threshold):
97
+
98
+ img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
99
+ image_np = tf.convert_to_tensor(img, dtype=tf.uint8)
100
+ input_tensor = np.expand_dims(image_np, 0)
101
+ image_height, image_width, _ = image_np.shape
102
+ detections = detect_fn_efficientdet(input_tensor)
103
+ bboxes = detections['detection_boxes'][0].numpy()
104
+ bclasses = detections['detection_classes'][0].numpy().astype(np.int32)
105
+ bscores = detections['detection_scores'][0].numpy()
106
+ det_boxes, class_labels = ExtractBBoxes(bboxes, bclasses, bscores, image_width, image_height, threshold, category_index_efficientdet)
107
+ output = []
108
+ for detection in det_boxes:
109
+ x_min, y_min, x_max, y_max, label, score = detection[0], detection[1], detection[2], detection[3], detection[4], round(detection[5])
110
+
111
+ output.append((label, int(x_min*image_width), int(y_min*image_height),
112
+ int(x_max*image_width), int(y_max*image_height), score))
113
+
114
+ df = pd.DataFrame(output, columns = ['label','xmin','ymin','xmax','ymax', 'score'])
115
+
116
+ df_up = df[df.ymin < (df.ymin.min()*1.2)].sort_values(by = ['xmin'])
117
+ df_down = df[df.ymin > (df.ymin.min()*1.2)].sort_values(by = ['xmin'])
118
+ df = pd.concat([df_up,df_down])
119
+ vehicle_number = "".join(df["label"])
120
+
121
+
122
+
123
+ current_date_time = datetime.datetime.now()
124
+ day = current_date_time.strftime("%A")
125
+ date = current_date_time.strftime("%d/%m/%Y")
126
+ time = current_date_time.strftime("%I:%M:%S %p")
127
+ data = [(vehicle_number,day,date,time)]
128
+
129
+ return (data)
130
+
131
+ def predict(img,threshold):
132
+ image_np = np.array(img)
133
+ img = cv2.cvtColor(image_np, cv2.COLOR_BGR2RGB)
134
+ image = tf.convert_to_tensor(img, dtype=tf.uint8)
135
+ input_tensor = np.expand_dims(image, 0)
136
+ # image = tf.image.decode_image(open(file, 'rb').read(), channels=3)
137
+ # img = cv2.imread(file)
138
+ image_height, image_width, _ = image.shape
139
+
140
+
141
+
142
+ # input_tensor = np.expand_dims(image, 0)
143
+ detections = detect_fn_ssd(input_tensor)
144
+
145
+ bboxes = detections['detection_boxes'][0].numpy()
146
+ bclasses = detections['detection_classes'][0].numpy().astype(np.int32)
147
+ bscores = detections['detection_scores'][0].numpy()
148
+ det_boxes, class_labels = ExtractBBoxes(bboxes, bclasses, bscores, image_width, image_height, threshold, category_index_ssd)
149
+ output = []
150
+ for detection in det_boxes:
151
+ x_min, y_min, x_max, y_max, label, score = detection[0], detection[1], detection[2], detection[3], detection[4], round(detection[5])
152
+
153
+ output.append((label, x_min, y_min, x_max, y_max, score))
154
+
155
+ image_np_with_detections = image_np.copy()
156
+
157
+ data_list = []
158
+ for l, x_min, y_min, x_max, y_max, score in output:
159
+
160
+ array = cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR)
161
+ image = Image.fromarray(array)
162
+
163
+ cropped_img = image.crop((x_min, y_min, x_max, y_max))
164
+ input_ocr_image = image_resize_with_padding(cropped_img)
165
+
166
+ data = ocr_predict(input_ocr_image,threshold)
167
+ data_list.append(data)
168
+
169
+ for l, x_min, y_min, x_max, y_max, score in output:
170
+
171
+
172
+ x1 = x_min
173
+ y1 = y_min
174
+ x2 = x_max
175
+ y2 = y_max
176
+ # For bounding box
177
+ color = (0,255,0)
178
+
179
+ img = cv2.rectangle(img, (x1, y1), (x2, y2),color, 2)
180
+
181
+ label = f"{l} : {round(score,2)}"
182
+ text_color = (0,0,255)
183
+ # For the text background
184
+ # Finds space required by the text so that we can put a background with that amount of width.
185
+ (w, h), _ = cv2.getTextSize(
186
+ label, cv2.FONT_HERSHEY_SIMPLEX, 0.6, 1)
187
+
188
+ # Prints the text.
189
+ img = cv2.rectangle(img, (x1, y1 - 20), (x1 + w, y1), color, -1)
190
+ img = cv2.putText(img, label, (x1, y1 - 5),
191
+ cv2.FONT_HERSHEY_SIMPLEX, 0.6, text_color, 1)
192
+ # plt.imshow(img)
193
+
194
+
195
+ im_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
196
+
197
+ return (im_rgb, data_list)
198
+
199
+ st.write("""
200
+ # Automated Number Plate Recognition
201
+ """
202
+ )
203
+
204
+ st.write("""
205
+ **For full code implementation and sub modules please visit the [Github link](https://github.com/gourav300/Automated-Number-plate-Recognition-for-Indian-Vehicles)**
206
+ """)
207
+
208
+ ### load file
209
+ uploaded_file = st.file_uploader("Upload an image file for a vehicle with standard number plate", type=["jpg", "png", "jpeg"])
210
+
211
+ st.write("Note -: if you have uploaded an image please click X to enable below images")
212
+ test_img = image_select(
213
+ label='''Select an image to get number plate data''',
214
+ images=[
215
+ "test_images/test3.png",
216
+ "test_images/test2.png",
217
+ "test_images/test1.png",
218
+ "test_images/test4.jpg",
219
+ "test_images/test5.jpg",
220
+ "test_images/test6.jpg",
221
+ "test_images/test7.jpg",
222
+ "test_images/test8.jpg",
223
+ ])
224
+
225
+
226
+ if uploaded_file is not None:
227
+ image = Image.open(uploaded_file)
228
+ img, data = predict(image, 0.6)
229
+ # image = Image.open(uploaded_file)
230
+ st.image(img,width = 500)#, use_column_width=True)
231
+ st.write(f'''
232
+ Vehicle details :
233
+
234
+ {data}
235
+
236
+ ''')
237
+ else:
238
+
239
+ image = Image.open(test_img)
240
+ img, data = predict(image, 0.6)
241
+ # image = Image.open(uploaded_file)
242
+ st.image(img,width = 500)#, use_column_width=True)
243
+ st.write(f'''
244
+ Vehicle details :
245
+
246
+ {data}
247
+
248
+ ''')
eported_models/00000026.jpg ADDED
eported_models/efficientdet_d0_ocr_numberplate/.ipynb_checkpoints/label_map-checkpoint.pbtxt ADDED
@@ -0,0 +1,144 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ item {
2
+ name:'0'
3
+ id:1
4
+ }
5
+ item {
6
+ name:'1'
7
+ id:2
8
+ }
9
+ item {
10
+ name:'2'
11
+ id:3
12
+ }
13
+ item {
14
+ name:'3'
15
+ id:4
16
+ }
17
+ item {
18
+ name:'4'
19
+ id:5
20
+ }
21
+ item {
22
+ name:'5'
23
+ id:6
24
+ }
25
+ item {
26
+ name:'6'
27
+ id:7
28
+ }
29
+ item {
30
+ name:'7'
31
+ id:8
32
+ }
33
+ item {
34
+ name:'8'
35
+ id:9
36
+ }
37
+ item {
38
+ name:'9'
39
+ id:10
40
+ }
41
+ item {
42
+ name:'A'
43
+ id:11
44
+ }
45
+ item {
46
+ name:'B'
47
+ id:12
48
+ }
49
+ item {
50
+ name:'C'
51
+ id:13
52
+ }
53
+ item {
54
+ name:'D'
55
+ id:14
56
+ }
57
+ item {
58
+ name:'E'
59
+ id:15
60
+ }
61
+ item {
62
+ name:'F'
63
+ id:16
64
+ }
65
+ item {
66
+ name:'G'
67
+ id:17
68
+ }
69
+ item {
70
+ name:'H'
71
+ id:18
72
+ }
73
+ item {
74
+ name:'I'
75
+ id:19
76
+ }
77
+ item {
78
+ name:'J'
79
+ id:20
80
+ }
81
+ item {
82
+ name:'K'
83
+ id:21
84
+ }
85
+ item {
86
+ name:'L'
87
+ id:22
88
+ }
89
+ item {
90
+ name:'M'
91
+ id:23
92
+ }
93
+ item {
94
+ name:'N'
95
+ id:24
96
+ }
97
+ item {
98
+ name:'O'
99
+ id:25
100
+ }
101
+ item {
102
+ name:'P'
103
+ id:26
104
+ }
105
+ item {
106
+ name:'Q'
107
+ id:27
108
+ }
109
+ item {
110
+ name:'R'
111
+ id:28
112
+ }
113
+ item {
114
+ name:'S'
115
+ id:29
116
+ }
117
+ item {
118
+ name:'T'
119
+ id:30
120
+ }
121
+ item {
122
+ name:'U'
123
+ id:31
124
+ }
125
+ item {
126
+ name:'V'
127
+ id:32
128
+ }
129
+ item {
130
+ name:'W'
131
+ id:33
132
+ }
133
+ item {
134
+ name:'X'
135
+ id:34
136
+ }
137
+ item {
138
+ name:'Y'
139
+ id:35
140
+ }
141
+ item {
142
+ name:'Z'
143
+ id:36
144
+ }
eported_models/efficientdet_d0_ocr_numberplate/checkpoint/checkpoint ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ model_checkpoint_path: "ckpt-0"
2
+ all_model_checkpoint_paths: "ckpt-0"
3
+ all_model_checkpoint_timestamps: 1656053241.2777963
4
+ last_preserved_timestamp: 1656053239.3308609
eported_models/efficientdet_d0_ocr_numberplate/checkpoint/ckpt-0.data-00000-of-00001 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a32ab47b7ee4aa8fc6527caa24c68fccdb39c1c967d6c4369f20c89124faec0e
3
+ size 22535607
eported_models/efficientdet_d0_ocr_numberplate/checkpoint/ckpt-0.index ADDED
Binary file (46.6 kB). View file
 
eported_models/efficientdet_d0_ocr_numberplate/label_map.pbtxt ADDED
@@ -0,0 +1,144 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ item {
2
+ name:'0'
3
+ id:1
4
+ }
5
+ item {
6
+ name:'1'
7
+ id:2
8
+ }
9
+ item {
10
+ name:'2'
11
+ id:3
12
+ }
13
+ item {
14
+ name:'3'
15
+ id:4
16
+ }
17
+ item {
18
+ name:'4'
19
+ id:5
20
+ }
21
+ item {
22
+ name:'5'
23
+ id:6
24
+ }
25
+ item {
26
+ name:'6'
27
+ id:7
28
+ }
29
+ item {
30
+ name:'7'
31
+ id:8
32
+ }
33
+ item {
34
+ name:'8'
35
+ id:9
36
+ }
37
+ item {
38
+ name:'9'
39
+ id:10
40
+ }
41
+ item {
42
+ name:'A'
43
+ id:11
44
+ }
45
+ item {
46
+ name:'B'
47
+ id:12
48
+ }
49
+ item {
50
+ name:'C'
51
+ id:13
52
+ }
53
+ item {
54
+ name:'D'
55
+ id:14
56
+ }
57
+ item {
58
+ name:'E'
59
+ id:15
60
+ }
61
+ item {
62
+ name:'F'
63
+ id:16
64
+ }
65
+ item {
66
+ name:'G'
67
+ id:17
68
+ }
69
+ item {
70
+ name:'H'
71
+ id:18
72
+ }
73
+ item {
74
+ name:'I'
75
+ id:19
76
+ }
77
+ item {
78
+ name:'J'
79
+ id:20
80
+ }
81
+ item {
82
+ name:'K'
83
+ id:21
84
+ }
85
+ item {
86
+ name:'L'
87
+ id:22
88
+ }
89
+ item {
90
+ name:'M'
91
+ id:23
92
+ }
93
+ item {
94
+ name:'N'
95
+ id:24
96
+ }
97
+ item {
98
+ name:'O'
99
+ id:25
100
+ }
101
+ item {
102
+ name:'P'
103
+ id:26
104
+ }
105
+ item {
106
+ name:'Q'
107
+ id:27
108
+ }
109
+ item {
110
+ name:'R'
111
+ id:28
112
+ }
113
+ item {
114
+ name:'S'
115
+ id:29
116
+ }
117
+ item {
118
+ name:'T'
119
+ id:30
120
+ }
121
+ item {
122
+ name:'U'
123
+ id:31
124
+ }
125
+ item {
126
+ name:'V'
127
+ id:32
128
+ }
129
+ item {
130
+ name:'W'
131
+ id:33
132
+ }
133
+ item {
134
+ name:'X'
135
+ id:34
136
+ }
137
+ item {
138
+ name:'Y'
139
+ id:35
140
+ }
141
+ item {
142
+ name:'Z'
143
+ id:36
144
+ }
eported_models/efficientdet_d0_ocr_numberplate/pipeline.config ADDED
@@ -0,0 +1,189 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ model {
2
+ ssd {
3
+ num_classes: 36
4
+ image_resizer {
5
+ keep_aspect_ratio_resizer {
6
+ min_dimension: 512
7
+ max_dimension: 512
8
+ pad_to_max_dimension: true
9
+ }
10
+ }
11
+ feature_extractor {
12
+ type: "ssd_efficientnet-b0_bifpn_keras"
13
+ conv_hyperparams {
14
+ regularizer {
15
+ l2_regularizer {
16
+ weight: 4e-05
17
+ }
18
+ }
19
+ initializer {
20
+ truncated_normal_initializer {
21
+ mean: 0.0
22
+ stddev: 0.03
23
+ }
24
+ }
25
+ activation: SWISH
26
+ batch_norm {
27
+ decay: 0.99
28
+ scale: true
29
+ epsilon: 0.001
30
+ }
31
+ force_use_bias: true
32
+ }
33
+ bifpn {
34
+ min_level: 3
35
+ max_level: 7
36
+ num_iterations: 3
37
+ num_filters: 64
38
+ }
39
+ }
40
+ box_coder {
41
+ faster_rcnn_box_coder {
42
+ y_scale: 1.0
43
+ x_scale: 1.0
44
+ height_scale: 1.0
45
+ width_scale: 1.0
46
+ }
47
+ }
48
+ matcher {
49
+ argmax_matcher {
50
+ matched_threshold: 0.5
51
+ unmatched_threshold: 0.5
52
+ ignore_thresholds: false
53
+ negatives_lower_than_unmatched: true
54
+ force_match_for_each_row: true
55
+ use_matmul_gather: true
56
+ }
57
+ }
58
+ similarity_calculator {
59
+ iou_similarity {
60
+ }
61
+ }
62
+ box_predictor {
63
+ weight_shared_convolutional_box_predictor {
64
+ conv_hyperparams {
65
+ regularizer {
66
+ l2_regularizer {
67
+ weight: 4e-05
68
+ }
69
+ }
70
+ initializer {
71
+ random_normal_initializer {
72
+ mean: 0.0
73
+ stddev: 0.01
74
+ }
75
+ }
76
+ activation: SWISH
77
+ batch_norm {
78
+ decay: 0.99
79
+ scale: true
80
+ epsilon: 0.001
81
+ }
82
+ force_use_bias: true
83
+ }
84
+ depth: 64
85
+ num_layers_before_predictor: 3
86
+ kernel_size: 3
87
+ class_prediction_bias_init: -4.6
88
+ use_depthwise: true
89
+ }
90
+ }
91
+ anchor_generator {
92
+ multiscale_anchor_generator {
93
+ min_level: 3
94
+ max_level: 7
95
+ anchor_scale: 4.0
96
+ aspect_ratios: 1.0
97
+ aspect_ratios: 2.0
98
+ aspect_ratios: 0.5
99
+ scales_per_octave: 3
100
+ }
101
+ }
102
+ post_processing {
103
+ batch_non_max_suppression {
104
+ score_threshold: 1e-08
105
+ iou_threshold: 0.5
106
+ max_detections_per_class: 100
107
+ max_total_detections: 100
108
+ }
109
+ score_converter: SIGMOID
110
+ }
111
+ normalize_loss_by_num_matches: true
112
+ loss {
113
+ localization_loss {
114
+ weighted_smooth_l1 {
115
+ }
116
+ }
117
+ classification_loss {
118
+ weighted_sigmoid_focal {
119
+ gamma: 1.5
120
+ alpha: 0.25
121
+ }
122
+ }
123
+ classification_weight: 1.0
124
+ localization_weight: 1.0
125
+ }
126
+ encode_background_as_zeros: true
127
+ normalize_loc_loss_by_codesize: true
128
+ inplace_batchnorm_update: true
129
+ freeze_batchnorm: false
130
+ add_background_class: false
131
+ }
132
+ }
133
+ train_config {
134
+ batch_size: 4
135
+ data_augmentation_options {
136
+ random_horizontal_flip {
137
+ }
138
+ }
139
+ data_augmentation_options {
140
+ random_scale_crop_and_pad_to_square {
141
+ output_size: 512
142
+ scale_min: 0.1
143
+ scale_max: 2.0
144
+ }
145
+ }
146
+ sync_replicas: true
147
+ optimizer {
148
+ momentum_optimizer {
149
+ learning_rate {
150
+ cosine_decay_learning_rate {
151
+ learning_rate_base: 0.08
152
+ total_steps: 300000
153
+ warmup_learning_rate: 0.001
154
+ warmup_steps: 2500
155
+ }
156
+ }
157
+ momentum_optimizer_value: 0.9
158
+ }
159
+ use_moving_average: false
160
+ }
161
+ fine_tune_checkpoint: "Tensorflow/workspace/pre-trained-models/efficientdet_d0_coco17_tpu-32/checkpoint/ckpt-0"
162
+ num_steps: 300000
163
+ startup_delay_steps: 0.0
164
+ replicas_to_aggregate: 8
165
+ max_number_of_boxes: 100
166
+ unpad_groundtruth_tensors: false
167
+ fine_tune_checkpoint_type: "detection"
168
+ use_bfloat16: true
169
+ fine_tune_checkpoint_version: V2
170
+ }
171
+ train_input_reader {
172
+ label_map_path: "Tensorflow/workspace/annotations/label_map.pbtxt"
173
+ tf_record_input_reader {
174
+ input_path: "Tensorflow/workspace/annotations/train.record"
175
+ }
176
+ }
177
+ eval_config {
178
+ metrics_set: "coco_detection_metrics"
179
+ use_moving_averages: false
180
+ batch_size: 1
181
+ }
182
+ eval_input_reader {
183
+ label_map_path: "Tensorflow/workspace/annotations/label_map.pbtxt"
184
+ shuffle: false
185
+ num_epochs: 1
186
+ tf_record_input_reader {
187
+ input_path: "Tensorflow/workspace/annotations/validation.record"
188
+ }
189
+ }
eported_models/efficientdet_d0_ocr_numberplate/saved_model/saved_model.pb ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:20b80872f2125e8ec9a6cfc5ca1be4cc92c4757e5ccd17a77deb44c4847a6a9b
3
+ size 19100786
eported_models/efficientdet_d0_ocr_numberplate/saved_model/variables/variables.data-00000-of-00001 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:61ea30bfa3efc98a4eab9108e0e4493a760d11c9168712a4bc618b5da0baaf33
3
+ size 22796625
eported_models/efficientdet_d0_ocr_numberplate/saved_model/variables/variables.index ADDED
Binary file (39.3 kB). View file
 
eported_models/hyundai.jpg ADDED
eported_models/mahindra.jpg ADDED
eported_models/ssd_mobilnet_numberplate_region_detection/.ipynb_checkpoints/label_map-checkpoint.pbtxt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ item {
2
+ name:'np'
3
+ id:1
4
+ }
eported_models/ssd_mobilnet_numberplate_region_detection/.ipynb_checkpoints/pipeline-checkpoint.config ADDED
@@ -0,0 +1,191 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ model {
2
+ ssd {
3
+ num_classes: 1
4
+ image_resizer {
5
+ fixed_shape_resizer {
6
+ height: 320
7
+ width: 320
8
+ }
9
+ }
10
+ feature_extractor {
11
+ type: "ssd_mobilenet_v2_fpn_keras"
12
+ depth_multiplier: 1.0
13
+ min_depth: 16
14
+ conv_hyperparams {
15
+ regularizer {
16
+ l2_regularizer {
17
+ weight: 4e-05
18
+ }
19
+ }
20
+ initializer {
21
+ random_normal_initializer {
22
+ mean: 0.0
23
+ stddev: 0.01
24
+ }
25
+ }
26
+ activation: RELU_6
27
+ batch_norm {
28
+ decay: 0.997
29
+ scale: true
30
+ epsilon: 0.001
31
+ }
32
+ }
33
+ use_depthwise: true
34
+ override_base_feature_extractor_hyperparams: true
35
+ fpn {
36
+ min_level: 3
37
+ max_level: 7
38
+ additional_layer_depth: 128
39
+ }
40
+ }
41
+ box_coder {
42
+ faster_rcnn_box_coder {
43
+ y_scale: 10.0
44
+ x_scale: 10.0
45
+ height_scale: 5.0
46
+ width_scale: 5.0
47
+ }
48
+ }
49
+ matcher {
50
+ argmax_matcher {
51
+ matched_threshold: 0.5
52
+ unmatched_threshold: 0.5
53
+ ignore_thresholds: false
54
+ negatives_lower_than_unmatched: true
55
+ force_match_for_each_row: true
56
+ use_matmul_gather: true
57
+ }
58
+ }
59
+ similarity_calculator {
60
+ iou_similarity {
61
+ }
62
+ }
63
+ box_predictor {
64
+ weight_shared_convolutional_box_predictor {
65
+ conv_hyperparams {
66
+ regularizer {
67
+ l2_regularizer {
68
+ weight: 4e-05
69
+ }
70
+ }
71
+ initializer {
72
+ random_normal_initializer {
73
+ mean: 0.0
74
+ stddev: 0.01
75
+ }
76
+ }
77
+ activation: RELU_6
78
+ batch_norm {
79
+ decay: 0.997
80
+ scale: true
81
+ epsilon: 0.001
82
+ }
83
+ }
84
+ depth: 128
85
+ num_layers_before_predictor: 4
86
+ kernel_size: 3
87
+ class_prediction_bias_init: -4.6
88
+ share_prediction_tower: true
89
+ use_depthwise: true
90
+ }
91
+ }
92
+ anchor_generator {
93
+ multiscale_anchor_generator {
94
+ min_level: 3
95
+ max_level: 7
96
+ anchor_scale: 4.0
97
+ aspect_ratios: 1.0
98
+ aspect_ratios: 2.0
99
+ aspect_ratios: 0.5
100
+ scales_per_octave: 2
101
+ }
102
+ }
103
+ post_processing {
104
+ batch_non_max_suppression {
105
+ score_threshold: 1e-08
106
+ iou_threshold: 0.6
107
+ max_detections_per_class: 100
108
+ max_total_detections: 100
109
+ use_static_shapes: false
110
+ }
111
+ score_converter: SIGMOID
112
+ }
113
+ normalize_loss_by_num_matches: true
114
+ loss {
115
+ localization_loss {
116
+ weighted_smooth_l1 {
117
+ }
118
+ }
119
+ classification_loss {
120
+ weighted_sigmoid_focal {
121
+ gamma: 2.0
122
+ alpha: 0.25
123
+ }
124
+ }
125
+ classification_weight: 1.0
126
+ localization_weight: 1.0
127
+ }
128
+ encode_background_as_zeros: true
129
+ normalize_loc_loss_by_codesize: true
130
+ inplace_batchnorm_update: true
131
+ freeze_batchnorm: false
132
+ }
133
+ }
134
+ train_config {
135
+ batch_size: 4
136
+ data_augmentation_options {
137
+ random_horizontal_flip {
138
+ }
139
+ }
140
+ data_augmentation_options {
141
+ random_crop_image {
142
+ min_object_covered: 0.0
143
+ min_aspect_ratio: 0.75
144
+ max_aspect_ratio: 3.0
145
+ min_area: 0.75
146
+ max_area: 1.0
147
+ overlap_thresh: 0.0
148
+ }
149
+ }
150
+ sync_replicas: true
151
+ optimizer {
152
+ momentum_optimizer {
153
+ learning_rate {
154
+ cosine_decay_learning_rate {
155
+ learning_rate_base: 0.08
156
+ total_steps: 50000
157
+ warmup_learning_rate: 0.026666
158
+ warmup_steps: 1000
159
+ }
160
+ }
161
+ momentum_optimizer_value: 0.9
162
+ }
163
+ use_moving_average: false
164
+ }
165
+ fine_tune_checkpoint: "Tensorflow/workspace/pre-trained-models/ssd_mobilenet_v2_fpnlite_320x320_coco17_tpu-8/checkpoint/ckpt-0"
166
+ num_steps: 50000
167
+ startup_delay_steps: 0.0
168
+ replicas_to_aggregate: 8
169
+ max_number_of_boxes: 100
170
+ unpad_groundtruth_tensors: false
171
+ fine_tune_checkpoint_type: "detection"
172
+ fine_tune_checkpoint_version: V2
173
+ }
174
+ train_input_reader {
175
+ label_map_path: "Tensorflow/workspace/annotations/label_map.pbtxt"
176
+ tf_record_input_reader {
177
+ input_path: "Tensorflow/workspace/annotations/train.record"
178
+ }
179
+ }
180
+ eval_config {
181
+ metrics_set: "coco_detection_metrics"
182
+ use_moving_averages: false
183
+ }
184
+ eval_input_reader {
185
+ label_map_path: "Tensorflow/workspace/annotations/label_map.pbtxt"
186
+ shuffle: false
187
+ num_epochs: 1
188
+ tf_record_input_reader {
189
+ input_path: "Tensorflow/workspace/annotations/test.record"
190
+ }
191
+ }
eported_models/ssd_mobilnet_numberplate_region_detection/checkpoint/checkpoint ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ model_checkpoint_path: "ckpt-0"
2
+ all_model_checkpoint_paths: "ckpt-0"
3
+ all_model_checkpoint_timestamps: 1656053463.9657378
4
+ last_preserved_timestamp: 1656053462.6085548
eported_models/ssd_mobilnet_numberplate_region_detection/checkpoint/ckpt-0.data-00000-of-00001 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d1acb8bad133127a3eefd272141b4ff0d26f91425d17b0696afe1cff41ff5596
3
+ size 10479347
eported_models/ssd_mobilnet_numberplate_region_detection/checkpoint/ckpt-0.index ADDED
Binary file (26.2 kB). View file
 
eported_models/ssd_mobilnet_numberplate_region_detection/label_map.pbtxt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ item {
2
+ name:'np'
3
+ id:1
4
+ }
eported_models/ssd_mobilnet_numberplate_region_detection/pipeline.config ADDED
@@ -0,0 +1,191 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ model {
2
+ ssd {
3
+ num_classes: 1
4
+ image_resizer {
5
+ fixed_shape_resizer {
6
+ height: 320
7
+ width: 320
8
+ }
9
+ }
10
+ feature_extractor {
11
+ type: "ssd_mobilenet_v2_fpn_keras"
12
+ depth_multiplier: 1.0
13
+ min_depth: 16
14
+ conv_hyperparams {
15
+ regularizer {
16
+ l2_regularizer {
17
+ weight: 4e-05
18
+ }
19
+ }
20
+ initializer {
21
+ random_normal_initializer {
22
+ mean: 0.0
23
+ stddev: 0.01
24
+ }
25
+ }
26
+ activation: RELU_6
27
+ batch_norm {
28
+ decay: 0.997
29
+ scale: true
30
+ epsilon: 0.001
31
+ }
32
+ }
33
+ use_depthwise: true
34
+ override_base_feature_extractor_hyperparams: true
35
+ fpn {
36
+ min_level: 3
37
+ max_level: 7
38
+ additional_layer_depth: 128
39
+ }
40
+ }
41
+ box_coder {
42
+ faster_rcnn_box_coder {
43
+ y_scale: 10.0
44
+ x_scale: 10.0
45
+ height_scale: 5.0
46
+ width_scale: 5.0
47
+ }
48
+ }
49
+ matcher {
50
+ argmax_matcher {
51
+ matched_threshold: 0.5
52
+ unmatched_threshold: 0.5
53
+ ignore_thresholds: false
54
+ negatives_lower_than_unmatched: true
55
+ force_match_for_each_row: true
56
+ use_matmul_gather: true
57
+ }
58
+ }
59
+ similarity_calculator {
60
+ iou_similarity {
61
+ }
62
+ }
63
+ box_predictor {
64
+ weight_shared_convolutional_box_predictor {
65
+ conv_hyperparams {
66
+ regularizer {
67
+ l2_regularizer {
68
+ weight: 4e-05
69
+ }
70
+ }
71
+ initializer {
72
+ random_normal_initializer {
73
+ mean: 0.0
74
+ stddev: 0.01
75
+ }
76
+ }
77
+ activation: RELU_6
78
+ batch_norm {
79
+ decay: 0.997
80
+ scale: true
81
+ epsilon: 0.001
82
+ }
83
+ }
84
+ depth: 128
85
+ num_layers_before_predictor: 4
86
+ kernel_size: 3
87
+ class_prediction_bias_init: -4.6
88
+ share_prediction_tower: true
89
+ use_depthwise: true
90
+ }
91
+ }
92
+ anchor_generator {
93
+ multiscale_anchor_generator {
94
+ min_level: 3
95
+ max_level: 7
96
+ anchor_scale: 4.0
97
+ aspect_ratios: 1.0
98
+ aspect_ratios: 2.0
99
+ aspect_ratios: 0.5
100
+ scales_per_octave: 2
101
+ }
102
+ }
103
+ post_processing {
104
+ batch_non_max_suppression {
105
+ score_threshold: 1e-08
106
+ iou_threshold: 0.6
107
+ max_detections_per_class: 100
108
+ max_total_detections: 100
109
+ use_static_shapes: false
110
+ }
111
+ score_converter: SIGMOID
112
+ }
113
+ normalize_loss_by_num_matches: true
114
+ loss {
115
+ localization_loss {
116
+ weighted_smooth_l1 {
117
+ }
118
+ }
119
+ classification_loss {
120
+ weighted_sigmoid_focal {
121
+ gamma: 2.0
122
+ alpha: 0.25
123
+ }
124
+ }
125
+ classification_weight: 1.0
126
+ localization_weight: 1.0
127
+ }
128
+ encode_background_as_zeros: true
129
+ normalize_loc_loss_by_codesize: true
130
+ inplace_batchnorm_update: true
131
+ freeze_batchnorm: false
132
+ }
133
+ }
134
+ train_config {
135
+ batch_size: 4
136
+ data_augmentation_options {
137
+ random_horizontal_flip {
138
+ }
139
+ }
140
+ data_augmentation_options {
141
+ random_crop_image {
142
+ min_object_covered: 0.0
143
+ min_aspect_ratio: 0.75
144
+ max_aspect_ratio: 3.0
145
+ min_area: 0.75
146
+ max_area: 1.0
147
+ overlap_thresh: 0.0
148
+ }
149
+ }
150
+ sync_replicas: true
151
+ optimizer {
152
+ momentum_optimizer {
153
+ learning_rate {
154
+ cosine_decay_learning_rate {
155
+ learning_rate_base: 0.08
156
+ total_steps: 50000
157
+ warmup_learning_rate: 0.026666
158
+ warmup_steps: 1000
159
+ }
160
+ }
161
+ momentum_optimizer_value: 0.9
162
+ }
163
+ use_moving_average: false
164
+ }
165
+ fine_tune_checkpoint: "Tensorflow/workspace/pre-trained-models/ssd_mobilenet_v2_fpnlite_320x320_coco17_tpu-8/checkpoint/ckpt-0"
166
+ num_steps: 50000
167
+ startup_delay_steps: 0.0
168
+ replicas_to_aggregate: 8
169
+ max_number_of_boxes: 100
170
+ unpad_groundtruth_tensors: false
171
+ fine_tune_checkpoint_type: "detection"
172
+ fine_tune_checkpoint_version: V2
173
+ }
174
+ train_input_reader {
175
+ label_map_path: "Tensorflow/workspace/annotations/label_map.pbtxt"
176
+ tf_record_input_reader {
177
+ input_path: "Tensorflow/workspace/annotations/train.record"
178
+ }
179
+ }
180
+ eval_config {
181
+ metrics_set: "coco_detection_metrics"
182
+ use_moving_averages: false
183
+ }
184
+ eval_input_reader {
185
+ label_map_path: "Tensorflow/workspace/annotations/label_map.pbtxt"
186
+ shuffle: false
187
+ num_epochs: 1
188
+ tf_record_input_reader {
189
+ input_path: "Tensorflow/workspace/annotations/test.record"
190
+ }
191
+ }
eported_models/ssd_mobilnet_numberplate_region_detection/saved_model/saved_model.pb ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ccda1785409cb8a3b2e7c15d667d3acdc65a6c7e132c1b337e7e256bcb94794a
3
+ size 6790910
eported_models/ssd_mobilnet_numberplate_region_detection/saved_model/variables/variables.data-00000-of-00001 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b9b2231bd26467b5ea210a83a39d86d403686f11ed5651a3b90549ee9d78ac84
3
+ size 10590742
eported_models/ssd_mobilnet_numberplate_region_detection/saved_model/variables/variables.index ADDED
Binary file (22.1 kB). View file
 
requirements.txt ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ tensorflow == 2.11.0
2
+ streamlit == 1.15.2
3
+ Pillow == 9.3.0
4
+ streamlit-image-select == 0.5.1
5
+ pandas == 1.5.2
6
+ numpy == 1.23.4
7
+ opencv-python == 4.6.0.66
test_images/desktop.ini ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [LocalizedFileNames]
2
+ 6e52e238-927b-46e0-a8f1-5f77ef1ecf9f___3e7fd381-0ae5-4421-8a70-279ee0ec1c61_nissan-terrano-rear.jpg=@6e52e238-927b-46e0-a8f1-5f77ef1ecf9f___3e7fd381-0ae5-4421-8a70-279ee0ec1c61_nissan-terrano-rear,0
3
+ 6ec9d264-9eab-4027-bdcc-6f71c842ee75___3e7fd381-0ae5-4421-8a70-279ee0ec1c61_846635891_1_1080x720_nissan-terrano-xl-d-thp-110-ps-2013-diesel-dehra-dun.jpg=@6ec9d264-9eab-4027-bdcc-6f71c842ee75___3e7fd381-0ae5-4421-8a70-279ee0ec1c61_846635891_1_1080x720_nissan-terrano-xl-d-thp-110-ps-2013-diesel-dehra-dun,0
4
+ 7f7e27cc-930a-46cb-b3af-6e43da8b566d___3e7fd381-0ae5-4421-8a70-279ee0ec1c61_Nissan-Terrano-Petrol-Review-Images-Black-Front-Grille-720x480.jpg=@7f7e27cc-930a-46cb-b3af-6e43da8b566d___3e7fd381-0ae5-4421-8a70-279ee0ec1c61_Nissan-Terrano-Petrol-Review-Images-Black-Front-Grille-720x480,0
5
+ 5231116f-7a07-4ce2-b437-d34b497e7969___3e7fd381-0ae5-4421-8a70-279ee0ec1c61_844329566_3_1080x720_nissan-terrano-xe-d-2014-diesel-.jpg=@5231116f-7a07-4ce2-b437-d34b497e7969___3e7fd381-0ae5-4421-8a70-279ee0ec1c61_844329566_3_1080x720_nissan-terrano-xe-d-2014-diesel-,0
6
+ AN2.jpg=@AN2,0
7
+ AN5.jpg=@AN5,0
8
+ AP15.jpg=@AP15,0
9
+ BR13.jpg=@BR13,0
10
+ car-wbs-HR26CH3604_00000.jpg=@car-wbs-HR26CH3604_00000,0
11
+ car-wbs-KL20K7561_00000.jpg=@car-wbs-KL20K7561_00000,0
12
+ car-ybs-MH47N4570_00001.jpg=@car-ybs-MH47N4570_00001,0
13
+ GJ8.jpg=@GJ8,0
14
+ GJ9.jpg=@GJ9,0
15
+ JK19.jpg=@JK19,0
16
+ KA8.jpg=@KA8,0
17
+ video2_220.jpg=@video2_220,0
18
+ PB12.jpg=@PB12,0
19
+ PY2.jpg=@PY2,0
20
+ RJ5.jpg=@RJ5,0
21
+ SK8.jpg=@SK8,0
22
+ TR1.jpg=@TR1,0
23
+ UP1.jpg=@UP1,0
24
+ UP8.jpg=@UP8,0
test_images/test1.png ADDED
test_images/test2.png ADDED
test_images/test3.png ADDED
test_images/test4.jpg ADDED
test_images/test5.jpg ADDED
test_images/test6.jpg ADDED
test_images/test7.jpg ADDED
test_images/test8.jpg ADDED