#author("2023-12-14T05:19:49+00:00","","") *目次 [#w39b4123] #author("2024-01-18T04:06:25+00:00","","") [[技術資料]] *目次 [#pf15dd57] #CONTENTS **【脳波ジャンケンについて】 [#fcc92886] 簡易脳波計をつけて、ジャンケンに負ける手を出す脳波を読み取り、PCが人間の出す手を予測し、ジャンケンnonに勝つ手を出す勝率を表示する。 **【実行環境】 [#h8627264] ・Python3 **1. 目標 [#s121d898] 簡易脳波計をつけて,ジャンケンに負ける手を出すときの脳波から,出す手を脳波から事前に予測する.ジャンケンを実行してPCがジャンケンに勝つ手を出す勝率を表示する **【環境構築】 [#gaff6b2e] 以下のページを見ながら環境構築を行った。~ [[簡易脳波計によるジャンケン予測のためのクラスタリング]] &color(red){注意}; 目標2はPythonを実行できる環境でやるので、その環境で目標1もやってください 実際はこのページよりは簡単な方法で実験を行った。 **2. OpenBCIヘッドウェアの組立て [#q56118b9] **【結果】 [#b0bc1915] 45回脳波を取得した。そして、訓練データを得ることができた。 |電極|線の色|サイトンボードピン| |耳のクリップ|黒|ボトムSRBピン(SRB2)| |FP1|紫|ボトムN1Pピン| |FP2|グレー|ボトムN2Pピン| |C3|緑|ボトムN3Pピン| |C4|青|ボトムN4Pピン| |P7|オレンジ|ボトムN5Pピン| |P8|黄|ボトムN6Pピン| |O1|赤|ボトムN7Pピン| |O2|茶色|ボトムN8Pピン| |耳のクリップ|黒|ボトムBIASピン| #ref(脳波装置.png,,50%) 配線の色とサイドボードピンの組み合わせは一致しないかもしれないので、写真の通りの電極と一致するように写真と表を見比べて接続する。~ 以下のサイトを参考にして、同じように電極とデイジー・ピンのペアリングも行う。 #ref(http://docs.openbci.com/Headware/01-Ultracortex-Mark-IV) 電池パッケージを結束バンドなどで固定しておく。 //**3. FTDIドライバ・インストール(Macのみ) [#ob9ba323] //Macは以下を参考に //https://www.ftdichip.com/Drivers/VCP.htm //インストールしようとすると識別できない開発者のものみたいな感じとゆわれたら、システム環境設定→セキュ リティとプライバシーから App Store と確認済みの開発元からのアプリケーションの許可に設定する **3. GUIインストール~ [#ec833295] 以下のサイトでインストール https://github.com/OpenBCI/OpenBCI_GUI/releases/tag/v4.1.6 //http://openbci.com/index.php/downloads **4. 脳波の測定の準備 [#v4267cc0] #ref(USB.png) USB ドングルをコンピュータ側にでっぱりをスライドさせ、青いライトを点灯させる #ref(Cyton1.png) Cyton ボードのスイッチは、上にスライドで PC 接続、下にスライドで Bluetooth 接続となる 今回はPC接続なので上にスライドする 青く光らなかったら電池切れの可能性があるので、電池の交換を行う //ここから先はWindowsとUbuntuでやり方が違う ***Windowsの場合 [#f9f69a0a] #ref(加工openbci.png) OpenBCI_GUI.exeを開いて (1) LIVE from (Cyton) (2) Serial(from Dongle) (3) COM3 (ここがCOM3にならないときもあるので、その時はUSBドングルを挿したときに表示されたものを選択する) (4) 8CHANNELS (5) START SESSION 以上の流れで実行できる ・今回は、8CHANNNELで行う ・&color(#FF0000){USBドングルは2種類あるので、COM3と表示されるものを使う}; ・エラーが出たときはOpenBCIHub.exeを起動してからOpenBCI_GUI.exeを起動する //***UNIXの場合 [#x7f51f32] //シリアルポートにアクセスするのに十分な特権でOpenBCIアプリケーションを起動する //OpenBCIソフトウェアをホームフォルダに展開したと仮定すると、以下のコマンドで実行できる~ // cd ~/application.linux64 && sudo bash OpenBCI_GUI //(1) LIVE from (Cyton) //(2) Serial(from Dongle) //(3) SERIAL / COM PORT は一番上のやつ //(4) 今回は8CHANNELS //(5) START SYSTEM //以上の流れで実行できる **5. 脳波の測定の実行と動作確認 [#yb774cfd] ・装着するときは電池がついている方を後ろ向きにする ・Session Date の Name でファイル名を変更できる(デフォルトで日付) ・実行できる状態か確かめるときは、AUTOSCAN から確認できる ・下部分に緑文字で "Successfully connected to Cyton using COM3" と表示されれば実行可能 ・脳波がとれない場合はそのチャンネルの頭のねじを回すことで調節する START SESSION を実行すると以下のような画面になり、左上の START DATA STREAM で測定開始、STOP で測定終了となる #ref(gui.png,,30%) ***システム(この項目は、直接USBでデータを渡したほうが早い) [#u78f38f1] Google Driveの中の"学生"→"08清水"の"専門ゼミ脳波"のフォルダをzipファイルにまとめた #ref(noha.zip) zipファイルの中にはこれらが入っている //作業する場所にフォルダを作り、以下のプログラムと画像を入れる #ref(tv.py) #ref(X_tra.py) &br; |#ref(黒.png,,20%);||#ref(グー.png,,20%);||#ref(パー.png,,20%);| |#ref(チョキ.png,,20%);||#ref(zyan.png,,20%);||#ref(ken.png,,20%);| |#ref(kati.png,,20%);||#ref(make.png,,20%);||#ref(hikiwake.png,,20%);| //以下の2つを"_pycache_"という名前のフォルダをつくり、その中に保存する //#ref(X_tra.cpython-36.pyc) //#ref(X_tra.cpython-38.pyc) **6. ジャンケンの出す手の分類学習 [#a6125d3c] ***6.1 環境構築[#w59f9eb5] python3でやる pipのインストールはこのサイトの「pipのインストール方法」を見てやる //unixでやる場合は"sudo","apt-get" は実行可能 "sudo","apt-get"のコマンドはwindowsではできないので、"sudo"のみのものは"sudo"なしでも大丈夫 "apt-get"はwindowsではできない モジュールのインストールは以下のコマンドで Python で opencv を取り扱うためのモジュール pip3 install opencv-python マウスやキーボード操作を制御するためのモジュール sudo pip3 install pyautogui PythonにXlibを実装する sudo pip3 install xlib Pythonの描画ライブラリ pip3 install matplotlib // sudo apt-get install python3-tk // sudo apt-get install python-scipy 高度な科学計算を行うためのライブラリ pip3 install scipy 機械学習のライブラリ pip install scikit-learn データ解析を支援する機能を提供するライブラリ pip3 install pandas // pip3 install sklearn これ以外のモジュールを要求されたら、その都度インストールをしていく 必要なコードとファイルは,Google Driveの/麻生/brainの中にあります~ 一応、国際学会では違う分析手法で発表したのでその時のコードもgakkaiというフォルダの中に一緒に入れておきます。(これは興味があれば見ておいてください。) **6.2 コードの実行[#w59f9eb5] tv.pyを以下のコマンドにより実行することによってシステムを動かすことができます。 python tv.py ***6.3 分析の流れ[#w59f9eb5] ⒈ 分析したい脳波データの部分を抽出する~ ⒉ 分析対象となる脳波のデータを独立主成分分析によって、分析に効果的であると考えられる成分を抽出する~ ⒊ 独立成分分析によって処理したデータをフーリエ変換~ ⒋ 周波数帯でシータ波とアルファ波、ベータ波に分割する~ ⒌ 分割したデータをランダムファレストにより学習~ ⒍ 学習したモデルを使って予測~ ***6.4 実行[#w59f9eb5] 実行手順~ 作業するフォルダを"brain"という名前にしてある(ここの名前は自分で変えても大丈夫です) ''訓練データの取得方法とその後'' 訓練データを取得するときは、"tv.py" の451行目の( )内を5にしておく "python tv.py" を実行~ ①:"ASO"を選択~ ②:"Start Date Stream" を押す~ ③:"date get" を押す~ ④:出てくる画像に従ってデータを取得~ ⑤:データ取得後、OpenBCIをSTOPさせる~ #ref(やり方1.png) データを取得した後の処理方法(名前を「test5」に設定してある) #ref(保存方法1.png)~ ④の赤線部を"shimizu5_train"という名前でbrainフォルダにいれる #ref(ファイルの移し方.png) これは tv.py の123行目にもいれる~ これは X_tra.py の100行目にもいれる~ &br; ''じゃんけん実行準備''~ &br; このときに"tv.py"の 451行目の( )内を 1 に変えておくと楽になる "python tv.py の実行"~ ①:"ASO"を選択~ ②:"Start Date Stream" を押す~ ③:"date get"を押す #ref(やり方1.png)~ データ取得した後の処理~ #ref(じゃんけん保存.png)~ &br; #ref(ファイルの移し方2.png) &br; ''じゃんけん実行'' "zyanken"を実行する前に、毎回、上の画像にある644行目のファイル名を変更する~ (go10_train.txt の部分) "python tv.py の実行"~ ①:"ASO"を選択~ ②:"Start Date Stream" を押す~ ③:"zyanken"を押す #ref(じゃんけん方法1.png)~ //#ref(siyou.png) //Pyautoguiは、Pythonのモジュールでデフォルトのコードはmacのデスクトップの画面の座標で設定してあるため、パソコンによっては座標を変更する必要があるかもしれません。 **7. コードの変更点 [#u3c4a89d] ''tv.pyの変更部分'' 123行目 #ref(加工済み5.png) 451行目 #ref(訓練データ部分1.png) 486行目 #ref(加工済み4.png) 492行目 #ref(ファイルの移し方.png) //OpenBCIのスタートの位置にpyautogui.click(x,y)を合わせないといけない~ //tv.pyの635行目 //#ref(click.png)~ 644行目部分 #ref(研究1.png) 660行目部分 #ref(コマンドプロンプト.png,,110%)~ //#ref(set.png)~ //OpenBCIで取得したデータが保存されるディレクトリにPATHを変更する必要がある。 //分析したいファイル名はOpenBCIの画面でファイル名を設定する部分があるので、そこで読み込むファイル名を設定するファイル名にしておく ''X_tra.pyの変更部'' #ref(X_tra.png) **8. 実行結果 [#aae7d607] 勝ち:3 負け:4 引き分け:3 ~ ~