2018年12月21日金曜日

スマートフォンを利用した睡眠時無呼吸症候群簡易検知システムの提案

12月21日のゼミでは「スマートフォンを利用した睡眠時無呼吸症候群簡易検知システムの提案」を読んだ。

論文概要

このアプリでは受診をする前に自宅で手軽に睡眠時無呼吸症候群である可能性が高いか否かを知ることができるように、スマートフォンを利用して腹部の動きといびきの音を測定することにより、呼吸の有無を判 断し,無呼吸状態を検出するシステムを提案している。
方法としてはスマートフォンを腹部の上に置き、腹部の動きといびきの音量から無呼吸状態を推測した。結果としては腹部の動きの加速度の値といびきの音量から 無呼吸状態の判断が可能だった。

所感

現在、睡眠時無呼吸症候群の人が増加しているためこのようなアプリがあったら非常に便利だと思った。睡眠時のことを話していると寝言を録音してくれる面白いアプリがあるという話になったため下にリンクを貼っておく。
睡眠はみんな興味がある分野のため睡眠についての他にもおもしろいアプリがありそうなためほかのアプリも探してみたいと思った。

Sleep Meister - 睡眠サイクルアラームLite


参考文献

2018年12月17日月曜日

リズム認証 実験


本日のゼミでは、ゼミのメンバーの計測したリズムとほかのメンバーのリズムの認証とのユークリッド距離を計算しました。

1. ユークリッド距離を計算するためのユーザ関数「u_dist」をVBAで作成する
 作成手順は以下の通り
   1.Excelファイルの種類を「*.xlsm」とする
   2.Excelのメニューから「開発」→「Visual Basic」を選択し、VBAエディタを開く
   3.VBAエディタのメニューから「挿入」→「標準モジュール」を選択
   4.下記のようにVBAにプログラムを入力する
 ※リボンに「開発」が出ない場合は[ファイル]→[オプション] →[リボンのユーザ設定]を出して右の[メインタブ]の[開発]をチェックする

Option Explicit
Function u_dist(x_range As Range,y_range As Range) As Double
Dim i As Integer
Dim sum As Double
    sum = 0
    For i = 1 To 7
        sum = sum + (x_range.Cells(1, i).Value - y_range.Cells(1, i).Value) ^ 2
    Next
    u_dist = Sqr(sum)
End Function
リスト1.ユークリッド距離を計算するVBAの関数

2. 次に各々のリズム認証とユークリッド距離を計算するユーザ関数を、図1に示すExcelシートに入力する。

図1.実験結果を記入するExcelのシート
入力するセルと関数は以下のとおり。

J2には=u_dist($C2:$I2,'●山 ●生'!$B$7:$H$7)
K2には=u_dist($C2:$I2,'●口 ●々子'!$B$7:$H$7)
L2には=u_dist($C2:$I2,'●田 ●希'!$B$7:$H$7)
M2には=u_dist($C2:$I2,'●松 ●光'!$B$7:$H$7)
N2には=u_dist($C2:$I2,'● ●加里'!$B$7:$H$7)

入力し終えたらJ2:N2をJ101:N101まで複写。
本日はユークリッド距離を求めて終了とします。

次回はリズム認証の成功と失敗の判定を行います。

2018年12月16日日曜日

タッチパネルと加速度センサを用いた携帯端末向けジェスチャ認証とその入力方式の提案

今回は「タッチパネルと加速度センサを用いた携帯端末向けジェスチャ認証とその入力方式の提案」を読んだ[1]

論文概要

スマートフォンの様々な認証方法が開発されている中、ジェスチャー認証や、パスコード認証では第三者から丸見えの状態になり悪用される恐れがある。
悪用を回避するために加速度センサーを用いたジェスチャー認証方式の提案についての論文である。この認証方法の特徴としてはダミーの動作を混ぜることができることである。

所感

