Exemple #1
0
    def __init__(self, config, img_queue, imu_queue, gt_queue, viewer=None):
        
        self.config = config
        self.viewer = viewer

        self.img_queue = img_queue
        self.imu_queue = imu_queue
        self.feature_queue = Queue()

        self.gt_queue = gt_queue

        self.image_processor = ImageProcessor(config)
        self.orcvio = ORCVIO(config)

        self.img_thread = Thread(target=self.process_img)
        self.imu_thread = Thread(target=self.process_imu)
        self.vio_thread = Thread(target=self.process_feature)
        self.gt_thread = Thread(target=self.process_gt)

        self.img_thread.start()
        self.imu_thread.start()
        self.vio_thread.start()
        self.gt_thread.start()

        self.first_gt_flag = False 
Exemple #2
0
def upload_image():
    if request.method == "POST":
        if request.files:
            image = request.files["image"]
            if ImageProcessor.valid_format(image.filename):
                if 'ico' in request.form:
                    result_icon, icon_filename = ImageProcessor.create_ico(
                        image)
                    return send_file(result_icon,
                                     as_attachment=True,
                                     attachment_filename=icon_filename)
                elif 'icns' in request.form:
                    result_icon, icon_filename = ImageProcessor.create_icns(
                        image)
                    return send_file(result_icon,
                                     as_attachment=True,
                                     attachment_filename=icon_filename)
                else:
                    error = 'Icon format is not selected.'
                    return render_template('upload.html', error=error)

            else:
                error = 'Invalid image format.'
                if image.filename == '':
                    error = 'Image is not selected.'
                return render_template('upload.html', error=error)
    return render_template('upload.html', error=False)
Exemple #3
0
class VIO(object):
    def __init__(self, config, img_queue, imu_queue):
        self.config = config
        self.img_queue = img_queue
        self.imu_queue = imu_queue

        self.image_processor = ImageProcessor(config)
        self.msckf = MSCKF(config)

        self.img_thread = Thread(target=self.process_img)
        self.imu_thread = Thread(target=self.process_imu)

        self.img_thread.start()
        self.imu_thread.start()

    def process_img(self):
        while True:
            img_msg = self.img_queue.get()
            if img_msg is None:
                return

            cv2.imshow('cam0', img_msg.cam0_image)
            cv2.waitKey(1)

            feature_msg = self.image_processor.stareo_callback(img_msg)
            self.msckf.feature_callback(feature_msg)

    def process_imu(self):
        while True:
            imu_msg = self.imu_queue.get()
            if imu_msg is None:
                return

            self.image_processor.imu_callback(imu_msg)
            self.msckf.imu_callback(imu_msg)
Exemple #4
0
class VIO(object):
    def __init__(self, config, img_queue, imu_queue, viewer=None):
        self.config = config
        self.viewer = viewer

        self.img_queue = img_queue
        self.imu_queue = imu_queue
        self.feature_queue = Queue()

        self.image_processor = ImageProcessor(config)
        self.msckf = MSCKF(config)

        self.img_thread = Thread(target=self.process_img)
        self.imu_thread = Thread(target=self.process_imu)
        self.vio_thread = Thread(target=self.process_feature)
        self.img_thread.start()
        self.imu_thread.start()
        self.vio_thread.start()

    def process_img(self):
        while True:
            img_msg = self.img_queue.get()
            if img_msg is None:
                self.feature_queue.put(None)
                return
            # print('img_msg', img_msg.timestamp)

            if self.viewer is not None:
                self.viewer.update_image(img_msg.cam0_image)

            feature_msg = self.image_processor.stereo_callback(img_msg)

            if feature_msg is not None:
                self.feature_queue.put(feature_msg)

    def process_imu(self):
        while True:
            imu_msg = self.imu_queue.get()
            if imu_msg is None:
                return
            # print('imu_msg', imu_msg.timestamp)

            self.image_processor.imu_callback(imu_msg)
            self.msckf.imu_callback(imu_msg)

    def process_feature(self):
        while True:
            feature_msg = self.feature_queue.get()
            if feature_msg is None:
                return
            print('feature_msg', feature_msg.timestamp)
            result = self.msckf.feature_callback(feature_msg)

            if result is not None and self.viewer is not None:
                self.viewer.update_pose(result.cam0_pose)
