示例#1
0
def get_test_bounding_boxes():

    Helipad = BoundingBox()
    Helipad.probability = 0.5
    Helipad.xmin = 312
    Helipad.ymin = 120
    Helipad.xmax = 337
    Helipad.ymax = 148
    Helipad.id = 2
    Helipad.Class = "Helipad"

    H = BoundingBox()
    H.probability = 0.5
    H.xmin = 320
    H.ymin = 128
    H.xmax = 330
    H.ymax = 138
    H.id = 0
    H.Class = "H"

    Arrow = BoundingBox()
    Arrow.probability = 0.5
    Arrow.xmin = 333
    Arrow.ymin = 140
    Arrow.xmax = 335
    Arrow.ymax = 143
    Arrow.id = 1
    Arrow.Class = "Arrow"

    bbs = BoundingBoxes()
    bbs.bounding_boxes = [Helipad, H, Arrow]
    return bbs
示例#2
0
    def callback(self, data):
        print('\n', 'Predicting')
        # try:
        #   cv_image = self.bridge.imgmsg_to_cv2(data, "bgr8")
        # except CvBridgeError as e:
        #   print(e)
        # cv_image = cv2.copyMakeBorder(cv_image, 100, 100, 100, 100, cv2.BORDER_CONSTANT, value=[85, 120, 68])
        # cv_image = cv2.imread("pic_buffer/R.png")
        # cv2.imwrite("pic_buffer/R.png", cv_image)

        # im = array_to_image(cv_image)
        # dn.rgbgr_image(im)
        # # print(dn.detect(net, meta, im))
        # print("===")
        r = []
        img = cv2.imread("pic_buffer/1_R.png")
        sp = img.shape
        r += self.subpredict(0, int(sp[0] / 2), 0, sp[1])
        r += self.subpredict(int(sp[0] / 2), sp[0], 0, sp[1])
        r += self.subpredict(int(sp[0] / 4), int(sp[0] * 3 / 4), 0, sp[1])
        r += self.subpredict(0, sp[0], 0, int(sp[1] / 2))
        r += self.subpredict(0, sp[0], int(sp[1] / 2), sp[1])
        r += self.subpredict(0, sp[0], int(sp[1] / 3), int(sp[1] * 2 / 3))
        r += self.subpredict(0, sp[0], 0, int(sp[1] * 2 / 3))
        r += self.subpredict(0, sp[0], int(sp[1] / 3), sp[1])
        r += self.subpredict(0, int(sp[0] * 2 / 3), 0, sp[1])
        r += self.subpredict(int(sp[0] / 3), sp[0], 0, sp[1])
        r = self.removeDuplicate(r)
        print()
        img = self.drawCrossings(img, r)
        cv2.imwrite("pic_buffer/2_D.png", img)

        boxes = BoundingBoxes()
        print('\n', 'Predict result:')
        for i in range(len(r)):
            box = BoundingBox()
            print('    ', r[i][0], r[i][1] * 100, '%')
            box.Class = r[i][0].decode('utf-8')
            box.probability = r[i][1]
            box.id = i
            box.xmin = int(r[i][2][0])
            box.ymin = int(r[i][2][1])
            box.xmax = int(r[i][2][2])
            box.ymax = int(r[i][2][3])
            boxes.bounding_boxes.append(box)
            # if b'endpoint' == r[i][0]:
            #     print('\t', r[i][0], r[i][1]*100, '%')
            print('    ', int(r[i][2][0]), int(r[i][2][1]), int(r[i][2][2]),
                  int(r[i][2][3]))
            # if b'cross' == r[i][0]:
            #     print('\t', r[i][0], r[i][1]*100, '%')
            #     # print('\t', r[i][2])
        print('\n', 'Darknet waiting for rgb_img')
        time.sleep(0.5)
        try:
            self.boxes_pub.publish(boxes)
        except CvBridgeError as e:
            print(e)
示例#3
0
    def create_d_msgs_box(self, track):
        one_box = BoundingBox()

        one_box.id = int(track.id[:3], 16)
        one_box.class_id = "face"
        one_box.probability = float(track.score)
        one_box.xmin = int(track.box[0])
        one_box.ymin = int(track.box[1])
        one_box.xmax = int(track.box[2])
        one_box.ymax = int(track.box[3])

        return one_box
