示例#1
0
    def onInit(self):
        if not os.path.isdir(self._imagesDir):
            avg.logger.error('Directory [%s] not found' % self._imagesDir)
            exit(1)
        avg.logger.info('Scanning directory [%s] ...' % self._imagesDir)

        imgExts = tuple(IMAGE_EXTENSIONS + [ext.upper() for ext in IMAGE_EXTENSIONS])
        self.__imgFiles = [os.path.join(self._imagesDir, imgFile) for imgFile in
                filter(lambda f: f.endswith(imgExts), os.listdir(self._imagesDir))]
        if not self.__imgFiles:
            avg.logger.error('No image files found, '
                    'scanned file extensions:\n%s' % (', '.join(imgExts)))
            exit(1)
        l = len(self.__imgFiles)
        avg.logger.info('%d image file%s found' % (l, 's' if l > 1 else ''))
        shuffle(self.__imgFiles)

        self.__slidesDiv = avg.DivNode(size=self.size, parent=self)
        # ping-pong two slides for cross-fade transition
        self.__newSlide = Slide(parent=self.__slidesDiv)
        self.__oldSlide = Slide(href=self.__imgFiles[0], parent=self.__slidesDiv)
        # HIDE_DONE notifications will trigger asynchronous pre-loading of the next image
        self.__newSlide.subscribe(Slide.HIDE_DONE, self.__asyncPreload)
        self.__oldSlide.subscribe(Slide.HIDE_DONE, self.__asyncPreload)
        self.__currentIdx = 0
        self.__changeSlide()
        player.setInterval(CHANGE_INTERVAL, self.__changeSlide)
示例#2
0
    def onInit(self):
        if not os.path.isdir(self._imagesDir):
            avg.logger.error('Directory [%s] not found' % self._imagesDir)
            exit(1)
        avg.logger.info('Scanning directory [%s] ...' % self._imagesDir)

        imgExts = tuple(IMAGE_EXTENSIONS +
                        [ext.upper() for ext in IMAGE_EXTENSIONS])
        self.__imgFiles = [
            os.path.join(self._imagesDir, imgFile) for imgFile in filter(
                lambda f: f.endswith(imgExts), os.listdir(self._imagesDir))
        ]
        if not self.__imgFiles:
            avg.logger.error('No image files found, '
                             'scanned file extensions:\n%s' %
                             (', '.join(imgExts)))
            exit(1)
        l = len(self.__imgFiles)
        avg.logger.info('%d image file%s found' % (l, 's' if l > 1 else ''))
        shuffle(self.__imgFiles)

        self.__slidesDiv = avg.DivNode(size=self.size, parent=self)
        # ping-pong two slides for cross-fade transition
        self.__newSlide = Slide(parent=self.__slidesDiv)
        self.__oldSlide = Slide(href=self.__imgFiles[0],
                                parent=self.__slidesDiv)
        # HIDE_DONE notifications will trigger asynchronous pre-loading of the next image
        self.__newSlide.subscribe(Slide.HIDE_DONE, self.__asyncPreload)
        self.__oldSlide.subscribe(Slide.HIDE_DONE, self.__asyncPreload)
        self.__currentIdx = 0
        self.__changeSlide()
        player.setInterval(CHANGE_INTERVAL, self.__changeSlide)
