怎么在线运行psychopy(个人服务器/pavlovia)
首先提供两个案例: 简单反应时程序 ScreenScale(ps: 服务器到期,已失效)
Psychopy提供了一个非常棒的功能,就是online模式。有了这个功能,我们就可以在线收集行为数据了。
原理就是把python脚本转换成JavaScript在网页中运行。
在psychopy的builder视图中,可以直接通过File>Export HTML将psychopy程序转换成html文件和js代码
builder视图可以直接将程序同步到pavlovia.org上,购买license后就可以在线收集数据了。过程很简单,这里就不讲了。
但pavlovia在国内使用不太方便(访问与购买),如果自己有服务器,也可以放在自己的服务器里
尝试过的同学可能会发现,导出的网页并不能正常运行实验程序。
百度一下发现需要删除js中的“import”语句。
其实并不是。
先说解决方法,有三个步骤
- 上传任意程序到psychopy.org中,然后下载该源码(view code,然后下载),拷贝其中的js文件夹到自己的程序文件夹中。
- 在psychopy.org中运行任意程序,打开浏览器开发工具>Network ,查看psychojs*.css和psychojs*.js的地址,下载它们放到lib文件夹中
- 将导出的程序(html和js文件)原封不动的上传到服务器(解决跨域访问错误)
拷贝js文件
js包括两部分,lib和js文件夹
最终的文件夹包括
- js
- lib
举个例子:
上传到服务器
本地无法运行是由于库文件的加载失败导致的,尤其是本地测试的时候。可以通过浏览器的开发工具排除出这个问题。
本地测试时,会由于CORS error导致程序js不能加载。上传到服务器可以避免这个问题。如果没有服务器。。。那用online模式也没有意义了。
完成之后,psychopy的程序就可以在线上运行了。
比如一个简单反应时程序 (ps: 服务器到期,已失效)
以及下载自pavlovia.org的调整刺激物理尺寸(cm)的demo(ps: 服务器到期,已失效)
此时的在线程序可以运行,但数据会存储到本地,而不是服务器,如果要存储到服务器,还需要更多工作。
比如将结果上传到服务器
常见问题解决
- psychopy转js,上传服务器之后,提示图片等资源找不到,由于转换过程没有生成资源载入的js代码
1 | // 在实验前载入资源,例如:resource/bank.jpg |
- pavlovia.org上的代码中调用的js文件与psychopy不同
解决方法:在本地使用builder界面将*.pyexp文件转成js文件
怎么在线运行psychopy(个人服务器/pavlovia)