アプリケーション開発

一つ前の記事で力を使い果たしたし、早く寝たいので概要だけ書きます。

やったこと

  • 計測アプリの基盤になるページを作りました。
  • ページはスマホも対応してます(なんとレスポンシブ)。
  • 目的はたまっているTP,SC,HRのデータを何かに使えないか考えるため(Aiもちょっと興味ある)。
  • 測定~解析までのソフト作るの面白そう。
  • これから自分の装置作って運用しようと思います。

Webは全く開発したことがないし、というかそもそもプログラマではないので開発は気が向いたときにやります。

バックエンドもphpではなくpython(Django)がいいので自分が契約しているvpsに移管するかもしれないです。

要望項目

  1. TP,SC,HRのダウンロードサイトのリンクください(見つけられませんでした)。
  2. いい感じのTP装置の画像をください(可能であれば1920×1095のjpg画像)。
  3. いい感じのHRとSCの両方が映った画像をください(こちらも可能であれば1920×1095のjpg画像)。
  4. でないと下の30minくらいで作成した昔の教材に出てきそうなダサい豆腐の計測器画像が(自分が作成した)ページに残ります。

画像はこちらで加工できるので1920×1095以上の画像をいただきたいです。

よろしくお願いします。

合成音声について

 合成音声を使用する経緯が不明なので用途に合うか不明ですが、現在稼働しているチャット読み上げアプリで開発したことがあるので記事を書きます。

合成音声の使用用途 (加藤の場合)

 前述のとおり読み上げボットで合成音声のプログラムを使用しており、いずれは商用利用を検討しています。商用で利用するにあたり以下の要件をクリアしている必要がありました。

  1. 24時間稼働している必要があるため、動作環境はサーバ上であること。また、レンタルするサーバ(VPS)は個人で負担できる範囲のもの。
  2. 入力から出力までのレスポンス速度が速いこと。
  3. 商用利用が可能であること。

要件から発生した制約事項

①の要件で合成音声作成処理に高負荷がかかるようなソフト(VoiceVOX)は使用することは不可能。②の要件でPythonなどのスクリプト言語で開発することも不可能。③は特にネックGoogle Text to Speechの選択も不可能となった。
※公開されている非公式のライブラリはMIT(商用利用可能)ライセンスだがプログラム自体がスクレイピングして作られているものが多いため、Googleの規約違反をしている可能性が高い。

要件を満たしつつ制約を回避するC#ライブラリ

 調査した結果、Microsoft公式からリリースされているSpeechSynthesizerクラスを使用することで、要件を満たし、制約事項を回避して合成音声を作成作成することが可能です。また、SpeechSynthesizerは多言語に対応しているため、日本人だけではなく英語圏(または他言語)の人向けにもアプリケーション開発が可能です。

日本語サンプル

英語サンプル

合成音声作成プロジェクト

zipファイルがWordpressにアップロードできなかったのでコダマサーバーの以下に格納しておきました。必要であればサーバにログインして取得してください。


1
<ユーザ名>/www/hk/WindowsVoiceCreator/WindowsVoiceCreator.zip

 プロジェクトについては不特定多数からよくわからないテキスト情報が入力されることを想定し、日本語と英語以外は作成できないようになっています(その他、エラー処理がガチガチに入っています)。

 プログラムについては多くは書きません。コード上にコメントアウトも残しているので読めばわかると思います(ブン投げ)。

 前提条件として不特定多数からの入力を想定し、原因不明のメモリリークの発生が原因でソフト強制終了を回避するためexeで呼び出すよう設計しています。(dllでの組み込みはexeでの運用より開発コストが高いこともあるため)

使用方法

zipファイル内の以下のフォルダにビルド済みのexeが格納されています。


1
.\WindowsVoiceCreator\bin\Release\net6.0\WindowsVoiceCreator.exe

WindowsVoiceCreator.exeは引数を渡すことで合成音声を作成します。


1
WindowsVoiceCreator.exe <引数1: しゃべらせる内容> <引数2: 合成音声格納先.wav>
  1. コマンドプロンプトを開いて「WindowsVoiceCreator.exe」が格納されているフォルダに移動
  2. WindowsVoiceCreator.exe <しゃべらせる内容> <wavファイル格納先>
  3. <wavファイル格納先>にwavファイルが作成されます。

 文字だと伝わりにくいし、文を書くのが面倒になってきたので使用方法不明な場合は連絡ください。

ソフトの制約事項

 合成ソフトのファイル格納先(第二引数)はファイル名(,wavを含む)で指定してください

 ソフト内部で入力されたテキストから英語と日本語を判定して読み上げてもらう人を切り替えています(日本語ネイティブor英語ネイティブ)。テキスト内に日本語と英語の両方がある場合、入力テキストが皆目見当がつかない言語の場合は日本語判定が優勢されて日本語ネイティブの人が話すようになってます。

留意事項

  • SythesizerはWindowsのシステムを利用して動作しているため、Windows Serverを含む Windows OS上でしか動作しません。Ubuntu, FreeBSD, CentOSなどのLinuxプラットフォームでは実行時にエラーが発生します。
  • 実行には.NET 6のインストールが必要です。
  • 開発する場合Visual StudioのNugetからSystem.Speech(SpeechSynthesizer)のインストールが必要です。 

Fitbit自動化の巻(15)

前回,visualizeHRV_Sleep_Stepsのデータをサーバーにアップして,ユーザーごとにディレクトリを作成し保存するプログラムの開発を行った。今回は,タスクスケジューラを使用して一時間おきに最新データを取得するプログラムの開発を行う。

 

