CSiEra

CSiEra

I know I know nothing.

Psychopy学習ノート —— MovieStim

これらの日数は、Psychopy で映画を再生するためのソリューションを作成する必要がありました。以前に何度か使用したことがありますが、Psychopy は常に更新されており、以前の実装には満足していませんでした。今日、整理しました。

使用する主なクラスはpsychopy.visual.MovieStimです。このクラスにはいくつかの便利なメソッドがあります。

映画が終了したかどうかを確認する方法は?#

MovieStim.ifFinishedメソッドを使用すると、while ループ内でこの値が True かどうかを確認することで、映画が再生終了したかどうかを知ることができます。終了した場合は、次のタスクに進むことができます。終了していない場合は、再生を続けます。

テスト中に再生画面からキーで抜ける方法は?#

グローバルな終了キーを追加してみましたが、おそらく私のコードに問題があるため、グローバルな終了キーは機能しませんでした。そのため、代わりに次の方法を使用しています。ビデオ再生中にキーが押されているかどうかを確認し、キーが押されている場合は再生を停止します。

ビデオの再生を停止するには、mov.stop()メソッドを使用します。

ビデオの再生コード:#

while not mov.isFinished:
    mov.draw()
    win.flip()
    if len(event.getKeys())>0:
        mov.stop()
        break

ビデオのサイズを自動調整する#

2 つのビデオを用意しましたが、これらのビデオのフレームサイズは異なります。自動調整を実現するために、cv2ライブラリを使用する必要があります。

ビデオフレームのサイズを自動検出する#

import cv2
def get_movie_frame_size(movie_path):
    cap = cv2.VideoCapture(movie_path)
    frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
    cap.release()
    return frame_width, frame_height

このコードは chatGPT によって生成されました。最初は chatGPT に Psychopy を使用してもらおうとしましたが、出力が正しくありませんでした。

午後にドキュメント API を読んだ結果、Psychopy にはmovie.sizeがあり、ドキュメントの生成にフレームのサイズを出力できることがわかりましたが、テストした結果、出力結果が正しくありませんでした。chatGPT は最初に Psychopy 自体を使用して同様のアプローチをしましたが、それもうまくいきませんでした。おそらく Psychopy のインターフェースが常に更新されているため、chatGPT が学習できなかったのかもしれません。最終的にはこのタスクを完了するために opencv を使用しました。

最終的なコード#

for i in range(2):  #私は2つのビデオしか持っていません
        video_used = cur_movie_path + video_names[i]
        mov = visual.MovieStim(win, video_used,
                                flipVert=False, flipHoriz=False, loop=False)
        frame_width, frame_height = \ 
            get_movie_frame_size(cur_movie_path+video_names[i])
        mov.size = (frame_width, frame_height)

        while not mov.isFinished:
           mov.draw()
           win.flip()
           if len(event.getKeys())>0:
               mov.stop()
               break

コードをコピーしましたが、インデントが正しくありません。使用する場合は、コードのインデントを調整してエラーを回避してください。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。