Google OS実験室 ~Moonlight 明日香~

GoogleのAndroidで遊び始めて, すでに6年以上が経った. Androidは思った以上の発展を遂げている. この技術を使って, 新しいことにチャレンジだ!!

eclipseが起動しない

最近はAndroidの開発環境をAndroid Studioにしているのだが, 昔のプロジェクトをいじるのにeclipseを使おうと思ったら起動しない.
最近はめっきり使わなくなったので, もしかしてご機嫌ななめなのか?

それはさておき, とりあえずググってみた. 
いくつかeclipseが起動しないパターンはあるようだが, 一応今回のエラー原因と対応策をまとめておく.

1. エラーログの確認[1]
 eclipseの実行ログは, 以下のいずれかに記録される.
 1) workspaceフォルダ内の".metadata\.log"ファイル
 2) eclipseインストールフォルダ内の"configuration\起動時のエポック秒).log"ファイル

今回の実行ログは 2)に出力されており, エラー内容は以下の通り.

 !SESSION 2015-06-21 08:45:45.409 -----------------------------------------------
 eclipse.buildId=M20130204-1200
 java.version=1.8.0_45
 java.vendor=Oracle Corporation
 BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=ja_JP
 Framework arguments:  -product com.android.ide.eclipse.adt.package.adtproduct
 Command-line arguments:  -os win32 -ws win32 -arch x86_64 -product com.android.ide.eclipse.adt.package.adtproduct


 !ENTRY org.eclipse.osgi 4 0 2015-06-21 08:45:46.231
 !MESSAGE Application error
 !STACK 1
 java.lang.UnsatisfiedLinkError: Cannot load 64-bit SWT libraries on 32-bit JVM
   at org.eclipse.swt.internal.Library.loadLibrary(Library.java:260)
   at org.eclipse.swt.internal.Library.loadLibrary(Library.java:240)
   at org.eclipse.swt.internal.C.<clinit>(C.java:21)
     :

JVMが32-bit版のもよう.
何かのアプリがらみで32-bit版をインストールまたはアップデートしてしまい, その際に環境変数PATH上で32-bit版が優先されるようになったようだ.

2. 対応策[2]
基本的には, 64-bit版が優先されるようにすればよい.
今回は, 32-bit版をアンインストールしたところ, 問題なく起動できるようになった.

多分, 環境変数PATHで64-bit版のパスを32-bit版より後ろで設定してもいけるはず.

----
参照URL:
 [1] Eclipse起動時エラーの傾向と対策 | android manifest configChanges
 [2] Eclipse起動しなくなったので解決しましたの巻 - IT屋だけど、なにか?

脈拍センシングにチャレンジ(3)

前回, FFTを使って脈波データから脈拍数を求められそうと記したが, 生体信号の分野は素人なのでいろいろと調べていると, 私設研究所ネオテックラボ[1]の上田氏が, 以下のように記している. [2]

   脈拍は非定常な安定しない波です. 脈拍に限らず生体の信号は全部周期が定常ではありません. 
   ですから『FFT(Fast Fourier Transform)の解析で周波数成分を抽出する』という考え方は全く無意味な行為であり, 正しい結果が得られません.
   何故ならFFTは同じ状態が永遠に継続する事を前提とした変換であるからです.


そこで, 脈拍数をFFTを使って求めることはやめ, 脈波のピーク抽出を行い, ピーク間隔から脈拍数を算出することを検討してみる.

1. ボトム間隔
 カメラの輝度変化は血管拡張時に入射光が少なくなり暗くなるので, 脈波データのピーク間隔ではなく, ボトム間隔から脈拍数を算出する.

sensor01

ボトム間隔から脈拍数を求める式は, 以下の通り.
        
  脈拍数 = ( FPS * 60 ) / Tf        
  ただし,  FPS : フレーム/秒, Tf : ボトム間フレーム数

FPS=30として, 各ボトム間隔から脈拍数を計算すると, 以下のようになる.

間隔[frame]脈拍数
12475
22475
32378.3

2. ボトム位置抽出
 脈波データからボトム位置を抽出するために, まず矩形波相関フィルタ[3]を使って脈波データのゆらぎの影響を抑え, ボトム位置を検出する.
矩形波相関フィルタを使用することによりボトム位置の時間的ずれが生じるが, 今回は同期位置検出とかではなく脈拍数の算出であり, 特に問題ない.

2.1 相互相関処理
 具体的には, 輝度値に対して, 以下のような矩形パルス窓を使って, まずは相互相関値を求める.
window01

輝度値から相互相関値を求める式は, 以下の通り.

  y(t) = (-1) * (x(t) + x(t-1) + ・・・ + x(t-n+1))
       + (+1) * (x(t-n) + x(t-n-1) + ・・・ + x(t-3n+1) + (-1) * (x(t-3n) + x(t-3n-1) + ・・・ + x(t-4n+1))
  ただし, y(t) : 相互相関値, x(t) : 輝度値, n : 1/4窓幅のフレーム数

実際に測定値でやってみると, 以下の通り.

window02

2.2 ボトム位置検出
 ボトム位置は, とりあえず相互相関値で以下の条件を満たすフレーム位置を探索する方法で試してみるが, 実際にいろいろなデータで試してみる必要がある.

   y(t) - y(t-1) > 0 && y(t-1) - y(t-2) ≦ 0

上記で検出されたボトム位置間隔から脈波数を求める.

次回はこれを実際にAndroid上に実装して動かしてみる.
安定して脈波データが取得できる場合は, 多分これで脈拍数の測定が可能と思われる.
ただ, 実際にはスマフォのカメラに指をあてて輝度を測定するので, 常に安定して脈波データが取得できるわけではない.

----
参照URL:
[1] 私設研究所ネオテックラボ
[2] 【俺センシング】『PCのカメラで非接触バイタル・センシングができる』
[3] 特公平7-67440

livedoor プロフィール
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

記事検索



  • ライブドアブログ