示例#3
0
    def __init__(self, name, all_joints=True, speed_in_ms=None):
        self.__body_tracking_log = logging.getLogger(name)

        if all_joints:
            self.__joint_types = {
                OSCKinectJoint.OKS_SPINE_BASE: 0,
                OSCKinectJoint.OKS_SPINE_MID: 1,
                OSCKinectJoint.OKS_SPINE_SHOULDER: 20,
                OSCKinectJoint.OKS_NECK: 2,
                OSCKinectJoint.OKS_HEAD: 3,
                OSCKinectJoint.OKS_SHOULDER_RIGHT: 8,
                OSCKinectJoint.OKS_SHOULDER_LEFT: 4,
                OSCKinectJoint.OKS_ELBOW_RIGHT: 9,
                OSCKinectJoint.OKS_ELBOW_LEFT: 5,
                OSCKinectJoint.OKS_WRIST_RIGHT: 10,
                OSCKinectJoint.OKS_WRIST_LEFT: 6,
                OSCKinectJoint.OKS_HAND_RIGHT: 11,
                OSCKinectJoint.OKS_HAND_LEFT: 7,
                OSCKinectJoint.OKS_THUMB_RIGHT: 24,
                OSCKinectJoint.OKS_THUMB_LEFT: 22,
                OSCKinectJoint.OKS_HAND_TIP_RIGHT: 23,
                OSCKinectJoint.OKS_HAND_TIP_LEFT: 21,
                OSCKinectJoint.OKS_HIP_RIGHT: 16,
                OSCKinectJoint.OKS_HIP_LEFT: 12,
                OSCKinectJoint.OKS_KNEE_RIGHT: 17,
                OSCKinectJoint.OKS_KNEE_LEFT: 13,
                OSCKinectJoint.OKS_ANKLE_RIGHT: 18,
                OSCKinectJoint.OKS_ANKLE_LEFT: 14,
                OSCKinectJoint.OKS_FOOT_RIGHT: 19,
                OSCKinectJoint.OKS_FOOT_LEFT: 15
            }
        # else:
        #     self.__joint_types = [
        #         OSCKinectJoint.OKS_HEAD,
        #         OSCKinectJoint.OKS_SPINE_MID,
        #         OSCKinectJoint.OKS_HAND_LEFT,
        #         OSCKinectJoint.OKS_HAND_RIGHT,
        #         OSCKinectJoint.OKS_ELBOW_RIGHT,
        #         OSCKinectJoint.OKS_ELBOW_LEFT
        #     ]

        # handling of body tracking
        self.__skeleton_manager = SkeletonManager(kinect_data_ip)
        if speed_in_ms is None:
            self.__skeleton_manager.start_listening(
                skeleton_added=self.__log_skeleton_added,
                skeleton_updated=self.__log_skeleton_moved,
                skeleton_removed=self.__log_skeleton_removed)
        else:
            player.setInterval(speed_in_ms, self.__log_on_time)
示例#4
0
 def _setup(self):
     self._interval = player.setInterval(1000, self._nextMemSample)
     self.__numSamples = 0
     self._usage = [0]
     self._maxUsage = [0]
     self._minutesUsage = [0]
     self._minutesMaxUsage = [0]
示例#5
0
 def __start(self):
     assert(not self.__frameHandlerId and not self.__spawnTimeoutId)
     self.__lifeCounter.reset()
     self.__scoreCounter.reset()
     self.__player.reset()
     self.__frameHandlerId = player.subscribe(player.ON_FRAME, self.__onFrame)
     self.__spawnTimeoutId = player.setInterval(self.ENEMY_SPAWN_TIMEOUT,
             self.__spawnEnemy)
示例#6
0
 def _setup(self):
     self.__interval = player.setInterval(1000, self._nextMemSample)
     self.__numSamples = 0
     self._usage = [0]
     self._maxUsage = [0]
     self._minutesUsage = [0]
     self._minutesMaxUsage = [0]
     self._nextMemSample()
示例#7
0
 def __start(self):
     assert(not self.__frameHandlerId and not self.__spawnTimeoutId)
     self.__lifeCounter.reset()
     self.__scoreCounter.reset()
     self.__player.reset()
     self.__frameHandlerId = player.subscribe(player.ON_FRAME, self.__onFrame)
     self.__spawnTimeoutId = player.setInterval(self.ENEMY_SPAWN_TIMEOUT,
             self.__spawnEnemy)
