src/jsk_perception/label_image_classifier.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 
3 import cv_bridge
4 from jsk_recognition_msgs.msg import ClassificationResult
5 from jsk_topic_tools import ConnectionBasedTransport
6 import numpy as np
7 import rospy
8 from sensor_msgs.msg import Image
9 
10 class LabelImageClassifier(ConnectionBasedTransport):
11 
12  classifier_name = 'label_image_classifier'
13 
14  def __init__(self):
15  super(LabelImageClassifier, self).__init__()
16  self.ignore_labels = rospy.get_param('~ignore_labels', [])
17  self.target_names = rospy.get_param('~target_names', [])
18  self.pub = self.advertise(
19  '~output', ClassificationResult, queue_size=1)
20 
21  def subscribe(self):
22  self.sub = rospy.Subscriber('~input', Image, self._cb)
23 
24  def unsubscribe(self):
25  self.sub.unregister()
26 
27  def _cb(self, imgmsg):
28  bridge = cv_bridge.CvBridge()
29  img = bridge.imgmsg_to_cv2(imgmsg)
30  label, proba = self._classify(img)
31  msg = ClassificationResult()
32  msg.header = imgmsg.header
33  msg.labels = [label]
34  msg.label_names = [self.target_names[label]]
35  msg.label_proba = [proba[label]]
36  msg.probabilities = proba
37  msg.classifier = self.classifier_name
38  msg.target_names = self.target_names
39  self.pub.publish(msg)
40 
41  def _classify(self, label_img):
42  counts = np.bincount(label_img.flatten(),
43  minlength=len(self.target_names))
44  counts[self.ignore_labels] = 0
45  label = np.argmax(counts)
46  proba = counts.astype(np.float32) / counts.sum()
47  return label, proba
jsk_perception.label_image_classifier.LabelImageClassifier.pub
pub
Definition: src/jsk_perception/label_image_classifier.py:18
jsk_perception.label_image_classifier.LabelImageClassifier._cb
def _cb(self, imgmsg)
Definition: src/jsk_perception/label_image_classifier.py:27
jsk_perception.label_image_classifier.LabelImageClassifier._classify
def _classify(self, label_img)
Definition: src/jsk_perception/label_image_classifier.py:41
jsk_perception.label_image_classifier.LabelImageClassifier.ignore_labels
ignore_labels
Definition: src/jsk_perception/label_image_classifier.py:16
jsk_perception.label_image_classifier.LabelImageClassifier.unsubscribe
def unsubscribe(self)
Definition: src/jsk_perception/label_image_classifier.py:24
jsk_perception.label_image_classifier.LabelImageClassifier.classifier_name
string classifier_name
Definition: src/jsk_perception/label_image_classifier.py:12
jsk_perception.label_image_classifier.LabelImageClassifier
Definition: src/jsk_perception/label_image_classifier.py:10
jsk_perception.label_image_classifier.LabelImageClassifier.sub
sub
Definition: src/jsk_perception/label_image_classifier.py:22
jsk_perception.label_image_classifier.LabelImageClassifier.__init__
def __init__(self)
Definition: src/jsk_perception/label_image_classifier.py:14
jsk_perception.label_image_classifier.LabelImageClassifier.target_names
target_names
Definition: src/jsk_perception/label_image_classifier.py:17
jsk_perception.label_image_classifier.LabelImageClassifier.subscribe
def subscribe(self)
Definition: src/jsk_perception/label_image_classifier.py:21


jsk_perception
Author(s): Manabu Saito, Ryohei Ueda
autogenerated on Fri May 16 2025 03:11:17