Windows用Portable PsychoPy / VisionEgg

大学の情報処理室のWindows機など、PythonをインストールできないマシンでもPsychoPyやVisionEggを使用することが出来ます。

一応、十河の研究室のPCおよび所属部局の端末室のPCで動作確認をしていますが、皆さんが使用しているPCでの動作は保証できません。

使用するPCがvsyncへの同期に対応していない場合(Intelの統合グラフィックス搭載の端末など)はswap/flipの周期が予想できませんので、swap/flipの回数で時間を制御するような実験スクリプトを書くのは避けるべきです(60Hzのリフレッシュレートを前提として100ms刺激を提示するために6回swap/flipを行うなど)。

使い方

ダウンロードしたzipファイルを展開してUSBメモリなどにコピーしてください。 書き込み速度が遅いUSBメモリを使用している場合はまずHDD上で展開してからUSBメモリにコピーすることをお勧めします。

展開すると、以下のフォルダおよびファイルが出来ているはずです。

  1. 名前が"WinPython"から始まるフォルダ

  2. PortablePsychopyLauncher.exe

  3. pplaunch_config.txt (2020.2.10以降のみ)

  4. PPPLauncher_CopyConfig.exe (3.2.3およびそれ以前のみ)

PotablePsychopyLauncher.exeを実行すると、PsychoPyが起動します。 最初の起動には特に時間がかかりますので気長にお待ちください。 20220706版以降はPsychoPyのウィンドウが開くまで以下のような小さなダイアログが表示されます。このダイアログが表示されている間は正常に起動処理を行っていますのでお待ちください。

../_images/launcher_pleasewait.png

2020.2.10に付属のPsychoPyLauncer.exeより、PsychoPyの起動前にPsychoPyが異常終了してしまったときにエラーダイアログが出るようになっています。エラーダイアログが出る場合はファイルが正常に展開できていなかったり、ファイルが破損していたりする可能性がありますので、ファイルの展開からやり直してください。また、このバージョンよりpplaunch_config.txtというテキストファイルを編集することで以下の動作を変更できるようになっています。以下にpplaunch_config.txtの例を示します。

show_normal_termination_dialog: 1
copy_config: 0

現在、以下の2つの項目が有効です。

show_normal_termination_dialog:

1ならPsychoPyが正常に終了した時にダイアログを表示します。 0なら表示しません。 1に設定しておくとPsychoPyが正常に終了した時にそのことがわかりやすくなりますが、 動作に問題がないのにダイアログが毎回表示されるのが邪魔に思われる場合は0に設定してください。 標準値は1です。

copy_config:

1ならPsychoPy終了時に設定ファイルが含まれたPsychoPy3というフォルダをバックアップして、次回実行時には復元します。 0ならば設定ファイルのバックアップ、復元を行いません。 設定ファイルも一緒にUSBメモリで持ち歩きたいときに1に設定してください。 標準値は0です。

設定項目名は大文字、小文字が区別されますので、この通りに入力する必要があります。:も必要なので忘れないでください。0や1の後に余計な文字を入力してはいけません。 綴りが間違っていたりしても警告やデラーメッセージは表示されませんのでご注意ください(標準値が設定されたものと見なされてPsychoPyが起動します)。

3.2.3およびそれ以前のPortablePsychoPyで設定ファイルのバックアップ、復元が必要な場合は、PortablePsychoPyLauncher.exeの代わりにPPPLauncher_CopyConfig.exeを使ってPsychoPyを起動してください。