現在では、指紋認証や顔認証などパスワードを打ち込まずにロックが解除できるようになったため、この認証を使っている人はいないと思われるが、ジェスチャーを使ったパスワード入力やダミーのコードを混ぜれるといった点においてはとても面白い認証方法だと思う。今後はどんな認証方法が普及していくのかたのしみである。

参考文献

[1] 見上 一憲,林原 尚浩:タッチパネルと加速度センサを用いた携帯端末向けジェスチャ認証とその入力方式の提案.研究報告マルチメディア通信と分散処理(DPS) 2012-DPS-150(8), 1-7, 2012-02-22

2018年12月10日月曜日

リズム認証してみよう!

今回のゼミではmonacaで実際にタップしてリズム認証してみる画面を作った。

1.まず、Javascriptファイルの作成をした。
2.jsフォルダ内にmain.jsを作成してリスト1の内容を入力した。
var touch_time = [];
var seq = 0;

$(document).on('touchstart','#canvas',function(event){
  touch_time.push({'label':'s','time':$.now()});
});

$(document).on('touchend','#canvas',function(event){
  touch_time.push({'label':'e','time':$.now()});
  if(++seq >= 4){
    show_time();
  }
});

function show_time(){
  var t = [];
  var prev = 0;
  touch_time.forEach(function(e){
    if(prev > 0){
      ti = e.time - prev;
      t.push(ti);
      $('#result').append(ti + '<br />');
    }
    prev = e.time;
  });
  $('#canvas').css('display','none');
}

function reset_canvas() {
  $('#result').html('');
  $('#canvas').css('display','');
  touch_time = [];
  seq = 0;
}
リスト1:main.js
2.index.htmlに下記を追加する。
<script src="js/main.js"></script>
リスト2:scriptタグの追加 

以上の作業で黄色のキャンバスが表示されるようになり、4回タップすると下にt1~t7の値が表示されるようになった。 そしてこのt値を計測し、5人分のデータを集めて終わった。
次回はこのデータでユークリッド距離を求めたいと思う。


【Tips】 


jQuery


jQueryとは、JavaScriptのプログラムをより簡単に書けるようにするために設計されたJavaScriptライブラリのことです。ここではjQueryを使うとどんなにプログラムが簡単になるかを実例を挙げて説明します。

以前、2018年11月12日のブログ「YES/NOチャート 効果音の修正と動画再生 」のTipsでイベントリスナについて説明しました。

イベントリスナ


スクリーンのタップ、画面の表示などのイベントを捉えて処理を実行するために聞き耳を立てる仕掛けをイベントリスナと言う。
イベントリスナは次のように書く。
document.addEventListener([イベントの種類], function(event){
    ・・・ここにイベント処理を書く・・・
  }
},false);
リスト6 イベントリスナ

リスト6において[イベントの種類]には、どのようなイベントが発生したかを表す文字列を書く。例えば、スクリーンをタップした場合は'click'、画面を表示(push)した直後は'postpush'、画面を閉じた(pop)直後は'postpop'などと書く。
このイベントリスナをjQueryを使って書くと次のようになります。
$(document).on([イベントの種類], [CSSセレクタ], function(event){
  ・・・ここにイベント処理を書く・・・
});
リスト3.jQueryで書いたイベントリスナ 

これは、[CSSセレクタ]で指定される要素に[イベントの種類]に指定したイベントが発生したときに呼び出されるイベント処理を登録する命令です。

リスト1では4~6行目及び8~13行目でjQueryを用いたイベントリスナを書いています。

まず、4~6行目はキャンバス(CSSセレクタ="#canvas"ということは、id="canvas"のタグ:これは、top.html内のcanvasタグに付けたid)に'touchstart'というイベントが発生したら呼び出されるイベントを登録する命令です。
'touchstart'というイベントは、指がスクリーンをタッチした瞬間に発生します。したがってこれは指でスクリーンをタッチしたときに呼び出される処理の定義です。図1において1D, 2D, 3D, 4Dのことです。