示例#4
0
 def GetBBoxesMsg(self, label_file: str):
     output_bboxes_msg = BoundingBoxes()
     with open(label_file, 'r') as file:
         id_ = 0
         for line in file:
             gt = line.split()
             bbox_msg = BoundingBox()
             #print(gt)
             bbox_msg.xmin = int(gt[5])
             bbox_msg.ymin = int(gt[6])
             bbox_msg.xmax = int(gt[7])
             bbox_msg.ymax = int(gt[8])
             bbox_msg.id = id_
             bbox_msg.Class = gt[0]
             id_ += 1
             output_bboxes_msg.bounding_boxes.append(bbox_msg)
     return output_bboxes_msg
    def boxcallback(self, msg):
        dets = []
        for i in range(len(msg.bounding_boxes)):
            bbox = msg.bounding_boxes[i]
            dets.append(
                np.array([
                    bbox.xmin, bbox.ymin, bbox.xmax, bbox.ymax,
                    bbox.probability
                ]))
        dets = np.array(dets)
        start_time = time.time()
        trackers = self.update(dets)
        cycle_time = time.time() - start_time
        print(cycle_time)

        r = BoundingBoxes()
        rb = BoundingBox()
        for d in range(len(trackers)):
            rb.probability = 1
            rb.xmin = trackers[d, 0]
            rb.ymin = trackers[d, 1]
            rb.xmax = trackers[d, 2]
            rb.ymax = trackers[d, 3]
            rb.id = trackers[d, 4]
            rb.Class = 'tracked'
            r.bounding_boxes.append(rb)
            if self.img_in == 1 and self.display:
                res = trackers[d].astype(np.int32)
                rgb = self.colours[res[4] % 32, :] * 255
                cv2.rectangle(self.img, (res[0], res[1]), (res[2], res[3]),
                              (rgb[0], rgb[1], rgb[2]), 2)
                cv2.putText(self.img, "ID : %d" % (res[4]), (res[0], res[1]),
                            cv2.FONT_HERSHEY_SIMPLEX, 0.8, (200, 85, 200), 2)
        if self.img_in == 1 and self.display:
            try:
                self.image = self.bridge.cv2_to_imgmsg(self.img, "bgr8")
                self.image.header.stamp = rospy.Time.now()
                self.pubimage.publish(self.image)
            except CvBridgeError as e:
                pass
        r.header.stamp = rospy.Time.now()
        self.pubb.publish(r)
        return
示例#6
0
            start_time = time.time()
            if mot_tracker.bbox_checkin==1:
                trackers = mot_tracker.update(mot_tracker.dets)
                mot_tracker.bbox_checkin=0
            else:
                trackers = mot_tracker.update(np.empty((0,5)))

            r = BoundingBoxes()
            for d in range(len(trackers)):
                rb = BoundingBox()
                rb.probability=1
                rb.xmin = int(trackers[d,0])
                rb.ymin = int(trackers[d,1])
                rb.xmax = int(trackers[d,2])
                rb.ymax = int(trackers[d,3])
                rb.id = int(trackers[d,4])
                rb.Class = 'tracked'
                r.bounding_boxes.append(rb)
                if mot_tracker.img_in==1 and mot_tracker.display:
                    res = trackers[d].astype(np.int32)
                    rgb=colours[res[4]%32,:]*255
                    cv2.rectangle(mot_tracker.img, (res[0],res[1]), (res[2],res[3]), (rgb[0],rgb[1],rgb[2]), 6)
                    cv2.putText(mot_tracker.img, "ID : %d"%(res[4]), (res[0],res[1]), cv2.FONT_HERSHEY_SIMPLEX, 1.6, (200,85,200), 6)
            if mot_tracker.img_in==1 and mot_tracker.display:
                try : 
                    mot_tracker.image = mot_tracker.bridge.cv2_to_imgmsg(mot_tracker.img, "bgr8")
                    mot_tracker.image.header.stamp = rospy.Time.now()
                    mot_tracker.pubimage.publish(mot_tracker.image)
                except CvBridgeError as e:
                    pass
                
