Пример #1
0
class FSImageWorkerProcess(multiprocessing.Process):
    def __init__(self, image_task_q, event_q, config, settings,
                 imageprocessor):
        super(FSImageWorkerProcess, self).__init__(group=None)
        self.image_task_q = image_task_q
        self.settings = settings
        self.config = config
        self.exit = False
        self.event_q = event_q
        self.image = FSImage()

        self.log = logging.getLogger('IMAGE_PROCESSOR THREAD')
        self.log.setLevel(logging.DEBUG)
        self.image_processor = imageprocessor
        self._logger = logging.getLogger(__name__)
        self._logger.setLevel(logging.DEBUG)

    def run(self):
        '''
            Image Process runner
        '''

        #print "process "+str(self.pid)+" started"

        #import pydevd
        #pydevd.settrace('192.168.98.104', port=12011, stdoutToServer=True, stderrToServer=True)

        while not self.exit:
            if not self.image_task_q.empty():
                #print "process "+str(self.pid)+" handle image"

                data = dict()
                try:
                    image_task = self.image_task_q.get_nowait()

                    if image_task:

                        # we got a kill pill
                        if image_task.task_type == "KILL":
                            self._logger.debug(
                                "Killed Worker Process with PID " +
                                str(self.pid))
                            self.exit = True
                            break

                        #print "process "+str(self.pid)+" task "+str(image_task.progress)
                        if (image_task.task_type == "PROCESS_COLOR_IMAGE"):
                            self.image.save_image(image_task.image,
                                                  image_task.progress,
                                                  image_task.prefix,
                                                  dir_name=image_task.prefix +
                                                  '/color_' +
                                                  image_task.raw_dir)

                            data['points'] = []
                            data['image_type'] = 'color'

                            event = dict()
                            event['event'] = "ON_IMAGE_PROCESSED"
                            event['data'] = data

                            self.event_q.put(event)

                        if (image_task.task_type == "PROCESS_DEPTH_IMAGE"):

                            angle = float(image_task.progress * 360) / float(
                                image_task.resolution)
                            #self._logger.debug("Progress "+str(image_task.progress)+" Resolution "+str(image_task.resolution)+" angle "+str(angle))
                            self.image.save_image(image_task.image,
                                                  image_task.progress,
                                                  image_task.prefix,
                                                  dir_name=image_task.prefix +
                                                  '/laser_' +
                                                  image_task.raw_dir)
                            color_image = self.image.load_image(
                                image_task.progress,
                                image_task.prefix,
                                dir_name=image_task.prefix + '/color_' +
                                image_task.raw_dir)

                            point_cloud, texture = self.image_processor.process_image(
                                angle, image_task.image, color_image)
                            # FIXME: Only send event if points is non-empty
                            data['point_cloud'] = point_cloud
                            data['texture'] = texture
                            data['image_type'] = 'depth'
                            #data['progress'] = image_task.progress
                            #data['resolution'] = image_task.resolution

                            event = dict()
                            event['event'] = "ON_IMAGE_PROCESSED"
                            event['data'] = data

                            self.event_q.put(event)

                except Empty:
                    time.sleep(0.05)
                    pass
            else:
                # thread idle
                time.sleep(0.05)
Пример #2
0
class FSImageWorkerProcess(multiprocessing.Process):
    def __init__(self,image_task_q, event_q, config, settings, imageprocessor):
        super(FSImageWorkerProcess, self).__init__(group=None)
        self.image_task_q = image_task_q
        self.settings = settings
        self.config = config
        self.exit = False
        self.event_q = event_q
        self.image = FSImage()

        self.log = logging.getLogger('IMAGE_PROCESSOR THREAD')
        self.log.setLevel(logging.DEBUG)
        self.image_processor = imageprocessor
        self._logger = logging.getLogger(__name__)
        self._logger.setLevel(logging.DEBUG)


    def run(self):
        '''
            Image Process runner
        '''

        #print "process "+str(self.pid)+" started"

        while not self.exit:
            if not self.image_task_q.empty():
                #print "process "+str(self.pid)+" handle image"

                data = dict()
                try:
                    image_task = self.image_task_q.get_nowait()

                    if image_task:

                        # we got a kill pill
                        if image_task.task_type == "KILL":
                            self._logger.debug("Killed Worker Process with PID "+str(self.pid))
                            self.exit = True
                            break

                        #print "process "+str(self.pid)+" task "+str(image_task.progress)
                        if (image_task.task_type == "PROCESS_COLOR_IMAGE"):
                            self.image.save_image(image_task.image, image_task.progress, image_task.prefix, dir_name=image_task.prefix+'/color_'+image_task.raw_dir)

                            data['points'] = []
                            data['image_type'] = 'color'

                            event = dict()
                            event['event'] = "ON_IMAGE_PROCESSED"
                            event['data'] = data

                            self.event_q.put(event)

                        if (image_task.task_type == "PROCESS_DEPTH_IMAGE"):

                            angle = (image_task.progress) * 360 / image_task.resolution
                            #self._logger.debug("Progress "+str(image_task.progress)+" Resolution "+str(image_task.resolution)+" angle "+str(angle))
                            self.image.save_image(image_task.image, image_task.progress, image_task.prefix, dir_name=image_task.prefix+'/laser_'+image_task.raw_dir)
                            color_image = self.image.load_image(image_task.progress, image_task.prefix, dir_name=image_task.prefix+'/color_'+image_task.raw_dir)

                            points = self.image_processor.process_image(angle, image_task.image, color_image)

                            data['points'] = points
                            data['image_type'] = 'depth'
                            #data['progress'] = image_task.progress
                            #data['resolution'] = image_task.resolution

                            event = dict()
                            event['event'] = "ON_IMAGE_PROCESSED"
                            event['data'] = data


                            self.event_q.put(event)

                except Empty:
                    time.sleep(0.05)
                    pass
            else:
                # thread idle
                time.sleep(0.05)