今回の成果
 タスクスケジューラの定時機能を使用することで,1時間ごとにFitbitデータの自動取得が可能になった。これで,手作業での実行作業とおさらば!

タスクスケジューラー
1. 基本的な説明と表示画面
 GPTに,定時機能を使ってFitbitデータの自動取得が行えないか聞いたところ,タスクスケジューラによる一時間毎のデータ取得が可能であることがわかった。

2. 1時間おきの設定方法(画像を参照)
①スタートメニューを開き,タスクスケジューラを選択する
②画面右側の「基本タスクの作成」を作成し,タスク名と説明文を入力して次へ
③トリガーのタスク開始日を「毎日」にチェックを入れて,次へ

④タスクの開始日時に関しては任意です(今回は今日)。次へ
⑤操作は,プログラム回収選択して次へ
⑥プログラムの開始に使うファイルの参照場所を選択して,完了へ

ファイルの参照場所に関しては,それぞれ「Pythonのソフトウェア,実行するPythonスクリプト,スクリプトのディレクトリ」を入力します。
 ・Pythonの実行ファイル:C:\Users\proto\anaconda3\envs\Fitbit\python.exe
 ・Pythonスクリプトのフルパス:RTget_visualizeHRV_Sleep_Steps_Web2.py
 ・スクリプトのディレクトリを表示:C:\fitbit

⑦最後に,画面右側のプロパティを選択して,「トリガー > 編集 > 繰り返し時間を1時間毎の無制限」して,ok→okを選択。動作チェックをする場合は繰り返し時間を5分に設定する。
⑧動作チェックをしたい場合は,画面右側の実行ボタンを選択して,コマンドプロンプトが立ち上がるかを確認する。データが取得できていれば完了!

注意点
1. コマンドプロンプトの入力欄

*Pythonの実行ファイルで「envs\Fitbit」を入れないとPythonスクリプトが実行できない方のコマンドプロンプトが立ち上がるようだ。

〇:「C:\Users\proto\anaconda3\envs\Fitbit\python.exe」
×:「C:\Users\proto\anaconda3\python.exe」

2. タスクスケジューラーの履歴
 以前テスト用で作成したものが残っていたらしく、準備完了と表示されていても、ログオンしていないときに稼働していた。そのため、不要なものは紛らわしいから使わなくなったものはどんどん削除したほうがいいみたいだ。

=================================================================

メモ書き
・グラフだけでなく説明文もサーバーにアップできるようにしないとか
・時間があれば模擬人格AIの設定を行う。具体的にはChatGPとの連携と,音声サーバーとの連携を行う。これで一先ず達成。あ,あとグラフを画面右側に表示する。

MotionMatching

Unity ***** storeのセールを見ていたらアニメーション関連のアセットが半額になっていた。アニメーション関連のアセットでどのようなものがあるのかをgptに質問していたらこのセットが出てきた。このアセットは数々の市販トリプルエータイトルで既に利用されているらしい。これを利用することで僕らのAIエージェントもより自然な動きができるようなそんな予感がした。メモしておこう。

23mh203 引用文献

必要な引用文献

先生からご指示を受け、追加した論文を記載する
音声の種類や特徴によって、人間の感情や生理的反応が変化する
Kassam, K. S., & Mendes, W. B. (2013). The effects of measuring emotion: Physiological reactions to emotional situations depend on whether someone is asking. Emotion, 13(6), 1-6.
ASMRの研究の内、人の声を使用した研究
Engelbregt, H. J., Brinkman, K., van Geest, C. C. E., Irrmischer, M., & Deijen, J. B. (2022). The effects of autonomous sensory meridian response (ASMR) on mood, attention, heart rate, skin conductance, and EEG in healthy young adults. Experimental Brain Research, 240(7), 1727-1742.
心拍変動と情動制御の関連を調べた研究
村瀬, 亮一, & 中村, 太一. (2004). 視聴覚刺激による情動の変化とその生理的反応. 産業医科大学雑誌, 26(4), 123-126.
HRVとレジリエンスの関連を調べた研究
An, E., Nolty, A. A. T., Amano, S. S., Rizzo, A. A., Buckwalter, J. G., & Rensberger, J. (2019). Heart rate variability as an index of resilience: A review of recent literature. Military Medicine, 184(11-12), 525-530.
LPPの研究
Reducing auditory hypersensitivities in autistic spectrum disorder: preliminary findings evaluating the listening project protocol(自閉症スペクトラム障害における聴覚過敏の軽減:リスニングプロジェクトプロトコルを評価する予備的知見)


他にもこれらの論文は使えるかもしれない
Different Types of Sounds and Their Relationship With the Electrocardiographic Signals and the Cardiovascular System – Review(さまざまな種類の音と心電図信号および心血管系との関係 – レビュー)
音、騒音、音楽が人体に与える影響についての研究は長年行われているが、未解明な点が多い。本論文はこれらの影響を包括的にレビューし、特にHRV(心拍変動)に焦点を当てた。HRVは、音や騒音の刺激により高周波成分(HF)や低周波/高周波比(LF/HF)が変化し、低周波(LF)も騒音により変動することがわかった。また、GSR(皮膚電気反応)は音楽刺激によって変化した。多くの研究で実験デザインに制約があり、対照群の欠如や刺激の変動がみられた。良い実験デザインの例として、ヘッドフォンの使用や被験者の快適な姿勢が挙げられる。