更新履歴

  • 2021/07/15
    • 2021.1.4 でQtWidgetsを使うコンポーネント(Formコンポーネントなど)が動作しない問題を修正しました。

    • 2021.2.0 を導入したものを試験的に公開します。最新機能を試したい人向けです。安定性を求める方にはお勧めしません。

  • 2021/06/17

    • PsychoPy 2021.1.4 を導入しました。

  • 2021/01/27

    • PortablePsychopyLauncher.exeを更新し、終了時にダイアログを表示するか設定できるようにしました。これにより、ファイルのダウンロードや展開に問題があってPsychoPyの起動に失敗した場合や、終了時にプロセスが残ってしまった場合などに気づきやすくなりました。

  • 2020/12/21

    • PsychoPy 2020.2.10 を導入しました。

  • 2020/10/22

    • PsychoPy 2020.2.4.post1 の動作を確認する必要が生じたため作成しました。 このバージョンではユーザーインターフェースが大幅に変更されているのでご注意ください。 最小限の動作確認しかしておりませんので、不具合がある可能性が高いです。何か問題を発見した場合は十河までご連絡いただけると幸いです。PsychoPy 3.2.3ベースのものも引き続き残しておきます。

  • 2019/09/20

    • PsychoPy 3.2.3 を導入しました。引き続き64bit版のみを用意しています。psychtoolboxとpyoを組み込んであります。

  • 2019/07/03

    • PsychoPy 3.1.3 を導入しました。32bitと64bitの両方を用意するのが大変なので、ひとまず64bit版のみを作成しました。 psychtoolboxとpyoを組み込んであります。 要望が多ければ32bit版やPython2版も作成します。

  • 2019/03/12

    • PsychoPy 3.0.6 を導入しました。

  • 2019/01/24

    • PsychoPy 3.0.2 を導入しました。Python2上でPsychoPy3.0.0がsounddeviceのエラーで動作しないので差し替えです。

  • 2019/01/15

    • PsychoPy 3.0.0 を導入しました。本家に従って無印の物をPython3ベースとし、Python2ベースの物には_py2と付けました。32bitのものにはpyoを導入してあります。

    • PortablePsychoPy 1.90.3 に付属のランチャーを更新しました。ffmpegのダウンロードの安定性が向上しているはずです。

  • 2018/08/24

    • Visual Studio C++ 2015ランタイムが無いPCで実行すると「VCRUNTIME140.dllが見つからない」というエラーが出てPsychoPyが起動しないというご報告をいただきましたので、DLLが不要なようにビルドしなおしました(PortablePsychoPy1.90.3.zipおよびPortablePsychoPy1.90.3_py3_x64.zipのみ)。筆者のテスト環境ではこのエラーを再現できないのでエラーを解消できているか確認できないのですが、なおこのエラーが続くようでしたらご報告いただけますと幸いです。

    • PsychoPy3のβ版はまだ安定していないようなので公開は一旦停止しました。

  • 2018/08/02

    • PsychoPy 1.90.3 を導入しました。また、PsychoPy3のβ版である 3.0.0b3 を導入したものも用意しました。

      • 32bit Python2ベースのものと64bit Python3ベースのものがあります。py3_x64と書いてあるのが64bit Python3ベースで、何も書いていないのが32bit Python2ベースです。

      • 例によって、Builder/Coderが起動していくつかのデモが動くことしか確認していません。不具合に気づかれた方は十河までご連絡ください。

      • 3.0.0b3はベータ版(正式リリース前のテスト中)です。

  • 2018/03/23

    • PsychoPy 1.90.0 を導入しました。

      • 64bit版Python3 を使用しています。32bit版Python2のものは要望があれば準備します。

      • とりあえず導入しただけで、Builder/Coderが起動していくつかのデモが動くことしか確認していません。pyoが64bitに対応していないので、pyoに依存した機能(pyoを用いた音声刺激の再生、録音)は使用できません。libvlcを導入する場合は(恐らく)64bit版を用意する必要があります。

      • 不具合に気づかれた方は十河までご連絡ください。

  • 2016/10/28

    • PsychoPy 1.84.2 を導入しました。 多忙のため十分なテストが行えていません。不具合に気づかれた方は十河までご連絡ください。

  • 2016/05/11

    • PsychoPy 1.83.01 を導入しました。

  • 2015/09/30

    • PsychoPy 1.82.02 を導入しました。単に1.82.01plusに1.82.02のZipを入れただけです。もはや1.79.01、1.80.06を使う理由はないと思いますのでこれに伴ってサーバーから削除しました。

  • 2015/06/22

    • PsychoPy 1.82.01 を導入し、レポジトリの最新の更新を一部反映させたものを用意しました(バージョン名にplusと入っているのはそのため)。BuilderやCoderのメニューの日本語化、MovieStim2への対応など、大きくバージョンアップしています。アイトラッカーやI/Oボードなどのハードウェアを必要とするものは動作確認していません。また、残念ながら音声、動画関係の機能はPCによって動作したりしなかったりします。

  • 2014/08/11

    • PsychoPy1.80.06を 1.79.01 に差し替えたものも用意しておきました。Routineパネルの表示の乱れさえなければ1.79.01はよいバージョンだと思います。これに伴って1.75.01、1.78.01をサーバーから削除しました。

  • 2014/08/11

    • PsychoPyのバージョンを 1.80.06 にしました。Builderがかなり強化されていますが、 動画を再生すると左右反転されてしまうというバグがある ので動画を刺激として使う人は注意してください。

    • 以下のパッケージを導入しました。これでioHubのサンプルのうち、アイトラッカーやI/Oボードなどのハードウェアを必要としないものが動作するようになりました。

      • pyserial 2.7

      • pyparallel 0.2.5

      • pyyaml 3.11

      • psutil 2.1.1

      • msgpack-python 0.4.2

      • numexpr 2.0.1

      • pytables 2.4.0

      • pyhook 1.5.1

      • gevent 1.0b1

      • greenlet 0.4.0

  • 2013/11/21

    • PsychoPy Builderを実行した時にpygameがないというエラーが出るので pygame1.9.2a0 を組み込みました。公式でpygame依存はもうやめると宣言が出て久しいですが完全移行にはまだまだ時間がかかるのかもしれません。

    • PsychoPy BuilderとIPythonを起動するためのランチャーを作りました。アイコンで区別できるのでバッチファイルよりは多少わかりやすいと思います。機能的にはバッチファイルのものと違いはありません。

  • 2013/11/08

    • PsychoPyのバージョンを 1.78.01 にしました。iohubの依存パッケージをインストールしていないので、iohubの機能は使用できません。とりあえず簡単な動作確認はしていますが、思わぬ不具合があるかも知れません。念のため旧バージョン(1.75.01)も残しておきます。

  • 2012/11/19

    • PsychoPy公式インストールガイドのDependenciesにPyOpenGLは含まれていないのですが、PyOpenGLがないとMonitor Centerが開かないので PyOpenGL 3.0.2 を追加しました。

    • PsychoPy Builder/Coderの設定ファイルをコピーする動作を追加したバッチファイル(psychopy_copyconfig.bat)を作成しました。

    • ファイルのダウンロードおよび展開の負担を軽減するためにpycファイルを削除しました。初回の実行時には余分に時間がかかりますが、2回目以降は11/13バージョンと同様の速度で起動するはずです。

  • 2012/11/13

    • とりあえず公開。使用しているパッケージは以下の通りです。

      • VisionEgg

        • Portable Python1.1_py2.5.4

        • setuptools 0.6c9

        • pyopengl 2.0.2.01

        • VisionEgg 1.2.1

      • PsychoPy

        • Portable Python 2.7.2.1

        • distribute 0.6.30

        • pyreadline 2.0_dev1

        • ipython 0.13.1

        • pyglet 1.1.4 + avbin-5

        • lxml 2.3.0

        • openpyxl 1.6.1

        • psychopy 1.75.01