示例#8
0
    def __init__(self, pos, icon, waitTime):
        if (self.__class__ in self.spawnTimestamp and
                player.getFrameTime() - self.spawnTimestamp[self.__class__] < waitTime):
            return
        else:
            self.spawnTimestamp[self.__class__] = player.getFrameTime()

        self._state = self.STATE_BUSY
        self._tmr = player.setInterval(100, self.__tick)
        self._remainingTicks = consts.BONUS_AVAILABILITY_TICKS
        
        self._node = widgets.RIImage(href=icon, pos=pos, parent=self.layer)
        diman = avg.LinearAnim(self._node, 'size', self.TRANSITION_TIME,
                self._node.getMediaSize() * self.TRANSITION_ZOOM,
                self._node.getMediaSize())
        opaan = avg.LinearAnim(self._node, 'opacity',
                self.TRANSITION_TIME, 0, self.OPACITY)
        offsan = avg.LinearAnim(self._node, 'pos', self.TRANSITION_TIME,
                Point2D(pos) - self._node.getMediaSize() * self.TRANSITION_ZOOM / 2, pos)
        self._anim = avg.ParallelAnim((diman, opaan, offsan), None, self.__ready)
        self._anim.start()
        self.__cursorid = None

        engine.SoundManager.play('bonus_alert.ogg')