Vocal Attractiveness Increases by Averaging(声の魅力は平均化によって増す)
声の魅力は、聞き手に大きな影響を与えることが知られており、「美しい音は良い」という固定観念が、声の持ち主の交配、就職、選挙での成功に具体的な影響を及ぼすことが示されています。通常、魅力的な声は潜在的な交際相手に望ましい属性を示すものと考えられていますが、この説明だけでは男女両方の声が評価される一般的な社会的文脈における選好を完全には説明できません。研究では、聴覚モーフィングによって声を平均化すると、話し手や聞き手の性別に関わらず、声がより魅力的になることが示されており、この現象は声の質感の滑らかさとピッチの類似性の向上によってほぼ説明できることが示されています。これらの結果は、顔の加齢効果と同様に、加齢によって声の魅力が増すという現象を初めて証明するものであり、音声知覚の中心的な特徴としてプロトタイプに基づく符号化を強調し、顔と音声知覚のメカニズムの類似性を強調しています。※ブラウザの好感度がうまく調整できなかったら使えそう

More than a feeling: Autonomous sensory meridian response (ASMR) is characterized by reliable changes in affect and physiology(感覚以上のもの 自律感覚経絡反応(ASMR)は、情動と生理の確実な変化を特徴とする。)

Heart rate variability Can it serve as a marker of mental health resilience (心拍変動は精神的健康の回復力のマーカーとなりえるか?)

Electrophysiological evidence for an early processing of human voices(人間の声の初期処理に関する電気生理学的証拠)
顔の処理と同じように人の声に反応する脳領域のお話

Reliability of Physiological Responses Induced by Basic Emotions: A Pilot Study
感情と生理指標の関連についての論文

Emotional responses to auditory stimuli聴覚刺激に対する感情的反応
リンク切れで断念

The effects of autonomous sensory meridian response (ASMR) on mood, attention, heart rate, skin conductance and EEG in healthy young adults(健康な若年成人における自律感覚絶頂反応(ASMR)の気分、注意力、心拍数、皮膚伝導度、脳波への影響)


使えるか分からない研究
・Music structure determines heart rate variability of singers(音楽構造が歌手の心拍変動を決定する)
 合唱はウェルビーイングを高め、心拍変動(HRV)と呼吸の連動を促進する。特に、ゆったりとした呼吸時の呼吸性洞性不整脈(RSA)は心血管系に良い影響を与える。研究では、歌唱がHRVとRSAに及ぼす効果を健康な成人で検証し、歌唱が心臓と呼吸の調和をもたらすことを示した研究。
・The Pocket Guide to the Polyvagal Theory: The Transformative Power of Feeling Safe
 ポリヴェーガル理論のポケットガイド: 安全を感じることの変容力
 同様の内容。声が身体に与える影響について説明しています。具体的には、歌うことが社会的関与システム全体を活性化する機会を提供し、吸気と呼気のサイクルを通じて迷走神経の影響を調整する方法を示しています。この調整は心拍数を増減させ、自律神経系の状態を安定させることができます。また、声を使うことが顔、頭、咽頭、喉頭の筋肉の神経調節を含むことが強調されています
・The effects of different voice qualities on the perceived personality of a speaker(異なる声質が話し手のパーソナリティ知覚に及ぼす影響)
 話し手の声質が聞き手のパーソナリティ評価に与える影響を調査し、特に微笑み声が肯定的な評価を受け、きしむ声が否定的に受け取られることを発見しました。また、男性と女性の話し手では声質による評価に違いがあることも明らかにしました。

STEM教育評価(3)

心理・生理指標の関連

STEM23113
「集中した」得点に基づく分析

得点が高い学生は最初は皮膚コンダクタンスが低下するものの、中盤以降はむしろ上昇している。得点が低い学生は全体的に低下傾向に見受けられる。

STEM教育評価(2)

心理反応の評価
統計処理は全回出席した12名を対象に行い、多重比較はHolm法を用いた。
「不快-快」、「睡眠-覚醒」
全般的に、座学の解説よりも、機材を使った実習や組み立て作業において快感情が高い傾向が見て取れる。同じく、睡眠-覚醒は、解説において低く、実習において高い傾向が見て取れる。電子回路の組み立てにおいて高い傾向が見て取れる。
「不快-快」に各回で有意な差は認められず、「睡眠-覚醒」は、2回目<5回目、4回目<5回目となり電子回路の組み立てが特に高い覚醒を示し、解説回が特に低い覚醒状態であることが示された(不快-快:F(5/55)=1.89, ns;睡眠-覚醒:F(5/55)=4.38, p<.05)。

「活気のある」、「楽しい」
「活気のある」に関しても測定や組み立てなどの実習において高い傾向が認められた。「楽しい」に関しては全般的に高い傾向にあったが、座学の解説ではやや低い傾向が認められた。
「活気のある」は2回目<5回目となり、解説回が電子回路の組み立てより低かった。「楽しい」は各回で有意な差は認められなかった(活気のある:F(5/55)=3.54, p<.05; 楽しい:F(5/55)=0.92, ns)。

「充実した」・「集中した」
「充実した」は解説においても比較的高い点数を維持しており、座学と実習で明確な差は認められなかった。「集中した」は、測定や組み立て、プログラミングなどの実習において高い傾向が認められた。
「充実した」、「集中した」ともに各回で有意な差は認められなかった(充実した:F(5/55)=0.81, ns; 集中した:F(5/55)=1.48, ns)。
(※最終回(プログラミング)が両方とも妙に高いのは、ひょっとしてチャットGPTによるサポートの影響?)

