import zmq import threading import qi import logging from robot_interface.endpoints.socket_base import SocketBase from robot_interface.state import state class VideoSender(SocketBase): def __init__(self, zmq_context, port=5556): super(VideoSender, self).__init__("video") self.create_socket(zmq_context, zmq.PUB, port, [(zmq.CONFLATE,1)]) def start_video_rcv(self): """ Prepares arguments for retrieving video images from Pepper and starts video loop on a separate thread. """ app = qi.Application() app.start() session = app.session video = session.service("ALVideoDevice") camera_index = 0 kQVGA = 2 kRGB = 11 FPS = 15 vid_stream_name = video.subscribeCamera("Pepper Video", camera_index, kQVGA, kRGB, FPS) thread = threading.Thread(target=self.video_rcv_loop, args=(video, vid_stream_name)) thread.start() def video_rcv_loop(self, vid_service, vid_stream_name): """ The main loop of retrieving video images from the robot. :param vid_service: The video service object that the active Qi session is connected to. :type vid_service: Object (Qi service object) :param vid_stream_name: The name of a camera subscription on the video service object vid_service :type vid_stream_name: String """ while not state.exit_event.is_set(): try: img = vid_service.getImageRemote(vid_stream_name) #Possibly limit images sent if queuing issues arise self.socket.send(img[6]) except: logging.warn("Failed to retrieve video image from robot.")