Beispiel #1
0
class camera_receiver(object):
    def __init__(self, name, topic, msgtype, verbose=False):
        self.topic = topic
        self.msgtype = msgtype
        self.name = name

        self.bridge = CvBridge()
        self.convertor = self.convertor_query()
        self.verbose = verbose
        self.subthread = None
        self.ros_image = LifoQueue(maxsize=5)

    def callback(self, image):
        if self.ros_image.full():
            #self.ros_image.get()
            self.ros_image.empty()
        self.ros_image.put(image)

    def __call__(self):
        def monitor(threadnam):
            # disable_signals could set to be true in the future
            #rospy.init_node(self.name,anonymous=True)
            rospy.Subscriber(self.topic, self.msgtype, self.callback)

        #monitor()
        #rospy.spin()
        self.subthread = thread.start_new_thread(monitor, (self.name, ))

    def convertor_query(self):
        if self.msgtype == Image:

            def bridge(image, **args):
                return self.bridge.imgmsg_to_cv2(image, **args)

            return bridge
        elif self.msgtype == CompressedImage:

            def bridge(image, **args):
                img_array_1d = np.fromstring(image.data, np.uint8)
                cv_img = cv2.imdecode(img_array_1d,
                                      1)  #cv2.CV_LOAD_IMAGE_COLOR)
                return cv_img

            return bridge
        else:
            print(
                "the msgtype for this receiver in only support sensor_msgs.msg.Image and sensor_msgs.msg.CompressedImage"
            )
            self.__del__()

    def spit(self, **args):
        # desired_encoding="passthrough"
        if self.verbose:
            print('received image of type: "%s"' % ros_data.format)
        screen = self.convertor(self.ros_image.get(), **args)
        return screen

    def __del__(self):
        print("the camera_receiver {} was deleted".format(self.name))
Beispiel #2
0
class Stack(object):
    """docstring for stack"""
    def __init__(self, maxsize):
        if maxsize > 65535:
            self.throw('StackOverflowError')
        self.queue = LifoQueue(maxsize)

    # 栈顶元素出栈,并将其返回
    def pop(self):
        isEmpty = self.queue.empty()
        if isEmpty:
            self.throw('this stack is null ')
        else:
            return self.queue.get()

    # 推送一个元素至栈顶
    def push(self, value):
        isFull = self.queue.full()
        if isFull:
            self.throw('this stack is full')
        else:
            self.queue.put(value)

    def throw(self, msg):
        raise BaseException(msg)

    # 获取queue的队列内容
    def list(self):
        return self.queue.queue

    # 清空队列
    def clear(self):
        isEmpty = self.queue.empty()
        if not isEmpty:
            self.queue.get()
            self.clear()
Beispiel #3
0
from Queue import Queue, LifoQueue, PriorityQueue

q = Queue(maxsize=5)
lq = LifoQueue(maxsize=6)
pq = PriorityQueue(maxsize=5)

for i in range(5):
    q.put(i)
    lq.put(i)
    pq.put(i)

print "FIFO queue: %s, is empty: %s, size: %s, is full: %s" %(q.queue,q.empty(),q.qsize(),q.full())
print "LIFO queue: %s, is empty: %s, size: %s, is full: %s" %(lq.queue,lq.empty(),lq.qsize(),lq.full())
print "Priority queue: %s, is empty: %s, size: %s, is full: %s" %(pq.queue,pq.empty(),pq.qsize(),pq.full())

print q.get(), lq.get(), pq.get()

print "FIFO queue: %s, is empty: %s, size: %s, is full: %s" %(q.queue,q.empty(),q.qsize(),q.full())
print "LIFO queue: %s, is empty: %s, size: %s, is full: %s" %(lq.queue,lq.empty(),lq.qsize(),lq.full())
print "Priority queue: %s, is empty: %s, size: %s, is full: %s" %(pq.queue,pq.empty(),pq.qsize(),pq.full())
from Queue import LifoQueue

stack = LifoQueue(maxsize=3)

print(stack.qsize())

stack.put('a')
stack.put('b')
stack.put('c')

print("Full: ", stack.full())
print("Size: ", stack.qsize())

print('\nElements poped from the stack')
print(stack.get())
print(stack.get())
print(stack.get())

print("Empty: ", stack.empty())