跳到主要内容
访问密钥 NCBI主页 MyNCBI主页 主要内容 主导航
神经科学方法杂志。2007年5月15日;162(1-2): 8–13.
预防性维修识别码:项目编号C2018741
PMID:17254636

Python中的心理物理软件

摘要

视觉处理的绝大多数研究都是使用计算机显示技术进行的。当前的论文描述了一套新的免费软件工具,旨在利用硬件和软件的最新进展,使这项任务变得更容易。PsychoPy是一个平台相关的实验控制系统,使用完全免费的库,用Python解释语言编写。PsychoPy脚本的设计非常易于阅读和编写,同时保留了用户自定义刺激和环境的完整能力。

软件包中提供了各种工具,从刺激呈现和反应收集(从各种设备)到简单的数据分析(如心理测量功能拟合),应有尽有。最重要的是,PsychoPy具有高度的可扩展性,整个系统可以通过用户贡献进行发展。如果用户希望添加对特定刺激、分析或硬件设备的支持,他们可以查看现有示例的代码,修改它们并将修改提交回包中,以便整个社区受益。

关键词:心理物理学、软件、刺激演示、心理测量、视觉

1.简介

自20世纪80年代以来,计算机和阴极射线管显示器(CRT)在视觉和认知神经科学实验中被广泛使用,几乎无处不在。尽管显示器具有空间和时间限制(巴赫等人,1997年)以及其他各种潜在问题(巴赫,1997年;佩利,1997年a,b;Wolf和Deubel,1997年)它们只需相对较少的努力就能产生各种各样的刺激,这使它们成为大多数神经科学实验室选择的刺激呈现方法。

本文介绍了PsychoPy,这是一套新的软件工具,可以更容易地为神经科学实验构建简单的视觉和听觉刺激。该项目的目标是生成一个完全免费的、尽可能容易使用的、基于相对便宜(最好是供应商独立的)硬件的软件包。结果是在Python编程语言之上构建了一组工具,可以直接调用OpenGL图形库。这些工具完全依赖于平台(对于主要操作系统),可以自由、简单地与范围极广的附加硬件交互。

2.方法和材料

2.1. 硬件

PsychoPy主要是在Microsoft Windows上开发的®XP平台,但已在Mac OS X(10.3和10.4)上进行了广泛测试,并已在两种平台上的实验中使用。它所基于的必要的Python库也可以在Linux上使用,一些用户报告说在该平台上取得了成功,尽管到目前为止还没有完成测试。该软件包具有高度的可移植性,因为它使用的编译代码(例如基于C的代码)数量最少。

PsychoPy的最低要求之一是支持OpenGL驱动程序和多纹理的图形卡。这几乎包括自20世纪90年代末以来由nVidia、ATI和Matrox制造的所有图形卡,尽管在微软平台上,用户可能需要从显卡供应商那里下载额外的驱动程序,而不是使用Windows安装的驱动程序®。对于使用一些简单刺激(例如一对Gabor补丁和一个固定点)的实验,这些带有内置图形处理器的卡或主板的基本版本可能就足够了。对于需要绘制大量刺激物(例如随机点显示或全局形状图案)的实验,功能更强大的显卡、快速的CPU和充足的内存都可以提高性能。

2.2. 蟒蛇

世界上许多神经科学实验室都在使用Matlab®(美国马萨诸塞州MathWorks Inc.)通过Psychtoolbox生成实验刺激(布雷纳德,1997年;佩利,1997年a,b)并用于数据分析。这是一种相对依赖于平台的语言,具有相当简单的语法和大量的高级库。Matlab公司®然而,它确实有一些缺点。它价格昂贵,而且作为一种专有软件解决方案,没有源代码,这使得科学界严重依赖其客户支持服务。这种负面影响最为明显,因为该公司有时不愿意支持苹果平台。

