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
+---