Пример #1
0
from peyetribe import EyeTribe
import time

tracker = EyeTribe(host="localhost", port=6555)
tracker.connect()
n = tracker.next()

print(
    "eT;dT;aT;Fix;State;Rwx;Rwy;Avx;Avy;LRwx;LRwy;LAvx;LAvy;LPSz;LCx;LCy;RRwx;RRwy;RAvx;RAvy;RPSz;RCx;RCy"
)

tracker.pushmode()
count = 0
while count < 500:
    n = tracker.next()
    print(n.righteye.avg)
    # print(n.lefteye)
    count += 1

tracker.pullmode()

tracker.close()
Пример #2
0

while on == 1:
    # should this go here?
    n = tracker.next()
    timestamp.append(n.time) #append time
    lefteye.append(n.lefteye) #append left eye in rawx, rawy, avgx, avgy
    righteye.append(n.righteye) #append right eye in rawx, rawy, avgx, avgy
    runSimulation(block)
    if trial > numberoftrials:  # if over number of trials
        block += 1  # move on to next block of stimuli
        trial = 1  # reset trial
    else:
        saveVars(block, trial, timestamp, lefteye, righteye, starttime)
        timestamp, lefteye, righteye, starttime = ([] for i in range(4))
        trial += 1  # repeat another trial
    if block == 5:
        print('All blocks have been presented. Experiment complete.')
        on = 0

tracker.pullmode()
tracker.close() # close connection with server

# with open('objs.pickle') as f:  # Python 3: open(..., 'rb')
#     #obj0, obj1, obj2 = pickle.load(f)