示例#7
0
    def __raw_image_callback(self, data):
        self.image_header = data.header
        raw_image = self.bridge.imgmsg_to_cv2(data).astype(np.uint8)
        if len(raw_image.shape) <= 2:
            return
        self.image = raw_image

        # 1. get SORT bounding boxes

        new_bboxes_sort = []
        if len(self.new_bboxes) != 0:
            new_bboxes = copy.deepcopy(self.new_bboxes)
            self.new_bboxes = []
            for bbox in new_bboxes:
                new_bboxes_sort.append(
                    np.asarray((bbox.xmin, bbox.ymin, bbox.xmax, bbox.ymax,
                                bbox.probability)))
            new_bboxes_sort = np.asarray(new_bboxes_sort)
            # 2. update tracker
            trackers = self.mot_tracker.update(new_bboxes_sort)
            matched, _, _ = associate_detections_to_trackers(
                new_bboxes_sort, trackers, 0.3)

        else:
            # 2. update tracker
            trackers = self.mot_tracker.update()
            if len(self.bboxes) == 0:
                matched = np.empty((0, 2), dtype=int)
            else:
                new_bboxes = copy.deepcopy(self.bboxes)
                for bbox in new_bboxes:
                    new_bboxes_sort.append(
                        np.asarray((bbox.xmin, bbox.ymin, bbox.xmax, bbox.ymax,
                                    bbox.probability)))
                new_bboxes_sort = np.asarray(new_bboxes_sort)
                matched, _, _ = associate_detections_to_trackers(
                    new_bboxes_sort, trackers, 0.3)

        # 3. update current bounding boxes & extract tracking trace
        # 1). id is the id from tracker;
        # 2). class is the latest class from detection;
        # 3). probability is the latest probability from detection;
        self.bboxes = []
        ids = []
        if trackers.shape[0] != 0:
            for tracker in trackers:
                bbox = BoundingBox()
                print(tracker)
                bbox.xmin, bbox.ymin, bbox.xmax, bbox.ymax = int(
                    tracker[0]), int(tracker[1]), int(tracker[2]), int(
                        tracker[3])
                bbox.id = int(tracker[4])
                self.bboxes.append(bbox)
                id = int(bbox.id)
                center = (int((bbox.xmin + bbox.xmax) / 2.),
                          int((bbox.ymin + bbox.ymax) / 2.))
                if self.traces.get(id) == None:
                    self.traces[id] = [center]
                else:
                    self.traces[id].append(center)
                ids.append(id)

        if matched.shape[0] != 0:
            for pair in matched:
                original_id = pair[0]
                new_id = pair[1]
                original_bbox = new_bboxes[original_id]
                self.bboxes[new_id].Class = original_bbox.Class
                self.bboxes[new_id].probability = original_bbox.probability

        del_ids = []
        for k in self.traces:
            if k not in ids:
                del_ids.append(k)

        for k in del_ids:
            del self.traces[k]

        # 4. publish current bounding boxes
        self.__publish_bbox()

        # 5. publish tracking image
        self.__publish_tracking_image(self.image, self.bboxes)
示例#8
0
            start_time = time.time()
            if mot_tracker.bbox_checkin == 1:
                trackers = mot_tracker.update(mot_tracker.dets)
                mot_tracker.bbox_checkin = 0
            else:
                trackers = mot_tracker.update(np.empty((0, 5)))

            r = BoundingBoxes()
            for d in range(len(trackers)):
                rb = BoundingBox()
                rb.probability = 1
                rb.xmin = trackers[d, 0]
                rb.ymin = trackers[d, 1]
                rb.xmax = trackers[d, 2]
                rb.ymax = trackers[d, 3]
                rb.id = trackers[d, 4]
                rb.Class = 'tracked'
                r.bounding_boxes.append(rb)
                if mot_tracker.img_in == 1 and mot_tracker.display:
                    res = trackers[d].astype(np.int32)
                    rgb = colours[res[4] % 32, :] * 255
                    cv2.rectangle(mot_tracker.img, (res[0], res[1]),
                                  (res[2], res[3]), (rgb[0], rgb[1], rgb[2]),
                                  6)
                    cv2.putText(mot_tracker.img, "ID : %d" % (res[4]),
                                (res[0], res[1]), cv2.FONT_HERSHEY_SIMPLEX,
                                1.6, (200, 85, 200), 6)
            if mot_tracker.img_in == 1 and mot_tracker.display:
                try:
                    mot_tracker.image = mot_tracker.bridge.cv2_to_imgmsg(
                        mot_tracker.img, "bgr8")