図1.画面タップによって得られる時間差(引用元

 同様に8~13行目はキャンバスに'touchend'というイベントが発生したら呼び出されるイベントを登録する命令です。
'touchend'というイベントは、指がスクリーンから離れた瞬間に発生します。したがってこれは指がスクリーンから離れたときに呼び出される処理の定義です。図1において1U, 2U, 3U, 4Uのことです。

指がスクリーンをタッチしたら「touch_time」という配列にpushメソッドを使って次のデータを追加しています。
  {
    'label':'s',
    'time':$.now()
  }
リスト4.タッチした時配列に追加するデータ

これは、'label'というキーに's'という値('start'の's')を、'time'というキーにミリ秒換算の現在時刻を取得する関数 $.now() を設定したものです($.now()もjQueryの関数です)。

同様に、指がスクリーンから離れたら、リスト4において'label'を'e'('end'の'e')に変えたデータを配列「touch_time」に追加します。
これで図1に示す1D, 1U, ..., 4D, 4Uの発生時刻が配列「touch_time」に蓄えられることになります。

4回のスクリーンタッチが終わったら、全部で8つの発生時刻が格納された配列変数「touch_time」を先頭から順番に見ていくことにより、図1のt1, t2, ..., t7を計算することができます。それをやっているのがリスト1の「show_time()」関数です。

HTML要素の操作


jQueryの威力はイベントリスナの書き方だけではありません。HTML要素に対する値の設定・取得やスタイルシートの設定などの記述を簡単に書くことができます。

たとえば、リスト1の関数「reset_canvas()」内の1行目にある
$('#result').html('');
は、id="result"のHTML要素(t1~t7を表示するエリアを定義するdivタグ)を空にする(つまりクリアする)という意味です(top.htmlについては2018年12月3日のブログ「リズム認証」のリスト2参照)。jQueryを使わないでこれを書くと次のようになります。
  document.getElemenById("result").innerHTML = '';
かなり面倒くさいですね。

また、2行目の
$('#canvas').css('display','');
は、id="canvas"のHTML要素(タップするキャンバスを定義するcanvasタグ)のスタイルシートに「'display': none」を設定する(つまりキャンバスを非表示にする)という意味です。
これもjQueryを使わなければ次のようになります。
  document.getElemenById("result").style.display = 'none';
やはり面倒ですね。
このように、jQueryでは「$([CSSセレクタ])」を使ってHTML要素にアクセスし、html()メソッドやcss()メソッドを使ってHTML要素の操作を簡単にすることができます。
このようなjQueryの使い方の詳細や例文についてはjQuery入門を参照してください。

ブログでプログラムやHTMLを書くときの注意事項

 

ブログでJavascriptのプログラムやHTMLを書くときはGoogle-code-prettifyを使います。使い方は以下の通りです。

1.Bloggerの編集画面で左上の[作成]を[HTML]に変える。
2.すると、ブログがHTMLで表示されるので、JavascriptのプログラムHTMLを書きたい部分を次のようにclass属性に"prettyprint"を設定したpreタグで囲む。
<pre class="prettyprint">
  ・・・ここにプログラムやHTMLを書く
</pre>
リスト5.Google-code-prettifyの使用方法

ただし、"<"や">"はそのまま書くとタグの記号と間違えられるので、"<"は"&lt;"に、">"は"&gt;"に置き換える。大量のHTMLがあるとこの置き換え作業は結構面倒なので、エディタの置換機能を使って一括置換する。

2018年12月8日土曜日

スマートフォン使用時の不注意による事故防止システムの提案

今回は「スマートフォン使用時の不注意による事故防止システムの提案」をよんだ[1]


論文概要

歩きながらのスマホ操作による事故を防止するため、ながら歩き状態を感知し画面をオフにするシステムの提案についての論文である。加速度による歩行検出と画像による歩行検出で、リアルタイムにながら歩きを検出することに成功している。課題としては、バスの車内などで座っているのにもかかわらず、スマホ持ち替えなどにより誤検出がおきることや、輝度の差が小さい路面での歩行検出の精度が下がってしまう点だ。

所感

最近はニュースなどでも歩きながらのスマホゲームや操作による事故が多く報道されているため、こういったシステムにより事故が減っていけば良いと思う。
このシステムではカメラ機能や加速度センサを使っているが、それらの機能によるバッテリー消費がどの程度あるのかなども気になる。現在では歩きスマホを防止するためのアプリやサービスが多くあるが、あまり使われてはいないようにも感じるので、どうすれば使われるようになるのか考えることも大切だと思う。

参考文献

[1]名坂 康平,加藤 岳久,西垣 正勝:スマートフォン使用時の不注意による事故防止システムの提案.研究報告マルチメディア通信と分散処理,1-6,2012-02-22.


【TIPS】



2018年12月3日月曜日

リズム認証

今回のゼミではMonacaでYES/NOチャートの修正とリズム認証アプリ作成の準備を行った。


<リズム認証>

1.新規のプロジェクトを作成し(・jQuery ・Onsen UI )2つのコンポーネントと、
(・Camera・Capture)2つのCordovaプラグインを有効化する。


2.index.htmlのbodyタグ内に下記のようにons-navigatorタグを追加する。(リスト1)

<body>
 <ons-navigator page="top.html" id="navi"></ons-navigator>
</body>
リスト1:ons-navigatorタグ


3.wwwフォルダ内にtop.htmlを作成し下記の内容を追加する。(リスト2)
<ons-page id="top-page">
    <ons-toolbar>
        <div class="left"><ons-back-button>Back</ons-back-button></div>
        <div class="center">リズム認証</div>
    </ons-toolbar>

    <div class="pagebody">
        <ons-button class="yes-btn" onclick="reset_canvas();">
         スタート
        </ons-button>
     <canvas id="canvas" style="background-color:yellow; display:none;">
     </canvas>
     <div id="result"></div>
   </div>
 </ons-page>
リスト2:top.html
以上の作業でスタートボタンが表示されるようになった。

リズム認証というものはやったことがないので次回以降のゼミで作成し早く認証精度を確かめてみたいと思う。


【TIPS】


動画を撮影して画面に表示するプログラムで、Androidに限って次のエラーメッセージが表示された。
Getting the following error when running the Basic Video Chat on android:
Refused to load the image 'android-webview-video-poster:default_video_poster/6528159162652968060' because it violates the following Content Security Policy directive: "img-src 'self' data: content:".

これは、動画撮影画面を出した瞬間に出る。

いろいろ調べてみると、これは「コンテンツ セキュリティ ポリシー」というものの制限だと分かった。

コンテンツ セキュリティ ポリシー(Content-Security-Policy)

外部からデータを取得して利用する仕組みを使っている時に、悪意を持ったユーザによってXSSを引き起こされる可能性があります。例えばJavaScriptを実行されたり、CSSでデザインを変えられてしまうかも知れません。
そうした問題を防ぐのに使えるのがコンテンツ セキュリティ ポリシー(CSP)です。
この問題の解決策としてモナカプレスの「Monacaアプリで動画を再生する色々な方法」には

Content-Security-Policyに media-src * cdvfile:; と img-src * android-webview-video-poster:; が必要です。

という記述があった。
よって、index.htmlの6行目あたりにあるメタタグ(<meta ...>~</meta>)を以下のように書き換えればよい。
    <meta http-equiv="Content-Security-Policy" 
      content="default-src * data: gap: https://ssl.gstatic.com; 
      style-src * 'unsafe-inline';
      img-src * android-webview-video-poster:;
      script-src * 'unsafe-inline' 'unsafe-eval'">
リスト1.index.htmlのmetaタグ

リスト1の下から2行目で、img-src(これが動画ファイルの指定)に「android-webview-video-poster」を許可するように指定している。どうやらこれはAndroidで動画を撮影したときに、動画が格納される場所(モノ?)らしい。