最大4台のwebカメラの映像をひとつの動画ファイルにまとめて保存するmultiwebcam (Windows用)

題名の通りです。pythonで心理実験 例題17-3 からの派生です。本来py2exeとかを使ってpythonをインストールしていないマシンでも使えるexeファイルを作ろうとしていたのですが、VideoCaptureが問題となってうまくいかなかったので数時間で挫折しました。というわけで、python2.x本体(3.xは不可)と以下のモジュールをインストールしておく必要があります。

また、ffmpegの実行ファイルが必要ですのでダウンロードしておいてください。ffmpegは公式にはWindowsバイナリが配布されていないと思いますが、こちら( お気に入りの動画を携帯で見よう )で配布してくださっています。動作確認にはrev.31420を使用しています。

以下のファイル(multiwebcam.py)を適当な場所に保存してください。ffmpegの実行ファイルはパスが通った場所に置くか、multiwebcam.pyと同じ場所に置いてください。

multiwebcam.py (最終更新日:2012/2/17)

更新履歴

  • 2012/2/17

    • とりあえず公開。

使い方

起動すると次のようなダイアログが表示されます。設定してOKボタンを押すと撮影が始まります。撮影時間が終了するかESCキーを押すと撮影した時間、保存したフレーム数、平均FPS、平均フレーム間時間が表示されます。なお、 時間的精度はあまり高くありません。このスクリプトの使用によって生じるいかなる結果に関しても責任を負いかねます 。ご了承ください。

