長時間來,在我們實驗室使用PsychoPy一個無解的問題是使用中文。我們一直以來的solution就是把文字顯示的部分都做成圖檔來表示。但這樣一來,檔案較多也較缺彈性。最今在一個日文網站看到一個暫時的解決方式,雖然這是在Builder界面來解決,但同樣道理可以用在Coder界面中。以下詳細說明: Continue reading
Category Archives: 用PsychoPy玩實驗
Builder 到 Coder 1
今天的主題是想介紹 PsychoPy 的兩種界面間的關係,也就是 Builder 與 Coder 兩個部分的關聯性。
Filed under 用PsychoPy玩實驗
用 PsychoPy coder 來學習 (2)
學習coder的第二篇文章。這一次要教大家如何自定義滑鼠,所使用的範例為CustomMouse。先打開PsychoPy的coder界面,然後找到Demos裡面的input之customMouse.py,按下Run,來看看coder怎麼運作吧!
哇,比起上一篇文章,程式的行數多了一些,不過大家莫急莫慌!接下來就一一解釋程式中各行的意思,解釋不完全的地方也請大家多多包含!
行9:__future__ 這模組是用來讓Python2與Python3相容。這次會使用到的division 是除法結果是可以含有小數點。
行13:PsychoPy模組中import進來visual與event,其中visual是顯示相關模組,event是接受反應的模組。
行15:賦予win的定義,方便接下來直接以win來表示=後面的指令(visual.window)。設定顯示螢幕,由於這次沒特別設定螢幕的大小,所以就照內建默認的大小設定,以便結果輸出到下面視窗時可以看到。
行18-20:賦予vm的定義,同時也設定vm的顯示內容。top、bottom、 left、及right Limit表示鼠標在上、下、左、右可移動的距離限制。showLimitBox代表顯示由上下左右之距離限制所形成的移動範圍,True代表pointer顯示鼠標可移動之範圍;False則與True相反,即不顯示。clickOnUp代表計算點擊滑鼠左鍵反應的時機,True代表點擊滑鼠後將要離開之時刻;False則代表一開始點擊滑鼠之當下。
**customMouse之詳細設定請參考:http://www.psychopy.org/api/visual/custommouse.html#psychopy.visual.CustomMouse
行22-23:賦予instr之定義,設定指導語顯示的文字內容(text)與顯示位置(pos)。\n代表換行。
行24:賦予new_pointer之定義。以字母o來顯示鼠標。
行25:利用函式print(),將下列三項數據輸出至output視窗。滑鼠點擊位置、滑鼠滾輪位置及點擊時間。
行26-42:是個迴圈,只是會根據反應的不同而進入不同的結果。
行26:表示當反應為非任一按鍵反應,
行27-28:則將指導語與鼠標的資訊輸出到緩衝器,等待由螢幕輸出。
行29:把緩衝器(即行27-28的instr與vm)的內容顯示在視窗中。
若反應為任一按鍵反應則直接跳至行44:關閉視窗。
行30:如果反應為點擊滑鼠反應,
行31:則重設滑鼠,
行33-35:輸出三項數據至output視窗。行33的%.2f意思為取到小數點後兩碼;行35的%.3f意思為取到小數點後三碼。
行38:更改鼠標可移動至範圍。
行39:更改指導語。
行42:賦予vm.pointer定義,即行24。
若反應為任一按鍵反應則直接跳至行44:關閉視窗。
行44:關閉視窗。
以上就是Demos裡面的input之customMouse的程式說明~
然後,希望大家可以試著動手跑跑看,可以有助於理解哦~若有疑問也請留言,我會盡自己所能地回答!如果上述有錯誤的地方,也請大家不吝嗇地指出錯誤,讓我們可以共同進步!感恩!
額,或許有人看不懂行26-42的迴圈是怎麼回事,不過沒關係,我也是研究了許久才了解的!在此附上我研究許久的簡易圖~希望大家別嫌棄它~
Filed under 用PsychoPy玩實驗
用 PsychoPy coder 來學習 (1)
2018年暑假請同學一起來玩PsychoPy,為了不要忘記,在此留下筆記。這一篇是學習coder的第一篇。我們將PsychoPy安裝後打開 Demo(第一次會問我們要不要安裝 demo),由其中範例程式來學習。
Filed under 用PsychoPy玩實驗
用PsychoPy玩實驗(5)
我們上次已經建立了一個指導語trial,接下來我們要來學習建立最關鍵的「實驗作業」。
這次的作業是小時候常玩的「數字比大小」遊戲,稍微想像一下,這個遊戲的內容或許是「左邊有一個數字,右邊有一個數字,然後請玩家選擇『數字比較大』的那一邊」。
如果要用小畫家來示意,應該就是類似這樣子的遊戲畫面:
然後玩家可以使用「電腦鍵盤的方向鍵」來選擇左邊或右邊的數字,假如玩家覺得12比較大,那他就可以按下方向鍵的右鍵進行反應,並完成這一次的問答作業,非常直覺的作業形式。
那我們要如何使用PsychoPy來建立上述的作業呢?首先我們需要在原本的指導語後面,再建立一個新的trial。
我用紅色框起來的地方就是這個新的trial,建立的方式與先前的指導語相同,透過「Insert Routine」來添加。
這裡特別注意到畫面中「inst_resp」的圖示已經變化了,變成了電腦鍵盤!這是最近一次軟體更新中改變的部份,方便我們區分「Keyboard」和「Cedrusbuttonbox」的不同,所以未來要加入電腦鍵盤物件時,記得點選這個電腦鍵盤的圖示。
緊接著,我們點選剛才新建立的「trial」,也就是我們這個實驗的重頭戲。
它目前還是一片空白,不過沒有關係,我們先試著加入一些東西,既然是數字比大小的遊戲,畫面上當然要有數字。我們比照先前撰寫指導語的方式,建立一個文字物件和一個鍵盤物件,並分別編輯它們的內容:
按下ok之後,就試著「Run」一次看看。我們現在可以開始養成一個習慣,每完成一個小段落,就試著跑一下程式,這可以避免初學者在撰寫實驗的過程中累積許多小錯誤,最後卻找不到bug在哪裡。
這就是這個數字物件的內容,數字「1」確實呈現出來了,就跟先前的指導語一樣,然而光是這樣並沒有辦法做比較,如果要做比較的話,畫面上至少要有兩個數字才行。
假如我們按照之前的方式加入第二個文字物件,那麼這兩個文字物件將會重疊在一起(重疊在畫面的正中央),所以我們要設法讓它們有一些「位置上」的差異。此外目前畫面上的數字1也長得太矮小了,放大一點或許能看得比較清楚!
為了進行以上的調整,我們先打開剛才命名為「number」的文字物件,並且在它的編輯界面進行以下的更動:
首先在「Name」的地方,我們可以在後面加入「_left」的字串,表示這個數字是出現在畫面「左邊」的。注意!PsychoPy的命名系統不太接受空白鍵,因此當我們想要區隔字元時,請愛用「_」來做分隔。
其次,「Letter height」的框格,則把原本的0.1改成「0.3」,讓它的尺寸長大3倍。
最後在「Position」的部份,把X軸預設的0改成「-0.5」,將物件的位置定位在畫面左邊。在物件的定位方面,X軸和Y軸分別是從「-1~1」的範圍,兩軸的-1和1就是畫面的上、下、左、右邊界處。
然後按下OK之後,我們可以再「Run一次看看」!
一個位於畫面左側的大型數字,這應該是比較符合我們需求的物件,接下來就請按照以上的介紹,試著自己完成另一個以「number_right」為名,而且文字內容為「3」的文字物件吧!
完成了嗎?完成之後的畫面應該是長這個樣子的:
然後我們再回到鍵盤物件的部份,按照以下的方式重新編輯這個物件:
說明一下,其中「Allowed keys」的部份,代表的是我們允許玩家使用哪些按鍵作答,由於這個遊戲只需要「左鍵和右鍵」就能完成,因此我們留下這兩個鍵即可,其餘的按鍵就當作不允許使用,避免玩家誤觸。
而後「Store correct」的框框記得要打勾,並在下方的「Correct answer」填入「right」(畢竟3應該比1大)。因為這一題有標準答案,假如我們事先把標準答案設定好的話,程式就會自動幫我們對答案,省去我們核對的辛勞。
全都設定好之後,我們就可以把程式完整的Run下去啦!
這是第一頁,指導語指示玩家要「從兩個數字當中選擇較大的一方」,按下「空白鍵」之後就可以繼續。
嗯,題目出現了!因為數字3比數字1還要大,這個時候就要按下「右鍵」才行呢!按鍵之後就會順利結束實驗。
大功告成!不過就只有一題似乎有點無趣,答對了也沒有成就感,所以我們下次會介紹如何運用循環清單的形式,一口氣製造出「100題」數字比大小遊戲!
敬請期待!
Filed under 用PsychoPy玩實驗
用PsychoPy玩實驗(4)
上次有介紹到如何撰寫簡單的指導語,由於PsychoPy無法接受中文字(儲存路徑也不能有中文),因此若要以「Text Components」來編輯指導語,我們就只能寫英文。
寫完指導語後,我們所看到的實驗流程應該是這樣的狀態:
緊接著,我們要設定指導語的結束條件,記得稍早編輯「inst」文字物件的時候,我們在「Stop」的地方留白嗎?
其實這是為了透過留白的方式,另外插入一個由反應鍵所控制的結束條件。一般而言,讓一個物件結束的方式有很多種,我們可以讓它時間到就自然結束,或是在實驗參與者「進行反應」後結束。
以指導語來說,我們通常會讓實驗參與者有足夠的時間閱讀,因此比較理想的作法,應該是讓實驗參與者可以自由控制它的結束時間,為了達到這個目的,我們要先插入一個反應物件。
在旁邊的Components欄位,選擇「Responses」,這裡有許多的反應種類,由於我們要使用「鍵盤」進行反應,所以我們可以先點選紅色框框裡的「Cedrus」。
在這裡特別注意,在Linux系統當中,物件欄裡的「Keyboard」和「Cedrusbuttonbox(註1)」都是用同樣的圖示,這應該是錯誤的,但最近幾次的版本卻都沒有更新,我們如果不確定自己是否選到鍵盤,就要看開啟後的物件標題。
物件的標題是「Keyboard Properties」,表示我們選對了。
我們這時候就可以開始編輯它的內容,和剛才的「Text Components」很像,從上而下分別是「物件名稱」、「起始條件」、「結束條件」、「使Routine結束(勾選)」、「允許使用的按鍵」、「儲存的時機」、「設定正確的反應」以及「捨棄此物件之前的反應(勾選)」。
由於這只是用來控制指導語結束的時機,我們不必把它設定得太複雜:
1、「Name」的部份可以輸入「inst_resp」,表示它是用來控制「inst」的「response」。
2、「Start」的地方維持原樣即可。目前的意思是以「時間」為起始條件,並在「0.0」秒的時候開始。
3、「Stop」的條件,預設是空白,保持這樣就可以了。
4、「Force end of Routine」的框格,預設是勾選,因為我們是打算讓實驗參與者「按鍵反應則結束指導語」,所以就維持在勾選的狀態。
5、「Allowed keys」的部份,我們只留下「’spece’」,這表示實驗參與者只能按空白鍵做反應,否則它不會接受。
6、「Store」的部份,我們可以設定電腦儲存反應的時機,預設條件是儲存實驗參與者所進行的最後一個反應,但這只是個指導語,所以我們可以選擇「nothing」,避免之後的data太過雜亂。
7、「Store correct」的部份,可以幫我們設定這個反應的「正確答案」,由於這只是指導語,我們就不必理會它。
8、「Discard previous」的部份,預設是打勾,顯示為捨棄先前的反應,我們保持原樣即可。
把上述的條件都設定完成後,我們只要再按下「OK」,就會在這個trial裡得到一個名為「inst_resp」的反應物件。
設定好反應鍵後,我們可以先回到稍早編輯過的「inst」文字物件,並把其中文字內容的「Choose the larger of two numbers.」下面再多補充一行「Press ‘space’ to continue.」,讓實驗參與者知道該按什麼鍵來繼續實驗。
編輯完成後,我們可以試著執行目前的實驗,看效果如何。按下上欄「綠色圓裡有白色小人在跑」的「Run」圖示,或是按下鍵盤的「Ctrl+R」,都可以執行實驗。
此時,如果我們是第一次執行,就需要先把實驗存檔,設定它的名稱與儲存路徑(我現在是將它命名為「sample」),然後儲存即可。
注意!這個路徑不能包含任何的中文字,否則可能會無法執行。
完成儲存後,緊接著會跳出一個視窗,詢問實驗參與者的名稱與預設為001的session。此時我們只要輸入「participant」的名稱,按下「OK」即可執行!
這就是按下「Run」之後的畫面,如果無法順利執行,請確認之前所介紹的部份是否都有正確編輯。
在進入這個畫面後,除非按下我們預先設定的「space」鍵,否則無法結束指導語,反過來說,一旦按下「space」鍵,也就達成了結束指導語的條件。
目前我們已經把指導語完成,也把實驗存檔了,接下來會開始進入實驗的本體部份,我們下次再見!
***
Filed under 用PsychoPy玩實驗
用PsychoPy玩實驗(3)
上次簡介了PsychoPy的圖形界面結構,我們接下來要進一步用這個界面逐步編輯一個實驗。
當然,一開始的舉例不宜太複雜,我們先從簡單到爆的小遊戲實驗開始。
事實上,目前圖形界面在操作上仍有其限制,不能像寫code一樣天馬行空,也有許多功能難以完美客製化,只能說它非常適合初學者。
所以,我們就先來寫一個「數字比大小」的實驗好了!(這是什麼笨蛋實驗?)
首先,我們一樣打開我們熟悉的PsychoPy工具,進入圖形界面,如下圖所示:
我們可以看到上次提過的「Components」、「trial」和「Flow」,而我們先從「Flow」開始。
在我們每次開啟新的實驗後,我們就會免費得到一個預設的trial,顯示為綠色。
預設的trial的名稱就是「trial」,而下面的括號則表示這個trial耗時0.50秒,我們可以選擇直接使用它,或是自己再創一個新的trial,並取一個自己喜歡的名字。
如果我們要自己創一個新的,我們就可以把贈送的這個移除掉,移除的方法很簡單,只要在上面的trial(紅色框起來的地方)按下「x」即可。
移除它之後,我們會得到一片空空如也的Flow,如下圖所示:
緊接著,我們要創建一個新的trial,請點選Flow欄位的「Insert Routine」,並選擇「new」。
補充一下,假如這是我們在這次實驗當中創建的第一個trial,其實也沒有除了new以外的選項。
然後它會請我們輸入這個trial的名稱,我們可以決定要先設定招呼語、指導語、實驗作業或是感謝詞,通常我的習慣是按照實驗的進行流程,從實驗招呼語和指導語開始。
於是在名稱的框格裡面,我們就可以先輸入「instruction」,並按下「確定」。
接著,原本一片空白的Flow出現了一個黑點,顯示我們可以任意安排這個「instruction」的位置,但由於現在整個實驗的時間軸都還沒有任何物件,因此我們不用特別選擇什麼位置,反正就是先放中間再說。
滑鼠點擊黑點後,它就會成為這個名為「instruction」的新trial,目前它還沒有任何內容。
之前有提到,構成trial的單位是「Components」、所以我們現在看到右邊欄位的Components,目前顯示出來的圖示是我最常使用的物件。
圖示從左上方開始分別是「呈現圖片」、「設定鍵盤反應鍵」、「呈現文字」與「呈現聲音」,而我們現在想要編輯的是實驗指導語,因此我們要先選擇「呈現文字」的圖示。(就是那對黑色和紅色的T。)
點選T圖示之後,就會出現文字的詳細設定,從上而下分別是「物件名稱」、「起始條件」、「結束條件」、「顏色」、「字形」、「尺寸」、「位置」以及最重要的「文字內容」。
1、「Name」的部份可以輸入「inst」。注意,因為我們剛才已經用「instruction」當成這個trial的名稱,所以我們現在就不能再取一個相同的名字,當然,要隨便取名為「123」或「abc」也可以,只是以後可能會認不出來。
2、「Start」的地方維持原樣即可。目前的意思是以「時間」為起始條件,並在「0.0」秒的時候開始。
3、「Stop」的條件,我們要先把框格裡的「1.0」刪掉。畢竟指導語只呈現1秒真是太折磨人了。在這裡保持空白,可以讓我們後續設定其他的結束條件。(這裡之後會再提到。)
4、「Color」的部份,預設是白色,我們維持原樣就好,字形和字體大小也可以先不調整,之後覺得怪怪再回頭設定。
5、「Position」的部份,預設是在畫面正中間,前後兩個數字分別代表X軸和Y軸,可以調整文字的水平和垂直位置。
6、最後是最重要的「Text」,也就是文字內容,我們在這裡輸入「Choose the larger of two numbers.」,請實驗參與者選擇兩個數字之中較大的一方。
把上述的條件都設定完成後,我們只要再按下「OK」,就會在這個trial裡得到一個名為「inst」的文字物件。
哇!指導語完成嗎?
當然還沒有,我們下次會再進一步把指導語物件的內容編輯得更仔細!我們下次再見!
***
註:
稍微令人悲傷的是,目前Ubuntu系統的PsychoPy並不支援中文的文字物件,所以我沒辦法在Text的框格裡輸入中文字,即使用複製貼上的消極方式,也無法順利顯示。
因此,假如你和我一樣使用Ubuntu電腦,而且需要呈現中文指導語,目前我想到較簡便的作法還是以簡報軟體編輯中文,並將簡報匯出成圖檔,再從Components設定圖檔(之後會介紹)。
Filed under 用PsychoPy玩實驗
用PsychoPy玩實驗(2)
上次在介紹軟體更新的時候,忘了提到一個重點,如果你和我一樣是Ubuntu的使用者,就要先安裝NeuroDebian這個套件,否則會無法在Synaptic上面取得PsychoPy的新版本。
雖然更新好像很麻煩,但是如果不更新,這個軟體是沒辦法跑的,所以請務必更新。
我們先假設大家都已經更新好了,在打開軟體後,按照之前提到的方式,打開Builder界面。因為這一系列是寫給和我相同程度的超初學者,所以我的介紹都會以圖形化的Builder view為主。
這就是Builder界面,我們先來看看這個界面有什麼特別的。
***
1. trial
我用紅色框起來的部份就是「trial」,trial是放物件的地方,我們的實驗需要用到哪些項目,就要把它放進trial裡面。它其實是一個時間軸,我們可以看到它是以秒為單位,而這段時間軸被切成了十個刻度,每個刻度是0.1秒。
酒紅色背景的部份是「ISI」,也就是刺激間隔,一開始預設是0.5秒,我們可以直接在酒紅色背景按滑鼠右鍵編輯它,或是把它刪除掉也可以。
***
2. components
接下來是「components」,這是構成實驗的基本單位,也就是各式各樣的物件。物件的種類很多樣,主要是刺激與反應,以及其他自定義項目,我們可以把自己常用的物件抓到最上面的favorites,比較方便尋找。
關於這些物件的詳細內容,之後會慢慢介紹,大致上會以「用到哪裡就講到哪裡」這種苟且的態度介紹。
***
3. Flow
最後是「Flow」,這是比trial更上層的時間軸,也可以說是實驗的完整流程。
左邊的部份有「Insert Routine」和「Insert Loop」兩個項目,前者可以幫我們添加一個trial(既有的或是新的),後者則可以幫我們設定一個循環(起始點與終點)。
當我們一次實驗有多個題目的時候,我們就可以設定同一系列的題目循環,而不是辛苦的逐一編輯。
***
總之,PsychoPy編輯的架構大概是這樣:
「Flow」包含「trial」再包含「components」,或是「components」構成「trial」再構成「Flow」。假如我們已經有明確的實驗藍圖,從哪裡開始著手都可以。
下一次開始,我會以實際的例子操作PsychoPy,和大家分享簡單實驗的編寫過程,雖然PsychoPy有內建範本,不過那是成品,我想過程也很重要。
Filed under 用PsychoPy玩實驗
用PsychoPy玩實驗(1)
這個系列是以「PsychoPy」編輯心理學實驗的記錄,一開始先隨便寫,之後可能會再統整。
(因為是隨便寫的版本,所以偶爾可能不太方便閱讀,請多包含。)
在進入正式的內容之前,先進行一些簡單的說明。
目前我的PsychoPy版本是1.81.03,安裝於Ubuntu作業系統。如果是用Ubuntu軟體中心下載PsychoPy,可能會遇到的最大問題就是版本更新,因為這個軟體中心並不提供更新服務。
在此建議的方法是先從軟體中心下載「Synaptic套件管理程式」,並透過此程式更新PsychoPy,至於詳細的流程,則可以參考官方網站的介紹。
等軟體更新完成後,我們就可以開始使用PsychoPy了!
首先,打開軟體之後,我們會看到以下的畫面:
可以看到我的軟體版本是1.81.03,這其實並不是目前最新的官方版本,而是Synaptic套件管理程式找得到的最新版本。
在這裡,如果是熟悉Python語法的coder,就可以直接按左上角的「New」來編輯實驗了,不過如果是不太會coding的初學者(例如我),可以把游標移到最上方的功能列(目前被隱藏起來了),循以下的路徑進入Builder界面:
「View→Go to Builder view」。
然後,我們就會得到以下的Builder界面:
這個Builder界面相對直覺而友善,也是我目前進行實驗編輯的主要平台,至於接下來要如何開始玩實驗,因為我的筆電快要沒電了,我們下次再談!
Filed under 用PsychoPy玩實驗