2016-06-15 10 views
0

У меня есть эксперимент, в котором я представляю стимулы с использованием PsychoPy/PyGaze и отслеживать движения глаз с помощью EyeTribe eye tracker. В этом эксперименте я обновляю размер двух визуальных стимулов на каждом кадре (при 60 Гц). Я готовлю каждый кадр заранее, а затем перебираю все объекты экрана и представляю их. Между тем, воспроизводится непрерывный звук. Когда я запускаю этот эксперимент в фиктивном режиме (движение мыши используется как симуляция для позиции взгляда), для визуального представления нет проблем с синхронизацией. Однако, когда я запускаю эксперимент во время отслеживания глаз, время визуального представления больше не является точным (более высокая изменчивость в длительности кадров).Временные проблемы Psychopy PyGaze EyeTribe Eyetracker (многопоточность)

Я пробовал искать многопоточность, но в сценарии pytribe PyGaze я не могу найти никаких доказательств того, что один поток ждет события, происходящего из потока отслеживания глаз. Итак, я не знаю, как выяснить, что вызывает проблемы с синхронизацией или как это решить? (Надеюсь, я объяснил эту проблему достаточно конкретным).

ответ

1

Это хуже, чем просто необходимость отдельной темы для визуализации eyetrack против визуализации стимулов. То, что вам действительно нужно, - это отдельный процесс , который позволяет избежать блокировки Global Interpreter Python (GIL). GIL предотвращает запуск различных потоков на разных процессорах.

Для улучшения временной точности я бы порекомендовал вам переключиться с pygaze на iohub (у которого также есть поддержка eyetribe, я считаю). iohub действительно работает по-разному на другом ядре машины, где это возможно, чтобы ваши стимулы и данные глаз можно обрабатывать независимо во времени, и он обрабатывает все материалы синхронизации для вас.

+0

Дорогой Джон. Спасибо за ответ. Я провел ваше время с демо-версией ByFrames с отслеживанием глаз и без него с помощью iohub. Без отслеживания глаз я получаю среднюю частоту кадров 16,7 мс (SD = 1,29) и 0,4% отброшенных кадров, в то время как я получаю в среднем 13,6 мс (SD = 2,18) с 2% потерянными кадрами с отслеживанием глаз. Мой процессор: Intel (R) Core (TM) i5-5300U CPU 2,30 ГГц. Как синхронизация визуального представления идет быстрее, чем частота обновления моего монитора? Является ли блокировка интервалов вертикальной задержек влиять на процесс отслеживания глаз каким-либо образом? – Hanne

+0

Я просто добавляю этот комментарий, если кто-нибудь столкнется с теми же проблемами. Время визуального представления хорошо с iohub, если я запускаю свой скрипт из командной строки вместо Spyder. – Hanne

+0

Спасибо за информацию Hanne. Я всегда был немного обеспокоен тем, что spyder будет замедляться для людей, потому что у него (по-видимому) есть различные дополнительные функции для включения отладки. Кстати, если ответ выше работает для вас, можете ли вы пометить его как ответ/правильный? ура – Jon

1

Добавляя к ответу Джона: Ханне также отправила по электронной почте о проблеме, и, оказывается, она проводила эксперименты со Spyder. При запуске из командной строки не должно быть никаких проблем с синхронизацией. (Очевидно, что GIL все еще существует, но на практике это, похоже, не влияет на синхронизацию экрана.)

Чтобы предотвратить какие-либо проблемы в будущем, я добавил класс, который позволяет запускать EyeTribe параллельно Обработать. См: https://github.com/esdalmaijer/PyTribe/blob/master/pytribe.py#L365

Пример использования:

 
if __name__ == "__main__": 

    from pygaze.display import Display 
    from pygaze.screen import Screen 
    from pytribe import ParallelEyeTribe 

    disp = Display() 

    scr = Screen() 
    scr.draw_fixation(fixtype='cross') 

    tracker = ParallelEyeTribe() 


    tracker.start_recording() 

    disp.fill(scr) 
    disp.show() 
    tracker.log("Stimulus onset") 

    time.sleep(10) 

    disp.show() 
    tracker.log("Stimulus offset") 
    tracker.stop_recording() 

    tracker.close() 
    disp.close() 

 Смежные вопросы

  • Нет связанных вопросов^_^