Exemple #5
0
    def __init__(self, config, img_queue, imu_queue):
        self.config = config
        self.img_queue = img_queue
        self.imu_queue = imu_queue

        self.image_processor = ImageProcessor(config)
        self.msckf = MSCKF(config)

        self.img_thread = Thread(target=self.process_img)
        self.imu_thread = Thread(target=self.process_imu)

        self.img_thread.start()
        self.imu_thread.start()
Exemple #6
0
    def __init__(self, config, img_queue, imu_queue, viewer=None):
        self.config = config
        self.viewer = viewer

        self.img_queue = img_queue
        self.imu_queue = imu_queue
        self.feature_queue = Queue()

        self.image_processor = ImageProcessor(config)
        self.msckf = MSCKF(config)

        self.img_thread = Thread(target=self.process_img)
        self.imu_thread = Thread(target=self.process_imu)
        self.vio_thread = Thread(target=self.process_feature)
        self.img_thread.start()
        self.imu_thread.start()
        self.vio_thread.start()
Exemple #7
0
    def __init__(self, config, img_queue, imu_queue, pos_queue, viewer=None):
        self.config = config
        self.viewer = viewer

        self.img_queue = img_queue
        self.imu_queue = imu_queue
        self.pos_queue = pos_queue
        self.feature_queue = Queue()

        self.mutex = Lock()

        self.image_processor = ImageProcessor(config)
        self.msckf = MSCKF(config)

        self.img_thread = Thread(target=self.process_img)
        self.imu_thread = Thread(target=self.process_imu)
        self.vio_thread = Thread(target=self.process_feature)
        self.pos_init_thread = Thread(target=self.position_init_callback)
        self.pos_upda_thread = Thread(target=self.process_position_update)
        self.img_thread.start()
        self.imu_thread.start()
        self.vio_thread.start()
        self.pos_init_thread.start()
        self.pos_upda_thread.start()
Exemple #8
0
def main():
    controls_server = ControlsServer()
    image_processor = ImageProcessor(controls_server)

    controls_thread = threading.Thread(target=controls_server.start_async,
                                       name='SocketIO Thread')
    image_thread = threading.Thread(target=image_processor.start,
                                    name='Image Processing Thread')
    controls_thread.setDaemon(True)
    image_thread.setDaemon(True)

    controls_thread.start()
    image_thread.start()

    while 1:
        pass
Exemple #9
0
class VIO(object):
    def __init__(self, config, img_queue, imu_queue, gt_queue, viewer=None):
        
        self.config = config
        self.viewer = viewer

        self.img_queue = img_queue
        self.imu_queue = imu_queue
        self.feature_queue = Queue()

        self.gt_queue = gt_queue

        self.image_processor = ImageProcessor(config)
        self.orcvio = ORCVIO(config)

        self.img_thread = Thread(target=self.process_img)
        self.imu_thread = Thread(target=self.process_imu)
        self.vio_thread = Thread(target=self.process_feature)
        self.gt_thread = Thread(target=self.process_gt)

        self.img_thread.start()
        self.imu_thread.start()
        self.vio_thread.start()
        self.gt_thread.start()

        self.first_gt_flag = False 

    def process_gt(self):

        while True:
            x = self.gt_queue.get()
            if x is None:
                return

            data = x

            if not self.first_gt_flag:
                p0 = data.p
                self.first_gt_flag = True 

            R = utils.to_rotation(data.q) 
            gt_pose = utils.Isometry3d(R, data.p - p0)

            if self.viewer is not None:
                self.viewer.update_gt(gt_pose)

    def process_img(self):

        while True:
            img_msg = self.img_queue.get()
            if img_msg is None:
                self.feature_queue.put(None)
                return
            # print('img_msg', img_msg.timestamp)

            if self.viewer is not None:
                self.viewer.update_image(img_msg.cam0_image)

            feature_msg = self.image_processor.stereo_callback(img_msg)

            if feature_msg is not None:
                self.feature_queue.put(feature_msg)

    def process_imu(self):

        while True:
            imu_msg = self.imu_queue.get()
            if imu_msg is None:
                return
            # print('imu_msg', imu_msg.timestamp)

            self.image_processor.imu_callback(imu_msg)
            self.orcvio.imu_callback(imu_msg)

    def process_feature(self):

        while True:
            feature_msg = self.feature_queue.get()
            if feature_msg is None:
                return
            # print('feature_msg', feature_msg.timestamp)
            result = self.orcvio.feature_callback(feature_msg)

            if result is not None and self.viewer is not None:
                self.viewer.update_pose(result.cam0_pose)