Пример #3
0
class _GazeDevice(QtCore.QObject):
    ready = QtCore.Signal()
    error = QtCore.Signal(object)

    eyesAppeared = QtCore.Signal(object)
    eyesDisappeared = QtCore.Signal()
    moved = QtCore.Signal(object)
    fixated = QtCore.Signal(object)

    def __init__(self):
        super().__init__()

        self.detector = DwellSelect(float(settings.gazeValue('dwellDuration')),
                                    float(settings.gazeValue('dwellRange')))
        self.gazePosition = [-99, -99]
        self.eyePositions = [[-99, -99], [-99, -99]]
        self.staleTimerStart = None
        self.attentionStalePeriod = float(
            settings.gazeValue('attentionPeriod'))
        self.lastFixation = None
        self.sawEyesLastTime = None

        self.timer = QtCore.QTimer()
        self.timer.setSingleShot(False)
        self.timer.timeout.connect(self._poll)

        self.pointStarted = False

        self.tracker = EyeTribe()
        self.server = EyeTribeServer()
        self.server.ready.connect(self.connectToServer)
        self.server.error.connect(self.error.emit)
        #		self.tracker.pullmode()
        self.server.start()
        self.isReady = self.server.isReady

    def connectToServer(self):
        logging.debug("Eyetribe server ready - connecting tracker!")
        self.tracker.connect()
        self.ready.emit()

    def getDwellDuration(self):
        return self.detector.minimumDelay

    def getDwellRange(self):
        return self.detector.range

    def setDwellDuration(self, duration):
        self.detector.setDuration(duration)
        settings.setGazeValue('dwellDuration', duration)

    def setDwellRange(self, rangeInPixels):
        self.detector.setRange(rangeInPixels)
        settings.setGazeValue('dwellRange', rangeInPixels)

    def setAttentionStalePeriod(self, duration):
        self.attentionStalePeriod = duration
        settings.setGazeValue('attentionPeriod', duration)

    def getAttentionStalePeriod(self):
        return self.attentionStalePeriod

    def isRunning(self):
        return self.timer.isActive()

    def startPolling(self):
        if self.server.isReady():
            self._startPolling()
        else:
            self.server.ready.connect(self._startPolling)
            self.server.start()

    def _startPolling(self):
        if not self.isRunning():
            self.timer.start(1000 / 30)

    def _poll(self):
        try:
            gazeFrame = self.tracker.next()
            if (gazeFrame.state & STATES['STATE_TRACKING_GAZE']) != 0:
                self.eyePositions = [[
                    gazeFrame.lefteye.pcenter.x, gazeFrame.lefteye.pcenter.y
                ], [
                    gazeFrame.righteye.pcenter.x, gazeFrame.righteye.pcenter.y
                ]]

                if True:
                    self.gazePosition = [gazeFrame.avg.x, gazeFrame.avg.y]
                    self.moved.emit(self.gazePosition)
                    if not self.sawEyesLastTime or self.sawEyesLastTime is None:
                        self.eyesAppeared.emit(self.gazePosition)
                    self.sawEyesLastTime = True

                    currentTime = time.time()
                    wasInsideDwell = self.detector.inDwell
                    self.detector.addPoint(
                        Point(gazeFrame.avg.x, gazeFrame.avg.y, 0, currentTime,
                              gazeFrame.avg))
                    if self.detector.selection != None:
                        self.lastFixation = self.detector.clearSelection()
                        self.fixated.emit(self.lastFixation)

                    if wasInsideDwell and not self.detector.inDwell:
                        self.staleTimerStart = time.time()
                    elif self.staleTimerStart is not None and (
                            time.time() -
                            self.staleTimerStart) > self.attentionStalePeriod:
                        self.staleTimerStart = None
                        self.fixationInvalidated.emit(self.lastFixation)

            else:
                raise (Exception('not tracking: %d' % gazeFrame.state))
        except Exception as exc:
            if self.sawEyesLastTime:
                self.eyesDisappeared.emit()
            self.sawEyesLastTime = False

    def getLastFixation(self):
        return self.lastFixation

    def getGaze(self):
        return self.gazePosition

    def getAttentiveGaze(self, clear=False):
        gaze = self.gazePosition
        if self.staleTimerStart is not None:
            if self.lastFixation is not None and (
                    time.time() -
                    self.staleTimerStart) < self.attentionStalePeriod:
                gaze = [self.lastFixation.x, self.lastFixation.y]

        if clear:
            self.lastFixation = None

        return gaze

    def clearLastFixation(self):
        self.lastFixation = None
        self.staleTimeStart = None

    def reset(self):
        self.clearLastFixation()
        self.detector.reset()

    def getEyePositions(self):
        return self.eyePositions

    def exit(self):
        self.timer.stop()

    def redoCalibration(self, points):
        self.points = points
        return self.points[-1]

    def cancelCalibration(self):
        if self.tracker.is_calibrating():
            logging.debug("sending abort")
            self.tracker.calibration_abort()

    def isCalibrating(self):
        return self.tracker.is_calibrating()

    def startCalibration(self, xPoints, yPoints, screenWidth, screenHeight):
        self.points = []
        margin = 100
        for y in range(yPoints):
            for x in range(xPoints):
                self.points.append([
                    x * ((screenWidth - margin * 2) / (xPoints - 1)) + margin,
                    y * ((screenHeight - margin * 2) / (yPoints - 1)) + margin
                ])
        random.shuffle(self.points)
        self.tracker.calibration_start(xPoints * yPoints)

        return self.points[-1]

    def beginPointCapture(self):
        point = self.points.pop()
        try:
            self.tracker.calibration_point_start(point[0], point[1])
            self.pointStarted = True
        except Exception as exc:
            logging.error(exc)

    def endPointCapture(self):
        if self.pointStarted:
            self.tracker.calibration_point_end()

        self.pointStarted = False
        if len(self.points) > 0:
            return self.points[-1]

    def getCalibration(self):
        return self.tracker.latest_calibration_result()

    def stop(self):
        self.timer.stop()
        try:
            self.tracker.close()
        except:
            pass
        if self.server.isRunning():
            self.server.stop()
Пример #4
0
    import time

    tracker = EyeTribe()
    tracker.connect()

    frameq = tracker._frameq

    print frameq.empty()

    print("eT;dT;aT;Fix;State;Rwx;Rwy;Avx;Avy;LRwx;LRwy;LAvx;LAvy;LPSz;LCx;LCy;RRwx;RRwy;RAvx;RAvy;RPSz;RCx;RCy")

    tracker.pushmode()
    count = 0
    time.sleep(2)
    tracker.pullmode()
    print frameq.qsize()
    while not frameq.empty():
        n = frameq.get(True)
        #print n

    tracker.pushmode()
    time.sleep(3)
    print frameq.qsize()

    print "pull mode"

    # print frameq.empty()
    # print frameq.get(False)

    tracker.close()