vqa_request.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 
3 import argparse
4 import actionlib
5 import cv2
6 from cv_bridge import CvBridge
7 from jsk_recognition_msgs.msg import VQATaskAction, VQATaskActionGoal
8 import json
9 import rospy # for logging
10 import os
11 
13  def __init__(self):
14  self.ac_caption_client = actionlib.SimpleActionClient("/vqa/vqa_server", VQATaskAction)
15  self._bridge = CvBridge()
16 
17  def request(self, questions_path, image_path, output_dir=None):
18  self.ac_caption_client.wait_for_server()
19  caption_goal = VQATaskActionGoal()
20  cv_image = cv2.imread(image_path)
21  image = self._bridge.cv2_to_imgmsg(cv_image, "bgr8")
22  caption_goal.goal.image = image
23  with open(questions_path) as f:
24  for q in f:
25  caption_goal.goal.questions.append(q)
26  self.ac_caption_client.send_goal(caption_goal.goal)
27  self.ac_caption_client.wait_for_result()
28  caption_result = self.ac_caption_client.get_result()
29  result = {}
30  for r in caption_result.result.result:
31  result[r.question] = r.answer
32  image_name = os.path.splitext(os.path.basename(image_path))[0]
33  json_name = image_name + ".json"
34  if output_dir:
35  save_path = os.path.join(output_dir, json_name)
36  else:
37  save_path = os.path.join(os.path.dirname(image_path), json_name)
38  with open(save_path, "w") as f:
39  json.dump(result, f, indent=4, separators=(',', ': '))
40 
41 parser = argparse.ArgumentParser(description="CLI interface for VQA action client")
42 parser.add_argument("questions_path", help="Question text file path of VQA input", type=str)
43 parser.add_argument("image_path", help="Image file path of VQA input", type=str)
44 parser.add_argument("-o", "--output", default=None)
45 
46 args = parser.parse_args()
47 
48 if __name__ == "__main__":
49  rospy.init_node("vqa_request_client", anonymous=True)
50  client = VQAClient()
51  questions_path = args.questions_path
52  image_path = args.image_path
53  output = args.output
54  client.request(questions_path, image_path, output)
object
vqa_request.VQAClient._bridge
_bridge
Definition: vqa_request.py:15
vqa_request.VQAClient
Definition: vqa_request.py:12
vqa_request.VQAClient.__init__
def __init__(self)
Definition: vqa_request.py:13
actionlib::SimpleActionClient
vqa_request.VQAClient.request
def request(self, questions_path, image_path, output_dir=None)
Definition: vqa_request.py:17
vqa_request.VQAClient.ac_caption_client
ac_caption_client
Definition: vqa_request.py:14


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