hr16 commited on
Commit
aec7a65
·
verified ·
1 Parent(s): 1e2d922

Create utils.py

Browse files
Files changed (1) hide show
  1. utils.py +44 -0
utils.py ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import cv2
2
+ import numpy as np
3
+ import onnxruntime as ort
4
+
5
+ def preprocess(image, size=(640, 640)):
6
+ h, w = image.shape[:2]
7
+ max_size = max(h, w)
8
+ scale_factor = size[0] / max_size
9
+ pad_h = (max_size - h) // 2
10
+ pad_w = (max_size - w) // 2
11
+ pad_image = np.zeros((max_size, max_size, 3), dtype=image.dtype)
12
+ pad_image[pad_h:h + pad_h, pad_w:w + pad_w] = image
13
+ image = cv2.resize(pad_image, size,
14
+ interpolation=cv2.INTER_LINEAR).astype('float32')
15
+ image /= 255.0
16
+ image = image[None]
17
+ return image, scale_factor, (pad_h, pad_w)
18
+
19
+ def inference(ort_session,
20
+ ori_image,
21
+ size=(640, 640),
22
+ **kwargs):
23
+ # normal export
24
+ # with NMS and postprocessing
25
+ h, w = ori_image.shape[:2]
26
+ image, scale_factor, pad_param = preprocess(ori_image[:, :, [2, 1, 0]],
27
+ size)
28
+ input_ort = ort.OrtValue.ortvalue_from_numpy(image.transpose((0, 3, 1, 2)))
29
+ results = ort_session.run(["num_dets", "labels", "scores", "boxes"],
30
+ {"images": input_ort})
31
+ num_dets, labels, scores, bboxes = results
32
+ num_dets = num_dets[0][0]
33
+ labels = labels[0, :num_dets]
34
+ scores = scores[0, :num_dets]
35
+ bboxes = bboxes[0, :num_dets]
36
+
37
+ bboxes -= np.array(
38
+ [pad_param[1], pad_param[0], pad_param[1], pad_param[0]])
39
+ bboxes /= scale_factor
40
+ bboxes[:, 0::2] = np.clip(bboxes[:, 0::2], 0, w)
41
+ bboxes[:, 1::2] = np.clip(bboxes[:, 1::2], 0, h)
42
+ bboxes = bboxes.round().astype('int')
43
+
44
+ return labels, scores, bboxes