Files
pepperplus-ri/src/robot_interface/endpoints/video_sender.py

62 lines
2.1 KiB
Python

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.
:param robot_ip: The ip address of the robot to connect with.
:type robot_ip: String
:param port: The port of the robot.
:type port: int
:param socket: The ZMQ socket to send the video images over.
:type: VideoSender
"""
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_stream: The name of a camera subscription on the video service object vid_service
:type vid_stream: String
:param vid_service: The video service object that the active Qi session is connected to.
:type vid_service: Object (Qi service object)
:param socket: The ZMQ socket to send the video images over.
:type: VideoSender
"""
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.")