../_images/multiwebcam01.png

1camera: 320x240

システムに接続されている最初のwebカメラの映像を320x240の解像度で保存します。

1camera: 640x480

システムに接続されている最初のwebカメラの映像を640x480の解像度で保存します。

2cameras: 640x240 (320x240x2)

システムに接続されているwebカメラ2台から320x240の解像度で撮影して並べて保存します。

3cameras: 640x480 (320x240x3)

システムに接続されているwebカメラ3台から320x240の解像度で撮影して並べて保存します。

4cameras: 640x480 (320x240x4)

システムに接続されているwebカメラ4台から320x240の解像度で撮影して並べて保存します。

Render time

チェックされていれば保存された動画の左上にプログラム開始からの時刻を出力します(単位:秒)。

FPS

動画のFPSを指定します。動画保存形式(H.264)でサポートされていない値を指定すると保存できません。。

Bitrate

動画のビットレートを指定します。デフォルトで入力されている'500k'のkはキロのkです。

Capture duration

動画を撮影する時間を指定します(単位:秒)。負の値を指定するとESCキーを押すまで記録し続けます。なお、Capture durationに正の値を指定した場合でもESCキーを押せば直ちに終了することが出来ます。

Save to

保存ファイル名を指定します。日本語のファイル名を入力することは考慮していません。

注意点

USB2.0の帯域幅にご注意ください! 特に320x240の解像度に対応していないカメラの場合、ひとつのUSBホストコントローラに複数台のwebカメラを接続するとデータ転送量がUSB2.0の限界を超えてしまい撮影が出来ません(真っ暗な画面のまま無反応になります)。使用するPCのどのUSBポートがどのホストコントローラに接続されているかわからない場合は、いろいろ接続ポートを変えて試行錯誤するしかありません。経験上、デスクトップPCでは背面のポートと前面のポートは別のホストコントローラに接続されていることが多いように思いますが、必ずそうとは限りません。

動画の画質が悪い場合はBitrateを上げてください。ただし、Bitrateを上げるとPCの処理が追いつかなくなる可能性が高くなります。時間分解能が低くても問題ない場合はfpsの値を下げてください。Core i7 920のPCで15fps/500kbpsはやや余裕がありますが、30fps/500fpsは時々追いつきません。10fps/1500kbpsもやや厳しいです。

pygameの画面更新が垂直同期信号に同期 していない ことを前提に作成してあります。時々コマ落ちするので実際の平均fpsは設定したfpsよりやや低めの値になってしまいます。低時間的精度はそれほど高くないので正確さが必要な場合はRender timeにチェックしておいて動画に出力された時刻を確認してください。気が向いたらVisionEggを使う形に書き換えて時間的精度を向上させたバージョンを作成するかもしれません。

カメラで撮影されてからPCに転送され、動画に出力されるまで数msから数十msのラグが生じます(pythonで心理実験 例題17-3参照 )。複数のカメラの映像間の同期は比較的信頼できますし(カメラのfps設定による)、動画のフレーム間で左上に表示されている時刻の も比較的信頼できますが、それ以外のものとの間の同期はあまり信用出来ません。

