From d91bc5aba55c3a50756d1070533838df67807f1d Mon Sep 17 00:00:00 2001 From: Gustavo David Cordova Cardenas <99350669+GustavoDCC@users.noreply.github.com> Date: Sun, 5 May 2024 10:18:36 +0200 Subject: [PATCH] (color_extractor) Create a node listener and call service (#228) * Create a node listener and call service * Edit node name * Make class for service client * Add executable script * Add service argument and start subscriber after client * Add rospy argument filter --- .../CMakeLists.txt | 1 + .../scripts/get_colors_stream | 35 +++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100755 image_recognition_color_extractor/scripts/get_colors_stream diff --git a/image_recognition_color_extractor/CMakeLists.txt b/image_recognition_color_extractor/CMakeLists.txt index 4c767b9e..1f2ecc93 100644 --- a/image_recognition_color_extractor/CMakeLists.txt +++ b/image_recognition_color_extractor/CMakeLists.txt @@ -10,6 +10,7 @@ catkin_package() install(PROGRAMS scripts/color_extractor_node scripts/get_colors + scripts/get_colors_stream DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} ) diff --git a/image_recognition_color_extractor/scripts/get_colors_stream b/image_recognition_color_extractor/scripts/get_colors_stream new file mode 100755 index 00000000..2572bb6b --- /dev/null +++ b/image_recognition_color_extractor/scripts/get_colors_stream @@ -0,0 +1,35 @@ +#!/usr/bin/env python +import argparse + +import rospy + +from sensor_msgs.msg import Image + +from image_recognition_msgs.srv import Recognize + +class ExtractColorClient: + def __init__(self, image_topic, color_service): + self.color_proxy = rospy.ServiceProxy(color_service, Recognize) + self.color_proxy.wait_for_service(timeout=20) + + # Subscriber will start immediately + self.image_sub = rospy.Subscriber(image_topic, Image, self.color_callback) + + def color_callback(self, msg): + # Simply print out values in our custom message. + colors = self.color_proxy(msg) + rospy.loginfo(colors) + +if __name__ == '__main__': + + myargs = rospy.myargv() + parser = argparse.ArgumentParser(description='Get dominant colors from image') + parser.add_argument('--topic', required=False, default='/image', type=str, help='Topic') + parser.add_argument('--service', required=False, default='extract_color', type=str, help='Service') + args = parser.parse_args(myargs[1:]) + + rospy.init_node('color_extractor_stream') + + extract_color_client = ExtractColorClient(args.topic, args.service) + + rospy.spin()