示例#9
0
    def __init__(self, disableMouseFocus=False, 
            moveCoursorOnTouch=True, textBackgroundNode=None, loupeBackgroundNode=None,
            parent=None, **kwargs):
        """
        @param parent: parent of the node
        @param disableMouseFocus: boolean, prevents that mouse can set focus for
            this instance
        @param moveCoursorOnTouch: boolean, activate the coursor motion on touch events
        """
        super(TextArea, self).__init__(**kwargs)
        self.registerInstance(self, parent)

        self.__blurOpacity = DEFAULT_BLUR_OPACITY
        self.__border = 0
        self.__data = []
        self.__cursorPosition = 0

        textNode = avg.WordsNode(rawtextmode=True)

        if textBackgroundNode is not None:
            self.appendChild(textBackgroundNode)

        if not disableMouseFocus:
            self.setEventHandler(avg.Event.CURSOR_UP, avg.Event.MOUSE, self.__onClick)
            self.setEventHandler(avg.Event.CURSOR_UP, avg.Event.TOUCH, self.__onClick)

        self.appendChild(textNode)

        cursorContainer = avg.DivNode()
        cursorNode = avg.LineNode(color='000000')
        self.appendChild(cursorContainer)
        cursorContainer.appendChild(cursorNode)
        self.__flashingCursor = False
        
        self.__cursorContainer = cursorContainer
        self.__cursorNode = cursorNode
        self.__textNode = textNode

        self.__loupe = None

        self.setFocus(True)

        player.setInterval(CURSOR_FLASHING_DELAY, self.__tickFlashCursor)
        
        self.__lastActivity = 0

        if moveCoursorOnTouch:
            self.__recognizer = gesture.DragRecognizer(eventNode=self, friction=-1,
                    moveHandler=self.__moveHandler, 
                    detectedHandler=self.__detectedHandler,
                    upHandler=self.__upHandler)
            self.__loupeZoomFactor = 0.5
            self.__loupe = avg.DivNode(parent=self, crop=True)

            if loupeBackgroundNode is not None:
                self.__loupe.appendChild(loupeBackgroundNode)
                self.__loupe.size = loupeBackgroundNode.size
            else:
                self.__loupe.size = (50,50)
                avg.RectNode(fillopacity=1, fillcolor="f5f5f5", color="ffffff",
                        size=self.__loupe.size, parent=self.__loupe)
            self.__loupeOffset = (self.__loupe.size[0]/2.0, self.__loupe.size[1]+20)
            self.__loupe.unlink()
            self.__zoomedImage = avg.DivNode(parent=self.__loupe)
            self.__loupeTextNode = avg.WordsNode(rawtextmode=True, 
                    parent=self.__zoomedImage)

            self.__loupeCursorContainer = avg.DivNode(parent=self.__zoomedImage)
            self.__loupeCursorNode = avg.LineNode(color='000000', 
                    parent=self.__loupeCursorContainer)
        self.setStyle()
    def __init__(
        self,
        disableMouseFocus=False,
        moveCoursorOnTouch=True,
        textBackgroundNode=None,
        loupeBackgroundNode=None,
        parent=None,
        **kwargs
    ):
        """
        @param parent: parent of the node
        @param disableMouseFocus: boolean, prevents that mouse can set focus for
            this instance
        @param moveCoursorOnTouch: boolean, activate the coursor motion on touch events
        """
        super(TextArea, self).__init__(**kwargs)
        self.registerInstance(self, parent)

        self.__blurOpacity = DEFAULT_BLUR_OPACITY
        self.__border = 0
        self.__data = []
        self.__cursorPosition = 0

        textNode = avg.WordsNode(rawtextmode=True)

        if textBackgroundNode is not None:
            self.appendChild(textBackgroundNode)

        if not disableMouseFocus:
            self.setEventHandler(avg.Event.CURSOR_UP, avg.Event.MOUSE, self.__onClick)
            self.setEventHandler(avg.Event.CURSOR_UP, avg.Event.TOUCH, self.__onClick)

        self.appendChild(textNode)

        cursorContainer = avg.DivNode()
        cursorNode = avg.LineNode(color="000000")
        self.appendChild(cursorContainer)
        cursorContainer.appendChild(cursorNode)
        self.__flashingCursor = False

        self.__cursorContainer = cursorContainer
        self.__cursorNode = cursorNode
        self.__textNode = textNode

        self.__loupe = None

        self.setFocus(True)

        player.setInterval(CURSOR_FLASHING_DELAY, self.__tickFlashCursor)

        self.__lastActivity = 0

        if moveCoursorOnTouch:
            self.__recognizer = gesture.DragRecognizer(
                eventNode=self,
                friction=-1,
                moveHandler=self.__moveHandler,
                detectedHandler=self.__detectedHandler,
                upHandler=self.__upHandler,
            )
            self.__loupeZoomFactor = 0.5
            self.__loupe = avg.DivNode(parent=self, crop=True)

            if loupeBackgroundNode is not None:
                self.__loupe.appendChild(loupeBackgroundNode)
                self.__loupe.size = loupeBackgroundNode.size
            else:
                self.__loupe.size = (50, 50)
                avg.RectNode(
                    fillopacity=1, fillcolor="f5f5f5", color="ffffff", size=self.__loupe.size, parent=self.__loupe
                )
            self.__loupeOffset = (self.__loupe.size[0] / 2.0, self.__loupe.size[1] + 20)
            self.__loupe.unlink()
            self.__zoomedImage = avg.DivNode(parent=self.__loupe)
            self.__loupeTextNode = avg.WordsNode(rawtextmode=True, parent=self.__zoomedImage)

            self.__loupeCursorContainer = avg.DivNode(parent=self.__zoomedImage)
            self.__loupeCursorNode = avg.LineNode(color="000000", parent=self.__loupeCursorContainer)
        self.setStyle()
