def doCalibration(self, calibrationPoints): if self.eyetracker is None: return self.points = calibrationPoints self.point_index = -1 img = Image.new('RGB', self.experWin.size) draw = ImageDraw.Draw(img) self.calin = psychopy.visual.Circle( self.testWin, radius=2, fillColor=(0.0, 0.0, 0.0)) self.calout = psychopy.visual.Circle( self.testWin, radius=64, lineColor=(0.0, 1.0, 0.0)) self.calresult = psychopy.visual.SimpleImageStim(self.experWin, img) self.calresultmsg = psychopy.visual.TextStim( self.experWin, pos=(0, -self.experWin.size[1] / 4)) self.promptone = psychopy.visual.TextStim( self.experWin, pos=(0, -self.experWin.size[1] / 4)) self.promptone.setText('Press space bar when ready to calibrate.') self.prompttwo = psychopy.visual.TextStim( self.testWin, pos=(0, -self.testWin.size[1] / 4)) self.prompttwo.setText( 'Focus your eyes on the center of the circles that appear.') self.initcalibration_completed = False print "StartCalibration" self.eyetracker.StartCalibration(self.on_calib_start) while not self.initcalibration_completed: time.sleep(0.01) waitkey = True while waitkey: for key in psychopy.event.getKeys(): if key == 'space': waitkey = False self.calout.draw() self.calin.draw() self.promptone.draw() self.prompttwo.draw() self.testWin.flip() self.experWin.flip() clock = psychopy.core.Clock() for self.point_index in range(len(self.points)): p = Point2D() p.x, p.y = self.points[self.point_index] self.calin.setPos( ((p.x - 0.5) * self.testWin.size[0], (0.5 - p.y) * self.testWin.size[1])) self.calout.setPos( ((p.x - 0.5) * self.testWin.size[0], (0.5 - p.y) * self.testWin.size[1])) clock.reset() currentTime = clock.getTime() while currentTime < 1.5: self.calout.setRadius(40 * (1.5 - (currentTime)) + 4) psychopy.event.getKeys() self.calout.draw() self.calin.draw() self.testWin.flip() currentTime = clock.getTime() self.add_point_completed = False self.eyetracker.AddCalibrationPoint(p, self.on_add_completed) while not self.add_point_completed: psychopy.event.getKeys() self.calout.draw() self.calin.draw() self.testWin.flip() self.computeCalibration_completed = False self.computeCalibration_succeeded = False self.eyetracker.ComputeCalibration(self.on_calib_compute) while not self.computeCalibration_completed: time.sleep(0.01) self.eyetracker.StopCalibration(None) self.testWin.flip() self.experWin.flip() self.getcalibration_completed = False self.calib = self.eyetracker.GetCalibration(self.on_calib_response) while not self.getcalibration_completed: time.sleep(0.01) draw.rectangle( ((0, 0), tuple(self.experWin.size)), fill=(128, 128, 128)) if not self.computeCalibration_succeeded: # computeCalibration failed. self.calresultmsg.setText( 'Not enough data was collected (Retry:r/Abort:ESC)') elif self.calib == None: # no calibration data self.calresultmsg.setText( 'No calibration data (Retry:r/Abort:ESC)') else: points = {} for data in self.calib.plot_data: points[data.true_point] = { 'left': data.left, 'right': data.right} if len(points) == 0: self.calresultmsg.setText( 'No true calibration data (Retry:r/Abort:ESC)') else: for p, d in points.iteritems(): # MODIFIED: validity -> status if d['left'].status == 1: draw.line(((p.x * self.experWin.size[0], p.y * self.experWin.size[1]), (d['left'].map_point.x * self.experWin.size[0], d['left'].map_point.y * self.experWin.size[1])), fill=(255, 0, 0)) # MODIFIED: validity -> status if d['right'].status == 1: draw.line(((p.x * self.experWin.size[0], p.y * self.experWin.size[1]), (d['right'].map_point.x * self.experWin.size[0], d['right'].map_point.y * self.experWin.size[1])), fill=(0, 255, 0)) draw.ellipse(((p.x * self.experWin.size[0] - 10, p.y * self.experWin.size[1] - 10), (p.x * self.experWin.size[0] + 10, p.y * self.experWin.size[1] + 10)), outline=(0, 0, 0)) self.calresultmsg.setText( 'Accept calibration results (Accept:a/Retry:r/Abort:ESC)') self.calresult.setImage(img) waitkey = True while waitkey: for key in psychopy.event.getKeys(): if key == 'a': retval = 'accept' waitkey = False elif key == 'r': retval = 'retry' waitkey = False elif key == 'escape': retval = 'abort' waitkey = False self.calresult.draw() self.calresultmsg.draw() self.experWin.flip() return retval
def doCalibration(self, calibrationPoints): if self.eyetracker is None: return self.points = calibrationPoints self.point_index = -1 img = Image.new('RGB', self.experWin.size) draw = ImageDraw.Draw(img) self.calin = psychopy.visual.Circle(self.testWin, radius=2, fillColor=(0.0, 0.0, 0.0)) self.calout = psychopy.visual.Circle(self.testWin, radius=64, lineColor=(0.0, 1.0, 0.0)) self.calresult = psychopy.visual.SimpleImageStim(self.experWin, img) self.calresultmsg = psychopy.visual.TextStim( self.experWin, pos=(0, -self.experWin.size[1] / 4)) self.promptone = psychopy.visual.TextStim( self.experWin, pos=(0, -self.experWin.size[1] / 4)) self.promptone.setText('Press space bar when ready to calibrate.') self.prompttwo = psychopy.visual.TextStim( self.testWin, pos=(0, -self.testWin.size[1] / 4)) self.prompttwo.setText( 'Focus your eyes on the center of the circles that appear.') self.initcalibration_completed = False print "StartCalibration" self.eyetracker.StartCalibration(self.on_calib_start) while not self.initcalibration_completed: time.sleep(0.01) waitkey = True while waitkey: for key in psychopy.event.getKeys(): if key == 'space': waitkey = False self.calout.draw() self.calin.draw() self.promptone.draw() self.prompttwo.draw() self.testWin.flip() self.experWin.flip() clock = psychopy.core.Clock() for self.point_index in range(len(self.points)): p = Point2D() p.x, p.y = self.points[self.point_index] self.calin.setPos(((p.x - 0.5) * self.testWin.size[0], (0.5 - p.y) * self.testWin.size[1])) self.calout.setPos(((p.x - 0.5) * self.testWin.size[0], (0.5 - p.y) * self.testWin.size[1])) clock.reset() currentTime = clock.getTime() while currentTime < 1.5: self.calout.setRadius(40 * (1.5 - (currentTime)) + 4) psychopy.event.getKeys() self.calout.draw() self.calin.draw() self.testWin.flip() currentTime = clock.getTime() self.add_point_completed = False self.eyetracker.AddCalibrationPoint(p, self.on_add_completed) while not self.add_point_completed: psychopy.event.getKeys() self.calout.draw() self.calin.draw() self.testWin.flip() self.computeCalibration_completed = False self.computeCalibration_succeeded = False self.eyetracker.ComputeCalibration(self.on_calib_compute) while not self.computeCalibration_completed: time.sleep(0.01) self.eyetracker.StopCalibration(None) self.testWin.flip() self.experWin.flip() self.getcalibration_completed = False self.calib = self.eyetracker.GetCalibration(self.on_calib_response) while not self.getcalibration_completed: time.sleep(0.01) draw.rectangle(((0, 0), tuple(self.experWin.size)), fill=(128, 128, 128)) if not self.computeCalibration_succeeded: # computeCalibration failed. self.calresultmsg.setText( 'Not enough data was collected (Retry:r/Abort:ESC)') elif self.calib == None: # no calibration data self.calresultmsg.setText( 'No calibration data (Retry:r/Abort:ESC)') else: points = {} for data in self.calib.plot_data: points[data.true_point] = { 'left': data.left, 'right': data.right } if len(points) == 0: self.calresultmsg.setText( 'No true calibration data (Retry:r/Abort:ESC)') else: for p, d in points.iteritems(): # MODIFIED: validity -> status if d['left'].status == 1: draw.line( ((p.x * self.experWin.size[0], p.y * self.experWin.size[1]), (d['left'].map_point.x * self.experWin.size[0], d['left'].map_point.y * self.experWin.size[1])), fill=(255, 0, 0)) # MODIFIED: validity -> status if d['right'].status == 1: draw.line( ((p.x * self.experWin.size[0], p.y * self.experWin.size[1]), (d['right'].map_point.x * self.experWin.size[0], d['right'].map_point.y * self.experWin.size[1])), fill=(0, 255, 0)) draw.ellipse(((p.x * self.experWin.size[0] - 10, p.y * self.experWin.size[1] - 10), (p.x * self.experWin.size[0] + 10, p.y * self.experWin.size[1] + 10)), outline=(0, 0, 0)) self.calresultmsg.setText( 'Accept calibration results (Accept:a/Retry:r/Abort:ESC)') self.calresult.setImage(img) waitkey = True while waitkey: for key in psychopy.event.getKeys(): if key == 'a': retval = 'accept' waitkey = False elif key == 'r': retval = 'retry' waitkey = False elif key == 'escape': retval = 'abort' waitkey = False self.calresult.draw() self.calresultmsg.draw() self.experWin.flip() return retval
def doCalibration(self,calibrationPoints): if self.eyetracker is None: return self.points = calibrationPoints self.point_index = -1 img = Image.new('RGB',self.win.size) draw = ImageDraw.Draw(img) self.calin = psychopy.visual.Circle(self.win,units="pix",radius=2,fillColor=(0.0,0.0,0.0)) self.calout = psychopy.visual.Circle(self.win,units="pix",lineWidth=2,radius=64,lineColor=(1.0,0.2,0.0)) self.calresult = psychopy.visual.SimpleImageStim(self.win,img) self.calresultmsg = psychopy.visual.TextStim(self.win,units="pix",pos=(0,-self.win.size[1]/4), color=[0,0,0]) self.initcalibration_completed = False print "StartCalibration" self.eyetracker.StartCalibration(lambda error, r: self.on_calib_start(error, r)) while not self.initcalibration_completed: pass waitkey = True while waitkey: for key in psychopy.event.getKeys(): if key=='space': waitkey = False self.calout.draw() self.calin.draw() self.calresultmsg.setText('Press the space bar to start calibration.') self.calresultmsg.draw() self.win.flip() clock = psychopy.core.Clock() for self.point_index in range(len(self.points)): p = Point2D() p.x, p.y = self.points[self.point_index] self.calin.setPos(((p.x-0.5)*self.win.size[0],(0.5-p.y)*self.win.size[1]), units="pix") self.calout.setPos(((p.x-0.5)*self.win.size[0],(0.5-p.y)*self.win.size[1]), units="pix") clock.reset() currentTime = clock.getTime() while currentTime < 1.5: self.calout.setRadius(40*(1.5-(currentTime))+4) psychopy.event.getKeys() self.calout.draw() self.calin.draw() self.win.flip() currentTime = clock.getTime() self.add_point_completed = False self.eyetracker.AddCalibrationPoint(p, lambda error, r: self.on_add_completed(error, r)) while not self.add_point_completed: psychopy.event.getKeys() self.calout.draw() self.calin.draw() self.win.flip() self.computeCalibration_completed = False self.computeCalibration_succeeded = False self.eyetracker.ComputeCalibration(lambda error, r: self.on_calib_compute(error, r)) while not self.computeCalibration_completed: pass self.eyetracker.StopCalibration(None) self.win.flip() self.getcalibration_completed = False self.calib = self.eyetracker.GetCalibration(lambda error, calib: self.on_calib_response(error, calib)) while not self.getcalibration_completed: pass draw.rectangle(((0,0),tuple(self.win.size)),fill=(254,254,254)) if not self.computeCalibration_succeeded: #computeCalibration failed. self.calresultmsg.setText('Not enough data was collected (Retry:r/Abort:ESC)') elif self.calib == None: #no calibration data self.calresultmsg.setText('No calibration data (Retry:r/Abort:ESC)') else: points = {} for data in self.calib.plot_data: points[data.true_point] = {'left':data.left, 'right':data.right} if len(points) == 0: self.calresultmsg.setText('No ture calibration data (Retry:r/Abort:ESC)') else: for p,d in points.iteritems(): if d['left'].status == 1: draw.line(((p.x*self.win.size[0],p.y*self.win.size[1]), (d['left'].map_point.x*self.win.size[0], d['left'].map_point.y*self.win.size[1])),fill=(255,0,0)) if d['right'].status == 1: draw.line(((p.x*self.win.size[0],p.y*self.win.size[1]), (d['right'].map_point.x*self.win.size[0], d['right'].map_point.y*self.win.size[1])),fill=(0,255,0)) draw.ellipse(((p.x*self.win.size[0]-10,p.y*self.win.size[1]-10), (p.x*self.win.size[0]+10,p.y*self.win.size[1]+10)), outline=(0,0,0)) self.calresultmsg.setText('Accept calibration results (Accept:a/Retry:r/Abort:ESC)') self.calresult.setImage(img) waitkey = True while waitkey: for key in psychopy.event.getKeys(): if key == 'a': retval = 'accept' waitkey = False elif key == 'r': retval = 'retry' waitkey = False elif key == 'escape': retval = 'abort' waitkey = False self.calresult.draw() self.calresultmsg.draw() self.win.flip() return retval