「主体的な」・「受け身な」
「主体的な」は測定や組み立て、プログラミングなどの実習回において明確に高く、座学で解説を行う回では低い傾向が認められた。「受け身な」は、座学による解説回で高く、組み立てプログラミングでは低い傾向が認められた。
「主体的な」は、1・2・4回目<5回目、2・4回目<6回目、4回目<3回目となり、全体として講義回が実習回(電子回路くみたて、心拍変動測定、Pythonプログラミング)より低い傾向にあった。「受け身な」は1・3・5・6回目<4回目となり、講義のみを行った4回目が特に高かった(主体的な:F(5/55)=10.54, p<.01; 受け身な:F(5/55)=5.25, p<.01)。

「興味深い」・「理解度」
「興味深い」に関しては僕の回の授業が4点を超えており比較的高い評価が得られている。Python言語によるプログラミングが電子回路と同じ得点となっている。「理解度」は、座学が低く実習が高い傾向にある。
「興味深い」に各回で有意な差は認められなかった。「理解度」は5%水準で有意な効果が認められたが、多重比較の結果各回に有意な差はみとめられなかった(興味深い:F(5/55)=1.50, ns; 理解度:F(5/55)=2.95, p<.05)。

AIによる非接触計測(1)

研究の概要
本研究では、知的障害者の表情、身体活動の測定を想定し、AIによる非接触計測の可能性を検討した。ソフトウェア環境は、様々なハードウェアでアプリケーションを作成可能なことを重視しゲームエンジンUnityを用いた。主に検討した環境は、1)Unity+Barracuda、2)Unity+OpenCV、3)Unity+Apple ARKitの3種類であった。ここでは、1)Unity+Barracuda環境における検討を概説する。

Unity+Barracuda環境を用いた非接触計測
 
Barracudaは、Unity Technologiesが開発したニューラルネットワーク推論ライブラリ。ONNXフォーマットのモデルをインポートすることで、開発者はUnityプロジェクトに機械学習モデルを簡単に統合し、リアルタイムでの予測やインタラクションを実現できる。本研究では、身体活動測定用にgoogleのBodypixを、表情測定用に同じくgoogleのFaceMeshを、Barracuda環境で検証した。Barracudaで利用可能なONNXモデルに関しては、UnityTechnology高橋啓治郎氏のリポジトリにまとめられている。

Bodypix
 BodyPixはリアルタイム人体部位セグメンテーションを目的に作成されたニューラルネットであり、ポーズ推定や動作追跡などの機能をもっており、インタラクティブアプリケーションや仮想現実などの分野で用いられる。Unity+Barracuda環境では、Webカメラの映像をもとに、リアルタイムで主要な関節位置(2次元)を取得できる。関節位置の推定精度は、使用するONNX ファイルの規模に依存し、より大きなONNXファイルを用いることで高い精度での推定が可能になるが、そのぶん計算負荷も大きくなる。ある程度おおきな規模のONNXファイルを用いることで、安定した位置検出が可能であると考えられた。

Face Mesh
 MediaPipe FaceMeshは、顔の高精度な3Dメッシュを生成することを目的に作成されたニューラルネットであり、顔のランドマーク検出や顔の表情分析などの機能をもっており、ARフィルターの作成やリアルタイムビデオ通話の顔の追跡などの用途で用いられる。Webカメラの映像をもとに、約450ポイントの顔ランドマークを推定できる。高橋啓治郎氏のリポジトリFaceMeshBarracudaでは、FaceMeshのに加え、目の動きを検出するAIが統合されており、目部分を抽出して瞼の動きを検出ことで、より正確な瞬目行動が可能となることが確認された。一方で、FaceMeshは安価なウェブカメラを使って顔のランドマークを推定できる利点はあるものの、顔が横を向いた際に精度が低くなる傾向が認められた。

生理心理学実験-TA引継ぎ

前書き
 この授業のTAは,他の授業より能動的に動き,高い専門知識を持って優しく教えつつ,時間配分を常に意識しないといけない気がした(足りない資料は自分で作り,先生から指示なくても動く!).なにより大事なのが,限られた授業時間で実現する研究計画作りで,程よい難易度で班員が脱落することなく楽しく終わればいいな3年半を通して感じた.先代のTAには,「フリーライダーを撲滅せよ!」と言われた気がする.このブログに足りない情報は,各代のTAで補足するのじゃ(2023~2025年TAより).

測定リンク
・皮膚温:https://kodamalab.sakura.ne.jp/M2TP/showchannels.php
・発汗(単体):https://kodamalab.sakura.ne.jp/M2/showchannels.php
・心拍数と発汗:https://kodamalab.sakura.ne.jp/M5log/showchannels.php

*引用文献は,各自で探してこのブログに追加しておいてください.
*充電放置して帰ると,計測器内のリチウムイオン電池が爆発する可能性があるので,必ず充電を終えてから帰宅してください.計測器が故障したら適宜メンテしてください.電極の在庫がない場合は,助手に購入依頼を出す.

特殊な装置類
・Coospo:腕に巻く心拍センサー.女性でもHRVを測れる→EliteHRV対応.
・PolarUnite:この解説動画と,152ブログにログインしてこれを確認
・PolarH10:先生作の解説動画を確認.データはkubiosでcsvをダウンロード.
・BF装置:皮膚温BF(重田・長野,2025),ECG(神谷・重田・長野,2025)
・アイトラッカー:この解説動画だが,今はProccesingでなくUnityアプリかな.
・フィノメーター:おすすめしない.

授業スケジュールの概要
・前期はゼミ希望の受講生が多く,後期は色々とあり出席率は低めに感じた.
・あとは,後期の方が長期休みを挟むためプレゼン作りに時間を多くさける.

