怎么在线运行psychopy(个人服务器/pavlovia)

首先提供两个案例: 简单反应时程序 ScreenScale(ps: 服务器到期,已失效)


Psychopy提供了一个非常棒的功能,就是online模式。有了这个功能,我们就可以在线收集行为数据了。

原理就是把python脚本转换成JavaScript在网页中运行。

在psychopy的builder视图中,可以直接通过File>Export HTML将psychopy程序转换成html文件和js代码

builder视图可以直接将程序同步到pavlovia.org上,购买license后就可以在线收集数据了。过程很简单,这里就不讲了。

但pavlovia在国内使用不太方便(访问与购买),如果自己有服务器,也可以放在自己的服务器里

尝试过的同学可能会发现,导出的网页并不能正常运行实验程序。

百度一下发现需要删除js中的“import”语句。

其实并不是


先说解决方法,有三个步骤

  1. 上传任意程序到psychopy.org中,然后下载该源码(view code,然后下载),拷贝其中的js文件夹到自己的程序文件夹中。
  2. 在psychopy.org中运行任意程序,打开浏览器开发工具>Network ,查看psychojs*.css和psychojs*.js的地址,下载它们放到lib文件夹中
  3. 将导出的程序(html和js文件)原封不动的上传到服务器(解决跨域访问错误)

拷贝js文件

js包括两部分,lib和js文件夹

最终的文件夹包括

  • js
  • lib

举个例子:

上传到服务器

本地无法运行是由于库文件的加载失败导致的,尤其是本地测试的时候。可以通过浏览器的开发工具排除出这个问题。

本地测试时,会由于CORS error导致程序js不能加载。上传到服务器可以避免这个问题。如果没有服务器。。。那用online模式也没有意义了。

完成之后,psychopy的程序就可以在线上运行了。

比如一个简单反应时程序 (ps: 服务器到期,已失效)

以及下载自pavlovia.org的调整刺激物理尺寸(cm)的demo(ps: 服务器到期,已失效)

此时的在线程序可以运行,但数据会存储到本地,而不是服务器,如果要存储到服务器,还需要更多工作。

比如将结果上传到服务器


常见问题解决

  • psychopy转js,上传服务器之后,提示图片等资源找不到,由于转换过程没有生成资源载入的js代码
1
2
3
4
5
6
7
8
// 在实验前载入资源,例如:resource/bank.jpg
psychoJS.start({
expName: expName,
expInfo: expInfo,
resources: [
{'name': 'resources/bank.jpg', 'path': 'resources/bank.jpg'}
]
});
  • pavlovia.org上的代码中调用的js文件与psychopy不同

解决方法:在本地使用builder界面将*.pyexp文件转成js文件

怎么在线运行psychopy(个人服务器/pavlovia)

https://neurospider.cn/post/24628/

Author

SuperSpider

Posted on

2021-08-26

Updated on

2022-05-07

Licensed under