使用Python的目标与使用Matlab的目标类似®它们都是高级的、可扩展的、解释的语言,但有几个关键区别。Python有一个更干净的语法,使代码更易于阅读和调试。它是完全开源的,并在所有平台上不断开发,每个平台都有自己强大的用户基础。当发现错误或不兼容时,通常会很快修复,并且由于有完整的源代码可用,用户实际上可以自己调试或更改Python(如果他们是足够胜任的程序员)。开发人员(而不一定是用户)的另一个主要优势是,Python已经构建了大量库,包括OpenGL调用的完整接口。这些大大减少了对特定于平台的C代码的需要。实际上,PsychoPy几乎完全是用原生Python代码编写的。

Python的主要缺点是,至少对于普通用户来说,安装可能需要更多的精力。当用户安装Python用于神经科学实验时,他们通常需要安装大约10个辅助库来处理数据处理和绘图、刺激绘图、硬件接口等功能,其中许多功能可能包含在单个Matlab中®安装。当然,学习新语法也需要时间。就我自己而言,我当然觉得改进语法的优点和不需要许可费,保证了当时的投资。

2.3. OpenGL的使用

历史上,解释语言如Matlab®和Python的速度还不够快,无法实时执行计算和生成刺激。因此,人们求助于预先计算刺激电影或通过操纵计算机的颜色查找表(CLUT)来创建动态刺激,如漂移光栅。即使是编译语言(如C/C++)以前也无法实时生成移动刺激,如漂移的Gabor贴片(在Gaussian开发的窗口后漂移的正弦光栅)。问题是,对于256×256像素的补丁,必须计算每帧刺激中超过65000像素的强度值,然后必须将整个数组从主计算机内存发送到帧缓冲区。由于大多数计算机速度太慢,无法在必要的10毫秒内完成计算并将数据传输到显卡,因此必须预先计算这些刺激的电影才能完成任务。

一些进步意味着这个问题不再是问题。中央处理器(CPU)的运行速度明显快于以往,数据传输到显卡存储器的速度也大大提高,但产生这些刺激的一个更重要的发展是硬件加速图形。标准个人计算机上的大多数图形卡现在都有独立的处理器(图形处理单元或GPU),通过OpenGL或Microsoft的DirectX等库®,能够执行非常快速的矩阵数学函数,而无需使用CPU或将其连接到图形卡的数据总线。PychoPy使用了这个事实,并在实验开始时用正弦和高斯包络等组件模式预加载图形卡。然后,当在特定方向、相位和位置需要刺激时,GPU能够识别这些组件需要如何组合(例如,将正弦曲线置于高斯窗口后,确定其方向并计算帧缓冲区中所需的变化)。这通常可以在比一个计算机帧短得多的时间内对几百个刺激进行,并且对CPU的影响很小。因此,CPU被留下来处理其他任务,如与硬件通信和等待事件,如受试者响应或MR扫描仪触发。绘图过程也只需要发出很少的命令,这意味着减少了使用解释语言的开销。

该概念可以很容易地扩展到包含二阶刺激,例如对比度调制噪声刺激,其中三个分量矩阵(载波、包络和掩模)由图形卡在一次操作中组合。类似地,通过使用OpenGL的alpha通道(透明度)概念,我们可以简单地覆盖多个半透明光栅来创建刺激,如格子。由于这些过程非常快速,并且在CPU的最小输入下执行,因此可以渲染大量刺激,从而可以实时生成诸如移动随机点显示之类的刺激,甚至可以使用更复杂的元素(如Gabors或高斯差分补丁)生成这些刺激。

3.结果

3.1. PychoPy提供了什么

PsychoPy的主要功能是处理刺激显示和计时。它们允许用户生成一个窗口(或全屏演示),并提供一些在该窗口中使用的基本刺激(例如随机运动图、漂移光栅刺激、文本、照片)。除了提供的刺激(或对其进行修改)之外,用户还可以通过直接向窗口发出OpenGL命令来生成全新的刺激,或者将预先打包的刺激与自己的命令结合起来。除了最初设计的视觉呈现之外,PsychoPy还能够使用计算机声卡呈现立体声听觉刺激。可以通过键盘和鼠标、标准设备(如操纵杆)或更精细的硬件(通过串行或并行端口)轻松收集响应。