・1回目:ガイダンス.TAが計測機の使用法と生理指標の説明を行うかも.
・2回目:実験計画を立てる.出席率を上げるため楽しさ重視で接する.
・3回目:実験計画を定め先生に確認してもらうため,早めに終わらせ予備実験.
・4~6回目:測定回.実験者・実験参加者・分析を交互にやる.TA繁忙期
 →廊下にパイプ椅子を出し,計測器のメンテや実験刺激等の準備もする.
 →2要因分散分析自体がわからない学生が多いため,解説資料,動画を配布する.
・7回目:分析回.発表会までの1週間でメンバー間の連絡が途切れ仲が悪くなる可能性があるため,なるべくword・パワポ共に考察以外はすべて終わらせる.
・8回目:発表会.次の測定に向けて詳しく講評した方がいい.発表資料は,当日の朝まで作成しているグループが多いため,予め言う目星をつけた方が良い.

2要因分散分析の解説動画
・参加者間計画:こちら
参加者内計画:こちら
・混合計画:こちら
*統計ソフトは,わかりやすさと導入重視でjs-starを推奨する.

授業準備,配布物
(プロジェクター,教室の机掃除,室内温度は前提とする)
・1回目:計測機の準備(皮膚温,発汗)→計測方法の解説動画(一部ミス)
・2,3回目:計測器充電.実験刺激が入った大きい箱×2,ゴルフ,空き缶,ナーフ等を用意する.先生が忘れていたら,下記の研究計画書作成例を必ず添付する.
・4~6回目:計測器充電,実験刺激準備.廊下にパイプ椅子と学習机,扇風機やヒーターも.過去にTAが作成した発表スライドとレポートを作成例として配布.上記の2要因分析の資料も配布する.教室を室温を計測用に整え,パーテーションも用意.
・7回目:基本なし.
・8回目:発表後,次の計画を立てる場合は計測器の充電と実験刺激Boxの用意.

*TAが過去に作成したレポート,パワポは先生から指示はないが絶対,受講者に共有した方が良い.共有しなかった回は,けっこう悲惨で「タイトル→目的→考察」の3スライド構成だった・・・

注意事項
・TAが2人いる場合は,E-151・152に分かれて教える.一緒にいると片方の部屋が教えられないため注意される.
・授業時間の管理には常に注意を払う.実験計画書を提出できなかったり,測定回の時間がおしてしまったり,先生の説明に間に合わなくなるため,心配だったら都度「何時までやればいいか」先生に聞く.
・初回授業前に,履修コードを教務で聞いてチームに入る.先生に管理者権限を追加してもらい,グループごとにチャンネルを作成する.
・先生が遅れた,あるいは休まれた時は,TAが授業を進める.出欠確認はFormsを作成して行い,集計したファイルをそのまま先生に送ると良い.名簿がないため,一人ずつ点呼するより,こっちの方が早いと思う.
・メンバー間で喧嘩が始まったらTAが必ず仲裁に入る.場合によっては,やりやすいチームに移動してもらう.1グループ4名がほどよい.
・受講者数が多い時は,テーブル5つ用意する.パーテーションどける.

TAのレポート・パワポ作成例
・仮想事故直前と直後の心身の変化について→ Unity×VR×ドライブシミュレーター
・オンデマンド授業受講時の視線が課題成績に与える影響→ 視線×学習

COOSPO 心拍センサー

COOSPOという光学心拍センサーがある。先日のミーティングで、安価で装着しやすいセンサーとして候補に上がった。BluetoothとAnt+に対応しているというが、スマホ側でどんなソフトを使えばよいのか・・・。アームバンド式の心拍計という記事で、Heartoolという専用アプリがあることを確認。しかし、EliteHRVのサイトにもBT4.0かAnt+で接続できるとある、のでEliteHRVにも使えるのでは・・・。

このCOOSPOというメーカー、けっこう色んなタイプのセンサーを作っている。HW9とか値段は高いけど、結構洗練された印象・・・評価も154件。どんなかなーと思って、なんとなく見ていると、なんとEliteHRVに接続できるとの表記あり。これはローレンツプロットの結果と思われるが、案外良い感じで測れているように見える。PolarH10よりもUniteよりも安価でHRVもある程度評定できるなら、これが最強なのではなかろうか?

HRVを正確に測定するには、やはりH10が良い事は間違いない。EliteHRVの対応機器解説ページでは、「For accuracy, we strongly recommend the Polar H10 HRV monitor or another compatible heart rate chest strap listed above. (正確さを求めるのであれば、Polar H10 HRVモニターか、上記の他の互換性のある心拍数チェストストラップを強くお勧めします。)」とあり、その理由も示されている。

スマートミラー作成計画

基、転職ポートフォリオ用工作計画。

ハードウェア

材料

木材でフレームを作成し、アクリル板にマジックミラーシートを張り付けて鏡にする。マジックミラーシートを張ったアクリル板の後ろから画面を表示することで鏡越しに投影することができる。マジックミラーシートも完全に反射するわけではないので、背面に黒い板(またはシート)を設置することで反射しやすくする。

壁に立てかけることを想定して木材はなるべく軽量なものを使用する予定。

組み立てイメージ

前から順に「木材フレーム(1)」、「木材フレーム(2)」、「アクリル板(マジックミラーー)」、「板(黒)」、「ディスプレイ」。Raspberry Piはディスプレイの背面に設置する。

※ディスプレイはテクスチャ作るの面倒だったためメッシュそのまま。ディスプレイの見た目はリンク先参照。

ソフトウェア

  • OS: Ubuntu (検討: Windows IoT / CentOS)
  • 画面制御: Python (Pyside or PyQt) (Processing)

OSはUbuntu(または、Windows IoT)を使用する。OS起動時に画面制御のプログラムをフルスクリーンで自動起動する。