使用しているwebカメラが指定した解像度での撮影に対応していない場合、解像度の設定に失敗したことを警告するダイアログが表示されます。この場合、カメラの標準解像度で撮影を行い、スクリプト内で指定した解像度に変換して保存します。

2次元Fourier変換で遊ぶFFT2demo

2次元Fourier変換を授業でどう説明したらいいかと困っていたところ、大澤先生のデモ( http://www.youtube.com/watch?v=pCVdNYvORVw=plcp )をYouTubeで拝見して、触発されてpythonでそれっぽいものを作ってみました。 機能面、特に速度はかなりしおしおですが、私が授業で使う分にはまあ許容範囲ですし、高速化して…とか言ってるといつまでかかるかわかんないので公開します。

FFT2demo.py (最終更新日:2012/10/13)

動作にはpython本体に加えて以下パッケージが必要です。

更新履歴

  • 2012/10/13

    • とりあえず公開。

使い方

FFT2demo.pyを起動すると、ファイルを開くダイアログが表示されます。適当な画像ファイルを選択してください。PILが対応しているフォーマットなら読めるので、PCで扱える一般的な画像なら大抵読めるはずです。

../_images/fft2demo01.png

画像を開くと以下のようなプロットが表示されます。(1)は選択した画像をグレースケールに変換したものです。速度を稼ぐため、画像が大きい(横幅256px以上)場合は横幅が256pxになるように縮小します。(2)は(1)を2次元Fourier変換したものです。この(2)のプロット内でマウスを左クリックすると、クリックした位置に対応する正弦波が(3)のプロットに表示されます。(2)のさまざまな位置をクリックするとそのたびに(3)は更新されます。(4)は今までにクリックした位置に対応する正弦波を重ね合わせたものです。

../_images/fft2demo02.png

速度が非常に遅いので アレ なんですが、マウスの左ボタンを押しっぱなしにして(2)のプロット内でマウスを動かすと、次々と点が追加されていきます。 とても遅いのでゆっくり動かしてあげてください 。小さくて非常に見えにくいのですが、(2)のプロットでクリックした位置には赤い点が重ね書きされます。

../_images/fft2demo03.png

まどろっこしくてこんなのやっていられない!という場合は キーボードのCtrlキーを押しながら (2)のプロット内でマウスの左ボタンをクリックしてください。クリックした位置の周辺の矩形領域がまとめて追加されます。Ctrlキー+左ボタン押しっぱなしでマウスを動かすと次々と矩形領域が追加されていきます。

../_images/fft2demo04.png

「あ、低周波数から高周波数領域までごっそり選択しちゃったけど、低周波数領域を除去したいなあ」 とか思ったら、(2)のプロット内でマウスを 右ボタン をクリックしてください。マウスカーソルの位置の選択が解除されます。左ボタン同様、押しっぱなしでマウスを動かすと連続的に解除出来ますし、Ctrlキーを同時に押すとマウスカーソル近傍の矩形領域がまとめて解除されます。

終了させる時はウィンドウの閉じるボタンをクリックしてください。 「デモに使用するPCの性能が低くて動作が遅くてお話しにならない!」という場合はFFT2demo.pyをテキストエディタで開いて冒頭のmaxWidth = 256の値を小さく(128とか64とか)にしてみてください 。かなり画質は寂しくなりますが多少速くなると思います。

PsychoPyからTobiiを使うTobiiController (Tobii Pro SDK対応版)

PsychoPy/VisionEggからTobiiを使用するTobiiControllerというモジュールを公開していましたが、Tobii SDKが従来のものとは互換性がないTobii Pro SDKに更新されたので、Tobii Pro SDK対応版を新たに作成しました。githubに置いていますのでそちらからダウンロードしてください。

使用するためにはPsychoPyとtobii_researchが必要です。tobii_researchはpipを使ってインストールすることが出来ます。

旧バージョン (Tobii SDK 3.0対応)

旧バージョンも一応残しておきます。