PychoPy还提供了一个名为MonitorCenter的图形用户界面(GUI)应用程序,用于管理监视器的校准并存储以前校准的信息。用户只需输入显示器的尺寸及其距离(使用GUI),允许PsychoPy在各种坐标系之间转换单位,例如视角、厘米或像素。此外,MonitorCenter还存储监视器的gamma-correction参数,然后在实验脚本期间自动应用这些参数。此外,如果Spectrascan PR650连接到串行端口MonitorCenter,则只需轻触按钮即可执行全自动校准。该校准将在一系列强度水平下测量亮度,并将最佳伽马函数拟合到每个枪。PR650还将测量每个枪的强度光谱,以允许不同颜色空间之间的转换。结果是,实验脚本可以简单地请求图像,例如,宽度为2°的图像,空间频率为3c/°,色度为红色/绿色。PsychoPy将为用户执行所有必要的空间和色度计算。尽管其他软件包,如PsychToolbox,可能会提供脚本来帮助用户进行这些操作,但没有一个软件包具有如此简单的自动化方法,允许用户直接在真实世界中引用刺激(图1).

保存图片、插图等的外部文件。对象名称为gr1.jpg

MoniterCenter应用程序为实验者提供了一个方便的工具,以提供有关其监视器的信息,从而使用PR650执行全自动校准,并存储以前校准的信息和注释。

为了帮助实验控制,还提供了一些功能来处理常见的设计,如楼梯程序或恒定刺激方法。例如,用户可以使用各种设置(例如所需的步长和楼梯起点)为楼梯过程创建“处理程序”。在每次试验中,处理人员将根据参与者之前的反应,自动为楼梯中的刺激提供下一个强度等级(有关此类试验的完整示例,请参阅项目网站上的教程1)。这些处理程序还可以帮助存储有关实验的信息,例如刺激参数、刺激的伪随机顺序等。

最后,提供了一系列函数来帮助数据分析,例如曲线拟合和统计重采样方法的使用。例如,以下示例脚本(代码段1)获取强度值列表和这些强度下的平均响应。然后,PsychoPy类FitWeibull将心理测量函数拟合到数据中。由此,我们可以检索拟合参数,请求函数在某些给定强度值下的值,或在某些给定响应值下的逆函数。

3.2. 易用性

Python语言和PythonPy库的语法非常容易理解,特别是对于任何具有面向对象语言经验的人来说。例如,Code Snippet 2生成一个窗口,在该窗口中绘制对比度为50%的Gabor,其光栅以3 Hz的速率漂移。

与任何语言一样,特定的语法需要花时间学习,但Python与Matlab相比有许多优点®最值得注意的是,它是作为一种面向对象的语言从头开始构建的。对于开发人员来说,这使得代码的使用和重用更加容易。对于用户来说,代码保持可读性,并且非常容易识别哪些函数应用于哪些类型的对象。在代码段2中,创建了一个时钟对象,该对象具有与其关联的方法getTime()。在面向对象的编程模型下,用户可以创建任意数量的时钟对象,每个对象都可以返回自己的(不同的)时间。Python的另一个优点是能够命名给函数的参数,未使用的参数被赋予一些默认值。在下面的代码中,Window对象有许多其他参数没有显示在这里(用于控制窗口的颜色、是否显示为全屏等),但这些参数在本例中并不需要。参数命名功能意味着我们不需要按照正确的顺序指定所有参数,直到我们实际希望使用的参数为止(在本例中,units=“deg”)。该语言还有许多其他特性,例如直接连接字符串的能力(“Hell”+“o”=“Hello”)或广泛的可用数据类型,但这些都超出了本文的范围。项目网站上提供了许多其他演示程序,包括屏幕截图(网址:www.PsychoPy.org).

3.3. 时间准确性和速度

定时精度是神经科学实验中最关键的问题之一。正如您可能从平台依赖包中预期的那样,PsychoPy的计时精度至少部分取决于它运行的系统时钟。在大多数计算机上,这精确到微秒量级,在任何现代机器上,为了测量用户响应,这应该具有亚毫秒精度。