Processingはアニメーションが優秀だが、Javaの勉強が少し必要になるため時間がかかる。また、OS内にあるシェルの実行ができるかが不明なのとJavaのランタイムがLinux上で動くか不明(多分動く)。

OSがGUIの処理ができるかは事前に調べる必要がある。

Ubuntu Desktop

Rapsbery Pi (以降、RPと表記)上では動くようだが、RP zeroはメモリが貧弱(512 mb)なので動くか不明。OSは軽量と噂だが、 内部のシステムと自作ソフトが並列で動くかは怪しい。PC版はPythonがデフォルトで入っているので環境構築が楽だったが、RP版は入っているか不明。

Windows IoT

Windows IoTはタイムスタンプ機能のようなものがあるようで、再起動時に一定のところまで勝手に復元されてしまうことがあるらしい。正直よくわからんOS。単純に興味があるから使用検討。

CentOS

そもそもRP上で動くか不明。よく使うのでOSの設定変更は楽。C言語版Qtが動くのは知ってるがPython版は不明。

画面制御

以下を表示予定

  • 時間
  • 天気
  • ネットニュース

時間の取得はハードウェアから取得し、天気の情報はOpenWhetherMapのAPIから取得する。ネットニュースの取得方法については要検討(APIがあることは知っている)。ディスプレイ自体はタッチに対応しているが、アクリル板を挟むため、タッチ機能は使用できない。ネットニュースの表示はQRコードを表示してスマホで読み取って表示できるようにする(鏡に張り付いてネットニュースを見る人などいない)。

内部処理

画面以外の処理で以下の処理が必要になる

  • WiFiの設定

Windows IoTは画面がWindowsのままなのでわざわざソフトで変更する必要はないかもしれない。Ubuntuも画面上で設定変更可能。CentOSはGUIですらないので、ファイルの設定変更はソフトで行う必要がある。

ssh通信ができればこの辺は解決?

プロトタイプ開発

以下の確認が必要。

  • マジックミラーシートがしっかり反射するか
  • マジックミラーシートの裏から画面を投影できるだけディスプレイが明るいか

余談

組み立てイメージの動画は木材フレームを親に作ってもらうためにstlで渡そうと思っていたのだけど、stlテクスチャつかなくてぱっと見ようわからんかったので、遊び心でアニメーション付けたらたかが5秒の動画をレンダリングするのに5時間かかった。時短のためにサンプリング落としたり解像度下げたせいでテクスチャつけたけど木目見えねぇし。。。人に示すときは二度とCycleエンジンでレンダリングしない。

M3Aアクセスポイント設定

1.サーバーモードにする
電源を入れた後ボタンを3回押して緑のLEDが点灯するようにする。そうするとサーバーモードになり、wi-fiで見つけられるようになる。
2.計測器に接続する
PCのwi-fi設定から、M3で始まるアクセスポイントを探し出し接続する。パスワードは「password」
3.ブラウザからSSIDとパスワードを設定する
設定画面が表示されるので、接続先のSSIDとパスワードを設定する。
4.通常モードで起動して新しいアクセスポイントに接続する
一度電源を入れ直すと通常モードで起動する。そのままにするとSSID1に、ボタンを1回押すとSSID2に接続する(この場合、接続待機時に紫色になる)。

行動定量化240120

燃えてきたぞ・・・!!シリに火がついてな!いくつかのAI&物理測定を統合して,行動定量化システムを構築・・・するぞ!一年近く経ってしまったな。
BODYPIX
・・・Ankerのカメラを繋ぐだけで,そのまま動くようだ。なんとデータも取れるらしい。ちゃんとGPUも使っている・・・完璧だな。Projectネームは,「Bodipix」そのまんまだな。
表情認識DNN
こちらはOpenCV内に含まれる表情&顔認識プロジェクト。正確なモデルはなんていうんだろう・・・。KOSEとの話でも出ていたが,これはこれで需要があるような気がする。シンプルだからね。「CV230601プロジェクト」内の,FacialExpressionRecognitionExampleというプロジェクトらしい。こちらはカメラを番号で指定するのか・・・ちゃんと動くね。
同時に動作させる
おお・・・!同時に動くぞ!しかもCPU負荷がまだ40%だ。エクセル立ち上げてバックグラウンドで仕事しようか?という勢いだ。nVidiaGPUがついたパソコンなら余裕で同時動作するだろう。

環境情報
大島氏の指摘通り,とりあえず温度環境・・・暑い場所は人を攻撃的にするという。そこで,行動定量化とはいいつつも,部屋の環境情報も同時に記録して残しておこうと思う。これはBME280+Wifi対応ArduinoでOKだよね。

23MH203 12/4

 1週間休んですみません。体調を崩し気味で投稿できていませんでした(今もあまりよくはないのですが笑)

pNN50に関連しそうな論文をBingAIに調べてもらったところ

Q:心拍変動のpNN50を用いた論文を5個程度探して
A:心拍変動のpNN50を用いた論文を5個程度探しました。pNN50とは、連続した隣接する心拍間隔の差が50ミリ秒を超える割合のことで、副交感神経の活動を反映する指標とされています。以下は、pNN50を用いた論文のタイトルと概要です。


