From 15a25c0fd40712c5af7506f51c58922a8b4ec4c5 Mon Sep 17 00:00:00 2001 From: Yoshiki Obinata <27789460+mqcmd196@users.noreply.github.com> Date: Fri, 31 Jan 2025 20:30:17 +0900 Subject: [PATCH] enable to change vocabulary runtime (#56) --- CMakeLists.txt | 1 + Detic | 2 +- node_script/node.py | 15 +++++++++++++++ package.xml | 1 + srv/CustomVocabulary.srv | 2 ++ 5 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 srv/CustomVocabulary.srv diff --git a/CMakeLists.txt b/CMakeLists.txt index ab1e2da..3c01fab 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,6 +15,7 @@ add_message_files( add_service_files( FILES DeticSeg.srv + CustomVocabulary.srv ) generate_messages( diff --git a/Detic b/Detic index 46f8317..3261b73 160000 --- a/Detic +++ b/Detic @@ -1 +1 @@ -Subproject commit 46f8317a0688b4b94e85816b5839a1dbca26d1e0 +Subproject commit 3261b730a2a11b4a52d684f4bc38aeb6c38b529b diff --git a/node_script/node.py b/node_script/node.py index 81cb306..1638c0a 100755 --- a/node_script/node.py +++ b/node_script/node.py @@ -11,6 +11,8 @@ from detic_ros.msg import SegmentationInfo from detic_ros.srv import DeticSeg, DeticSegRequest, DeticSegResponse +from detic_ros.srv import CustomVocabulary, CustomVocabularyRequest, CustomVocabularyResponse +from std_srvs.srv import Empty, EmptyRequest, EmptyResponse class DeticRosNode: @@ -36,6 +38,8 @@ def __init__(self, node_config: Optional[NodeConfig] = None): self.detic_wrapper = DeticWrapper(node_config) self.srv_handler = rospy.Service('~segment_image', DeticSeg, self.callback_srv) + self.vocab_srv_handler = rospy.Service('~custom_vocabulary', CustomVocabulary, self.custom_vocab_srv) + self.default_vocab_srv_handler = rospy.Service('~default_vocabulary', Empty, self.default_vocab_srv) if node_config.enable_pubsub: # As for large buff_size please see: @@ -113,6 +117,17 @@ def callback_srv(self, req: DeticSegRequest) -> DeticSegResponse: resp.debug_image = debug_image return resp + def custom_vocab_srv(self, req: CustomVocabularyRequest) -> CustomVocabularyResponse: + rospy.loginfo("Change vocabulary to {}".format(req.vocabulary)) + self.detic_wrapper.predictor.change_vocabulary(",".join(req.vocabulary)) + res = CustomVocabularyResponse() + return res + + def default_vocab_srv(self, req: EmptyRequest) -> EmptyResponse: + rospy.loginfo("Change to default vocabulary") + self.detic_wrapper.predictor.set_defalt_vocabulary() + res = EmptyResponse() + return res if __name__ == '__main__': rospy.init_node('detic_node', anonymous=True) diff --git a/package.xml b/package.xml index e8bd52b..06fd47a 100644 --- a/package.xml +++ b/package.xml @@ -11,6 +11,7 @@ message_generation message_runtime sensor_msgs + std_srvs jsk_recognition_msgs cv_bridge diff --git a/srv/CustomVocabulary.srv b/srv/CustomVocabulary.srv new file mode 100644 index 0000000..d45e036 --- /dev/null +++ b/srv/CustomVocabulary.srv @@ -0,0 +1,2 @@ +string[] vocabulary +---