为了与视频显示同步,PsychoPy使用双缓冲显示方法,缓冲区交换与屏幕的垂直空白时段同步,前提是相关图形卡支持该功能(大多数情况下)。这意味着所有绘图命令都将发送到屏幕的隐藏副本,然后,当给定更新命令时,隐藏副本将与当前显示的屏幕图像交换。当同步到垂直空白时,在发生此屏幕翻转之前,不会执行其他命令。假设可以在垂直空白之间的时间内(在85Hz的刷新率下为11.7ms)完成对隐藏缓冲器的所有绘制,则该方法提供了极其稳健的定时机制。是否在必要的时间内完成所有绘图命令的问题取决于绘图的复杂性、计算机及其图形卡的速度,但通常可以绘制数百个中等复杂的刺激。对于随机点刺激,可以在一个帧内渲染数千个简单元素(在AMD Athlon 3000+、512 MB RAM、nVidia GeForceFX 5500的测试系统上,无需丢弃任何帧即可绘制多达3500个帧)。在一帧内,可以用更新的位置/相位/方向绘制大约80个Gabor刺激。如果它们的位置不变,则可以绘制更多的图形。至关重要的是,PsychoPy将在整个实验过程中选择性地测试并报告掉帧。

对于需要更多(或更复杂)刺激的场合,可以在包中添加C/C++扩展以提高渲染速度。为了与外部硬件精确同步,并行端口和串行端口提供了快速发送TTL脉冲和字符或其他数据的方法。

3.4. 硬件扩展

