<目次>
脳波をPythonプログラムで取得して、解析できるようにしたい
やりたいこと
STEP1:前提条件(事前準備)
STEP2:デバイス(MindWave Mobile 2)のCOMポート確認
STEP3:環境の準備(Python3使用の方)
STEP4:脳波の取得(プログラム実行)
エラー対処
脳波をPythonプログラムで取得して、解析できるようにしたい
やりたいこと
STEP1:前提条件(事前準備)
STEP2:デバイス(MindWave Mobile 2)のCOMポート確認
STEP3:環境の準備(Python3使用の方)
STEP4:脳波の取得(プログラム実行)
import thinkgear
import datetime
def main():
# 出力するCSVファイルのパスを指定
file_path = "brain_wave_data.csv"
# フラグを初期化(このフラグは信号品質が良好かどうかを示す)
wflag = False
# データを保存するバッファを初期化
data_buffer = {}
# CSVファイルを書き込みモードで開く
with open(file_path, mode="w") as f:
# CSVファイルのヘッダー行を書き込む
f.write("datetime, raw_wave, delta, theta, lowalpha, highalpha, lowbeta, highbeta, lowgamma, midgamma, attention, meditation\n")
# MindWaveからデータパケットを取得
for pkt in thinkgear.ThinkGearProtocol('COM4').get_packets():
# データパケット内の各データを処理
for d in pkt:
# 信号品質データの場合
if isinstance(d, thinkgear.ThinkGearPoorSignalData):
# 信号品質が良好(値が10未満)であればフラグを立てる
if d.value < 10:
wflag = True
else:
wflag = False
# 生の脳波データの場合
if wflag and isinstance(d, thinkgear.ThinkGearRawWaveData):
# バッファに生の脳波データを保存
data_buffer["raw_wave"] = d.value
# EEGパワーデータの場合
if wflag and isinstance(d, thinkgear.ThinkGearEEGPowerData):
# バッファに各波長のパワーデータを保存
data_buffer["delta"] = d.value.delta
data_buffer["theta"] = d.value.theta
data_buffer["lowalpha"] = d.value.lowalpha
data_buffer["highalpha"] = d.value.highalpha
data_buffer["lowbeta"] = d.value.lowbeta
data_buffer["highbeta"] = d.value.highbeta
data_buffer["lowgamma"] = d.value.lowgamma
data_buffer["midgamma"] = d.value.midgamma
# Attentionデータの場合
if wflag and isinstance(d, thinkgear.ThinkGearAttentionData):
# バッファにAttentionデータを保存
data_buffer["attention"] = d.value
# Meditationデータの場合
if wflag and isinstance(d, thinkgear.ThinkGearMeditationData):
# バッファにMeditationデータを保存
data_buffer["meditation"] = d.value
# バッファにすべてのデータが揃ったらCSVファイルに出力
if "raw_wave" in data_buffer and "delta" in data_buffer and "attention" in data_buffer and "meditation" in data_buffer:
# CSVファイルに出力
f.write("{},{},{},{},{},{},{},{},{},{},{},{}\n".format(datetime.datetime.now(), data_buffer["raw_wave"], data_buffer["delta"], data_buffer["theta"], data_buffer["lowalpha"], data_buffer["highalpha"], data_buffer["lowbeta"], data_buffer["highbeta"], data_buffer["lowgamma"], data_buffer["midgamma"], data_buffer["attention"], data_buffer["meditation"]))
# コンソールに出力
print("datetime: {}, raw_wave: {}, delta: {}, theta: {}, lowalpha: {}, highalpha: {}, lowbeta: {}, highbeta: {}, lowgamma: {}, midgamma: {}, attention: {}, meditation: {}".format(datetime.datetime.now(), data_buffer["raw_wave"], data_buffer["delta"], data_buffer["theta"], data_buffer["lowalpha"], data_buffer["highalpha"], data_buffer["lowbeta"], data_buffer["highbeta"], data_buffer["lowgamma"], data_buffer["midgamma"], data_buffer["attention"], data_buffer["meditation"]))
# バッファをクリア
data_buffer.clear()
if __name__ == '__main__':
main()
エラー対処