def _msg_cb(self, msg): rects, count = self.non_max_suppression_handler(msg.rects, self.thre) rects_msg = RectArray() rects_msg.header = msg.header rects_msg.rects = rects self.pub_rects.publish(rects_msg) count_msg = Int64() count_msg.data = count self.pub_count.publish(count_msg)
def _apply(self, img_msg): bridge = cv_bridge.CvBridge() img = bridge.imgmsg_to_cv2(img_msg, desired_encoding='bgr8') rects = [] dlib.find_candidate_object_locations(img, rects, min_size=self.min_size) ros_rect_array = RectArray() ros_rect_array.header = img_msg.header for d in rects: if (d.right() - d.left()) * (d.bottom() - d.top()) > self.max_size: continue cv2.rectangle(img, (d.left(), d.top()), (d.right(), d.bottom()), (255, 0, 0), 3) ros_rect_array.rects.append(Rect(x=d.left(), y=d.top(), width=d.right() - d.left(), height=d.bottom() - d.top())) imgmsg = bridge.cv2_to_imgmsg(img, encoding='bgr8') self.debug_pub_.publish(imgmsg) self.pub_.publish(ros_rect_array)
def _apply(self, img_msg): bridge = cv_bridge.CvBridge() img_bgr = bridge.imgmsg_to_cv2(img_msg, desired_encoding='bgr8') img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB) rects = [] dlib.find_candidate_object_locations(img_rgb, rects, min_size=self.min_size) ros_rect_array = RectArray() ros_rect_array.header = img_msg.header for d in rects: if (d.right() - d.left()) * (d.bottom() - d.top()) > self.max_size: continue cv2.rectangle(img_bgr, (d.left(), d.top()), (d.right(), d.bottom()), (255, 0, 0), 3) ros_rect_array.rects.append(Rect(x=d.left(), y=d.top(), width=d.right() - d.left(), height=d.bottom() - d.top())) imgmsg = bridge.cv2_to_imgmsg(img_bgr, encoding='bgr8') self.debug_pub_.publish(imgmsg) self.pub_.publish(ros_rect_array)
def callback(self, imgmsg): raw_image = None self.image_width = imgmsg.width self.image_height = imgmsg.height try: raw_image = self.bridge.imgmsg_to_cv2(imgmsg, desired_encoding='bgr8') except: rospy.logerr('failed transform image') return dataset = ImageDataset(pkg_dir, raw_image, self.templates_dir, thresh=self.thresh, image_name=str(imgmsg.header.stamp)) scores, w_array, h_array, label_list = calculate_scores( self.model, dataset) boxes, indices = nms(scores, w_array, h_array, dataset.thresh, label_list) output_image = plot_results(dataset.image_raw, boxes, label_list, indices, show=False, save_name=None) labels_msg = LabelArray() rects_msg = RectArray() original_size_rects_msg = RectArray() for i in range(len(indices)): rect_msg = Rect() label_msg = Label() original_size_rect_msg = Rect() box = boxes[i][None, :, :][0] x, y, width, height = self.check_out_of_image(box) rect_msg.x = x rect_msg.y = y rect_msg.width = width rect_msg.height = height original_size_rect_msg.x = x * 1 / self.resize_scale original_size_rect_msg.y = y * 1 / self.resize_scale original_size_rect_msg.width = width * 1 / self.resize_scale original_size_rect_msg.height = height * 1 / self.resize_scale # rect_msg.x = box[0][0] # rect_msg.y = box[0][1] # rect_msg.width = box[1][0] - box[0][0] # rect_msg.height = box[1][1] - box[0][1] label_msg.name = label_list[indices[i]] rects_msg.rects.append(rect_msg) labels_msg.labels.append(label_msg) original_size_rects_msg.rects.append(original_size_rect_msg) rects_msg.header = imgmsg.header labels_msg.header = imgmsg.header original_size_rects_msg.header = imgmsg.header self.labels_pub.publish(labels_msg) self.rects_pub.publish(rects_msg) self.original_size_rects_pub.publish(original_size_rects_msg) msg_viz = cv_bridge.CvBridge().cv2_to_imgmsg(output_image, encoding='bgr8') msg_viz.header = imgmsg.header self.pub_viz.publish(msg_viz)