PychoPy有非常简单的方法来访问可用的并行和串行端口,使硬件接口易于构建。它已经为Bits++(英国剑桥研究系统公司)、Spectrascan PR650(美国加利福尼亚州照片研究公司)、fORP MRI响应箱(美国费城Current Designs Inc.)提供支持,但应该能够与几乎任何使用串行或并行端口或模拟计算机设备(如鼠标、,键盘或操纵杆。事实上,由于Python在C中是可扩展的,因此它应该能够与用户有驱动程序的任何硬件进行接口。

为了给实验者提供比使用标准显卡(带有8或10位数模转换器,DAC)更大范围的刺激对比度,PsychoPy与Bits++硬件集成。Bits++单元位于视频卡的数字视频输出之间,向显示器提供14位VGA信号。该系统提供14位DACS,其输出通过查找表设置,可在每一帧(甚至在一帧内)轻松更改查找表。在标准模式下,Bits++单元内的查找表包含256个值(对应于监视器的输出值),这些值对应于要传递给监视器的任何14位值选择。1该系统独立于计算机平台或任何特定的软件库,是产生具有非常精确对比度值的刺激的相对廉价的方法。

其他设备,如SpectraScan PR650,可以通过计算机的串行端口进行控制(或通过模拟串行端口的USB适配器进行控制,如果没有串行端口可用)。例如,这是监控中心指示PR650在自动校准期间进行测量的方法,以及在测量后检索亮度和/或强度光谱的方法。串行端口也是一种方法,通过该方法,PsychoPy脚本可以接收来自fORP MRI响应盒的输入,从而可以记录来自磁共振成像(MRI)硬件的触发器和来自MR兼容按钮盒的响应。如果串行端口不可用,fORP系统可以通过USB端口模拟键盘按键。

3.5. 支持机制

对软件的支持主要通过以下网站进行维护:http://www.psychopy.org网站。该网站是基于wiki的,允许用户自己直接编辑页面,并贡献或更正文档。还有一个邮件列表,用户可以通过该列表获得原始作者的支持,还可以为同行提供支持。PychoPy的代码本身简单、透明,并且包含在软件中,因此用户也可以自己修改和改进它。

4.讨论

视觉神经科学的理想软件包应该基于自由库、开源(这样科学家可以准确地确定幕后发生的事情)、易于使用、能够实时生成刺激(而不是从预先计算好的电影中),并且独立于平台(至少对于Windows而言®、Macintosh和Linux环境)。该软件包还应易于扩展,以处理可用的新技术和硬件。尽管神经科学家已经可以使用许多刺激呈现包(例如,请参阅由斯特拉斯堡,2005年),在撰写本报告时,没有一家公司符合上述所有标准。表1显示了三个此类软件包在当前使用和开发中的特性比较。

表1

几个常用软件包的功能摘要表

保存图片、插图等的外部文件。对象名称为fx3.jpg

有关更多详细信息,请参阅正文。

演示®(神经行为系统公司,网址:www.neurobs.com)是严格在Windows上可用的商业软件包®,不是免费的,并且没有源代码。它也不是为了构造刺激物本身,而是为了渲染在其他包中预先制作的电影和图像。在自由软件中,Psychtoolbox(布雷纳德,1997年;佩利,1997年a,b)是最成熟的,被全球大量实验室使用。虽然Psychtoolbox对于许多视觉科学家(和认知神经科学家)来说是一个无价的工具,但它是建立在Matlab之上的®,这是昂贵的,并且没有源代码。

一个与PsychoPy具有类似精神气质和基本机制的软件包是The Vision Egg(网址:www.visionegg.org)安德鲁·斯特劳。这个库最初是为了研究苍蝇的视觉系统而设计的,是一个构建在Python和OpenGL之上的非常强大的包。对于一个优秀的程序员来说,Vision Egg很好地实现了其目标,为视觉刺激的呈现和与硬件的交互提供了一个强大且高度优化的系统(包括通过网络远程运行实验的能力)。然而,斯特劳确实非常坚持面向对象的编程模型,这对于像大多数科学家一样缺乏经验的程序员来说可能更难理解。例如,Vision Egg中实验的时间控制主要是通过使用呈现循环来实现的,用户通过该循环设置一个对象在给定的时间内运行,给它附加刺激,将其附加到屏幕上,然后告诉它“去”。相反,PsychoPy只在对象在编程语言领域之外具有直观意义的情况下使用面向对象编程。例如,刺激物或窗口是对象类型的概念是非常直观的。另一方面,为了控制试验过程中刺激出现的方式,PsychoPy允许用户创建一个简单的事件序列(例如,绘制固定点、等待200毫秒、绘制刺激、等待按键等),希望这比事件所附的演示对象更直观。

PsychoPy旨在为科学家提供一种简单直观的方法来生成实验控制程序,将Python/OpenGL的强大和自由与PsychoToolbox中的易用性相结合。它已经包含了各种各样的工具,允许从生成刺激和表示协议到记录和分析数据的一切。随着社区的不断壮大和持续的积极发展,情况只会越来越好。

致谢

非常感谢Ben Webb在破坏性测试方面的帮助,也感谢Python社区编写了构建PythonPy的各种库和代码。PsychoPy的开发部分由JWP持有的BBSRC项目拨款(BB/C50289X/1)资助。

窗户®和DirectX®是Microsoft Corporation的注册商标。Matlab公司®是The MathWorks,Inc.Presentation的注册商标®是神经行为系统公司的注册商标。

脚注

1Bits++具有附加模式,可以显示256个以上的并发RGB值,但会牺牲颜色信息(Mono++)或屏幕分辨率(colour++)。

工具书类

关于光栅扫描阴极射线管亮度校准的注释:时间分辨率、纹波和精度。Spat视力。1997;10:485–489.[公共医学][谷歌学者]
Bach M.、Meigen T.、Strasburger H.Raster-scan阴极射线管视觉研究空间、时间和强度分辨率,以及一些解决方案。Spat视力。1997;10:403–414.[公共医学][谷歌学者]
Brainard D.H.心理物理学工具箱。Spat视力。1997;10:433–436.[公共医学][谷歌学者]
Pelli D.G.像素独立性:在crt显示器上测量空间相互作用。Spat视力。1997;10:443–446.[公共医学][谷歌学者]
Pelli D.G.视觉心理物理学的视频工具箱软件:将数字转化为电影。Spat视力。1997;10:437–442.[公共医学][谷歌学者]
斯特拉斯堡,H.视觉心理物理学软件,2005,http://www.hans.strasburger.de/psy_soft.html.
Wolf W.,Deubel H.P31磷光体在明视平均亮度水平下的持久性。Spat视力。1997;10:323–333.[公共医学][谷歌学者]