示例#11
0
    def __init__(self):
        session_id = config_app.SESSION

        # init loggers: GENERAL EVENTS
        self.__general_event_log = logging.getLogger('general')
        self.__general_event_log.setLevel(logging.INFO)

        # init loggers: BODY TRACKING
        name_body_tracking = 'body_tracking'
        self.__body_tracking_log = logging.getLogger(name_body_tracking)
        self.__body_tracking = BodyTrackingLog(
            name_body_tracking,
            speed_in_ms=LoggingDefaults.LOG_SPEED_SKELETON_TRACKING)
        self.__body_tracking_log.setLevel(logging.INFO)

        # init loggers: DEVICE POSITION
        self.__devices = {}
        self.__device_position_log = logging.getLogger('device_position')
        self.__device_position_log.setLevel(logging.INFO)

        # init loggers: DEVICE CANVAS TOUCH EVENT
        self.__devices_canvas_event_log = logging.getLogger('device_event')
        self.__devices_canvas_event_log.setLevel(logging.INFO)

        # init loggers: TOUCH
        self.__touch_log = logging.getLogger('touch')
        self.__touch_log.setLevel(logging.INFO)

        # init loggers: TOUCH INJECTION
        self.__touch_injection_log = logging.getLogger('touch_injection')
        self.__touch_injection_log.setLevel(logging.INFO)

        # init format
        csv_formatter = logging.Formatter("%(asctime)s.%(msecs)d, %(message)s",
                                          "%Y-%m-%d, %H:%M:%S")

        # add general event logging to console
        console = logging.StreamHandler()
        self.__general_event_log.addHandler(console)

        if not config_app.study_mode:
            return

        # init files and # connect logger and file and formatter
        task_file = LogFileHandlerWithHeader(
            filename=str('study_logs/session_' + str(session_id) +
                         '_task.csv'),
            header='%s, %s, %s' % ('day, time', 'event_name', 'arguments'))
        task_file.setFormatter(csv_formatter)
        self.__general_event_log.addHandler(task_file)

        body_tracking_file = LogFileHandlerWithHeader(
            filename='study_logs/session_' + str(session_id) +
            '_body_tracking.csv',
            header=self.__body_tracking.get_header_str())
        body_tracking_file.setFormatter(csv_formatter)
        self.__body_tracking_log.addHandler(body_tracking_file)

        device_position_file = LogFileHandlerWithHeader(
            filename='study_logs/session_' + str(session_id) +
            '_device_position.csv',
            header='%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s' %
            ('day, time', 'device_id', 'rui-proxy_name', 'screen_pos_x_in_px',
             'screen_pos_y_in_px', 'space_pos_x_in_m', 'space_pos_y_in_m',
             'space_pos_z_in_m', 'yaw_in_rad', 'pitch_in_rad', 'roll_in_rad'))
        device_position_file.setFormatter(csv_formatter)
        self.__device_position_log.addHandler(device_position_file)

        touch_file = LogFileHandlerWithHeader(
            filename='study_logs/session_' + str(session_id) + '_touch.csv',
            header='%s, %s, %s, %s, %s' %
            ('day, time', 'pos_x_in_px', 'pos_y_in_px', 'user_id_str',
             'event_type_str'))
        touch_file.setFormatter(csv_formatter)
        self.__touch_log.addHandler(touch_file)

        touch_injection_file = LogFileHandlerWithHeader(
            filename='study_logs/session_' + str(session_id) +
            '_touch_injection.csv',
            header='%s, %s, %s, %s, %s' %
            ('day, time', 'pos_x_in_px', 'pos_y_in_px', 'user_id_str',
             'event_type_str'))
        touch_injection_file.setFormatter(csv_formatter)
        self.__touch_injection_log.addHandler(touch_injection_file)

        device_event_file = LogFileHandlerWithHeader(
            filename=str('study_logs/session_' + str(session_id) +
                         '_device_event.csv'),
            header=', '.join([
                'day, time', 'device_id', 'rui-proxy_name', 'event_type',
                'canvas_pos_x_in_px', 'canvas_pos_y_in_px', 'cursor_id'
            ]))
        device_event_file.setFormatter(csv_formatter)
        self.__devices_canvas_event_log.addHandler(device_event_file)

        # handle logging speed if set in config
        if LoggingDefaults.LOG_SPEED_DEVICE_POSITION is not None:
            player.setInterval(LoggingDefaults.LOG_SPEED_DEVICE_POSITION,
                               self.__write_device_on_timeout)
示例#12
0
#!/usr/bin/env python
# -*- coding: utf-8 -*-

from libavg import avg, player

def moveText():
    global node
    if node.x < 200:
        node.x += 20
    else:
        player.clearInterval(timer)

canvas = player.createMainCanvas(size=(640,480))
rootNode = canvas.getRootNode()
node = avg.WordsNode(pos=(10,10), text="Hello World", parent=rootNode)
timer = player.setInterval(200, moveText)

player.play()