Exemple #10
0
class VIO(object):
    def __init__(self, config, img_queue, imu_queue, pos_queue, viewer=None):
        self.config = config
        self.viewer = viewer

        self.img_queue = img_queue
        self.imu_queue = imu_queue
        self.pos_queue = pos_queue
        self.feature_queue = Queue()

        self.mutex = Lock()

        self.image_processor = ImageProcessor(config)
        self.msckf = MSCKF(config)

        self.img_thread = Thread(target=self.process_img)
        self.imu_thread = Thread(target=self.process_imu)
        self.vio_thread = Thread(target=self.process_feature)
        self.pos_init_thread = Thread(target=self.position_init_callback)
        self.pos_upda_thread = Thread(target=self.process_position_update)
        self.img_thread.start()
        self.imu_thread.start()
        self.vio_thread.start()
        self.pos_init_thread.start()
        self.pos_upda_thread.start()

    def process_img(self):
        while True:
            if not self.msckf.isready():
                continue

            img_msg = self.img_queue.get()
            if img_msg is None:
                self.feature_queue.put(None)
                continue

            # viewer
            if self.viewer is not None:
                self.viewer.update_image(img_msg.cam0_image)

            feature_msg = self.image_processor.stereo_callback(img_msg)

            if feature_msg is not None:
                self.feature_queue.put(feature_msg)

    def process_imu(self):
        while True:
            if self.msckf.is_block:
                continue

            imu_msg = self.imu_queue.get()
            if imu_msg is None:
                continue

            self.image_processor.imu_callback(imu_msg)
            self.msckf.imu_callback(imu_msg)

    def process_feature(self):
        while True:
            if not self.msckf.isready():
                continue

            if self.msckf.is_block:
                continue

            feature_msg = self.feature_queue.get()
            if feature_msg is None:
                continue
            # print('feature_msg', feature_msg.timestamp)

            self.mutex.acquire()
            if self.config.monocam:
                result = self.msckf.feature_callback_mono(feature_msg)
            else:
                result = self.msckf.feature_callback(feature_msg)
            self.mutex.release()

            # viewer
            if result is not None and self.viewer is not None:
                self.viewer.update_pose(result.cam0_pose)

    def position_init_callback(self):
        while True:
            if self.msckf.is_block:
                continue

            pos_msg = self.pos_queue.get()
            if pos_msg is None:
                continue
            # print('pos_msg', pos_msg.timestamp)
            self.mutex.acquire()
            self.msckf.position_init_callback(pos_msg)
            self.mutex.release()

    def process_position_update(self):
        nhz = 100
        count = 0
        while True:
            if self.msckf.is_block:
                continue
            count += 1
            if count < nhz:
                continue
            count = 0
            # print('pos_msg', pos_msg.timestamp)
            self.mutex.acquire()
            self.msckf.position_update_callback()
            self.mutex.release()