Q:心理学に関連する論文だとどうかな?
A:心理学に関連する論文を探しました。心拍変動のpNN50は、心理的なストレスや感情 に影響される指標として、心理学的な研究においても利用されています。以下は、心拍変動のpNN50を用いた心理学的論文のタイトルと概要です。

 こんな感じに。ほとんどが心拍変動の解説をする資料系の論文で、他も紀要論文やショートレポートのようなもの。・・・あまり国内で研究されていないのだろうか?
 少し気になったのは生体計測による自動運転時のドライバの快適覚醒評価自律神経活動指標を用いた音楽聴取時の精神緩和効果の評価。どちらも本実験と同じ聴覚刺激が関連している。
 また、大会発表集の論文まで手を伸ばすと、情報処理学会の大会発表に生体情報に基づく楽器が覚醒度および快・不快度に与える影響の解析リハビリテーション促進のためのロボットによる声かけ支援生体情報による感情推定手法とステージの観客反応による評価などでpNN50が用いられている。

 こうした論文ではRMSSDの結果が出てこないのだが、RMSSDが比較的新しい解析手法ということを除いてどのような違いがあるかこれもBingAIに聞いてみた。

Q:心拍変動測定時にRMSSDとpNN50の結果がやや異なるとき、どのようなことが言える?
A:心拍変動測定時にRMSSDとpNN50の結果がやや異なるとき、どのようなことが言えるかという質問ですね。RMSSDとpNN50はともに副交感神経の活動を反映する指標とされていますが、計算方法が異なります。RMSSDは隣接するRR間隔の差の2乗の平均値の平方根であり、pNN50は隣接するRR間隔の差が50msを超える割合です1。したがって、RMSSDはRR間隔の差の大きさに、pNN50はRR間隔の差の回数により影響を受けます。例えば、RR間隔の差が50msを超える回数は少ないが、超えるときは大きく超える場合は、RMSSDは高く、pNN50は低くなります。逆に、RR間隔の差が50msを超える回数は多いが、超えるときはわずかに超える場合は、RMSSDは低く、pNN50は高くなります。このように、RMSSDとpNN50の結果がやや異なるときは、RR間隔の差の大きさと回数のバランスが異なることを示していると考えられます。

詳細情報:

1. jstage.jst.go.jp2. trytech.co.jp3. pc-ecg.com4. jstage.jst.go.jp

 要は劇的な変化をもたらすわけではないから、RMSSDとpNN50で結果に違いが出たらしい。こうした反応の違いも何かの特徴なのだろうか。
 図書館に買ってもらった本に何か載っているか期待してみようと思う。

米倉卒論_データ

GPT4にCSV形式の観測データを与え、
「2023年6/9の、AIカメラが捉えたデータです。1列目は時間、2列目はAIカメラに写った顔の数です。3列目以降は無視して良いです。0から23時まで、1時間ごとに、写っていた顔の平均個数を算出してCSV形式で出力して。縦方向に時間が来るように、1列目に時間、2列めに平均個数がくるように、例えば
0,0
1,0
2,0

などのように出力してください。」
などとプロンプトすると、結果を出力してくれた。有効データは6/17から7/11までの22日間。全体で平均すると、13-14時、18-21時に顔検出数が大きい結果となった。有効データは8~21時で良いだろうか。さらに、プログラムから当日に提示していたシーンを割り出し、紅葉、海辺、冬山の3種類に分けて描画したところ、学生が自由に活動できる18-21時の間では、冬山>紅葉>海辺の順で顔検出数が多くなった。

各日の18-21時の顔検出数の平均値を求め、提示したシーンにより差があるかを参加者間計画の1要因分散分析で検討したところ、F(2,17)=1.49, n.s.となり、有意な差は認められなかった。

using UnityEngine;
using UnityEngine.SceneManagement;
using System;

public class SceneSwitcher : MonoBehaviour
{
    public string[] sceneNames; // 表示するシーンの名前を格納する配列
    private int currentSceneIndex; // 現在のシーンのインデックス
    private int lastDay; // 最後に確認した「日」
    private int lastSecond; // 最後にログを出力した秒

    //ここから長野が書き換え231101
    private void Update() {

        if (Input.GetKeyDown(KeyCode.F12)) { SceneManager.LoadScene("S0"); }
        if (Input.GetKeyDown(KeyCode.F1)) { SceneManager.LoadScene("S1"); }
        if (Input.GetKeyDown(KeyCode.F2)) { SceneManager.LoadScene("S2"); }
        if (Input.GetKeyDown(KeyCode.F3)) { SceneManager.LoadScene("S3"); }
        if (Input.GetKeyDown(KeyCode.F4)) { SceneManager.LoadScene("S4"); }
        if (Input.GetKeyDown(KeyCode.F5)) { SceneManager.LoadScene("S5"); }
        if (Input.GetKeyDown(KeyCode.F6)) { SceneManager.LoadScene("S6"); }

        if (Input.GetKeyDown(KeyCode.Escape)) { Application.Quit(); }

    }

