Spaces:
Sleeping
Sleeping
| import cv2 | |
| import nms | |
| class PostProcessor: | |
| def filter_result(self): | |
| boxes = self.result[:4, :] | |
| scores = self.result[5] | |
| mask = scores > 0.35 # boolean mask | |
| if mask.any(): # at least one score passes the threshold | |
| filtered_boxes = boxes[:, mask] | |
| filtered_scores = scores[mask] | |
| # Convert to list of tensors to mimic original behavior | |
| filtered_boxes = [filtered_boxes[:, i] for i in range(filtered_boxes.shape[1])] | |
| filtered_scores = filtered_scores.tolist() | |
| else: | |
| filtered_boxes = [] | |
| filtered_scores = [] | |
| return filtered_boxes, filtered_scores | |
| def draw_bbox(self, nms_boxes): | |
| for box in nms_boxes: | |
| box_np = box.cpu().numpy() | |
| x, y, w, h = box_np | |
| x1 = int((x - w / 2)) | |
| y1 = int((y - h / 2)) | |
| x2 = int(x1 + w) | |
| y2 = int(y1 + h) | |
| cv2.rectangle(self.image, (x1, y1), (x2, y2), (0, 0, 255), 2) | |
| def put_inference_time(self): | |
| text = f"Inference: {self.time:.1f} ms" | |
| font = cv2.FONT_HERSHEY_SIMPLEX | |
| font_scale = 0.7 | |
| thickness = 2 | |
| org = (10, 30) # top-left corner | |
| color = (0, 255, 0) # green (BGR) | |
| cv2.putText(self.image, text, org, font, font_scale, color, thickness) | |
| def set_image(self, image): | |
| self.image = image | |
| def set_result(self, result): | |
| self.result = result | |
| def set_time(self, time): | |
| self.time = time | |
| def get_frame(self): | |
| filtered_boxes, filtered_scores = self.filter_result() | |
| if len(filtered_boxes) > 0: | |
| distinct_indices = nms.non_max_suppression(filtered_boxes, filtered_scores, iou_threshold=0.5) | |
| nms_boxes = [filtered_boxes[i] for i in distinct_indices] | |
| else: | |
| nms_boxes = [] | |
| self.draw_bbox(nms_boxes) | |
| self.put_inference_time() | |
| return self.image |