    /*

        private void Start()
        {
            DateTime currentTime = DateTime.Now;
            lastDay = currentTime.Day;
            lastSecond = currentTime.Second;
            currentSceneIndex = lastDay % sceneNames.Length;
            //SceneManager.LoadScene(sceneNames[currentSceneIndex]);
        }

        private void Update()
        {
            // 現在の時刻を取得
            DateTime currentTime = DateTime.Now;
            int currentHour = currentTime.Hour;
            int currentMinute = currentTime.Minute;
            int currentSecond = currentTime.Second;
            int currentDay = currentTime.Day;

            // 現在のシーン名を取得
            string currentSceneName = SceneManager.GetActiveScene().name;

            // 秒が変わったときだけ時刻をログに出力
            if (currentSecond != lastSecond)
            {
                lastSecond = currentSecond;
                string timeString = currentTime.ToString("HHmmss");
                Debug.Log(timeString);
            }

            // 20:30から7:30までの間はS0を強制表示(ただし現在のシーンがS0でない場合のみ)
            //if ((currentHour >= 20 && currentMinute >= 30) || (currentHour <= 7 && currentMinute <= 30))
            if ((currentHour > 20 || (currentHour == 20 && currentMinute >= 30)) || (currentHour < 7 || (currentHour == 7 && currentMinute < 30)))
            {
                Debug.Log("change to S0");
                if (currentSceneName != "S0")
                {
                    SceneManager.LoadScene("S0");
                }
            }
            else if (currentDay != lastDay)  // それ以外の時間は日が変わったらシーンを切り替える
            {
                lastDay = currentDay;
                currentSceneIndex = currentDay % sceneNames.Length;
                if (sceneNames[currentSceneIndex] != currentSceneName)
                {
                    SceneManager.LoadScene(sceneNames[currentSceneIndex]);
                }
            }

            if (Input.GetKeyDown(KeyCode.F12)) { SceneManager.LoadScene("S0"); }
            if (Input.GetKeyDown(KeyCode.F1)) { SceneManager.LoadScene("S1"); }
            if (Input.GetKeyDown(KeyCode.F2)) { SceneManager.LoadScene("S2"); }
            if (Input.GetKeyDown(KeyCode.F3)) { SceneManager.LoadScene("S3"); }
            if (Input.GetKeyDown(KeyCode.F4)) { SceneManager.LoadScene("S4"); }
            if (Input.GetKeyDown(KeyCode.F5)) { SceneManager.LoadScene("S5"); }
            if (Input.GetKeyDown(KeyCode.F6)) { SceneManager.LoadScene("S6"); }

            if (Input.GetKeyDown(KeyCode.Escape)) { Application.Quit(); }
        }
    */


}

心理サイエンス・卒論演習の引継ぎ

*ゼミの層が他大学よりも薄いため(大学院生が少なく博士もなし),TA関係なく空き時間に授業に出てサポートできると良い.実験参加者も増やせてwin-win.もちろん卒論・就活優先で.

心理サイエンス基礎演習
・前期:UnityでTPS,FPS,Terreinを作成して動画に収める→WebGLが抜けたくらい
・後期:VR開発,Arduinoで簡単な電子回路組立,3Dプリンタ(Cad)

心理サイエンス応用演習
・前期:Fitbit×Python,合成音声,Davinciで動画編集
・後期:STEM教育→科警研の電子回路組立,はんだ付け

*毎年,実施する内容が異なるためなんでもできるようにしておくと安全.授業準備は,基本プロジェクターと電源タップで,後は授業回によって変わる.

3年ゼミ
・卒論の計画を立てて,年始に予備実験や開発が1/3終わってると良い.
・ゼミの雰囲気づくりが大事.

4年ゼミ
・おそくても,6月中旬までに実験が始められると良い.
・8月までに実験データをゼミ生全員が取り終えるように大学院生が調整.
・10月末までに分析を終わらせ,11月中旬に考察と抄録も揃ってると良い.
・大学院生は,卒論のコメントして,提出日まで全員分持ち上げる.

大学院-生理心理学特殊研究
・毎年内容が変わる.受講者数が異なるため.
・M1,2はサポートできたらやるといい.

23mh203 11/3の報告

 予備実験が延期になり、データ数が揃うのは11/10の見込みに
空き時間でポリヴェーガル理論で聴覚に関連する部分について調べた。

 ポリヴェーガル理論入門(著:ステファン・W・ポージェス 訳:花丘ちぐさ)では、人間は低いピッチの音が捕食動物が近づいて来たと解釈する傾向があり、反対に高いピッチの柔らかい音はお母さんが赤ちゃんをあやす時の声によく見られることから「安全である」という「合図」になりうると触れられている。
 特に女性の歌声は低周波を伴わず、抑揚がある上に歌声をコンピューターで変換するとさらに抑揚は強調され音韻も強調されるのでより「安全である」という「合図」を受け取りやすくなるとのことであった。

 この際に絡んでくるのが本内で「中耳筋」と呼ばれている部分なのだが、中耳筋という筋肉は少し探した限り見当たらなかった。
 中耳というのは鼓膜のさらに先の部分で、鼓膜の他に耳小骨と呼ばれる3つの骨が関節でつながっている部分がある。

坂下耳鼻咽喉科HPより https://sakashita-jibika.com/ear/ear_construction/

 この耳小骨の関節を動かす筋肉が本の中で出てきた「中耳筋」と思われる(医学系だと耳小骨筋と呼ばれていた)。これを動かすことで鼓膜の張り具合を変えて聞きたい音を聞き取りやすくするらしい。
 さらに、この筋肉をつかさどっている脳の部位が心臓にも関連しているらしい。このため心拍の減少やRMSSDの増加などが見られたのかもしれない。

23mh203 10/31までの報告

予備実験を1名実施。(のこり3名は水、金、翌月曜に協力してもらう予定)(また、他にも協力して良いとの声があったのでさらに4名増やすか検討したい)

 新に取得した結果を加えるとRMSSDとHRのグラフが大きく変わった。1人増えただけなのでカウンターバランスが取れずデータが乱れたのか、はたまた女性の声であればそこまで好感度に差は無いのだろうか・・・?
 もう少しポリヴェーガル理論と絡めて調べる必要がある。

 一方、皮膚温についてはグラフの上下関係が変わりつつある。枯色がやや下がり、つくよみが少し上がった。

 全体的にデータ数がまだ不足気味で何とも言えないが、音声の好感度や性別といった情報で何かしら違いはありそうだ。操作チェックの意味合いも込め、音声の性別や好感度といった情報を被検者から収集した方が良いかもしれない。