安全運転カウンセリングシステムの構築― 平成 22 年度（本報告）タカタ財団助成研究論文 ―ISSN 2185-8950

研究代表者

春日 伸予

研究実施メンバー

研究代表者

芝浦工業大学工学部教授

春日 伸予

第一章 安全運転カウンセリングシステムの構築
研究実施者

芝浦工業大学工学部教授

春日 伸予

研究協力者

芝浦工業大学工学部学部生

繆 嘉傑

研究協力者

芝浦工業大学工学部教授

澤田 東一

第二章 ドライブレコーダ映像を用いた運転手の動作解析
研究実施者

慶應義塾大学理工学部准教授

青木 義満

研究協力者

慶應義塾大学大学院理工学研究科生

尾山 啓介

報告書概要本プロジェクトは，第一段階として，2 年計画による安全運転カウンセリングシステムの構築を行うことを目的としており，この段階でのドライブレコーダの画像はシステムの教育内容を作成するための分析対象としている。しかし，プロジェクトの最終目的は，車載されたドライブレコーダの画像をリア
ルタイムで解析し，心理面を中心とした安全運転のためのアドバイスをするシステム(ドライブレコーダに内蔵を想定)を構築することにあり，そのため画像からの心理面の分析に加えて，画像解析処理によってドライバーの表情や行動を定量的にとらえ，運転手挙動と事故発生原因の関係を解明する研究も並行して行っている。
本報告書では，まず第一部において，昨年度の研究「ヒヤリハット映像の心理的側面からの分析」の成果をデータベース化して Web 上に教育システムを構築する研究の成果を，そして第二部において，画像解析処理によって分析した運転手挙動，特に腕の動きに関する分析の高度化と，新たにドライ

バの表情と事故発生原因の関係を解明する研究の成果を報告する。

目 次
第一部 安全運転カウンセリングシステムの構築

第 1 章 はじめに
1.1 研究背景
1.2 目的
第 2 章 本システムに使用した技術の紹介
2.1 PHP 言語
2.2 MySQL
2.3 JpGraph
第 3 章 システムの構築
3.1 システム内容
3.2 教育内容
3.2.1 急性ストレス3.2.2 慢性ストレス3.2.3 高齢者や女性ドライバー
3.2.3 ヒヤリハット項目検出
3.3 システムの構成
3.3.1 開発・実行環境
3.3.2 データベース構造
3.4 システムのフローチャート
3.5 システムの機能
3.4.1 ログイン機能
3.4.2 新規登録・変更機能

1

3.5.1 診断機能3.5.2 参照機能
第 4 章 システムの評価
4.1 評価方法
4.2 結果4.2.1 心理状態の理解度
4.2.2 教育効果と教育内容の理解度
4.2.3 システムの使い勝手
第 5 章 まとめと今後の課題
参考文献
付録

第二部 ドライブレコーダ映像を用いた運転手挙動の画像解析

第1章

序論

1.1 研究背景
1.2 従来研究1.3 本研究の目的
1.4 論文構成
第2章

システム概要

2.1 システムの全体像
2.2 単眼車載カメラ
第3章

手の移動軌跡取得

3.1 処理の流れ
3.2 ドライバ可動域推定
3.3 パーティクルフィルタ
3.4 手・頭部領域の分割
3.5 肩位置検出
3.6 HOG 特徴量
3.7 肘位置の推定
第4章

実験

4.1 実験と結果
第5章

考察

5.1 考察第6章

結論

6.1 おわりに
参考文献

2

第一章
安全運転カウンセリングシステムの構築

芝浦工業大学 春日伸予 繆 嘉傑 澤田東一

3

第1章
はじめに
1.1 研究背景
自動車事故による死亡者，死傷者は数年前から減少してきているものの，2009 年の自動車事故による死亡者は 5744 人，死傷者は 100 万人以上で，いまだ多くの人が自動車事故の犠牲になっている．

図 1.1 交通事故発生状況の推移

自動車事故の原因のほとんどはドライバーのミス，すなわちヒューマンエラーであり，これを防止することが事故削減につながる．これまで，ヒューマンエラー防止のためにさまざまな運転支援の技術開発や法規制が行われており，一定の効果を挙げている．しかし，大幅な事故削減に至っていない．今後，大幅な事故削減のためには，運転支援の開発や法規制だけでなく，ヒューマンエラーの背後にあってエラーを誘引する人間要因を明らかにし，その予防を行うことが必要である．特に，ドライバーの心理的要因は事故の危険性との関連が強いと考えられるため，その解析が必要である．
ハインリッヒの法則によると，1 件の死亡事故の背景には，29 件の軽症事故，30 件のヒヤリハ
ットが存在する．したがって，300 件のヒヤリハットをなくすことによってその延長線上にある事故の削減になるわけであるが，心理的要因はヒヤリハットのさらに背後に存在し，様々な危険の誘引となっていると考えられ，心理的側面からの安全対策はヒヤリハットや事故防止につながることになる．
また，現在のドライバー教育は，教育プログラムを有する機関において性格特性などの心理的特性は測定できるが，運転中の心理状態を測定することは不可能である．さらに，機関における教育
終了後はドライバーをフォローする体制がほとんどないのが実情あり，加えて，教育機関を利用す4

ることは時間的にも労力的にも負担がある．そのため，一般ドライバーで自主的に教育を受けるケースは非常に少ない．
以上のことから，大幅な事故削減のためには，ドライバーのエラーを誘引する心理的な要因を明らかにして，心理的な側面からの運転教育を強化することが重要である．そして教育方法は，多くの一般ドライバーが容易にかつ継続的に利用できることが必要となる．
そこで，心理的側面から安全運転教育を行う Web システム「安全運転カウンセリングシステム」
を構築することを目標として，昨年度プロジェクトが立ち上げられた．
昨年度の研究では，システムの教育内容となるデータを取得するため，ドライブレコーダーで録画したヒヤリハット場面を解析し，ヒヤリハットを誘引する心理的要因の解明を行った(1).その結果，慢性ストレスや苛立ち，焦り，心配事など心理的要因と事故の危険性との間に有意な関連があることが示された．

1 件の死亡事故29 件の重軽症事故

300 件のヒヤリハット

心理的要因

図 1.2 ハインリッヒの法則と心理的要因
1.2 目的
今年度は，先行研究「ヒヤリハット映像の心理的側面からの分析」の成果および，春日研究室の過去の研究成果をデータベース化して，「心理状態が運転に与える影響をドライバーに理解させ，アクセス者は現在どのような心理状態で，どのような危険要因が関係しやすいかを気付かせる」という理念のもと，心理的側面から安全運転教育を行える Web システムを構築する．
さらに，誰でも気軽に使用できるシステムにするため，パソコンとスマートフォンの両方からアクセスできる形式にする．これにより，本システムは労力や時間の負担が非常に軽いシステムになり，一般ドライバーも含めた幅広いドライバーの利用が可能となる．さらに，フィードバック教育の機能も備えるので，継続的な安全教育が可能となる．

5

第2章
本システムに使用した技術の紹介
2.1 PHP 言語
PHP（Hypertext Preprocessor）言語は Web サイト構築のために特化されたプログラム言語である．特徴としては大きく３つ挙げられる．
① コンパイルを必要としないスクリプト言語
コンパイル型言語では，ソースコードをそのまま利用するのではなく，コンパイラと呼ばれる翻訳ソフトを使って，事前に変換作業を行う．コンパイルを行うと機械語で書かれたファイルが作成され，実際に処理を実行するときには，その翻訳後のファイルを利用する．処理の内容を変更する
ためにソースコードを修正した場合にも，毎回コンパイルを行う．
反対にスクリプト型言語は，ソースコートをそのまま利用する．事前にコンパイル作業を行う必要はない．スクリプト型言語は，ソースコードを実行時に翻訳する．

図 2.1 コンパイル型とスクリプト型② 動的コンテンツ
Web 上で公開される文書の論理構造，レイアウト情報，および，他の文書やデータとのリンク関係などを定義するために用いられる標準的な書式である HTML は静的コンテンツとして出力する．
言い換えると，事前に作成しておいた HTML を加工することなく，そのまま出力する．
PHP を使用すると，HTML を動的コンテンツとして出力できる．事前に作成しておいた HTMLに対し，プログラムによる加工を行い，Web ブラウザごとに異なった結果を出力することができる．したがって，PHP を使用することでフォームを使って Web ブラウザからデータを渡したり，
データベースと連携してユーザーデータを表示したり，通常の HTML では不可能だったコンテンツを作成できる．
③ HTML 内へのプログラムの埋め込みが可能
HTML や PHP プログラムはサーバに設置されている．サーバに設置された HTML にアクセス
6

があった場合，HTML はそのままブラウザに表示される．これに対して，PHP プログラムは，サーバ側でプログラムが実行され，その結果が Web ブラウザに表示される．
静的コンテンツと同様，PHP スクリプトも HTML を Web ブラウザに送信する．ただし，このHTML はプログラムが何らかの処理を行った結果である．
PHP は HTML 内にプログラムを埋め込める希な言語である．この特長から，HTML 中の必要な箇所だけプログラムに置き換える事ができる．
以上の PHP 言語の特徴は今回構成する安全運転カウンセリングシステムに最も適しているプロ
グラム言語であると判断できたため，本研究では PHP 言語を使用する．

図 2.2 PHP と HTML のイメージ
2.2 データベース（MySQL）
MySQL は様々な Web アプリケージョンで使用されており，世界で最も普及している，高速性と堅牢性を追及したオープンソースデータベースある．
MySQL の最大の特徴は，検索の高速性に重点を絞った設計になっていることである．他の商用のデータベースに比べて処理の遅延につながる機構を大幅に省くことによって，大量のデータを高速に検索することができる．また，LINUX を含む UNIX 系の OS や Windows など多くのプラッ
トフォームに対応しており，Windows マシンでも手軽に使用できる．
2.3 グラフ生成ライブラリ（JpGraph）
JpGraph は，PHP4 と PHP5 に対応した高機能なグラフ生成用ライブラリである．PHP のオブ
ジェクト指向機能を最大限に活用しているため，描きたいグラフを少ないコードで簡単に作成できる．また，データベースと連動させ動的にグラフを描画することができる．さらに，20 種類以上のプロット形式をサポートしているため，あらゆるグラフを生成することができる．

7

第3章
システム構築3.1 システム内容
今回構築するシステムは２部構成になっている．
第１部はアクセス者のデータ入力とそれに対する教育内容のアウトプットである．今後これを診断システムと呼ぶ．診断システムでは，ドライバーが Web にアクセスしてインプットしたデータに対応してタイプ分類を行い，教育内容を提示する．
第２部は過去の記録の参照と全体での位置である．ここでは，アクセス者が二回目以降アクセスしたときに，過去の自分の記録を参照して自分のこれまでの軌跡がわかるようにする．さらに，ア
クセス者全体の結果とその中での自分の位置がわかるようにする．
3.2 教育内容
システム構築に際し，昨年度行われた先行研究である「ヒヤリハット映像の心理的側面からの分析」の成果と春日研究室の過去の研究成果を教育内容として組み入れた．以下に本システムにて採用した質問項目，並びに教育内容を示す．
3.2.1 急性ストレス
まずは表 3.2.1 に急性ストレスアンケートを示す．全３７項目中５個項目以上該当するものがあると，高い急性ストレス状態であると診断される．その場合，以下のアドバイスが表示される．
『あなたの過去 1 年間はストレスの高い 1 年間でした．そのため，その心理的，肉体的影響が現
在のあなたに表れているはずです．こうした状態で運転していると，集中力が切れやすく，また交通違反も犯しやすく，それによる事故も多いことが分かっているので注意しましょう．
』
表 3.2.1 急性ストレスアンケート
過去１年間にあなたに起こった出来事に○を付けてください．
1.

収入が大幅に減った

2.

支出が大幅にふえたり，大きな借金（ローンを含む）を抱えた

3.

入院したり，１ヶ月以上仕事や学校を休まなければならないような病気や怪我をした

4.

家族に大病（寝たきりやぼけを含む）や大怪我をしたものが出た

5.

自分や配偶者が妊娠した

6.

自分や配偶者が出産した

7.

正式に結婚した8.

自分や配偶者が流産した

9.

配偶者が死亡した8

10. 親や子が死亡した
11. 兄弟姉妹，親友が死亡した
12. 頼りにしていた人（家族を含む）と離ればなれになった，壊れたりした
13. 大事にしていた物がなくなったり（ペットが死んだり，いなくなったりを含む）
14. 引っ越した
15. 相手に大怪我を負わせたり，大きな損害を与えたりした
16. 訴訟沙汰が起こった
17. 家族が反社会的な行為（非行，万引，薬物，中毒など）をした
18. いざこざのため配偶者と別居するようになった
19. 解雇（学生の場合退学）されたり，事業に失敗した
20. 勤務時間や勤務内容に変化があった（配置転換の場合も含む）
21. 職務上，昇格した
22. 職務上，降格した
23. 退職した
24. 転勤や単身赴任を命ぜられた
25. 職場（学生の場合学校）や取引先の人と大きなトラブルがあった，退職，勤務時間や内容の変更等，仕事上の変化があった
26. 配偶者に就職（パートを含む）
27. 就職（転職）や入学（進級）などにより失敗した
28. 就職（入学）や転職（転学）があり，新たな生活が開始した
29. 親や教師など，立場が上の人にひどく怒られた30. いざこざ以外の理由（夫の長期出張や単身赴任など）で配偶者と別居するようになった
31. 離婚した
32. 親や子，兄弟姉妹が離婚した
33. 配偶者（恋人や婚約者を含む）ともめ事を起こした
34. 配偶者以外の家族ともめ事を起こした
35. 親戚や近所ともめ事を起こした
36. 子どもが自立（結婚を含む）するようになった
37. 新たな人が家族のメンバーとして同居（親の引き取りや出戻りの子どもなど）するようになった9

3.2.2 慢性ストレス
表 3.2.2 に慢性ストレスアンケートを示す．全３０項目中３個項目以上該当するものがあると，高い慢性ストレス状態であると診断される．
表 3.2.2 慢性ストレスアンケート
下記の事で悩んでいることがある場合，当てはまるものに○を付けて下さい．
1.

自分の将来のことについて

2.

家族の将来のことについて

3.

自分の健康（体力の衰えや目・耳の衰えを含む）について

4.

家族の健康について

5.

出費がかさんで負担であることについて

6.

借金やローンを抱えて苦しいことについて

7.

家族に対する責任が強すぎることについて

8.

仕事（家族，勉強等を含む）の量が多すぎて負担であることについて

9.

異性関係について

10. 職場（学生の場合は学校）や取引先の人とうまくやっていけないことについて
11. 家族とうまくやっていけないことについて
12. 親戚や友人とうまくやっていけないことについて
13. 近所とうまくやっていけないことについて
14. 家事や育児が大変であることについて
15. いつ解雇（学生の場合は退学）させられるかということについて
16. 退職後の生活について
17. 今の仕事（家事，勉強等を含む）が好きでないことについて
18. 他人に妨害されたり，足を引っ張られたりすることについて
19. 義理のつきあいが負担であることについて
20. 暇をもてあましがちであることについて
21. どうしてもやり遂げなければならないことがひかえていることについて
22. 自分の外見や容姿に自信が持てないことについて
23. 生活していく上で性差別（男性の場合も含む）を感じることについて
24. 不規則な生活が続いていることについて
25. まわりから期待が高すぎて負担を感じることについて

10

26. 陰口をたたかれたり，うわさ話をされたりするのがつらいことについて
27. 過去のことで深く後悔しつづけていることについて
28. 公害（大気汚染や近隣騒音など）があることについて
29. コンピューターなどの新しい機械についていけないことについて
30. 朝夕のラッシュや遠距離通勤（通学を含む）に負担を感じることについて

慢性ストレスが高い場合，以下のアドバイスが表示される．
『あなたは今，高い慢性ストレス状態にあります．こうした状態で運転していると，安全確認行
動を怠りやすくなりヒヤリハットを起こしやすいことがわかっています．特に注意しなければならない対象物に気づかないことによる危険が発生しやすくなります．また，心配事をかかえながら運転して，運転中に苛立ちや焦りを感じやすいので，そうした事のないよう，自分をコントロールしましょう．』
3.2.3 高齢者や女性ドライバー
アクセス者が高齢者や女性の場合は以下のアドバイスが表示される．
『高齢者や女性は交差点な
どまわりに他車や歩行者が多いところでは，危険に気づきにくいことがわかっています．そうした
混雑した場所では，特に注意して，そして落ち着いて運転しましょう．
』
3.2.4

ヒヤリハット項目検出

ヒヤリハット項目の検出では 5～6 問程度（選択肢によって問題数が変更）の問いに回答すると，各回答に対応した解説を提示する．以下にその質問項目と回答ごとの解説を示す．
Q1：あなたは乗車して何分以内にヒヤリハットが多く発生すると思いますか．
30 分以内：その通りです．私たちの研究結果によると，事故と密接な関わりを示すヒヤリハットは，運転開始から 30 分以内の間に全体の６０％以上が起きていることがわかっています．原因はまだはっき
りしていませんが，おそらくは運転に慣れるまでに必要な時間が関わっているものと考えられます．
30～60 分：私たちの研究結果によると，この時間に発生するヒヤリハットは，全体の 25％ほどでした．最も多いのは運転開始から 30 分以内で，に全体の６０％以上のヒヤリハットが起きています．だか
らと言って乗車後 30～60 分が安全な時間帯という訳ではありません．30 分を過ぎると集中力が低
下しやすくなるので，この時間帯も注意して運転しましょう．
60 分以上：私たちの研究結果によると，この時間に発生するヒヤリハットは，全体の 13％ほどです．最も多いのは運転開始から 30 分以内で，全体の６０％以上のヒヤリハットが起きています．だからと言って乗車後 60 分以上が安全という訳ではありません．長く運転すれば集中力が低下したり，ボーとしたり，疲労が蓄積されます．この時間帯も注意して運転しましょう．

11

図 3.2.4.1 ヒヤリハット発生時間

最近起きたヒヤリハットについてお聞きします．(何件も起きた場合は，最も多い状況をお答えく
ださい．)
Q2：ヒヤリハットが起きた時間帯はいつですか．
15 分以内：私たちの研究結果によると，全体の 33％のヒヤリハットがこの時間帯で起きていました．あな
たはご存じでしたか？また，運転開始から 30 分以内の間に全体の 60％以上のヒヤリハットが起きています．
このヒヤリハットは，あなたが漫然状態でないにも関わらず，起きていることが多いです．発生
状況としては，交差点でのものが多く，ヒヤリハットの種類としては，他車の飛び出しや自車の車線変更によるヒヤリハットが多いです．
※漫然：ぼんやりとしている
15～30 分：私たちの研究結果によると，全体の 28％のヒヤリハットがこの時間帯で起きていました．あな
たはご存じでしたか？また，運転開始から 30 分以内の間にヒヤリハット全体の 60％以上が起きています．
このヒヤリハットは，あなたが漫然状態でないにも関わらず，起きていることが多いです．発生
状況としては，交差点でのものが多く，ヒヤリハットの種類としては，他車の飛び出しや自車の車線変更によるヒヤリハットが多いです．
30～45 分：私たちの研究結果によると，全体の 17％のヒヤリハットがこの時間帯で起きています．
このヒヤリハットは，あなたが漫然状態でないにも関わらず，起きていることが多いです．発生

12

場所としては，カーブでのものが多く，ヒヤリハットの種類としては，道路状況（赤信号など）や他車の車線変更によるヒヤリハットが多いです．
45～60 分：私たちの研究結果によると，全体の 9％のヒヤリハットがこの時間帯で起きています．たったの9％なんて思ってはいけません．このヒヤリハットには他と違う大きな特徴があります．それは漫然(ボーッとしている)状態になりやすく，さらに居眠りしやすいということです．
漫然状態や低覚醒状態(眠い状態)になると，安全確認を怠り，結果的に相手の動きに対して判断ミスをしてヒヤリハットを起こす傾向があります．ここでのヒヤリハット発生場所としては，カーブでのものが多く，ヒヤリハットの種類としては，道路状況（赤信号など）や他車の車線変更によるヒヤリハットが多いです．
60 分以上：私たちの研究結果によると，全体の 13％のヒヤリハットがこの時間帯で起きています．このヒヤリハットは，あなたが漫然(ボーッとしている)状態でないにも関わらず起きていることが多いです．発生場所としては，カーブでのものが多く，ヒヤリハットの種類としては，道路状況（赤信号など）や他車の車線変更によるヒヤリハットが多いです．
わからない：
ヒヤリハットは発生時間帯によって起こりやすい種類や原因が異なります．ヒヤリハットの発生
時間も気にしてみましょう．自分の傾向とヒヤリハットの防止にきっと役立ちます．

図 3.2.4.2 ヒヤリハット発生時間と漫然状態

13

図 3.2.4.3 ヒヤリハット発生時間とヒヤリハットを起こした状況

図 3.2.4.4 ヒヤリハット発生時間とヒヤリハットの種類

14

Q3：ヒヤリハットが起きたのはどんな状況
左折時：
左折した時のヒヤリハットは相手を認識していないために起こることが多いです．あなたの場合はどうでしたか．落ち着いて回りを見わたし，他車や歩行者を見逃さないようにしましょう．
車線変更時：
車線変更時のヒヤリハットは相手を認識していないために起こることが多いです．落ち着いて回りを見わたし，ゆとりを持って車線変更しましょう．
直進時：
その状況でのヒヤリハットは相手を認識していたにも関わらず起きてしまうケースが多いです．
相手の動きを良く見て運転しましょう．
その他：
その状況でのヒヤリハットは様々な理由によって起こるので，常に安全確認を怠らないようにしましょう．

図 3.2.4.5 車の挙動と認知Q4：ヒヤリハットを立て続けに起こしたことはありますか．
はい：
ヒヤリハットが起きた直後は動揺して，立て続けにヒヤリハットを起こしやすい傾向があります．
ヒヤリハットが起きたら気分を落ち着かせてから運転しましょう．
いいえ：
今回は起きていないようですが，実はヒヤリハットが起きた後は動揺して，立て続けにヒヤリハ
ットを起こしやすい傾向があります．ヒヤリハットが起きたら気分を落ち着かせてから運転しましょう．

15

Q5：運転中に眠気を感じたこと，または居眠り運転をしたことはありますか．
はい：
私たちの研究結果によると，運転開始後 45～60 分は最も居眠りしやすく，そうした集中力がなくなった状態のときに安全確認を怠り，ヒヤリハットを起こす傾向があります．さらに，相手に気づいていても，相手の動きを読み誤って，ヒヤリハットを起こす傾向があります．グラフからもわかるように，特に他車の飛び出しに対するヒヤリハットが多いです．

図 3.2.4.6 安全確認不十分とヒヤリハット種類の傾向

図 3.2.4.7 ヒヤリハット発生時間と眠気

16

Q6：いつもの運転時間はどのぐらいですか．
15 分以内：眠気が最も高まるのは運転開始から 45～60 分の間という結果が過去の研究からわかっています．
いつもの短時間運転で，眠気を感じないからといって油断してはいけません．長時間に及ぶ運転をする際にはこまめに休憩を取り，眠気を飛ばしましょう．
また，眠気を感じていないこの時間帯はヒヤリハットの発生が最も多い時間帯です．心と時間に余裕を持って安全運転を心掛けましょう．
15～30 分：眠気が最も高まるのは運転開始後，45～60 分の間ということが研究の結果わかっています．いつもの短時間運転で，眠気を感じないからといって油断してはいけません．長時間に及ぶ運転をする際にはこまめに休憩を取り，眠気を飛ばしましょう．
また，眠気を感じていないこの時間帯はヒヤリハットの発生が最も多い時間帯です．心と時間に余裕を持って安全運転を心掛けましょう．
30～45 分：いつもの運転では，眠気を感じる前に目的地に到着する事が多いかもしれません．でも，油断してはいけません．眠気が最も高まるのは運転開始から 45～60 分の間という結果が過去の研究からわかっています．もう少し運転時間が延びると，眠気は一気に襲ってきます．長時間に及ぶ運転をする際にはこまめに休憩を取り，集中力を切らさないようにしましょう．
45～60 分 ＆ 60 分以上：
この選択肢を選んだあなたは眠気の多発する時間帯までいつも運転していることになります．その時間に眠気が起きやすいことに気づき，いつも体調を整えて眠気が襲ってこないように努力している人は優良ドライバーです．しかし，多くの人はこの時間，眠気に気づかず，ボーッと運転した
り，時には居眠りをしたりしているのです．
つまり，運転を始めてから 45～60 分後は眠気が最も高くなり，そのため通常時と比べて安全確認を行わず，相手の動きに対して判断ミスをしてヒヤリハットや飛び出しに対するヒヤリハットや事故を起こしやすいのです．長時間に及ぶ運転をする際にはこまめに休憩を取り，集中力を切らさないようにしましょう．
3.2.5

ヒヤリハットアドバイス

今回のヒヤリハットのタイプ分けはアクセス者に素早く今の自分や過去の自分の状態を知ってもらうために製作した．診断を受け終わった後や過去の結果表示においてもタイプ分けを見ること
で，以前の解説やアドバイスを忘れても，フィードバック教育ができるようになっている．
以下にヒヤリハットのタイプ分けに対するアドバイスを示す．なお，以下の表は左側が Q2：ヒヤ
リハットが起きた時間帯はいつですかと Q3：ヒヤリハットが起きたのはどんな状況の選択肢で右側がタイプ分類となっている．
表 3.2.5.1 ヒヤリハット発生時間と状況１
あなたの最近のヒヤリハットはさまざまな

ヒヤリハットが起きた時間：わからない

原因によって引き起こされている事が多い
ヒヤリハットが起きた状況：その他

ようです．

17

アドバイス：
現状でのヒヤリハットは様々な理由によって起こるので，常に安全確認を怠らないようにしましょう．また，ヒヤリハットは発生時間帯によって起こりやすい種類や原因が異なります．ヒヤリハ
ットの発生時間も気にしてみましょう．自分の傾向とヒヤリハットの防止にきっと役立ちます．
表 3.2.5.2 ヒヤリハット発生時間と状況２
ヒヤリハットが起きた時間：わからない

あなたの最近のヒヤリハットは{左折時，左折時
ヒヤリハットが起きた状況：

車線変更時
直進時

車線変更時，直進時}で起きている事が多いようです．

アドバイス：
左折時：
このタイプと診断されたあなたは相手を認識していないためにヒヤリハットが起こることが多いです．あなたの場合はどうでしたか．落ち着いて回りを見わたし，他車や歩行者を見逃さないよ
うにしましょう．
車線変更時：
このタイプと診断されたあなた相手を認識していないためにヒヤリハットが起こることが多いです．あなたの場合はどうでしたか．落ち着いて回りを見わたし，ゆとりを持って車線変更しましょう．
直進時：
このタイプと診断されたあなたは相手を認識していたにも関わらず，ヒヤリハットが起きてしまうケースが多いです．あなたの場合はどうでしたか．相手の動きを良く見て運転しましょう．
 以上の 3 項目のいずれかを表示した後に以下の文を追加する．
また，ヒヤリハットは発生時間帯によって起こりやすい種類や原因が異なります．ヒヤリハットの発生時間も気にしてみましょう．自分の傾向とヒヤリハットの防止にきっと役立ちます．
表 3.2.5.3 ヒヤリハット発生時間と状況３
15 分以内あなたの最近のヒヤリハットは運転開始

15～30 分ヒヤリハットが起きた時間：

から{15 分以内，15～30 分，30～45 分，

30～45 分45～60 分，60 分以上}にさまざまな原因に45～60 分よって引き起こされている事が多いよう

60 分以上です．

ヒヤリハットが起きた状況：その他
アドバイス：
15 分以内：このタイプと診断されたあなたは，漫然状態でないにも関わらず，ヒヤリハットが起きていることが多いです．発生状況としては，交差点でのものが多く，ヒヤリハットの種類としては，他車の飛び出しや自車の車線変更によるヒヤリハットが多いです．
18

15～30 分：
このタイプと診断されたあなたは，漫然状態でないにも関わらず，ヒヤリハットが起きていることが多いです．発生状況としては，交差点でのものが多く，ヒヤリハットの種類としては，他車の飛び出しや自車の車線変更によるヒヤリハットが多いです．
30～45 分：このタイプと診断されたあなたは，漫然状態でないにも関わらず，ヒヤリハットが起きていることが多いです．発生場所としては，カーブでのものが多く，ヒヤリハットの種類としては，道路状
況（赤信号など）や他車の車線変更によるヒヤリハットが多いです．
45～60 分：このタイプと診断されたあなたは，運転中に漫然(ボーッとしている)状態になりやすく，さらに居眠りしやすいということです．
漫然状態や低覚醒状態になると，安全確認を怠り，結果的に相手の動きに対して判断ミスをしてヒヤリハットを起こす傾向があります．ここでのヒヤリハット発生場所としては，カーブでのものが多く，ヒヤリハットの種類としては，道路状況（赤信号など）や他車の車線変更によるヒヤリハ
ットが多いです．
60 分以上：このタイプと診断されたあなたは，漫然状態でないにも関わらず，ヒヤリハットが起きていることが多いです．発生場所としては，カーブでのものが多く，ヒヤリハットの種類としては，道路状
況（赤信号など）や他車の車線変更によるヒヤリハットが多いです．
 以上の 5 項目のいずれかを表示した後に以下の文を追加する．
ここにあげたのは特に起こりやすい状況です．もちろんこれ以外の状況や理由でもヒヤリハット
や事故は起きていますので，常に安全確認を怠らないことが大切です．
表 3.2.5.4 ヒヤリハット発生時間と状況４
15 分以内15～30 分ヒヤリハットが起きた時間：

あなたの最近のヒヤリハットは運転開始

30～45 分から{15 分以内，15～30 分，30～45 分，

45～60 分45～60 分，60 分以上}に{左折時，車線変60 分以上更時，直進時}で起きている事が多いよう

左折時
ヒヤリハットが起きた状況：

車線変更時

です．

直進時
アドバイス：
15 分以内：このタイプと診断されたあなたは，漫然状態でないにも関わらず，ヒヤリハットが起きていることが多いです．発生状況としては，交差点でのものが多く，ヒヤリハットの種類としては，他車の飛び出しや自車の車線変更によるヒヤリハットが多いです．
15～30 分：このタイプと診断されたあなたは，漫然状態でないにも関わらず，ヒヤリハットが起きているこ19

とが多いです．発生状況としては，交差点でのものが多く，ヒヤリハットの種類としては，他車の飛び出しや自車の車線変更によるヒヤリハットが多いです．
30～45 分：このタイプと診断されたあなたは，漫然状態でないにも関わらず，ヒヤリハットが起きていることが多いです．発生場所としては，カーブでのものが多く，ヒヤリハットの種類としては，道路状
況（赤信号など）や他車の車線変更によるヒヤリハットが多いです．
45～60 分：このタイプと診断されたあなたは，運転中に漫然(ボーッとしている)状態になりやすく，さらに居眠りしやすいということです．
漫然状態や低覚醒状態になると，安全確認を怠り，結果的に相手の動きに対して判断ミスをしてヒヤリハットを起こす傾向があります．ここでのヒヤリハット発生場所としては，カーブでのものが多く，ヒヤリハットの種類としては，道路状況（赤信号など）や他車の車線変更によるヒヤリハ
ットが多いです．
60 分以上：このタイプと診断されたあなたは，漫然状態でないにも関わらず，ヒヤリハットが起きていることが多いです．発生場所としては，カーブでのものが多く，ヒヤリハットの種類としては，道路状
況（赤信号など）や他車の車線変更によるヒヤリハットが多いです．
 以上の 5 項目と以下の 3 項目を組み合わせる．
左折時：
また，相手を認識していないためにヒヤリハットが起こることが多いです．あなたの場合はどうでしたか．落ち着いて回りを見わたし，他車や歩行者を見逃さないようにしましょう．
車線変更時：
また，相手を認識していないためにヒヤリハットが起こることが多いです．あなたの場合はどうでしたか．落ち着いて回りを見わたし，ゆとりを持って車線変更しましょう．
直進時：
また，相手を認識していたにも関わらず，ヒヤリハットが起きてしまうケースが多いです．あな
たの場合はどうでしたか．相手の動きを良く見て運転しましょう．
3.3 システムの構成
本システムの構成を図 3.3 に示す．①ユーザーがログイン，新規登録・変更，診断，過去や全体の参照を行うと，②クライアントサイドの PHP がそれを検出して，サーバサイドに対して HTTP
リクエストを POST で送り非同期通信を行う．パラメータとしてユーザーの操作から取得したデータも同時に送信する．③データベースなどで処理した後改めてクライアント側の PHP に送り返す．④データの受信が完了次第 PHP 言語から HTML が生成され，スタイルシートと共に Web 表
示画面を作成し，ブラウザにて表示する．
なお，本 Web システムでは，個人を特定できるデータは一切扱わない．したがって，個人情報に関する難しい問題は出てこない．

20

クライアントサイド

Web ブラウザ

HTML
CSSHTML を生成
データ埋め込み

④ 表示

PHP
データ処理

① キーボードやマウスによる入力

②

③

テキスト

HTTP
POST

サーバサイド
PHP

SQL 文

データベース

MySQL

DB 操作

データ

データ加工

図 3.3 システムの構成図
3.3.1 開発・実行環境
開発に使用した技術とツールを以下の表に示す．
表 3.3.1.1 開発に使用した技術とツール
技術名使用したツール

PHP 言語eclipse 3.2.0

HTML，CSS

Eclipse HTML Editor Plugin 2.0.7

Web サーバ

Apache 2.2.17

データベースMySQL 5.521

本システムはレンタルサーバを利用して運営する．サーバはファーストサーバ株式会社のビス・シリーズ，バリューコースを使用する．以下にその詳細を示す．
表 3.3.1.2 実行環境のスペック
サーバ OSLinux 2.6

WEB サーバ

Apache 2.2.11

sendmail

8.14.3

Perl

5.8 系

PHP

5.2.x

データベースMySQL 5 / SQLite 3

apache モジュール

標準インストール

ディスク構成RAID10＋バックアップ

ディスク容量10GB

HA（信頼性）

電源，FAN の冗長化品質保証（稼働率）

100%

3.3.2 データベース構造
データベース構造は以下の表の通りである．
表 3.3.2.1 ID_PW データベース構造
フィールド

種別

照合順序

デフォルト値

備考

namevarchar(12)utf8_general_ci

NULL

ニックネームID

varchar(12)utf8_general_ci

NULL

ID 番号

PW

varchar(12)utf8_general_ci

NULL

パスワード

sex

int(1)

NULL

性別

age

int(2)NULL

年齢

questionvarchar(255)

utf8_general_ci

NULL

秘密の質問

answervarchar(255)

utf8_general_ci

NULL

秘密の答え

22

表 3.3.2.2 answer データベース構造
フィールド

種別

照合順序

デフォルト値

備考

ID

varchar(12)utf8_general_ci

NULL

ID 番号

times

int(3)

NULL

診断回数

day

varchar(64)

NULL

診断日

Q1～Q38int(11)

NULL

急性ストレスの回答

Q41～Q71

int(11)

NULL

慢性ストレスの回答

Q81

varchar(255)

utf8_general_ci

NULL

ヒヤリハット A1

Q82

varchar(255)

utf8_general_ci

NULL

ヒヤリハット A2

Q83

varchar(255)

utf8_general_ci

NULL

ヒヤリハット A3

Q84

varchar(255)

utf8_general_ci

NULL

ヒヤリハット A4

Q85

varchar(255)

utf8_general_ci

NULL

ヒヤリハット A5

Q86varchar(255)

utf8_general_ci

NULL

ヒヤリハット A6

Q87varchar(1000)

utf8_general_ci

NULL

アンケート結果

Q88

varchar(1000)

utf8_general_ci

NULL

アンケート結果

utf8_general_ci

表 3.3.2.3 all_graph データベース構造
フィールド

種別

照合順序

デフォルト値

備考

ID

varchar(12)utf8_general_ci

NULL

ID 番号

Q38

decimal(6,3)

NULL

慢性 SP の合計値

Q71

decimal(6,3)

NULL

慢性 SP の合計値

sum

decimal(6,3)

NULL

SP の合計値※SP はストレスポイントを表す

3.4 システムのフローチャート
本システムのプログラムはログインプログラム，登録・変更プログラム，診断プログラムならびに参照プログラムの四つのプログラムからなっている．システムの流れとそれぞれのプログラムの役割を次頁以降の図3.4.1から図3.4.21に示す．図のフローチャートのような流れでシミュレーショ
ンを行うものとする．図3.4.1および図3.4.21はログインプログラムについて，図3.4.2，図3.4.3および図3.4.20は登録・変更プログラムについて，図3.4.4から図3.4.16は診断プログラムについて，図3.4.17から図3.4.19までは参照プログラムについて，それぞれプログラム実行の流れを記す．

23

ページにアクセス

ログイン画面

YES

初めてのア
クセス
NO

ID,PWの入力
ID もPWも忘れた

YES

PWを忘れた

id_pw
データベース
と一致

NO

YES
エラーメッセージ

新規登録

PW再発行

メインページ

図 3.4.1 ログインシステム

24

新規登録

必要事項の入力

入力の有無
NO
YES

エラーチェック

エラー
YES
NO

確認画面

変更
YES
NO

id_pwデータベースに書き込み

メインページ

図 3.4.2 新規登録

25

PW再発行

ID入力
秘密の答えを
入力

入力の有無
NO
入力の有無

YES

NO
YES

id_pwデータ
ベースと参照id_pwデータ
ベースと参照

IDが存在
NO

答えが一致
NO

YES
YES
秘密の質問
を提示

PWを提示

ログイン画面図 3.4.3 PW 再発行システム

26

診断

急性ストレス項目の選択

確認画面

エラーチェック

エラー
YES
NO
慢性ストレス項目の選択

確認画面

エラーチェック

エラー
YES
NO

ヒヤリ
ハット
Q1

図 3.4.4 診断プログラム 1

27

ヒヤリ
ハット
Q1

ボタン選択

30分以内

A1：
30分以内

30分～60分

A1：
30分～60分

60分以上

A1：
60分以上

Q2

ボタン選択

15分以内

15分～30分

30分～45分

45分～60分

60分以上

わからない

A2：
15分以内

A2：
15分～30分

A2：
30分～45分

A2：
45分～60分

A2：
60分以上

A2：
わかならい

Q3

図 3.4.5 診断プログラム 2

28

Q3

ボタン選択

左折時

車線変更時

直進時

その他

A3：
左折時

A3：
車線変更時

A3：
直進時

A3：
その他

Q4

ボタン選択

はい

いいえ

A4：
はい

A4：
いいえ

Q5

図 3.4.6 診断プログラム 3

29

Q5

はい

ボタン選択

いいえ

A５：
はい

A５：
いいえ

Q６

ボタン選択

15分以内

15分～30分

A６：
15分以内

A６：
15分～30分

30分～45分

A６：
30分～45分

アンケート
（任意）

図 3.4.7 診断プログラム 430

45分～60分

60分以上

A６：
45分～60分

A６：
60分以上アンケート
（任意）

スキップ

ボタン選択

回答

確認画面

急性＆慢性ストレスポイントを合計

ID、診断回数、日時、ストレス合計値 、診断の全回答を answerデータベースに書き込み診断が初めてYES

NO

ID、急性＆慢性ストレスポイントのそれぞれの合計値、２つの合算値
をall_graphデータベースに追加

ID、急性＆慢性ストレスポイントのそれぞれの合計値、２つの合算値
をall_graphデータベースで更新

動的操作

図 3.4.8 診断プログラム 5

31

動的操作

A

C

B

D

メインページ

図 3.4.9 診断プログラム 6

A

B

急性ストレスポイント

慢性ストレスポイント

Q38＜0.5Q38≧0.5

急性ストレス：小Q71＜0.5

急性ストレス：大Q71≧0.5

慢性ストレス：小

結果画面表示慢性ストレス：大

結果画面表示図 3.4.10 診断プログラム 7

図 3.4.11 診断プログラム 8

32

C

Q2

わからない以外

わからない

E
Q3

その他

その他以外

ヒヤリハット
タイプ分類

表示変更

Q3

左折時

直進時

ヒヤリハットタイプ（左折時）

ヒヤリハットタイプ
（直進時）

車線変更時

ヒヤリハットタイプ（車線変更時）G

結果画面表示図 3.4.12 診断プログラム 9

33

I

D

女性

YES

NO

６５歳以上

６５歳以上

YES

NO

YES

NO

アドバイス（高齢女性ドライバー）アドバイス（高齢ドライバー）アドバイス（高齢ドライバー）

アドバイス無し

結果画面表示図 3.4.13 診断プログラム 10

34

E

表示変更

その他

Q3

その他以外

F
Q2

15分以内

15分～30分

ヒヤリハットタイプ（15分以内）ヒヤリハットタイプ（15分～30分）

30分～45分

ヒヤリハットタイプ（30分～45分）

45分～60分

ヒヤリハットタイプ（45分～60分）

G

図 3.4.14 診断プログラム 11

35

60分以上

ヒヤリハットタイプ（60分以内）

F

表示変更

Q2

15分以内

15分～30分

H

H

30分～45分

45分～60分

H

H

図 3.4.15 診断プログラム 12

H

Q3

左折時

ヒヤリハットタイプ（時間+左折時）

直進時

ヒヤリハットタイプ（時間+直進時）

車線変更時

ヒヤリハットタイプ（時間+車線変更時）

I
図 3.4.16 診断プログラム 13

36

60分以上

H

過去の結果参照

一回以上診断
を受けた

NO

YES

answerデータベース
から読み込み急性＆慢性ストレスポイントの合計値を
SESSION値に格納

JpGraphによる棒グラフの作成

アクセス回数分の表を作成

詳細をクリッ ク
YES
NO

画面表示

メインページ

詳細画面

図 3.4.17 過去の結果表示

37

詳細画面

第何回目を指定answerデータベース
から回答を読み込む

動的操作

A

B

C

メインページ

図 3.4.18 詳細画面

38D

プロフィール変更

id_pwデータベース
の読み込み

全体の順位

必要事項の入力

all_graph
データベースから読み取り

入力の有無
NO

ストレスポイントの補正

YES

エラーチェック

全アクセス者の中での順位を表示エラー
YES
NO

JpGraphによる分布図の作成
確認画面

画面表示
変更
YES
NO

メインページ

id_pwデータベースに書き込み

メインページ

図 3.4.19 全体の順位

図 3.4.20 プロフィールの変更

39

ログアウトSESSION値を全てクリア

ログイン画面図 3.4.21 ログアウトシステム

3.5 システムの機能
以下に本システムの主な機能を紹介する．なお，実際のプログラムは付録に示す．
3.5.1 ログイン機能
二回目以降のアクセス時にユーザーの識別のために用いる．アクセス者は登録したIDとパスワー
ドを入力し，正しくログインできた場合はメインページに移行する．IDとパスワードが登録したデータベースと一致しない場合はエラーメッセージを提示し再度ログインをする．

図3.5.1.1 ログイン画面

図3.5.1.2 メインページ

40

3.5.2 新規登録・変更機能
初めて本システムにアクセスする際は新規登録を行う．ここではニックネーム，ID番号，パスワ
ード，性別，年齢とパスワードを忘れたときにパスワードを再提示できるための秘密の質問と答えを入力する．エラーチェックを行い問題なく登録が完了するとメインページに移行する．(図3.5.2.1)
変更機能ではプロフィールのID番号以外の項目に対し変更が可能となっており，ユーザーの年齢増加などにも対応できる．(図3.5.2.2)

図3.5.2.1 新規登録画面

図3.5.2.2 プロフィール変更画面
41

3.5.3 診断機能
診断機能では急性ストレス，慢性ストレス，ヒヤリハット項目の順に，検出する．ストレス項目についてはいずれもWebサイトの選択ボタンであるラジオボタンにて“はい”と“いいえ”の二択から選んでもらう．なお，選択の煩わしさを軽減するために選択肢の初期値はすべて“いいえ”に設定してある．(図3.5.3.1)
ヒヤリハット項目は送信ボタンの‘value’に文字列を入力し，ボタンに選択肢を表示させ，それを選んでもらう．(図3.5.3.2) 診断がすべて終わるとデータベースに書き込んで後結果を提示する．(図3.5.3.3)

図3.5.3.1 ストレス項目選択画面

図3.5.3.2 ヒヤリハット項目選択画面

42

図3.5.3.3 診断結果画面
3.5.4 参照機能
パスワード参照機能はIDを入力した後，データベースに存在の有無を確認し，既存の場合のみ秘密の質問を提示する．その後，秘密の答えを入力し，データベースと一致した場合のみパスワードを再提示する．(図3.5.4.1)

図3.5.4.1 PW参照画面
過去の記録参照はデータベースから診断回数と診断日時，ストレスポイントを取り出し，視覚的に分かりやすい棒グラフをJpGraphにて描く．(図3.5.4.2)
また，グラフ内の詳細ボタンを押すと各回のストレスポイントやヒヤリハットデータ，診断で答えた各質問に対する回答が表示される．(図3.5.4.3)

43

図3.5.4.2 過去の結果画面

44図3.5.4.3 詳細画面
全体での安全度順位の参照はすべてのユーザーの最後に受けた診断の結果を対象として行われる．
順位付けの方法は，後述するストレスポイントの計算方法にて，急性ストレスポイントと慢性スト
レスポイントを換算し，その合計値を昇順に並べた時の順番で決まる．なお，合計値が同じユーザーが現れた場合，アクセス者の順位は同じ合計値になったグループの最初の番号が適応される．(図3.5.4.4)
タイプ分類についても同様の計算方法で換算を行った後，急性ストレスポイントをX軸（最大値：
5 最小値：-5），慢性ストレスポイントをY軸（最大値：3 最小値：-3）に取った2次元座標系にJpGraphを用いてプロットする．タイプ分類は急性ストレスや慢性ストレス状態であるか否かで行われる．(図3.5.4.5)45



ストレスポイントの計算方法
急性ストレスポイントと慢性ストレスポイントは“はい”が一つ増えるにつれ１ポイントずつ足される．その合計値は急性ストレスポイントがQ38，慢性ストレスポイントがQ71で表される．
急性ストレスポイントが5点より小さいとき，すなわちQ38＜5のときQ38は以下の式で換算される．
Q38＝Q38－4.5
急性ストレスポイントが5点以上とき，すなわちQ38≧5のときQ38は以下の式で換算される．
Q38＝(Q38－5)×0.125＋50.05
慢性ストレスポイントが3点より小さいとき，すなわちQ71＜3のときQ71は以下の式で換算される．
Q71＝Q71－2.5
慢性ストレスポイントが3点以上とき，すなわちQ71≧3のときQ71は以下の式で換算される．
Q71＝(Q71－3)×0.074＋50.05

図3.5.4.4 安全度順位画面

46

図3.5.4.5 タイプ分け

47

第4章
システムの評価
4.1 評価方法完成したシステムの評価を行うため，20 代～60 代の男女 40 名にシステムを使用してもらい，
使用後にアンケート*調査を行った．調査内容は，心理状態の理解度，教育効果と教育内容の理解度，システムの使い勝手の３点に関するものである．この調査により，構築したシステムが本研究の目的とする以下の３項目を満たしているシステムであるか否かを検証した．
1) 心理状態が運転に与える影響を理解出来たか
2) 現在の心理状態で発生しやすい危険に気付くことが出来たか
3) 負担のない手軽なシステムであるか※アンケート用紙は付録に示す．
評価は一般利用者が Web 検索してからの利用を想定する．そのため，被験者にはあえてシステ
ムについての説明を行わないこととした．
評価手順を以下に示す．
① 新規登録を行う② 診断を受ける③ 過去の結果参照を確認する④ 全体での順位を閲覧する⑤ アンケートを行う
4.2 結果以下に各質問項目の集計結果と分析並びに考察をまとめた．
4.2.1 心理状態の理解度
図 4.2.1 に“自分の現在の心理状態を理解できましたか？”，図 4.2.2 に“心理状態は運転に影響を与えることが理解できましたか？”のアンケート結果をそれぞれ示す．以上の２項目の結果より，心理状態の理解度に関する質問項目については 90％以上の方が理解できているという高い評価を得られたことが分かる．

48

自分の現在の心理状態を理解できましたか？
0%
5%

45%

理解できた
おおよそ理解できた
あまり理解できなかった
理解できなかった50%

図 4.2.1 現在の心理状態の理解度

心理状態は運転に影響を与えることが理解できましたか？
3%

0%

理解できた

42%

55%

おおよそ理解できた
あまり理解できなかった
理解できなかった

図 4.2.2 心理状態と運転への影響の理解度

49

4.2.2 教育効果と教育内容の理解度
図 4.2.3 に“利用後，安全運転をしようという気持ちになりましたか？”，図 4.2.4 に“本システムではじめて知ったことはありましたか？”，図 4.2.5 に“ヒヤリハットタイプに関するアドバイス
は役に立ちましたか？”のアンケート結果をそれぞれ示す．なお，今回の教育効果はシステム利用
後に安全運転する気持ちになったか否かで判断した．
以上の３項目の結果より，教育効果と教育内容の理解度に関する質問項目については 90％以上が教育効果を実感し，内容を理解できているという高い評価を得られたことが分かる．

利用後，安全運転をしようという気持ちになりましたか？
3%
7%

なった
多少はなった35%

55%

図 4.2.3 安全運転教育の効果

50あまりならなかった
ならなかった本システムではじめて知ったことはありましたか？
5%

23%

40%

3つ以上あった
2つ以上あった
1つ以上あった
全て知っていた32%

図 4.2.4 教育内容の新規性

ヒヤリハットタイプに関するアドバイスは役に立ちましたか？
0%
8%

40%

役に立った
やや役に立った
あまり役に立たなかった
役に立たなかった52%

図 4.2.5 アドバイスの効果

51

4.2.3 システムの使い勝手
図 4.2.6 に“システムの利用方法の中で，わかり難い点がありましたか？”，図 4.2.7 に“本システムは手軽で誰でも簡単に利用できると思いますか？”，図 4.2.8 に“またシステムを使ってみたい(診断を受けてみたい)と思いますか？”のアンケート結果をそれぞれ示す．
アンケート結果より “システムの利用方法の中で，わかり難い点がありましたか？” という項
目は 90％以上が「ない」「あまりない」という回答をしており，高い評価を得られた．

システムの利用方法の中で，わかり難い点がありましたか？
8%

0%

42%

50%

なかった
あまりなかった
多少あった
あった

図 4.2.6 システムの分かり易さ“本システムは手軽で誰でも簡単に利用できると思いますか？”という項目では 80％以上から高い評価を得た．
‘あまり思わない’と回答した対象者に，さらにアンケートを行ったところ以下の意見が得られた．
① ログイン機能が煩わしい② 新規登録で ID と PW を取得した後に再度ログインするのが面倒本システムはフィードバック教育も目的としているため，一つ目のログイン機能そのものが煩わしいと感じるという意見に対応することは不可能であった．二つ目の「再ログインが面倒」点に関しては，プログラムを一部変更することで対応した．変更のフローチャートは図 4.2.7.1，図 4.2.7.2に示す．
システムを改良した後に，被験者に再度使用してもらったところ，高い評価を得ることが出来た．

52

本システムは手軽で誰でも簡単に利用できると思いますか？
0%
18%

思う
やや思う

47%

あまり思わない
思わない

35%

図 4.2.7 システムの手軽さ

新規登録

id_pwデータベース
に書き込み

新規登録

ログインページ

id_pwデータベースに書き込み入力したID,PW が
id_pwデータベースと一致

メインページ

メインページ

図 4.2.7.1 変更前フローチャート

図 4.2.7.2 変更後フローチャート53以上のように，本システムは全般的に良い評価を得ていたが，一方で，図 4.8 に示すように“また本システムを使用してみたいと思いますか？”という質問には，30％弱が‘あまり思わない’と回答していた．これは，システムに“面白さ”が少ないためであると推測される．
今後，診断回数によって画面表示を変えたり，Web 内で表彰するプログラムを追加したり，動く画面にすることで，より多くの人が繰り返しアクセスしたくなるシステムになると考えられる．

またシステムを使ってみたい(診断を受けてみたい)と思いますか？
3%

27%

15%
思う
やや思う
あまり思わない
思わない

55%

図 4.2.8 再アクセス期待度

54

第5章
まとめと今後の課題
本研究では，心理状態が運転に与える影響を重視している安全運転教育システムがない事と，教育を受けるにあたり労力や時間の負担が大きい事に注目した．これらの問題点を解消すべく“心理状態が運転に与える影響をドライバーに理解させ，アクセス者は現在どのような心理状態で，どのような危険要因が関係しやすいかを気付かせる”という研究理念を掲げ，パソコンとスマートフォンの両方からアクセスできる Web サイトシステムの構築を行った．PHP 言語によるプログラミン
グを行うことでシステムを動的に動かすことができ，また，ログインシステムにすることでフィードバックも可能となった．
完成したシステムの検証結果からもわかるように，心理状態の理解度，教育効果と教育内容の理
解度，システムの使い勝手の３点において，いずれも高い評価を得ることができた．よって本シス
テムは安全運転を心理的側面からの教育が出来る負担の少ない Web システムになったと言える．
今後の課題としては，より多くの人が本システムを繰り返し使用したいと感じるようにするために，現在の“面白さ”が少ないシステムを改良することである．具体的には，診断回数によって画面表示を変えたり，Web 内で表彰するプログラムを追加したり，動く画面にすることで，より多くの人が繰り返しアクセスしたくなるシステムになると考えられる．
また，本システムの利用を広く呼び掛け，安全運転推進に役立てるため，チラシを製作した．完
成後ディーラ等で配布する予定である．
※製作したチラシは付録に示す．

謝辞
本研究をご支援頂いた公益財団法人タカタ財団，プログラミングを進めるにあたりご助言頂いた
芝浦工業大学情報工学科木村正臣准教授，研究推進にご協力頂いた早稲田大学モビリティ研究会の皆さまに感謝の意を表します．

55

参考文献
(1).

小鮒陸人・吉田知寛，ヒヤリハット映像の心理的側面からの分析，芝浦工業大学卒業論文，(2010)(2).

水島脩佑・八幡祐介，高齢ドライバーの信号のない交差点における一時不停止の誘因に関する研究，芝浦工業大学卒業論文，(2008)(3).

春日伸予他，交通事故の背景にある心理的要因に関する研究，自動車技術会論文集，(2008)(4).

春日伸予・澤田東一・大聖泰弘，交通事故の背景にある心理的要因に関する研究―事故の危
険性とストレスとの関係―，自動車技術会春季大会講演論文集，（2008）(5).

春日伸予・大聖泰弘，ドライバー心理に関する調査研究―若年ドライバーの苛立ちや敵対心―，自動車技術会春季大会講演論文集，（2004）(6). 国土交通省自動車交通局，自動車運送事業用自動車事故統計年報，（2010）(7).

高橋麻奈，やさしい PHP，(1955)，ソフトバンククリエイティブ．

(8).

笹亀弘・海原才人，ノン・プログラマのための PHP 入門，(2008)，翔泳社．

(9).

西沢直木，PHP による Web アプリケーションスーパーサンプル第 2 版，(2006)，ソフトバ
ンククリエイティブ．

(10). 西沢夢路，基礎からの MySQL，（2007），ソフトバンククリエイティブ．
(11). 松岡武，決定版 色彩とパーソナリティー，(2001)，金子書房．
(12). 足立裕司，HTML デザイン辞典，(2001)，翔泳社．
(13). 猿橋 大，詳解 HTML タグ辞典，(2008)，秀和システム．
(14). 猿橋 大，詳解 CSS スタイルシート辞典，(2008)，秀和システム．
(15). 日本 PHP ユーザ会
http://www.php.gr.jp/(16). 初心者用 PHP 入門
http://www.standpower.com/(17). 超初心者のためのスタイルシート講座
http://park16.wakwak.com/~html-css/css/(18). CSS デザインサンプル
http://www.css-designsample.com/(19). PHP グラフ作成ライブラリ-JpGraph アシアル株式会社
http://www.asial.co.jp/jpgraph/(20). PHP でグラフを作ろう！ (gd/JpGraph 編)
http://www.gadgety.net/shin/tips/unix/php-gd.html

56

付録
１．システム評価アンケート
２．チラシ
３．プログラム例-------------------------------------------------------１．システム評価アンケート
氏名：
以下のアドレスにアクセスし、本システムを使用した感想をお聞かせ下さい。
http://www.kasuga-lab.jp/enjoy_safe_driving/
1. 自分の現在の心理状態を理解できましたか？
理解できた

おおよそ理解できた

あまり理解できなかった

理解できなかった

2. 心理状態は運転に影響を与えることが理解できましたか？
理解できた

おおよそ理解できた

あまり理解できなかった

理解できなかった3. システムを利用した後、結果を参考にして安全運転をしようという気持ちになりましたか？
なった

多少はなったあまりならなかった

ならなかった4. 本システムではじめて知ったことはありましたか？
3 つ以上あった

2 つあった

1 つあった57

全て知っていた5. ヒヤリハットタイプに関するアドバイスは役に立ちましたか？
役に立った

やや役に立った

あまり役に立たなかった

役に立たなかった6. またシステムを使ってみたい(診断を受けてみたい)と思いますか？
思う

やや思う

あまり思わない

思わない

7. 本システムは，手軽で誰でも簡単に利用できると思いますか？
思う

やや思う

あまり思わない

思わない

8. システムの利用方法の中で，わかり難い点がありましたか？
あった

多少あった

あまりなかった

なかった

9. 問 8 で，「あった」または「多少あった」と回答した方にお尋ねします。
どのような点がわかりにくかったか，具体的にお教え下さい。

10. システムに加えて欲しい機能があれば，具体的に教えて下さい。

58

１．チラシ59

60

３．本システムのプログラムの一部----- login.php ------------------------------------------------------------------------------------------------------------------------------<?php//セッションを開始する
session_start();//エラーメッセージを格納する変数を初期化する$error_message = "";//ログインボタンを押されたか判定//初めてのアクセスのときは認証は行なわず、エラーメッセージは出るようプログラミングします
if (isset($_POST["ID"]) && trim($_POST["ID"]," ") === "") {$error_message = "ID を入力してください！";}elseif (isset($_POST["ID"])){//MySQL へ接続$mysql_con = mysql_connect ("localhost","dbuser","pass");if ($mysql_con == false) {print "DB_Connect Error!";exit;}//MySQL のデータベースを選択$select_db = mysql_select_db ("database",$mysql_con);if ($select_db == false) {print "DB_SELECT Error!";exit;}//id_pw テーブルの中から入力したデータを取得する。
$sql = "SELECT * FROM id_pw WHERE ID ='{$_POST["ID"]}'";//mysql_query 関数にSELECT 文を記述した関数と$mysql_con のMySQL の接続情報を引数に与えてクエリを実行する$result = mysql_query ($sql,$mysql_con);//データの読み取り
while ($row = mysql_fetch_array ($result)) {$ID = $row["ID"];$PW = $row["PW"];$name = $row["name"];$sex = $row["sex"];$age = $row["age"];}//ID と PW の一致を確認
if ($_POST["ID"] == "{$ID}" && $_POST["PW"] == "{$PW}"){//ログイン成功//answer テーブルの中からセクション ID と回数の最大値を取得する。
$sql = "SELECT ID,MAX(times) FROM answer WHERE ID ='{$_POST["ID"]}'";//mysql_query 関数にSELECT 文を記述した関数と$mysql_con のMySQL の接続情報を引数に与えてクエリを実行する$result = mysql_query ($sql,$mysql_con);//times の回数を一回増やす
while ($row = mysql_fetch_array ($result)) {$times = $row["MAX(times)"];}//セッションの格納$_SESSION["name"] = $name;$_SESSION["sex"] = $sex;$_SESSION["age"] = $age;$_SESSION["times"] = $times; //アクセス回数を数える$_SESSION["ID"] = $_POST["ID"];//成功した証拠をセッションに保持する//専用画面へブラウザをリダイレクトする$login_url = "../main/main.php";
header("Location: {$login_url}");61

exit;}$error_message = "ID かパスワードが間違えています。";}?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta name="Keywords" content="安全,運転,カウンセリング,安全運転カウンセリングシステム" /><meta name="Description" content="安全運転カウンセリングシステムです。" /><title>安全運転カウンセリングシステム</title><link href="../style.css" rel="stylesheet" type="text/css" /></head><body><div id="head"><h1>安全運転カウンセリング</h1><h2>芝浦工業大学 春日研究室</h2></div><div id="nav2"><ul></ul></div><div id="base"><div id="main">
現在の心理状態を知ってみたいと思いませんか？そして、心理状態が運転に与える危険性を知りたくありませんか？<br>
このサイトではあなたの心理状態がどのように運転に影響するかを知ることが出来ます。また、現在の自分を把握するだけでなく、過去の自分とも比較でき、変化や成長の度合いが分かります。そして、全体での順位付け機能を使うと他のアクセス者とも比較することもできます。あなたは全国で何位になるのでしょうか？<br>
まずは新規 ID を取得し、ログインしてみましょう！<br>
あなたは現在どのような心理状態にあり、それによって、どのような運転危険要因が関係しやすいか。是非一度診断を受けて、運転に役立てていただければ幸いです。<br>※なお、本システムでインプットされたデータは、ストレス状態の判定・分析以外に使用されることはありません。<br><div id="kankeisya"><table align=right border=0 cellspacing=0 cellpadding=0><tr><td>システム作成メンバー ：</td><td> 春日伸予</td><td> （芝浦工業大学）</td></tr><tr><td></td><td> 青木義満</td><td> （慶応義塾大学）</td></tr><tr><td></td><td> 澤田東一</td><td> （芝浦工業大学）</td></tr><tr><td></td><td> 繆 嘉傑</td><td> （芝浦工業大学）</td></tr><tr><td></td><td> 小鮒陸人</td><td> （芝浦工業大学）</td></tr><tr><td></td><td> 吉田知寛</td><td> （芝浦工業大学）</td></tr></table></div><br><br><br><br><br><br><br><center><?php
if ($error_message) {print '<font color="red">' . $error_message . "</font><br><br>";}?><form action="login.php" method="post"><table height=60><tr><td align=right>ID：</td><td><input type="text" name="ID" maxlength="12" value=""></td></tr><tr><td>パスワード：</td><td><input type="password" name="PW" maxlength="12" value=""></td></tr></table><br><input type="image" name="login" src="../gazou/login.gif"><br><br></form><h5><a href="new_id.php">
新規 ID を取得</a></h5><h5><a href="new_pw.php">
パスワードを忘れた！</a></h5></center></div>

62<address>
Copyright (C) 2010 Kasuga-Lab of Shibaura Institute of Technology All Rights Reserved.
</address></div></body></html>----- login.php ----------------------------------------------------------------------------------------------------------------------------------- logout.php ----------------------------------------------------------------------------------------------------------------------------<?php//セッションを開始する
session_start();//エラーメッセージを格納する変数を初期化する$error_message = "";$_SESSION = array();//専用画面へブラウザをリダイレクトする$login_url = "../login/login.php";
header("Location: {$login_url}");exit;?>----- logout.php ----------------------------------------------------------------------------------------------------------------------------新規登録----- new_id.php ---------------------------------------------------------------------------------------------------------------------------<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>ID 登録 - 安全運転カウンセリングシステム</title><link href="../style.css" rel="stylesheet" type="text/css" /></head><body><div id="head"><h1>安全運転カウンセリング</h1><h2>芝浦工業大学 春日研究室</h2></div><div id="nav2"><ul></ul></div><div id="base"><div id="main"><center><h1>安全運転カウンセリングシステムの ID 登録</h1></center><br><?php$member_age = array("選択してください" => "0","10 代" => "10", "20 代" => "20", "30 代" => "30", "40 代" => "40","50 代" => "50", "60 代" => "60", "70 代" => "70", "80 代" => "80");$member_question = array("選択してください","子供頃のあだなは？", "好きな食べ物は？", "初恋の人の名前は？","子どものころの夢は？", "座右の銘は？", "初めて行った海外の国・地域は？","初めて買った車は？", "中学時代に所属していたクラブは？");?><form method="post"><h3>１．安全運転カウンセリングシステム ID の設定</h3><?php
print"<center><table>";if(isset($_POST["name"])){
print"<tr><td align=right>ニックネーム：</td><td><input type=¥"text¥" name=¥"name¥"maxlength=¥"12¥" value=¥"{$_POST["name"]}¥">";}
else{
print"<tr><td align=right>ニックネーム：</td><td><input type=¥"text¥" name=¥"name¥"maxlength=¥"12¥" value=¥"¥">";}
print"</td><td><font color=¥"red¥"> ※１２文字以内</font></td></tr>";if(isset($_POST["ID"])){
print"<tr><tdalign=right>ID ： </td><td><input
type=¥"text¥"
name=¥"ID¥"63

maxlength=¥"12¥" value=¥"{$_POST["ID"]}¥">";}
else{
print"<tr><tdalign=right>ID ： </td><td><input
type=¥"text¥"
name=¥"ID¥"maxlength=¥"12¥" value=¥"¥">";}
print"</td><td><font color=¥"red¥"> ※１２文字以内、変更不可</font></td></tr>";print"<tr><td align=right> パ ス ワ ー ド ： </td><td><input type=¥"password¥" name=¥"PW¥"
maxlength=¥"12¥" value=¥"¥"></td><td><font color=¥"red¥"> ※半角英数字１２文字以内</font></td></tr><tr><td align=right>（再入力）パスワード：</td><td><input type=¥"password¥" name=¥"PW-k¥"
maxlength=¥"12¥" value=¥"¥"></td><td><font color=¥"red¥"> ※半角英数字１２文字以内</font></td></tr>";print"</table></center><br>";?><h3>２．ユーザー情報の入力</h3><center><table><tr><td align=right>性別： </td><td><input type="radio" name="sex" value="1"<?php if ($_POST["sex"] == "1") {print " checked";} ?>>男性<input type="radio" name="sex" value="2"<?php if ($_POST["sex"] == "2") {print " checked";} ?>>女性</td></tr><tr><td align=right>年齢： </td><td><select name="age"><?php
foreach($member_age as $key => $value){
print "<option value={$value}";if($_POST["age"] == $value){print " selected";}print ">{$key}</option>";}?></select></td></tr></table></center><br><h3>３．秘密の質問と答え</h3><center>パスワードをお忘れの場合に必要な情報です。
<table><tr><td align=right>秘密の質問：</td><td><select name="question"><?php
foreach($member_question as $name => $value){
print "<option value={$value}";if($_POST["question"] == $value){print " selected";}print ">{$value}</option>";}?></select></td></tr><?php
if(!isset($_POST["answer"])){
print"<tr><td align=right> 秘密の答え： </td><td><input type=¥"text¥" name=¥"answer¥"
value=¥"¥"></td></tr>";}else{
print"<tr><td align=right> 秘 密 の 答 え ： </td><td><input type=¥"text¥" name=¥"answer¥"
value=¥"{$_POST["answer"]}¥"></td></tr>";}?></table></center><br><center><input
type="image"
name="submit"
src="../gazou/next.gif"
onClick="form.action='ID_PW_kakunin.php';return true"></center></form></div><address>
Copyright (C) 2010 Kasuga-Lab of Shibaura Institute of Technology All Rights Reserved.
</address></div></body></html>----- new_id.php ----------------------------------------------------------------------------------------------------------------------------

64

入力の確認----- ID_PW_kakunin.php -------------------------------------------------------------------------------------------------------------<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>ID 登録 - 安全運転カウンセリングシステム</title><link href="../style.css" rel="stylesheet" type="text/css" /></head><body><div id="head"><h1>安全運転カウンセリング</h1><h2>芝浦工業大学 春日研究室</h2></div><div id="nav2"><ul></ul></div><div id="base"><div id="main"><center><h1>確認画面</h1></center><form method="post"><h3>１．安全運転カウンセリングシステム ID の設定</h3><center><table><?php$error = "0";//名前のエラーチェック//空白文字を削除して、名前が空の場合はエラーメッセージをセット//trim(,"削除文字リスト")
if (isset($_POST["name"]) && trim($_POST["name"]," ") === "") {print"<tr><td align=right>ニックネーム ： </td><td>「<font color=¥"red¥">※名前を入力してください。</font>」</td></tr>";$error++;}//名前の文字列が 13 文字を超えたらエラーメッセージをセット//mb_strlen(,'')関数の第 2 引数に文字エンコードを指定する
elseif (mb_strlen($_POST["name"],'UTF-8') > 13) {print"<tr><td align=right>ニックネーム ： </td><td>「<font color=¥"red¥">※名前は 12 文字以
内で入力してください。</font>」</td></tr>";$error++;}else{
print "<tr><td align=right>ニックネーム ： </td><td>「{$_POST["name"]}」</td></tr>";}//ID の重複チェック//MySQL へ接続$mysql_con = mysql_connect ("localhost","dbuser","pass");if ($mysql_con == false) {print "DB_Connect Error!";exit;}//MySQL のデータベースを選択$select_db = mysql_select_db ("database",$mysql_con);if ($select_db == false) {print "DB_SELECT Error!";exit;}//address_t テーブルのデータを全て取得する。
$sql = "SELECT * FROM id_pw WHERE ID ='{$_POST["ID"]}'";//mysql_query 関数にSELECT 文を記述した関数と$mysql_con のMySQL の接続情報を引数に与えてクエリを実行する$result = mysql_query ($sql,$mysql_con);//ID の確認

65

while ($row = mysql_fetch_array ($result)) {$ID = $row["ID"];}if ($_POST["ID"] == "{$ID}") {print "<tr><td align=right>ID ： </td><td>「<font color=¥"red¥">※申請されたＩＤはすでに使用されています。他のＩＤで再度申請してください。</font>」</td></tr>";$error++;}//ID のエラーチェック//空白文字を削除して、名前が空の場合はエラーメッセージをセット
elseif (isset($_POST["ID"]) && trim($_POST["ID"]," ") === "") {print"<tr><td align=right>ID ： </td><td>「<font color=¥"red¥">※ID を入力してください。
</font>」</td></tr>";$error++;}//名前の文字列が 13 文字を超えたらエラーメッセージをセット
elseif (mb_strlen($_POST["ID"]) > 13) {print"<tr><td align=right>ID ： </td><td>「<font color=¥"red¥">※ID は 12 文字以内で入力してください。</font>」</td></tr>";$error++;}else{
print "<tr><td align=right>ID ： </td><td>「{$_POST["ID"]}」</td></tr>";}//PW のエラーチェック//空白文字を削除して、名前が空の場合はエラーメッセージをセット
if (isset($_POST["PW"]) && trim($_POST["PW"]," ") === "") {print"<tr><td align=right>パスワード ： </td><td>「<font color=¥"red¥">※パスワードを入力してください。</font>」</td></tr>";$error++;}//名前の文字列が 13 文字を超えたらエラーメッセージをセット
elseif (mb_strlen($_POST["PW"]) > 13) {print"<tr><td align=right>パスワード ： </td><td>「<font color=¥"red¥">※パスワードは 12 文
字以内で入力してください。</font>」</td></tr>";$error++;}//PW と再入力 PW の一致
elseif (($_POST["PW"]) != ($_POST["PW-k"])) {print"<tr><td align=right>パスワード ： </td><td>「<font color=¥"red¥">※（再入力）パスワー
ドと一致しません。</font>」</td></tr>";$error++;}else{
print "<tr><td align=right>パスワード ： </td><td>「{$_POST["PW"]}」</td></tr>";}?></table></center><br><h3>２．ユーザー情報の入力</h3><center><table><?php//性別のエラーチェック
if($_POST["sex"] == "1"){print "<tr><td align=right>性別 ：</td><td>「男性」</td></tr>";}elseif($_POST["sex"] == "2"){
print "<tr><td align=right>性別 ：</td><td>「女性」</td></tr>";}else{
print "<tr><td align=right>性別 ：</td><td><font color=¥"red¥">「性別を選択してください」</font></td></tr>";$error++;66

}//年齢のエラーチェック
if(!isset($_POST["age"])){
print "<tr><td align=right>年齢 ：</td><td><font color=¥"red¥">「年齢を選択してください」</font></td></tr>";$error++;}elseif($_POST["age"] == "0"){print "<tr><td align=right>年齢 ：</td><td><font color=¥"red¥">「年齢を選択してください」</font></td></tr>";$error++;}else{
print "<tr><td align=right>年齢 ： </td><td>「{$_POST["age"]}代」</td></tr>";}?></table></center><br><h3>３．秘密の質問と答え</h3><center><table><?php//秘密の質問のエラーチェック
if(!isset($_POST["question"])){
print "<tr><td align=right>秘密の質問 ：</td><td><font color=¥"red¥">「秘密の質問を選択してください」</font></td></tr>";$error++;}elseif($_POST["question"] == "選択してください"){print "<tr><td align=right>秘密の質問 ：</td><td><font color=¥"red¥">「秘密の質問を選択してください」</font></td></tr>";$error++;}else{
print "<tr><td align=right>秘密の質問 ： </td><td>「{$_POST["question"]}」</td></tr>";}//秘密の答えのエラーチェック//空白文字を削除して、秘密の答えが空の場合はエラーメッセージをセット//trim(,"削除文字リスト")
if (isset($_POST["answer"]) && trim($_POST["answer"]," ") === "") {print"<tr><td align=right>秘密の答え ： </td><td>「<font color=¥"red¥">※秘密の答えを入力してください。</font>」</td></tr>";$error++;}else{
print "<tr><td align=right>秘密の答え ： </td><td>「{$_POST["answer"]}」</td></tr>";}?></table></center><br><?php//データを次のページへひそかに送信
print "<input type=¥"hidden¥" name=¥"name¥" value=¥"{$_POST["name"]}¥">";
print "<input type=¥"hidden¥" name=¥"ID¥" value=¥"{$_POST["ID"]}¥">";
print "<input type=¥"hidden¥" name=¥"PW¥" value=¥"{$_POST["PW"]}¥">";
print "<input type=¥"hidden¥" name=¥"sex¥" value=¥"{$_POST["sex"]}¥">";
print "<input type=¥"hidden¥" name=¥"age¥" value=¥"{$_POST["age"]}¥">";
print "<input type=¥"hidden¥" name=¥"question¥" value=¥"{$_POST["question"]}¥">";
print "<input type=¥"hidden¥" name=¥"answer¥" value=¥"{$_POST["answer"]}¥">";
print"<center>";
if($error == "0"){print "<table><tr><td><input
type=¥"image¥"
name=¥"home¥"src=¥"../gazou/back.gif¥" onClick=¥"form.action='new_id.php';return true¥"> </td><td><inputtype=¥"image¥"
name=¥"submit¥"

67

src=¥"../gazou/next.gif¥" onClick=¥"form.action='database.php';return true¥"> </td></tr></table>";}else{
print "<font color=¥"red¥">記入エラーが{$error}件あります</font><br>";print"<INPUT
type=¥"image¥"
name=¥"submit¥"src=¥"../gazou/back.gif¥"
onClick=¥"form.action='new_id.php';return true¥">";}
print"</center>";?></form></div><address>
Copyright (C) 2010 Kasuga-Lab of Shibaura Institute of Technology All Rights Reserved.
</address></div></body></html>----- ID_PW_kakunin.php -------------------------------------------------------------------------------------------------------------データベースへ書込み----- database.php ------------------------------------------------------------------------------------------------------------------------<?php//セッションを開始する
session_start();//MySQL へ接続$mysql_con = mysql_connect ("localhost","dbuser","pass");if ($mysql_con == false) {print "DB_Connect Error!";exit;}//MySQL のデータベースを選択$select_db = mysql_select_db ("database",$mysql_con);if ($select_db == false) {print "DB_SELECT Error!";exit;}//id_pw テーブルへデータを追加する$sql = "INSERT INTO id_pw VALUES ('{$_POST["name"]}','{$_POST["ID"]}','{$_POST["PW"]}','{$_POST["sex"]}','{$_POST["age"]}','{$_POST["question"]}','{$_POST["answer"]}')";//mysql_query 関数に INSERT 文を記述した関数と$mysql_con の MySQL の接続情報を引数に与えてクエリを実行する$result = mysql_query ($sql,$mysql_con);//セッションを格納する$_SESSION["name"] = $_POST["name"];$_SESSION["sex"] = $_POST["sex"];$_SESSION["age"] = $_POST["age"];$_SESSION["times"] = "";$_SESSION["ID"] = $_POST["ID"];//専用画面へブラウザをリダイレクトする$login_url = "../main/main.php";
header("Location: {$login_url}");?>----- database.php ------------------------------------------------------------------------------------------------------------------------パスワードを忘れた----- new_pw.php --------------------------------------------------------------------------------------------------------------------------<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

68

<title>パスワード再設定 - 安全運転カウンセリングシステム</title><link href="../style.css" rel="stylesheet" type="text/css" /></head><body><div id="head"><h1>安全運転カウンセリング</h1><h2>芝浦工業大学 春日研究室</h2></div><div id="nav2"><ul></ul></div><div id="base"><div id="main"><center><h1>安全運転カウンセリングシステムのパスワード再設定</h1><br><br><form method="post"><?php//空文字の検出
if (isset($_POST["ID"]) && trim($_POST["ID"]," ") === "") {echo"<font color=¥"red¥">ID が入力されていません！</font><br><br>";print"ID を 入 力 し て く だ さ い ： <input type=¥"text¥" name=¥"ID¥" maxlength=¥"12¥"value=¥"¥"><br><br><table><tr><td><input
type=¥"image¥"
name=¥"home¥"src=¥"../gazou/back.gif¥"
onClick=¥"form.action='login.php';return true¥"> </td><td><inputtype=¥"image¥"
name=¥"submit¥"src=¥"../gazou/next.gif¥"
onClick=¥"form.action='new_pw.php';return true¥"> </td></tr></table>";}//POST 値がないとき
elseif(!isset($_POST["ID"])){
print"ID を 入 力 し て く だ さ い ： <input type=¥"text¥" name=¥"ID¥" maxlength=¥"12¥"value=¥"¥"><br><br><table><tr><td><input
type=¥"image¥"
name=¥"home¥"src=¥"../gazou/back.gif¥"
onClick=¥"form.action='login.php';return true¥"> </td><td><inputtype=¥"image¥"
name=¥"submit¥"src=¥"../gazou/next.gif¥"
onClick=¥"form.action='new_pw.php';return true¥"> </td></tr></table>";}//秘密の答えの照らし合わせ
elseif(isset($_POST["answer"])) {//MySQL へ接続$mysql_con = mysql_connect ("localhost","dbuser","pass");if ($mysql_con == false) {print "DB_Connect Error!";exit;}//MySQL のデータベースを選択$select_db = mysql_select_db ("database",$mysql_con);if ($select_db == false) {print "DB_SELECT Error!";exit;}//id_pw テーブルの中から入力したデータを取得する。
$sql = "SELECT * FROM id_pw WHERE ID ='{$_POST["ID"]}'";//mysql_query 関数にSELECT 文を記述した関数と$mysql_con のMySQL の接続情報を引数に与えてクエリを実行する$result = mysql_query ($sql,$mysql_con);while ($row = mysql_fetch_array ($result)) {$answer = $row["answer"];$PW = $row["PW"];}
if( $_POST["answer"] == $answer){
print"あなたのパスワードは「{$PW}」です。<br><br><br>69

<center><INPUT type=¥"image¥" name=¥"submit¥" src=¥"../gazou/next.gif¥"
onClick=¥"form.action='login.php';return true¥"></center>";}
else{
print"<font color=¥"red¥">秘密の質問の答えが間違っています！</font><br><br><inputtype=¥"image¥"
name=¥"home¥"src=¥"../gazou/back.gif¥"
onClick=¥"form.action='new_pw.php';return true¥">";}}//ID の照らし合わせ
elseif(isset($_POST["ID"])) {//MySQL へ接続$mysql_con = mysql_connect ("localhost","dbuser","pass");if ($mysql_con == false) {print "DB_Connect Error!";exit;}//MySQL のデータベースを選択$select_db = mysql_select_db ("database",$mysql_con);if ($select_db == false) {print "DB_SELECT Error!";exit;}//id_pw テーブルの中から入力したデータを取得する。
$sql = "SELECT * FROM id_pw WHERE ID ='{$_POST["ID"]}'";//mysql_query 関数にSELECT 文を記述した関数と$mysql_con のMySQL の接続情報を引数に与えてクエリを実行する$result = mysql_query ($sql,$mysql_con);while ($row = mysql_fetch_array ($result)) {$ID = $row["ID"];$question = $row["question"];}if($_POST["ID"] == $ID){
print"秘密の質問にお答えください。<br> ※ひらがな、カタカナ、半角全角などは区別されますのでご注意ください。<br><br>";print"{$question}：<input type=¥"text¥" name=¥"answer¥" value=¥"¥"> ";print "<input type=¥"hidden¥" name=¥"ID¥" value=¥"{$_POST["ID"]}¥"><br><br><table><tr><td><input
type=¥"image¥"
name=¥"home¥"src=¥"../gazou/back.gif¥" onClick=¥"form.action='login.php';return true¥"> </td><td><inputtype=¥"image¥"
name=¥"submit¥"src=¥"../gazou/next.gif¥" onClick=¥"form.action='new_pw.php';return true¥"> </td></tr></table>";}else{
print"<font color=¥"red¥">該当する ID がありません！</font><br><br><input type=¥"image¥" name=¥"home¥" src=¥"../gazou/back.gif¥"
onClick=¥"form.action='new_pw.php';return true¥">";}}?></form></center></div><address>
Copyright (C) 2010 Kasuga-Lab of Shibaura Institute of Technology All Rights Reserved.
</address></div></body></html>----- new_pw.php --------------------------------------------------------------------------------------------------------------------------診断プログラム----- Q_S.php ------------------------------------------------------------------------------------------------------------------------------<?php70

//セッションを開始する
session_start();if (!isset($_SESSION["name"])){$login_url = "../login/login.php";
header("Location: {$login_url}");exit;}$question = array('','収入が大幅に減った','支出が大幅にふえたり、大きな借金（ローンを含む）を抱えた','入院したり、１ヶ月以上仕事や学校を休まなければならないような病気や怪我をした','家族に大病（寝たきりやぼけを含む）や大怪我をしたものが出た','自分や配偶者が妊娠した','自分や配偶者が出産した','正式に結婚した','自分や配偶者が流産した','配偶者が死亡した ','親や子が死亡した ','兄弟姉妹、親友が死亡した','頼りにしていた人（家族を含む）と離ればなれになった','大事にしていた物がなくなったり（ペットが死んだり、いなくなったりを含む）、壊れたりした','引っ越した ','相手に大怪我を負わせたり、大きな損害を与えたりした','訴訟沙汰が起こった ','家族が反社会的な行為（非行、万引、薬物、中毒など）をした','いざこざのため配偶者と別居するようになった','解雇（学生の場合退学）されたり、事業に失敗した','勤務時間や勤務内容に変化があった（配置転換の場合も含む）','職務上、昇格した ','職務上、降格した ','退職した ',
'転勤や単身赴任を命ぜられた ','職場（学生の場合学校）や取引先の人と大きなトラブルがあった ','配偶者に就職（パートを含む）、退職、勤務時間や内容の変更等、仕事上の変化があった','就職（転職）や入学（進級）などにより失敗した ','就職（入学）や転職（転学）があり、新たな生活が開始した ','親や教師など、立場が上の人にひどく怒られた ','いざこざ以外の理由（夫の長期出張や単身赴任など）で配偶者と別居するようになった','離婚した ',
'親や子、兄弟姉妹が離婚した ','配偶者（恋人や婚約者を含む）ともめ事を起こした','配偶者以外の家族ともめ事を起こした','親戚や近所ともめ事を起こした','子どもが自立（結婚を含む）するようになった','新たな人が家族のメンバーとして同居（親の引き取りや出戻りの子どもなど）するようになった');?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>急性ストレスアンケート</title><link href="../style.css" rel="stylesheet" type="text/css" /></head><body><div id="head"><h1>安全運転カウンセリング</h1><h2>芝浦工業大学 春日研究室</h2></div><div id="nav2"><ul></ul></div><div id="base">71

<div id="main"><center><h2>急性ストレスアンケート</h2></center>
ストレスを引き起こす原因をストレッサーと呼びますが、このストレッサーは、急性ストレッサーと慢性ストレッサーに分けられます。そして、急性ストレッサーによって引き起こされたストレスを急性ストレス、慢性ストレッサーによって引き起こされたストレスを慢性ストレスといいます。<br>
急性ストレスは、一時的、突発的なストレッサー（出来事）、たとえば事故や天災など、によって引き起こされるストレスをさします。一般的に、ストレッサーというと悪い出来事ばかりを考えがちですが、結婚やクリスマスのお祝い、出産、昇進、など人生でも良いことの代表とされるような出来事も、ストレスを生むことがわかっています。どんなに良いことでも、大きな変化を経験すると変化した新しい状態に慣れるために人はストレスを感じるものなのです。<br><br><center>※<b>過去１年間</b>にあなたに起こった出来事は「<b>はい</b>」をクリックしてください。</center><form method="post"><center><table cellspacing="0" ><tr bgcolor="#0000CD" height="30"><th><center><font color="#FFFFFF">No.</font></center></th><th><center><font color="#FFFFFF">質 問</font></center></th><th><center><font color="#FFFFFF">回 答</font></center></th>
</tr>
<?php
for ($i = 1; $i < count($question); $i++) {if($i%2 == 0){print "<tr bgcolor = ¥"#87CEFA¥" height=¥"25¥">";}
else{print "<tr bgcolor = ¥"#E0FFFF¥" height=¥"25¥">";}
print "<td align=center width=40>{$i}.</td><td width=630> {$question[$i]}</td>";
print "<td align=center width=150><input type=¥"radio¥" name=¥"Q{$i}¥" value=¥"1¥"";
if($_POST["Q{$i}"] == 1) {print " checked";}print "> はい<input type=¥"radio¥" name=¥"Q{$i}¥" value=¥"100¥"";if($_POST["Q{$i}"] == 100) {print " checked";}elseif(!isset($_POST["Q{$i}"])){print " checked";}print "> いいえ</td></tr>";}?></table><br><br><table><tr><td><input
type="image"
name="home"
src="../gazou/home.jpg"
onClick="form.action='../main/main.php';return true"> </td><td><inputtype="image"
name="login"src="../gazou/next.gif"
onClick="form.action='Q_S_kakunin.php';return true"> </td></tr></table></center></form></div><address>
Copyright (C) 2010 Kasuga-Lab of Shibaura Institute of Technology All Rights Reserved.
</address></div></body></html>----- Q_S.php ----------------------------------------------------------------------------------------------------------------------------------- Q_S_kakunin.php -----------------------------------------------------------------------------------------------------------------<?php//セッションを開始する
session_start();if (!isset($_SESSION["name"])){$login_url = "../login/login.php";
header("Location: {$login_url}");
exit;
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html>

72

<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>急性ストレスアンケート確認</title><link href="../style.css" rel="stylesheet" type="text/css" /></head><body><div id="head"><h1>安全運転カウンセリング</h1><h2>芝浦工業大学 春日研究室</h2></div><div id="nav2"><ul></ul></div><div id="base"><div id="main"><form method="post"><h2 align=center>急性ストレスアンケート確認画面</h2><center><table cellspacing="0" ><tr bgcolor="#0000CD" height="30"><th><center><font color="#FFFFFF">No.</font></center></th><th><center><font color="#FFFFFF">質 問</font></center></th><th><center><font color="#FFFFFF">回 答</font></center></th>
</tr>
<?php
$question = array('','収入が大幅に減った','支出が大幅にふえたり、大きな借金（ローンを含む）を抱えた','入院したり、１ヶ月以上仕事や学校を休まなければならないような病気や怪我をした','家族に大病（寝たきりやぼけを含む）や大怪我をしたものが出た','自分や配偶者が妊娠した','自分や配偶者が出産した','正式に結婚した','自分や配偶者が流産した','配偶者が死亡した ','親や子が死亡した ','兄弟姉妹、親友が死亡した','頼りにしていた人（家族を含む）と離ればなれになった','大事にしていた物がなくなったり（ペットが死んだり、いなくなったりを含む）、壊れたりした','引っ越した ','相手に大怪我を負わせたり、大きな損害を与えたりした','訴訟沙汰が起こった ','家族が反社会的な行為（非行、万引、薬物、中毒など）をした','いざこざのため配偶者と別居するようになった','解雇（学生の場合退学）されたり、事業に失敗した','勤務時間や勤務内容に変化があった（配置転換の場合も含む）','職務上、昇格した ','職務上、降格した ','退職した ',
'転勤や単身赴任を命ぜられた ','職場（学生の場合学校）や取引先の人と大きなトラブルがあった ','配偶者に就職（パートを含む）、退職、勤務時間や内容の変更等、仕事上の変化があった','就職（転職）や入学（進級）などにより失敗した ','就職（入学）や転職（転学）があり、新たな生活が開始した ','親や教師など、立場が上の人にひどく怒られた ','いざこざ以外の理由（夫の長期出張や単身赴任など）で配偶者と別居するようになった','離婚した ',
'親や子、兄弟姉妹が離婚した ','配偶者（恋人や婚約者を含む）ともめ事を起こした','配偶者以外の家族ともめ事を起こした','親戚や近所ともめ事を起こした','子どもが自立（結婚を含む）するようになった',73

'新たな人が家族のメンバーとして同居（親の引き取りや出戻りの子どもなど）するようになった');$error = "0";for ($id = 1; $id < count($question); $id++) {if($id%2 == 0){print "<tr bgcolor = ¥"#87CEFA¥" height=¥"25¥">";}
else{print "<tr bgcolor = ¥"#E0FFFF¥" height=¥"25¥">";}
if($_POST["Q{$id}"] == 1){
print "<td align=center width=40>{$id}.</td><td width=630>{$question[$id]}</td><tdalign=center width=80><B>はい</B></td></tr>";}elseif($_POST["Q{$id}"] == 100){print "<td align=center width=40>{$id}.</td><td width=630>{$question[$id]}</td><tdalign=center width=80>いいえ</td></tr>";}else{
print "<td align=center width=40>{$id}.</td><td width=630>{$question[$id]}</td><tdalign=center><font color=¥"red¥">選択してください</font></td></tr>";$error++;}}print "<input type=¥"hidden¥" name=¥"Q1¥" value=¥"{$_POST["Q1"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q2¥" value=¥"{$_POST["Q2"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q3¥" value=¥"{$_POST["Q3"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q4¥" value=¥"{$_POST["Q4"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q5¥" value=¥"{$_POST["Q5"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q6¥" value=¥"{$_POST["Q6"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q7¥" value=¥"{$_POST["Q7"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q8¥" value=¥"{$_POST["Q8"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q9¥" value=¥"{$_POST["Q9"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q10¥" value=¥"{$_POST["Q10"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q11¥" value=¥"{$_POST["Q11"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q12¥" value=¥"{$_POST["Q12"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q13¥" value=¥"{$_POST["Q13"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q14¥" value=¥"{$_POST["Q14"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q15¥" value=¥"{$_POST["Q15"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q16¥" value=¥"{$_POST["Q16"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q17¥" value=¥"{$_POST["Q17"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q18¥" value=¥"{$_POST["Q18"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q19¥" value=¥"{$_POST["Q19"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q20¥" value=¥"{$_POST["Q20"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q21¥" value=¥"{$_POST["Q21"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q22¥" value=¥"{$_POST["Q22"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q23¥" value=¥"{$_POST["Q23"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q24¥" value=¥"{$_POST["Q24"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q25¥" value=¥"{$_POST["Q25"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q26¥" value=¥"{$_POST["Q26"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q27¥" value=¥"{$_POST["Q27"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q28¥" value=¥"{$_POST["Q28"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q29¥" value=¥"{$_POST["Q29"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q30¥" value=¥"{$_POST["Q30"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q31¥" value=¥"{$_POST["Q31"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q32¥" value=¥"{$_POST["Q32"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q33¥" value=¥"{$_POST["Q33"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q34¥" value=¥"{$_POST["Q34"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q35¥" value=¥"{$_POST["Q35"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q36¥" value=¥"{$_POST["Q36"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q37¥" value=¥"{$_POST["Q37"]}¥">";?></table><br><?php
if($error == "0"){print"<INPUT
type=¥"image¥"
name=¥"submit¥"src=¥"../gazou/back.gif¥"
onClick=¥"form.action='Q_S.php';return true¥">";
print "<INPUT type=¥"image¥" name=¥"submit¥" src=¥"../gazou/next.gif¥"74

onClick=¥"form.action='M_S.php';return true¥">";}
else{
print "<font color=¥"red¥">※未選択が{$error}件あります</font><br><br>";print"<INPUT
type=¥"image¥"
name=¥"submit¥"src=¥"../gazou/back.gif¥"
onClick=¥"form.action='Q_S.php';return true¥">";}?></center></form></div><address>
Copyright (C) 2010 Kasuga-Lab of Shibaura Institute of Technology All Rights Reserved.
</address></div></body></html>----- Q_S_kakunin.php ---------------------------------------------------------------------------------------------------------------------- Q-1.php -------------------------------------------------------------------------------------------------------------------------------<?php//セッションを開始する
session_start();if (!isset($_SESSION["name"])){$login_url = "../login/login.php";
header("Location: {$login_url}");
exit;
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Q-1</title><link href="../style.css" rel="stylesheet" type="text/css" /></head><body><div id="head"><h1>安全運転カウンセリング</h1><h2>芝浦工業大学 春日研究室</h2></div><div id="nav2"><ul></ul></div><div id="base"><div id="main"><center><table border=0 width=600><tr><td><h3>Q1:<br> あなたは乗車して何分以内にヒヤリハットが多く発生すると思いますか。</h3><br></td></tr></table><form method="post"><?php
print "<input type=¥"hidden¥" name=¥"Q1¥" value=¥"{$_POST["Q1"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q2¥" value=¥"{$_POST["Q2"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q3¥" value=¥"{$_POST["Q3"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q4¥" value=¥"{$_POST["Q4"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q5¥" value=¥"{$_POST["Q5"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q6¥" value=¥"{$_POST["Q6"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q7¥" value=¥"{$_POST["Q7"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q8¥" value=¥"{$_POST["Q8"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q9¥" value=¥"{$_POST["Q9"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q10¥" value=¥"{$_POST["Q10"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q11¥" value=¥"{$_POST["Q11"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q12¥" value=¥"{$_POST["Q12"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q13¥" value=¥"{$_POST["Q13"]}¥">";

75

print "<input type=¥"hidden¥" name=¥"Q14¥" value=¥"{$_POST["Q14"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q15¥" value=¥"{$_POST["Q15"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q16¥" value=¥"{$_POST["Q16"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q17¥" value=¥"{$_POST["Q17"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q18¥" value=¥"{$_POST["Q18"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q19¥" value=¥"{$_POST["Q19"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q20¥" value=¥"{$_POST["Q20"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q21¥" value=¥"{$_POST["Q21"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q22¥" value=¥"{$_POST["Q22"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q23¥" value=¥"{$_POST["Q23"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q24¥" value=¥"{$_POST["Q24"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q25¥" value=¥"{$_POST["Q25"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q26¥" value=¥"{$_POST["Q26"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q27¥" value=¥"{$_POST["Q27"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q28¥" value=¥"{$_POST["Q28"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q29¥" value=¥"{$_POST["Q29"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q30¥" value=¥"{$_POST["Q30"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q31¥" value=¥"{$_POST["Q31"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q32¥" value=¥"{$_POST["Q32"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q33¥" value=¥"{$_POST["Q33"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q34¥" value=¥"{$_POST["Q34"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q35¥" value=¥"{$_POST["Q35"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q36¥" value=¥"{$_POST["Q36"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q37¥" value=¥"{$_POST["Q37"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q41¥" value=¥"{$_POST["Q41"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q42¥" value=¥"{$_POST["Q42"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q43¥" value=¥"{$_POST["Q43"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q44¥" value=¥"{$_POST["Q44"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q45¥" value=¥"{$_POST["Q45"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q46¥" value=¥"{$_POST["Q46"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q47¥" value=¥"{$_POST["Q47"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q48¥" value=¥"{$_POST["Q48"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q49¥" value=¥"{$_POST["Q49"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q50¥" value=¥"{$_POST["Q50"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q51¥" value=¥"{$_POST["Q51"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q52¥" value=¥"{$_POST["Q52"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q53¥" value=¥"{$_POST["Q53"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q54¥" value=¥"{$_POST["Q54"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q55¥" value=¥"{$_POST["Q55"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q56¥" value=¥"{$_POST["Q56"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q57¥" value=¥"{$_POST["Q57"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q58¥" value=¥"{$_POST["Q58"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q59¥" value=¥"{$_POST["Q59"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q60¥" value=¥"{$_POST["Q60"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q61¥" value=¥"{$_POST["Q61"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q62¥" value=¥"{$_POST["Q62"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q63¥" value=¥"{$_POST["Q63"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q64¥" value=¥"{$_POST["Q64"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q65¥" value=¥"{$_POST["Q65"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q66¥" value=¥"{$_POST["Q66"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q67¥" value=¥"{$_POST["Q67"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q68¥" value=¥"{$_POST["Q68"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q69¥" value=¥"{$_POST["Q69"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q70¥" value=¥"{$_POST["Q70"]}¥">";?><INPUT type="submit" name="Q81" value=" 30 分以内 " onClick="form.action='A-1.php';return true"><INPUT type="submit" name="Q81" value=" 30～60 分 " onClick="form.action='A-1.php';return true"><INPUT type="submit" name="Q81" value=" 60 分以上 " onClick="form.action='A-1.php';return true"></form></center><br><div id="content2"><h2>ヒヤリハットとは?</h2><p> ヒヤリハットとは運転中に事故が起きそうな状況に出会い、ヒヤリとしたり、ハッとしたりすることを言います。ハ76

インリッヒの法則によると、1 件の死亡事故の背景には、29 件の軽症事故、300 件のヒヤリハットが存在しています。ヒヤ
リハットを防ぐことは、事故の予防になります。このサイトではヒヤリハットに注目して、アドバイスを行います。</p><center><img src="../gazou/H_H.bmp"></center></div><br><br></div><address>
Copyright (C) 2010 Kasuga-Lab of Shibaura Institute of Technology All Rights Reserved.
</address></div></body></html>----- Q-1.php ------------------------------------------------------------------------------------------------------------------------------------ A-1.php -------------------------------------------------------------------------------------------------------------------------------<?php//セッションを開始する
session_start();if (!isset($_SESSION["name"])){$login_url = "../login/login.php";
header("Location: {$login_url}");
exit;
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>A-1</title><link href="../style.css" rel="stylesheet" type="text/css" /></head><body><div id="head"><h1>安全運転カウンセリング</h1><h2>芝浦工業大学 春日研究室</h2></div><div id="nav2"><ul></ul></div><div id="base"><div id="main"><center><?php
print"<table border=0 width=600>";
print"<tr><td><h3>Q1:<br> あ な た は 乗 車 し て 何 分 以 内 に ヒ ヤ リ ハ ッ ト が 多 く 発 生 す る と 思 い ま す か 。
</h3><br></td></tr>";//押されたボタンによる場合分け
if ($_POST["Q81"] == " 30 分以内 ") {print"<tr><td> その通りです。私たちの研究結果によると、事故と密接な関わりを示すヒヤリハットは、運転開始から<b>30 分以内</b>の間に全体の<b>60％以上</b>が起きていることがわかりました。原因はまだはっきりしていま
せんが、おそらくは運転に慣れるまでに必要な時間が関わっているのではないかと推測されます。</td></tr>";}elseif($_POST["Q81"] == " 30～60 分 ") {print"<tr><td> 私たちの研究結果によると、この時間に発生するヒヤリハットは、25％ほどでした。最も多いのは運転開始から<b>30 分以内</b>で、全体の<b>60％以上</b>のヒヤリハットが起きています。だからと言って乗車後30～60 分が安全な時間帯という訳ではありません。30 分を過ぎると集中力が低下しやすくなるので、この時間帯も注意して運転しましょう。</td></tr>";}elseif($_POST["Q81"] == " 60 分以上 ") {print"<tr><td> 私たちの研究結果によると、この時間に発生するヒヤリハットは、全体の 13％ほどです。最も多いのは運転開始から<b>30 分以内</b>で、全体の<b>60％以上</b>のヒヤリハットが起きています。だからと言って乗車後 60 分以上が安全という訳ではありません。長く運転すれば集中力が低下したり、ボーとしたり、疲労が蓄積されます。
この時間帯も注意して運転しましょう。</td></tr>";}print"</table>";77?><form method="post"><?php
print "<input type=¥"hidden¥" name=¥"Q1¥" value=¥"{$_POST["Q1"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q2¥" value=¥"{$_POST["Q2"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q3¥" value=¥"{$_POST["Q3"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q4¥" value=¥"{$_POST["Q4"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q5¥" value=¥"{$_POST["Q5"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q6¥" value=¥"{$_POST["Q6"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q7¥" value=¥"{$_POST["Q7"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q8¥" value=¥"{$_POST["Q8"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q9¥" value=¥"{$_POST["Q9"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q10¥" value=¥"{$_POST["Q10"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q11¥" value=¥"{$_POST["Q11"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q12¥" value=¥"{$_POST["Q12"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q13¥" value=¥"{$_POST["Q13"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q14¥" value=¥"{$_POST["Q14"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q15¥" value=¥"{$_POST["Q15"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q16¥" value=¥"{$_POST["Q16"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q17¥" value=¥"{$_POST["Q17"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q18¥" value=¥"{$_POST["Q18"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q19¥" value=¥"{$_POST["Q19"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q20¥" value=¥"{$_POST["Q20"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q21¥" value=¥"{$_POST["Q21"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q22¥" value=¥"{$_POST["Q22"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q23¥" value=¥"{$_POST["Q23"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q24¥" value=¥"{$_POST["Q24"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q25¥" value=¥"{$_POST["Q25"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q26¥" value=¥"{$_POST["Q26"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q27¥" value=¥"{$_POST["Q27"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q28¥" value=¥"{$_POST["Q28"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q29¥" value=¥"{$_POST["Q29"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q30¥" value=¥"{$_POST["Q30"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q31¥" value=¥"{$_POST["Q31"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q32¥" value=¥"{$_POST["Q32"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q33¥" value=¥"{$_POST["Q33"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q34¥" value=¥"{$_POST["Q34"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q35¥" value=¥"{$_POST["Q35"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q36¥" value=¥"{$_POST["Q36"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q37¥" value=¥"{$_POST["Q37"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q41¥" value=¥"{$_POST["Q41"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q42¥" value=¥"{$_POST["Q42"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q43¥" value=¥"{$_POST["Q43"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q44¥" value=¥"{$_POST["Q44"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q45¥" value=¥"{$_POST["Q45"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q46¥" value=¥"{$_POST["Q46"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q47¥" value=¥"{$_POST["Q47"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q48¥" value=¥"{$_POST["Q48"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q49¥" value=¥"{$_POST["Q49"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q50¥" value=¥"{$_POST["Q50"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q51¥" value=¥"{$_POST["Q51"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q52¥" value=¥"{$_POST["Q52"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q53¥" value=¥"{$_POST["Q53"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q54¥" value=¥"{$_POST["Q54"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q55¥" value=¥"{$_POST["Q55"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q56¥" value=¥"{$_POST["Q56"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q57¥" value=¥"{$_POST["Q57"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q58¥" value=¥"{$_POST["Q58"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q59¥" value=¥"{$_POST["Q59"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q60¥" value=¥"{$_POST["Q60"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q61¥" value=¥"{$_POST["Q61"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q62¥" value=¥"{$_POST["Q62"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q63¥" value=¥"{$_POST["Q63"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q64¥" value=¥"{$_POST["Q64"]}¥">";

78

print "<input type=¥"hidden¥" name=¥"Q65¥" value=¥"{$_POST["Q65"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q66¥" value=¥"{$_POST["Q66"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q67¥" value=¥"{$_POST["Q67"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q68¥" value=¥"{$_POST["Q68"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q69¥" value=¥"{$_POST["Q69"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q70¥" value=¥"{$_POST["Q70"]}¥">";
print "<input type=¥"hidden¥" name=¥"Q81¥" value=¥"{$_POST["Q81"]}¥">";?><img src="../gazou/07.PNG"><br><input type="image" name="next" src="../gazou/next.gif" onClick="form.action='Q-2.php';return true"></form></center></div><address>
Copyright (C) 2010 Kasuga-Lab of Shibaura Institute of Technology All Rights Reserved.
</address></div></body></html>----- A-1.php -------------------------------------------------------------------------------------------------------------------------------診断結果並びにデータベースへの書き込み----- kakunin.php -------------------------------------------------------------------------------------------------------------------------<?php//セッションを開始する
session_start();if (!isset($_SESSION["name"])){$login_url = "../login/login.php";
header("Location: {$login_url}");exit;}$today = date("Y/m/d (D) H:i:s");$sasetu = '左折時は、他車や歩行者など注意すべき相手を<b>認識していない</b>ためにヒヤリハットが起きやすいことが分かっている。あなたの場合はどうでしたか。左折する時は落ち着いて回りを見わたし、<b>他車</b>や<b>歩行者</b>を見逃さないようにしましょう。';$syasenhenkou = '車線変更時は、他車や歩行者など注意すべき相手を<b>認識していない</b>ためにヒヤリハットが起きやすいことが分かっている。あなたの場合はどうでしたか。車線を変更する時は落ち着いて回りを見わたし、ゆとりを持って車線変更しましょう。';$tyokusin = 'あなたは直進時に相手を<b>認識していた</b>にも関わらず、ヒヤリハットが起きやすいタイプです。あなたはヒヤリハットの時に相手の動きを正しく判断出来ましたか？相手の動きを良く見て運転しましょう。';$fifteen = '乗車してから 15 分以内は、ヒヤリハットが多い時間帯であり、<b>漫然(ボーッとしている)状態</b>になりやす
い時間帯ではないのですが、ヒヤリハットを起こしやすいことがわかっています。乗車してから 15 分以内はあまりスピー
ドを出さず特に慎重に運転しましょう。<br>
発生状況としては、<b>交差点</b>で起こっていることが多く、<b>他車の飛び出しや自車の車線変更</b>によるヒヤリハットが多いこともわかっています。あなたはどうでしたか？';$thirty = '乗車してから 30 分以内は、ヒヤリハットが多い時間帯であり、<b>漫然(ボーッとしている)状態</b>になりやす
い時間帯ではないのですが、ヒヤリハットを起こしやすいことがわかっています。乗車してから 30 分以内はあまりスピー
ドを出さず特に慎重に運転しましょう。<br>
発生状況としては、<b>交差点</b>で起こっていることが多く、<b>他車の飛び出しや自車の車線変更</b>によるヒヤリハットが多いこともわかっています。あなたはどうでしたか？';$forty_five = '乗車してから 30～45 分は、ヒヤリハットが多い時間帯であり、<b>漫然(ボーッとしている)状態</b>になりやすい時間帯ではないのですが、ヒヤリハットを起こしやすいことがわかっています。<br>
発生状況としては、<b>カーブ</b>で起こっていることが多く、ヒヤリハッ
トの種類としては、<b>道路状況（赤信号など）や他車の車線変更</b>によるヒヤリハットが多いことがわかっています。
あなたはどうでしたか？';$sixty = '乗車してから 45～60 分は、運転中に<b>漫然(ボーッとしている)状態になりやすい時間帯で、さらに居眠りしやすい時間帯</b>であるとも言えます。<br>
ボーとしたり居眠りしたりすると、当然のことながら安全確認が不足して、<b>安全確認を怠り</b>、結果的に他車や歩行者などの動きに対して<b>判断ミス</b>をしてヒヤリハットを起こす傾向があります。
ここでのヒヤリハット発生場所としては、<b>カーブ</b>が多く、ヒヤリハットの種類としては、<b>道路状況（赤信号など）や他車の車線変更</b>によるヒヤリハットが多いことがわかっています。あなたはどうでしたか？';$over_sixty = '乗車してから 60 分経過すると、<b>漫然(ボーッとしている)状態</b>になりやすい時間帯を一応<b>過ぎる79

</b>のですが、<b>カーブ</b>で、<b>道路状況（赤信号など）や他車の車線変更</b>によるヒヤリハットが起きやすいことがわかっています。あなたはどうでしたか？';//急性ストレスのはいの数の計算$sum1 = 0;for($id = 1; $id<=37; $id++){$sum1 = $sum1+ $_POST["Q{$id}"];}$Q38 = $sum1%100;//慢性ストレスのはいの数の計算$sum = 0;for($id = 41; $id<=70; $id++){$sum = $sum+ $_POST["Q{$id}"];}$Q71 = $sum%100;//MySQL へ接続$mysql_con = mysql_connect ("localhost","dbuser","pass");if ($mysql_con == false) {print "DB_Connect Error!";exit;}//MySQL のデータベースを選択$select_db = mysql_select_db ("database",$mysql_con);if ($select_db == false) {print "DB_SELECT Error!";exit;}////////////////////////////////answer テーブルへデータを追加する///////////////////////////////////////////answer テーブルの中からセクション ID と回数の最大値を取得する。
$sql = "SELECT ID,MAX(times) FROM answer WHERE ID ='{$_SESSION["ID"]}'";//mysql_query 関数に SELECT 文を記述した関数と$mysql_con の MySQL の接続情報を引数に与えてクエリを実行する$result = mysql_query ($sql,$mysql_con);//times の回数を一回増やす
while ($row = mysql_fetch_array ($result)) {$times = $row["MAX(times)"]+1;}$_SESSION["times"] = $times; //アクセス回数を数える//answer テーブルへデータを追加する$sql = "INSERT INTO answer VALUES ('{$_SESSION["ID"]}','$times','{$today}','{$_POST["Q1"]}','{$_POST["Q2"]}','{$_POST["Q3"]}','{$_POST["Q4"]}','{$_POST["Q5"]}','{$_POST["Q6"]}','{$_POST["Q7"]}','{$_POST["Q8"]}','{$_POST["Q9"]}','{$_POST["Q10"]}','{$_POST["Q11"]}','{$_POST["Q12"]}','{$_POST["Q13"]}','{$_POST["Q14"]}','{$_POST["Q15"]}','{$_POST["Q16"]}','{$_POST["Q17"]}','{$_POST["Q18"]}','{$_POST["Q19"]}','{$_POST["Q20"]}','{$_POST["Q21"]}','{$_POST["Q22"]}','{$_POST["Q23"]}','{$_POST["Q24"]}','{$_POST["Q25"]}','{$_POST["Q26"]}','{$_POST["Q27"]}','{$_POST["Q28"]}','{$_POST["Q29"]}','{$_POST["Q30"]}','{$_POST["Q31"]}','{$_POST["Q32"]}','{$_POST["Q33"]}','{$_POST["Q34"]}','{$_POST["Q35"]}','{$_POST["Q36"]}','{$_POST["Q37"]}','{$Q38}','{$_POST["Q41"]}','{$_POST["Q42"]}','{$_POST["Q43"]}','{$_POST["Q44"]}','{$_POST["Q45"]}','{$_POST["Q46"]}','{$_POST["Q47"]}','{$_POST["Q48"]}','{$_POST["Q49"]}','{$_POST["Q50"]}','{$_POST["Q51"]}','{$_POST["Q52"]}','{$_POST["Q53"]}','{$_POST["Q54"]}','{$_POST["Q55"]}','{$_POST["Q56"]}','{$_POST["Q57"]}','{$_POST["Q58"]}','{$_POST["Q59"]}','{$_POST["Q60"]}','{$_POST["Q61"]}','{$_POST["Q62"]}','{$_POST["Q63"]}','{$_POST["Q64"]}','{$_POST["Q65"]}','{$_POST["Q66"]}','{$_POST["Q67"]}','{$_POST["Q68"]}','{$_POST["Q69"]}','{$_POST["Q70"]}','{$Q71}','{$_POST["Q81"]}','{$_POST["Q82"]}','{$_POST["Q83"]}','{$_POST["Q84"]}','{$_POST["Q85"]}','{$_POST["Q86"]}','{$_POST["Q87"]}','{$_POST["Q88"]}')";//mysql_query 関数に SELECT 文を記述した関数と$mysql_con の MySQL の接続情報を引数に与えてクエリを実行する$result = mysql_query ($sql,$mysql_con);if ($result == false) {print "Data Insert Error!";exit;}////////////////////////////////answer テーブルへデータを追加する/////////////////////////////////////////

80

////////////////////////////////all_graph テーブルへデータを追加する/////////////////////////////////////////
if($Q38 < 5){$Q38 = $Q38 -4.5;}
else{$Q38 = ($Q38-5)*0.125+0.5+50;}
if($Q71 < 3){$Q71 = $Q71-2.5;}
else{$Q71 = ($Q71-3)*0.074+0.5+50;}$sum = $Q38 + $Q71;
if ($times == 1){//answer テーブルへデータを追加する$sql = "INSERT INTO all_graph VALUES ('{$_SESSION["ID"]}','{$Q38}','{$Q71}','{$sum}')";}
else{//all_graph テーブルへデータを更新する$sql = "UPDATE all_graph SET Q38='{$Q38}', Q71='{$Q71}', sum='{$sum}'
ID='{$_SESSION["ID"]}'";
}

WHERE

//mysql_query 関数に SELECT 文を記述した関数と$mysql_con の MySQL の接続情報を引数に与えてクエリを実行する$result = mysql_query ($sql,$mysql_con);if ($result == false) {print "Data Insert Error!!2 {$sum}";exit;}////////////////////////////////all_graph テーブルへデータを追加する/////////////////////////////////////////?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>診断結果</title><link href="../style.css" rel="stylesheet" type="text/css" /></head><body><div id="head"><h1>安全運転カウンセリング</h1><h2>芝浦工業大学 春日研究室</h2></div><div id="nav2"><ul></ul></div><div id="base"><div id="main"><center><h1>今回の診断結果</h1></center><br><?php//急性ストレス
if($sum1 != 0){
print"<center><h3>急性ストレスについて</h3></center>";//はいが５個以上の場合
if($Q38 >= 0.5){
print" あなたの過去 1 年間はストレスの高い 1 年間でした。そのため、その心理的、肉体的影響が現在のあなたに表れているはずです。こうした状態で運転していると、集中力が切れやすく、また交通違反も犯しやすく、それによる事故も多いことが分かっているので注意しましょう。<br>";}else{
print" あなたは今、あまり急性ストレスを抱えていないようです。<br>";}}//慢性ストレス
print"<br><center><h3>慢性ストレスについて</h3></center>";81

//はいが５個以上の場合
if($Q71 >= 0.5){
print" あなたは今、高い慢性ストレス状態にあります。こうした状態で運転していると、安全確認行動を怠りやすくなりヒヤリハットを起こしやすいことがわかっています。特に注意しなければならない対象物に気づかないことによる危険が発生しやすくなります。また、心配事をかかえながら運転して、運転中に苛立ちや焦りを感じやすいので、そうした事のないよう、自分をコントロールしましょう。<br>";}else{
print" あなたは今、あまり慢性ストレスを抱えていないようです。<br>";}//選択肢による分類
print"<br><center><h3>あなたのヒヤリハットタイプ</h3></center>";if($_POST["Q82"] == " わからない "){if($_POST["Q83"] == " その他 "){print" あなたの最近のヒヤリハット傾向はさまざまな原因によって引き起こされているようですね。
<br>
現状でのヒヤリハットは様々な理由によって起こる傾向があるので、常に安全確認を怠らないようにしましょう。また、ヒヤリハットは発生時間帯によって起こりやすい種類や原因が異なります。ヒヤリハットの発生時間も気にしてみましょう。自分の傾向とヒヤリハットの防止にきっと役立ちます。";}
else{
print" あなたの最近のヒヤリハット傾向は<font color=¥"#FF0000¥">{$_POST["Q83"]}</font>で起きている事が多いようです。<br>";if($_POST["Q83"] == " 左折時 "){print" {$sasetu}";}elseif($_POST["Q83"] == " 車線変更時 "){ print" {$syasenhenkou}";}
elseif($_POST["Q83"] == " 直進時 "){print" {$tyokusin}"; }print"<br> また、ヒヤリハットは発生時間帯によっても起こりやすい種類や原因が異なります。ヒ
ヤリハットの発生時間も気にしてみましょう。ヒヤリハットの防止にきっと役立ちます。";}}
elseif($_POST["Q83"] == " その他 "){print" あなたの最近のヒヤリハット傾向は<font color=¥"#FF0000¥">{$_POST["Q82"]}</font>にさまざまな原因によって引き起こされている事が多いようです。<br>";if($_POST["Q82"] == " 15 分以内 "){print" {$sasetu}";}elseif($_POST["Q82"] == " 15～30 分 "){print" {$thirty}";}elseif($_POST["Q82"] == " 30～45 分 "){print" {$forty_five}"; }elseif($_POST["Q82"] == " 45～60 分 "){print" {$sixty}";}elseif($_POST["Q82"] == " 60 分以上 "){print" {$over_sixty}";}print"<br> ここにあげたのは特に起こりやすい状況です。もちろんこれ以外の状況や理由でもヒヤリハットや事故は起きていますので、常に安全確認を怠らないことが大切です。";}
else{
print" あなたの最近のヒヤリハット傾向は<font color=¥"#FF0000¥">{$_POST["Q82"]}</font>に<fontcolor=¥"#FF0000¥">{$_POST["Q83"]}</font>で起きている事が多いようです。<br>";if($_POST["Q82"] == " 15 分以内 "){print" {$fifteen}";}elseif($_POST["Q82"] == " 15～30 分 "){print" {$thirty}";}elseif($_POST["Q82"] == " 30～45 分 "){print" {$forty_five}"; }elseif($_POST["Q82"] == " 45～60 分 "){print" {$sixty}";}elseif($_POST["Q82"] == " 60 分以上 "){print" {$over_sixty}";}print"<br> また、";
if($_POST["Q83"] == " 左折時 "){print"{$sasetu}";}elseif($_POST["Q83"] == " 車線変更時 "){ print"{$syasenhenkou}";}
elseif($_POST["Q83"] == " 直進時 "){print"{$tyokusin}";}}//高齢女性ドライバー
if($_SESSION["age"] >= 65 && $_SESSION["sex"] == 2){
print"<br><center><h3>女性高齢ドライバーへのアドバイス</h3></center>";
print" 女性高齢ドライバーは特に、交差点などまわりに他車や歩行者が多いところでは、危険に気づきにくい
ことがわかっています。そうした混雑した場所では、特に注意して、そして落ち着いて運転しましょう。<br>";}82

//高齢者

elseif($_SESSION["age"] >= 65){
print"<br><center><h3>高齢者ドライバーへのアドバイス</h3></center>";
print" 高齢者ドライバーは交差点などまわりに他車や歩行者が多いところでは、危険に気づきにく
いことがわかっています。そうした混雑した場所では、特に注意して、そして落ち着いて運転しましょう。<br>";}//女性

elseif($_SESSION["sex"] == 2){
print"<br><center><h3>女性ドライバーへのアドバイス</h3></center>";
print" 女性ドライバーは交差点などまわりに他車や歩行者が多いところでは、危険に気づきにくいことがわかっています。そうした混雑した場所では、特に注意して、そして落ち着いて運転しましょう。<br>";}?><br><br><center><A Href="../main/main.php"><Img Src="../gazou/home.jpg" Border="0"></A></center></div><address>
Copyright (C) 2010 Kasuga-Lab of Shibaura Institute of Technology All Rights Reserved.
</address></div></body></html>----- kakunin.php -------------------------------------------------------------------------------------------------------------------------メインページ----- main.php -----------------------------------------------------------------------------------------------------------------------------<?php//セッションを開始する
session_start();if (!isset($_SESSION["name"])){$login_url = "../login/login.php";
header("Location: {$login_url}");
exit;
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>安全運転カウンセリングシステム</title><link href="../style.css" rel="stylesheet" type="text/css" /></head><body><div id="head"><h1>安全運転カウンセリング</h1><h2>芝浦工業大学 春日研究室</h2></div><div id="nav"><ul style="list-style-type: none"><li><a href="main.php">HOME</a></li><li><a href="../stress/Q_S.php">診断を受ける</a></li><li><a href="kiloku.php">過去の結果を見る</a></li><li><a href="all.php">全体での順位を見る</a></li><li><a href="../login/revision.php">プロフィールの変更</a></li><li><a href="anke-to.php">アンケート</a></li><li><a href="../login/logout.php">ログアウト</a></li></ul></div><div id="base"><div id="main"><div id="side"><h3>メインメニュー</h3><div class="side_box">83

<div class="side_inbox"><ul class="side_menu" style="list-style-type: none"><li><a href="main.php">トップページ</a></li><li><a href="../stress/Q_S.php">診断を受ける</a></li><li><a href="kiloku.php">過去の結果を見る</a></li><li><a href="all.php">全体での順位を見る</a></li><li><a href="../login/revision.php">プロフィールの変更</a></li><li><a href="anke-to.php">アンケート</a></li><li><a href="../login/logout.php">ログアウト</a></li></ul></div></div><div class="side_box"><h3>リンク</h3><div class="side_inbox"><p><a href="http://www.shibaura-it.ac.jp/" target="_blank">芝浦工業大学</a></p><p><a href="http://www.sic.shibaura-it.ac.jp/~nobuyo/" target="_blank">春日研究室</a></p></div></div></div><div id="content"><img src="../gazou/main.jpg"><br><?php
print"<h1>{$_SESSION["name"]}さん、ようこそ！</h1>";
if($_SESSION["times"] == ''){
print"<p> はじめてのご利用ありがとうございます。<br>
左の<b>「診断を受ける」</b>ボタンを押して、まずは診断を受けてみませんか？<br> 現在の心理状態と運転危険要因について理解してみましょう。</p>";}elseif($_SESSION["times"] >= 1){ $num = $_SESSION["times"]+1;
print"<p> {$num}回目の診断を受けてみませんか？<br>
現在の心理状態と運転危険要因について理解してみましょう。<br>
また、左の<b>「全体での順位を見る」</b>ボタンを押すと、最新の結果に応じたタイ
プ分類とアクセス者全体での自分の安全運転位置がわかります。</p>";}?><h2>ヒヤリハットとは?</h2><p> ヒヤリハットとは運転中に事故が起きそうな状況に出会い、ヒヤリとしたり、ハッとしたりすることを言います。ハインリッヒの法則によると、1 件の死亡事故の背景には、29 件の軽症事故、300 件のヒヤリハットが存在しています。ヒヤ
リハットを防ぐことは、事故の予防になります。このサイトではヒヤリハットに注目して、アドバイスを行います。</p><center><img src="../gazou/H_H.bmp"></center></div></div><address>
Copyright (C) 2010 Kasuga-Lab of Shibaura Institute of Technology All Rights Reserved.
</address></div></body></html>----- main.php -----------------------------------------------------------------------------------------------------------------------------過去の結果表示----- kiloku.php ----------------------------------------------------------------------------------------------------------------------------<?php//セッションを開始する
session_start();if (!isset($_SESSION["name"])){$login_url = "../login/login.php";
header("Location: {$login_url}");
exit;
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html>

84

<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>過去の結果</title><link href="../style.css" rel="stylesheet" type="text/css" /></head><body><div id="head"><h1>安全運転カウンセリング</h1><h2>芝浦工業大学 春日研究室</h2></div><div id="nav"><ul><li><a href="main.php">HOME</a></li><li><a href="../stress/Q_S.php">診断を受ける</a></li><li><a href="kiloku.php">過去の結果を見る</a></li><li><a href="all.php">全体での順位を見る</a></li><li><a href="../login/revision.php">プロフィールの変更</a></li><li><a href="anke-to.php">アンケート</a></li><li><a href="../login/logout.php">ログアウト</a></li></ul></div><div id="base"><div id="main"><center><h2>過去の結果</h2><?php
if($_SESSION["times"]==''){
print"<br><font color=¥"red¥">１回以上</font>診断に答えると過去の結果が表示されます。<br><br>";}elseif($_SESSION["times"]>=1){
print"<form method=¥"post¥"><table border=¥"0¥" cellspacing=¥"0¥"><tr bgcolor=¥"#FF8C00¥" height=¥"30¥" align=center><th><font color=¥"#000000¥">アクセス回数</font></th><th><font color=¥"#000000¥">診断日</font></th><th><font color=¥"#000000¥">回答内容</font></th></tr>";//初期値の設定$i=0;//MySQL へ接続$mysql_con = mysql_connect ("localhost","dbuser","pass");if ($mysql_con == false) {print "DB_Connect Error!";exit;}//MySQL のデータベースを選択$select_db = mysql_select_db ("database",$mysql_con);if ($select_db == false) {print "DB_SELECT Error!";exit;}//answer テーブルの中から入力したデータを取得する。
$sql = "SELECT times, day, Q38,Q71 FROM answer WHERE ID ='{$_SESSION["ID"]}'";//mysql_query 関数に SELECT 文を記述した関数と$mysql_con の MySQL の接続情報を引数に与えてクエリを実行する$result = mysql_query ($sql,$mysql_con);while ($row = mysql_fetch_array ($result)) {if($i%2 == 0){print "<tr bgcolor = ¥"#FFE4C4¥" height=¥"25¥">";}
else{print "<tr bgcolor = ¥"#FFFFFF¥" height=¥"25¥">";}
print"<tdalign=center
width=100> 第 {$row["times"]} 回 目 </td><tdalign=center
width=240>{$row["day"]}</td><td align=center width=100><INPUT type=¥"submit¥" name=¥"{$row["times"]}¥" value=¥" 詳 細 ¥"onClick=¥"form.action='log.php';return true¥"></center></td></tr>";85

print"//session 関数の製作$i++;$_SESSION["QS{$i}"] = $row["Q38"];$_SESSION["MS{$i}"] = $row["Q71"];}</table></form><br><br>";print"<h3>急性ストレス推移</h3><table><tr><td><img src=¥"../gazou/Q_S.PNG¥"></td><td><img src=¥"graph_Q.php¥"></td></tr><tr><td></td><td><center><img src=¥"../gazou/kaisu.PNG¥"></center></td></tr></table>※<font color=¥"red¥">赤線</font>以上は高い急性ストレス状態です。<br><br><br>";print"<h3>慢性ストレス推移</h3><table><tr><td><img src=¥"../gazou/M_S.PNG¥"></td><td><img src=¥"graph_M.php¥"></td></tr><tr><td></td><td><center><img src=¥"../gazou/kaisu.PNG¥"></center></td></tr></table>※<font color=¥"red¥">赤線</font>以上は高い慢性ストレス状態です。<br><br><br>";}?><form method="post"><input type="image" name="home" src="../gazou/home.jpg" onClick="form.action='main.php';return true"></form></center></div><address>
Copyright (C) 2010 Kasuga-Lab of Shibaura Institute of Technology All Rights Reserved.
</address></div></body></html>----- kiloku.php ----------------------------------------------------------------------------------------------------------------------------慢性グラフ----- graph_M.php ------------------------------------------------------------------------------------------------------------------------<?php//セッションを開始する
session_start();// We need some datafor ($i = 1; $i <= $_SESSION["times"]; $i++) {$ydata[$i-1] = $_SESSION["MS{$i}"];}include ("../jpgraph/jpgraph.php");
include ("../jpgraph/jpgraph_bar.php");// Setup the graph.
$graph = new Graph(500,330);$graph->img->SetMargin(25,20,10,25);$graph->SetScale("textlin",0,40);$graph->SetMarginColor("#FFFFFF");$graph->SetFrame(false);// Show 0 label on Y-axis (default is not to show)$graph->yscale->ticks->SupressZeroLabel(false);// Setup X-axis labels$graph->xaxis->SetTickLabels($datax);// Create the bar pot$bplot = new BarPlot($ydata);$bplot->SetWidth(0.6);// Setup color for gradient fill style$bplot->SetFillGradient("navy:0.9","navy:1.85",GRAD_LEFT_REFLECTION);// Set color for the frame of each bar$bplot->SetColor("white");$graph->Add($bplot);// Add band86

$band = new PlotBand(HORIZONTAL,BAND_SOLID,3,3.15,'red');$band->ShowFrame(false);$band->SetOrder(DEPTH_FRONT);$graph->AddBand($band);// Finally send the graph to the browser$graph->Stroke();?>----- graph_M.php ------------------------------------------------------------------------------------------------------------------------全体の順位----- all.php ---------------------------------------------------------------------------------------------------------------------------------<?php//セッションを開始する
session_start();if (!isset($_SESSION["name"])){$login_url = "../login/login.php";
header("Location: {$login_url}");
exit;
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>全体での順位</title><link href="../style.css" rel="stylesheet" type="text/css" /></head><body><div id="head"><h1>安全運転カウンセリング</h1><h2>芝浦工業大学 春日研究室</h2></div><div id="nav"><ul><li><a href="main.php">HOME</a></li><li><a href="../stress/Q_S.php">診断を受ける</a></li><li><a href="kiloku.php">過去の結果を見る</a></li><li><a href="all.php">全体での順位を見る</a></li><li><a href="../login/revision.php">プロフィールの変更</a></li><li><a href="anke-to.php">アンケート</a></li><li><a href="../login/logout.php">ログアウト</a></li></ul></div><div id="base"><div id="main"><center><h1>全体での順位</h1>
<br>
<?php
//MySQL へ接続$mysql_con = mysql_connect ("localhost","dbuser","pass");if ($mysql_con == false) {print "DB_Connect Error!";exit;}//MySQL のデータベースを選択$select_db = mysql_select_db ("database",$mysql_con);if ($select_db == false) {print "DB_SELECT Error!";exit;}//////////////////////////////////////アクセス者//////////////////////////////////////////////////////all_graph テーブルの中からセクション ID と各々の値を取得する。
$sql = "SELECT ID,Q38, Q71, sum FROM all_graph WHERE ID ='{$_SESSION["ID"]}'";

87

//mysql_query 関数に SELECT 文を記述した関数と$mysql_con の MySQL の接続情報を引数に与えてクエリを実行する$result = mysql_query ($sql,$mysql_con);while ($row = mysql_fetch_array ($result)) {if($row["Q38"] <= 0.5){$_SESSION["ALL_you_Q"] = $row["Q38"];}
else{$_SESSION["ALL_you_Q"] = $row["Q38"]-50;//点数の増加を修正}
if($row["Q71"] <= 0.5){$_SESSION["ALL_you_M"] = $row["Q71"];}
else{$_SESSION["ALL_you_M"] = $row["Q71"]-50;//点数の増加を修正}$sum = $row["sum"];}//////////////////////////////////////アクセス者/////////////////////////////////////////////////////////////////////////////////////////アクセス者以外////////////////////////////////////////////////////all_graph テーブルの中から ID と各々の値を取得する。
$sql = "SELECT ID,Q38, Q71 FROM all_graph GROUP BY ID";//mysql_query 関数に SELECT 文を記述した関数と$mysql_con の MySQL の接続情報を引数に与えてクエリを実行する$result = mysql_query ($sql,$mysql_con);while ($row = mysql_fetch_array ($result)) {$i++;
if($row["Q38"] <= 0.5){$_SESSION["ALL_else_Q{$i}"] = $row["Q38"];}
else{$_SESSION["ALL_else_Q{$i}"] = $row["Q38"]-50;//点数の増加を修正}
if($row["Q71"] <= 0.5){$_SESSION["ALL_else_M{$i}"] = $row["Q71"];}
else{$_SESSION["ALL_else_M{$i}"] = $row["Q71"]-50;//点数の増加を修正}}$_SESSION["ALL_times"] = $i; //プロット個数の指定/////////////////////////////////////アクセス者以外///////////////////////////////////////////////////////////////////////////////////////順位付け////////////////////////////////////////////////////all_graph テーブルの中を昇順に並ぶ変える。
$sql = "SELECT sum,COUNT(*) FROM all_graph WHERE sum <'{$sum}' GROUP BY sum";//mysql_query 関数に SELECT 文を記述した関数と$mysql_con の MySQL の接続情報を引数に与えてクエリを実行する$result = mysql_query ($sql,$mysql_con);$num=1;//初期値の設定
while ($row = mysql_fetch_array ($result)) {$num = $num + $row["COUNT(*)"];}
print"<TABLE cellspacing=¥"2¥" style=¥"border:4px solid #3366ff;¥"><TBODY><TR><TD align=¥"center¥"><TABLE cellspacing=¥"5¥" style=¥"border:1px solid #3366ff;background-color:#F0FFFF;width:100%;height:100%¥"><TBODY><TR><TD style=¥"font:11px;color:#000000;text-align:center¥"><table width=320><tr><td align = left>あなたの<font color=¥"#ff0000¥"><b>安全度順位</b></font>は</td></tr><tr><td align = center><font size=¥"5¥" color=¥"#ff0000¥"> 第{$num}位</font> ／ {$i}名中</td></tr><tr><td align = right>でした。</td></tr></table>88</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><br>";/////////////////////////////////////順位付け//////////////////////////////////////////////////
if($_SESSION["times"]==''){
print"<br><font color=¥"red¥">１回以上</font>診断に答えると全体での順位が表示されます。<br><br>";}elseif($_SESSION["times"]>=1){?><table border=0><tr><td></td><td><center>急性ストレス：高</center></td><td></td></tr><tr><td rowspan="2"> 慢 性 ス ト レ ス ： 低 </td><td rowspan="2"><img src="all_graph.php"></td><td
height="214" valign="bottom">慢性ストレス：高</td></tr><tr><td height="186"><!-- 条件欄 --><table border=0 BGCOLOR="#696969" CELLSPACING="1" CELLPADDING="0"><tr><td><table BGCOLOR="#FFFFFF" CELLPADDING="5"><tr><td align=center><Img Src="../gazou/you.PNG"></td><td>：あなた</td></tr><tr><td align=center><Img Src="../gazou/else.PNG"></td><td>：他のアクセス者のタイプ分類</td></tr></table></td></tr></table></td></tr><tr><td></td><td><center>急性ストレス：低</center></td><td></td></tr></table><center><font color="red">※プロットの数は人数ではありません。あくまでタイプ分類です。</font><br><br><img src="bg2.PNG"><br>タイプ分類図</center><br><br><?php }?>
<form method="post"><input type="image" name="home" src="../gazou/home.jpg" onClick="form.action='main.php';return true"></form></center></div><address>
Copyright (C) 2010 Kasuga-Lab of Shibaura Institute of Technology All Rights Reserved.
</address></div></body></html>----- all.php ---------------------------------------------------------------------------------------------------------------------------------順位グラフ----- all_ graph.php ----------------------------------------------------------------------------------------------------------------------<?php//セッションを開始する
session_start();for ($i = 1; $i <= $_SESSION["ALL_times"]; $i++) {$datax2[$i-1] = $_SESSION["ALL_else_M{$i}"];$datay2[$i-1] = $_SESSION["ALL_else_Q{$i}"];}$datax1 = array($_SESSION["ALL_you_M"]);$datay1 = array($_SESSION["ALL_you_Q"]);
include ("../jpgraph/jpgraph.php");
include ("../jpgraph/jpgraph_scatter.php");//グラフの大きさの設定$graph = new Graph(400,400);$graph->SetBackgroundImage("bg.PNG",BGIMG_COPY);//背景色の非表示$graph->SetFrame(false);//グラフの目盛の設定 function SetScale($aAxisType,$aYMin,$aYMax,$aXMin,$aXMax)$graph->SetScale("intint", -5, 5, -3, 3);89

//グラフの余白の設定 SetScale(left,right,top,bottom)$graph->img->SetMargin(21,22,35,40);$graph->ygrid->Show(false);//軸の太さの設定$graph->xaxis->SetWeight(0);$graph->yaxis->SetWeight(0);//軸の色の設定 array(red, gree, blue)$graph->xaxis->SetColor(array(00, 00, 00));$graph->yaxis->SetColor(array(00, 00, 00));//グラフの値を非表示$graph->xaxis->HideLabels();$graph->yaxis->HideLabels();//グラフの目盛を非表示$graph->xaxis->HideTicks();$graph->yaxis->HideTicks();//プロットの書式$sp1 = new ScatterPlot($datay1,$datax1);$sp1->mark->SetType(MARK_FILLEDCIRCLE);$sp1->mark->SetFillColor("red");$sp1->mark->SetWidth(7);$sp2 = new ScatterPlot($datay2,$datax2);$sp2->mark->SetFillColor("blue");$sp2->mark->SetWidth(5);$graph->Add($sp2);$graph->Add($sp1);$graph->Stroke();?>----- all_ graph.php ----------------------------------------------------------------------------------------------------------------------スタイルシート----- style.css -------------------------------------------------------------------------------------------------------------------------------@charset "utf-8";*{margin:0; padding:0;}
body {
background-attachment: fixed;
background-color: #FFFFFF;
background-image: url(img/bg.jpg);
background-repeat: repeat-x;
background-position: top;
text-align:center;margin: 0;
line-height: 150%;}#base {
width: 900px;
margin-right: auto;
margin-left: auto;
background-color: #FFFFFF;
background-attachment: fixed;
border-right-width: 1px;
border-left-width: 1px;
border-right-style: solid;
border-left-style: solid;
border-right-color: #000000;
border-left-color: #000000;}#main {
width: 860px;
float: left;
background-color: #FFFFFF;
padding-left: 20px;
padding-right: 20px;
padding-top: 20px;

90}#main h2 {}#main h3 {}#main h4 {padding-bottom: 20px;
text-align:left;
font-size: 32px;
color: #000000;
line-height: 150%;
font-size: 24px;
color: #000000;
line-height: 150%;
font-size: 20px;
color: #000000;
line-height: 150%;}#main h5 a{
font-size: 16px;
line-height: 28px;
text-decoration: none;}#main h5 a:hover {color: #4169E1;
border-bottom-width: 1px;
border-bottom-style: solid;
border-bottom-color: #4169E1;}#content {float: right;
width: 640px;
padding-bottom: 5px;
position: relative;
margin-right:-8px;
margin-top:-11px;}#content h1 {
font-size: 16px;
padding-left: 10px;
color: #3F3F3F;
margin-top: 10px;
margin-bottom: 5px;
margin-right: 10px;
margin-left: 5px;
font-weight: bold;border-left-width: 7px;
border-left-style: solid;
border-left-color: #B3BDA8;
border-bottom-width: 1px;
border-bottom-style: solid;
border-bottom-color: #EAEAEA;
padding-top: 2px;
padding-bottom: 2px;}
#content h2 {font-size: 16px;
border-left-width: 5px;
border-left-style: solid;
border-left-color: #A9B59B;
padding-left: 7px;
color: #555555;
line-height: 24px;
margin-top: 15px;

91

margin-bottom: 1px;
margin-left: 13px;}#content p{
padding-top: 6px;
padding-bottom: 5px;
background-image: url(img/note_line.gif);margin-right: 30px;
margin-left: 30px;
line-height: 24px;
padding-right: 10px;
padding-left: 10px;
margin-top: 3px;
margin-bottom: 10px;}#content2 {padding-bottom: 5px;
position: relative;
margin-right:120px;
margin-left:120px;}#content2 h2 {font-size: 16px;
border-left-width: 5px;
border-left-style: solid;
border-left-color: #A9B59B;
padding-left: 7px;
color: #555555;
line-height: 24px;
margin-top: 15px;
margin-bottom: 1px;
margin-left: 13px;}#content2 p{
padding-top: 6px;
padding-bottom: 5px;
background-image: url(img/note_line.gif);margin-right: 30px;
margin-left: 30px;
line-height: 24px;
padding-right: 10px;
padding-left: 10px;
margin-top: 3px;
margin-bottom: 10px;}/*
ヘット-------------------------------------------------------------------*/#head {
background-image: url(img/head.jpg);height: 136px;
width: 902px;
position: relative;
background-repeat: no-repeat;background-color: #FFFFFF;
margin-right: auto;
margin-left: auto;}#head h1 {
font-size: 43px;
position: absolute;
top: 50px;
left: 25px;
font-weight: normal;

92

}#head h2 {line-height: 45px;
color: #FFFFFF;
position: absolute;
right: 18px;
bottom: 6px;
font-size: 16px;
font-family:'HGP 行書体',cursive;color: #FFFFFF;}/*
ナビ-------------------------------------------------------------------*/#nav {
width: 902px;
height: 25px;
margin-right: auto;
margin-left: auto;
background-image: url(img/nav.gif);
padding-top: 5px;
padding-bottom: 1px;
text-align:left;
font-weight:bold;/*---太字---*/}#nav ul {list-style-type:none;
display: block;
margin-left: 13px;}#nav li {display: inline;}#nav li a {color: #000000;
font-size: 14px;
line-height: 18px;
text-decoration: none;background-image: url(img/li.gif);background-repeat: no-repeat;background-position: 10px center;padding-left: 17px;
padding-right: 3px;
padding-top: 3px;
border-left-width: 1px;
border-left-style: solid;
border-left-color: #666666;}#nav li a:hover {color: #000000;
background-image: url(img/li_ov.gif);background-color: #8EFFFF;
border-bottom-width: 2px;
border-bottom-style: solid;
border-bottom-color: #8EFFFF;}#nav2 {
width: 902px;
margin-right: auto;
margin-left: auto;
background-image: url(img/nav2.gif);height: 8px;}
table {

93

line-height: 150%;
text-align:left;

}
/*
サイド
-------------------------------------------*/#side {
background-color: #E6E6FA;
padding: 5px;
float: left;
width: 220px;
position: relative;
margin-left:-8px;
margin-top:-11px;}#side h3 {font-size: 16px;
line-height: 20px;
color: #FFFFFF;
background-image: url(img/h3.gif);height: 20px;
padding-bottom: 4px;
font-weight: normal;
text-indent: 20px;
margin-bottom: 1px;
padding-top: 2px;
font-weight:bold;/*---太字---*/
font-family:'Gulim',sans-serif;}#side .side_box {background-image: url(img/side_box.gif);background-repeat: repeat-x;
background-position: top;width: 210px;
border: 1px solid #C5C5BE;
margin-bottom: 5px;
background-color: #F1F1ED;
padding-top: 5px;
padding-right: 4px;
padding-bottom: 10px;
padding-left: 4px;}
#side .side_box h3 {background-color: #638F9D;
background-image: none;line-height: 18px;
text-indent: 5px;
height: 18px;
border-left-width: 5px;
border-left-style: solid;
border-left-color: #66B8CF;
padding-top: 1px;
padding-right: 0px;
padding-bottom: 1px;
padding-left: 0px;}
#side .side_box .side_inbox {background-image: url(img/side_inbox.gif);background-repeat: repeat-x;
background-position: bottom;
border: 1px solid #D6D5CB;
width: 200px;
padding-top: 5px;
padding-bottom: 10px;94

background-color: #FFFFFF;
margin-right: auto;
margin-left: auto;}#side .side_menu li {line-height:0;}#side .side_menu li a {display: block;font-size: 14px;
line-height: 18px;
color: #14130C;
text-decoration: none; /*下線を消す*/
background-color: #FFFFFF;
width: 166px;
margin-right: auto;
margin-left: auto;
padding-top: 3px;
padding-right: 5px;
padding-bottom: 3px;
padding-left: 27px;
border-bottom-width: 1px;
border-bottom-style: solid;
border-bottom-color: #E7E7E0;
background-image: url(img/side_li.gif);background-position: 8px center;background-repeat: no-repeat;border-top-width: 1px;
border-top-style: solid;
border-top-color: #FFFFFF;}#side .side_menu li a:hover {background-color: #3535FF;
color: #FFFFFF;
background-image: url(img/side_li_ov.gif);}#side .side_box .side_inbox p {margin-top: 8px;
margin-right: 10px;
margin-bottom: 0px;
margin-left: 10px;
font-size: 14px;
line-height:110%;}/*
コピーライト-------------------------------------------------------------------*/#kankeisya {font-size: 13px;
margin-top: 8px;
margin-right: 10px;}
address {font-style: normal;
color: #FFFFFF;
text-align: center;
display: block;background-color: #696969;
font-size: 12px;
line-height: 30px;}----- style.css --------------------------------------------------------------------------------------------------------------------------------

95

第二章
ドライブレコーダ映像を用いた運転手の動作解析

慶應義塾大学 青木義満 尾山啓介

96

第1章
序論
本章では， ITS の開発分野の中でも特に安全性の向上を図ることができる運転支援システムに焦点を当て， 本研究の背景， 及び位置付けを示す. 更に， 本研究の目的について説明した後に本論文全体の構成を示す.

1.1

研究背景

1.1.1 日本の道路交通の現状
現代社会において， 自動車交通は最も世界的に普及している交通手段のうちの一つである.しかしその一方で， 数多く発生する交通事故が社会的問題の 1 つになっている.
警視庁交通局の平成 20 年度の道路交通事故による交通事故発生件数，死者数及び負傷者数のグラフによれば平成 20 年の死者数(24 時間以内)は 5155 人であった．
この数は近年減少傾向にあり，
交通事故対策は一見有効に機能しているように思われる．しかしながら，交通事故発生件数は約76 万件，負傷者数は約 95 万人であり，図 1.1 に示すように依然として高い水準を維持している．
この傾向差の理由としては，衝突安全に関する車両技術と救急救命の改善が大きく寄与している[1]．しかしながら，命が助かっても重度の後遺障害者が年間数万人にも上る．今後目指すべきとこ
ろは，交通事故そのものの発生を大幅に減らすことである．そのために，事故を未然に防ぐ予防安全に軸足を移していく必要がある．

図 1.1 道路交通事故による交通事故発生件数，死者数及び負傷者数の推移

97

1.1.2 事故原因

交通事故の原因の一つとして，運転手挙動が挙げられる．図 1.2 は平成 20 年度における原付以

上運転者の起こした事故件数を法令違反別にグラフにしたものである．これによると法令違反による事故の中でも漫然運転や脇見運転，運転操作不適などの運転手挙動が原因と思われる事故が全体の約半数を占めている．これらのことから，現在運転手の身体的もしくは心理的状態を判断する研究が行われている．

図 1.2 法令違反別(第１当事者)死亡事故発生件数

98

1.2

従来研究

運転手の状態判別方法として，これまでの研究では運転手に脳波計を取り付け精神状態を認識するものがある[2]．生体計測機器の取り付けによるものの利点は，運転者お状態を高精度にまた定量的に評価することができる点である．しかし運転時に装置を運転手に接触する必要があり，それらの機器が運転手に影響してしまう可能性がある．
また，カメラを用いた非接触による運転不挙動の研究も行われている[3]．これらの研究は脇見運
転や運転手の覚醒度を推定する目的でおこなわれている．さらに，照明変化にロバストな赤外線画像を用いた研究も行われている[4]．これは赤外線を用いるため運転席の照明変動に関係なく挙動推定を行えるという利点があるが，装置が高価で取り付けが困難という問題点がある．また，運転手の挙動に対する研究もなされている[5]．これは運転手の上半身にマーカを取り付け，それをもとに運転手の姿勢を推定することで，さまざまな環境下でのドライバ挙動を計測し安全なドライブアシストや事故防止機能に役立てるものである．しかし運転手に毎回センサを取り付ける必要があり，
一般ドライバが利用することはほぼ不可能である．また，通常の単眼カメラ映像から運転手の手を追跡している研究もある[6]．しかしこれは手の追跡に背景画像が必要であり，また色と形状の情報
から手領域を判断しているため，ある程度の大きさで手が撮影されている必要があり，運転手上半身の映像から手領域を追跡し，挙動を解析することには向いていません．そこで本研究では，運転手にマーカなどの機器を取り付けることなく，また運転手の上半身全体を撮影した映像から両手を同時に追跡し挙動を推定する．

1.3

研究目的

これらのことから，本研究では運転手にマーカなどの機器を取り付けることなく通常の単眼カメ
ラ映像から非接触で運転手の動作を推定し，運転手動作と事故発生原因の関係を解明することを目的としている．また，このとき背景画像などの入力を必要とせずに映像中の小さな手でも追跡できるようなシステムを目指す．また、手位置追跡と肩検出・肘位置推定を行うことにより運転手の動作を解析し，たとえば片手運転などの場合に警告を発することで事故発生を防止するようなシステ
ムに役立てることを目的としている．

1.4

報告構成

本報告は， 本章を含めて全 6 章で構成されている.
本章では， 本研究の社会的背景， 及び研究の目的について述べ， 本研究の意義を明らかにする.
第 2 章では， 本報告で提案する運転手の手領域軌跡取得手法におけるシステム構成について述べる．またドライブレコーダのカメラ性能，取得動画像について明確に述べる．
第 3 章では， 本手法で使用する処理の流れについて説明する.
第 4 章では， 本手法の有効性を検証するために， 用意された動画像に対して本手法を適用させた実験について述べる.
第 5 章では， 実験結果に基づいて検証を行い， 本手法に関する考察， 検討を述べる.
第 6 章では， 本報告をまとめ， 本研究の成果， 今後の方針について総括的に述べる.

99

第2章
システム概要本章では， 本報告で提案する運転手の動作解析手法におけるシステム構成を示すと同時に， 使用したカメラ性能・適用される動画像について明確に述べる．

2.1

システムの全体像システムの全体像を以下の図 2.1 に示す．トラックの運転席上方に取り付けられたドライブレコーダから得られた動画像を入力とし，可動域推定・手領域追跡・移動軌跡出力の画像処理をへて，手領域の移動軌跡を出力する．

図 2.1 システム全体像

100

2.2

単眼車載カメラ本システムでは， 運転席上方に下向きに取り付けられたカラーの CCD カメラによって取得される動画像を使用する. これらのカメラはともに車両にしっかりと固定されているため，カメラ単体で振動することはほぼないと言える. また， 取得される画像のサイズは 320×240 が 4 画面で，フレームレートは 10fps である. 以下の表 1 に車載カメラの使用を示す．

図 2.2 車載カメラ

表 1 車載カメラの性能
映像素子

1/4 インチ CCD

総画素数

25 万画素水平：約 130°

画角
垂直：約 97°
フレームレート

10fps

解像度

320×240×4

101

また，実際に車載カメラから得られる動画の例を以下の図 2.3，2.4 に示す．図 2.3 がドライブレ
コーダから得られたままの画像，図 2.4 が運転手の手領域追跡のために運転席上方のカメラの映像
のみを抜き出したものである．

図 2.3 ドライブレコーダの映像

図 2.4 運転手上方カメラの映像

102

第3章
手・頭部追跡
本章では， 先ず運転手の手・頭部領域の追跡手法について処理全体の流れを示し， その後各処理について詳しく説明していく.

3.1

処理の流れ

まず，本手法の流れを図 3.1 に示す．前後フレームの差分をとり，その差分を 1 枚の画像に累積することによりピクセルごとの画素値の変化量を評価する．そこから画素変化量の大きい部分を可動域として推定する．
こうして得られた領域において，パーティクルフィルタを用いて運転手の手領域を追跡する．手のモデル画像を読み込み HSV 表色系における H(色相)のモデルヒストグラムを取得する．このヒストグラムを基に，色相ヒストグラムの近いものを追跡する．この色ヒストグラムは，ほかの特著量と比べ，対処物体の向きの変化，回転や歪みなどに対して特徴の変化が少ないという特徴が挙げられる．
また，パーティクルフィルタは重心を同時に複数取得することができないので，対象物体ごとにフィルタを用意することで，複数の物体を同時に追跡することを可能にした．
最後に追跡した手領域の軌跡を 1 枚の画像に出力した．

図 3.1 手領域の移動軌跡取得の流れ

103

3.2

ドライバ可動域推定

ドライバ可動域推定の流れを以下の図 3.2 に示す．今回取得してきたカメラは固定されているため取得動画像において運転手が動いた部分の画素値変化量が大きいと考えられる．

図 3.2 可動域推定の処理フロー
そこで前後フレーム間の画素値の差をとった画像を作成する(図 3.3)．次にその差分を 1 枚の画像に累積することでピクセルごとの画素値の変化量を評価する(図 3.4)．

図 3.3 フレーム間差分画像

図 3.4 差分累積画像

104

次にこの差分累積画像に 2 値化処理をかけ(図 3.5)，その白色領域のうち最大面積のものを運転
手の可動域と推定する(図 3.6)．

図 3.5 2 値化画像

図 3.6 可動域推定画像

105

3.3

パーティクルフィルタ

3.3.1 パーティクルフィルタとは
物体追跡の手法として，パーティクルフィルタが広く用いられている．パーティクル
フィルタは推定に基づく時系列データ解析方法であり，重み(尤度)と運動モデルを持つ
パーティクルを多数用いて追跡を行う．状態推定，重み計算，重み評価の 3 ステップを繰り返す
ことで物体を追跡する．また，パーティクルフィルタの特徴として，多数のパーティクルの平均により物体の追跡を行うことが挙げられる[7][8]．
3.3.2 処理の流れ
Step1 初期設定 対象物体位置を指定し，複数個のパーティクルを発生させる．
Step2 状態推定 パーティクルを運動モデルに従い移動させる．
Step3 重み計算 パーティクルの座標周辺のヒストグラムを取得．ヒストグラムの類
似度を計算して，尤度とする．
Step4 重み評価 パーティクルの尤度を正規化．対象物体の重心を求める．
初期位置を与え，Step2～4 を繰り返し追跡する．対象物体の位置推定，観測により尤度計算をし，尤度評価を行い尤度の高い方にパーティクルを動かすことにより追跡が行われている．図 3.7 にパーティクルフィルタの概念図を示す．

図 3.7 パーティクルフィルタの概念図

3.3.3 初期位置設定

追跡領域の初期位置は動画の 1 フレーム目を HSV 変換することによって、肌色領域を検出することで指定する．この初期位置の周りにパーティクルを配置することから追跡を開始する．

106

図 3.8 原画像

図 3.9 HSV 変換画像

3.3.4 状態推定

3.3.4.1 運動モデル
前フレームまでの位置から，状態を推定して粒子を動かす．尤度の高いパーティクルが存在する座標方向に移動させる．移動させるときには，運動モデルを基に移動させる．
運動モデルは，システムに応じて定める必要がある．線形的な動きだけでなく，非線形な動きにも運動モデルを定めることにより対応できるようになる．このシステムで使用する運動モデルと状態推定の概念図を示す．

式 3.1 パーティクルの運動モデル

107

図 3.10 パーティクルフィルタ(状態推定)の概念図
式 5.1 により，前の位置から，パーティクルを動かす．図 5.4 の矩形内は状態遷移の様子である．前のフレームから運動モデルに従い，パーティクルを動かしている．
3.3.4.2 ノイズパラメータ
運転手の不規則な動き，カメラの動作，照明変動などにより起こり得るノイズに対応するため，
ノイズパラメータを設定する必要がある．下の式はノイズパラメータを考慮した運動モデルである．
自分で上限を定めることが可能で，その中で値を変動させることにより，様々なノイズにも対応できる．

式 3.2 ノイズを考慮した運動モデル
ノイズ設定を行わないと，不意に移動した場合や，急な変化に対応することが出来ない可能性がある．位置や速度の変化を考慮して，ノイズの設定を行うことで運転手の速い動きなどのに対応可能であると考えられる．ノイズパラメータはシステムにより最適な値を設定する必要がある．

108

3.3.4.3 局所探索
選手を探索する場合は，局所探索を行っている．これは，フレーム間の手領域の移動距離は微小であるという前提で行う．パーティクルはこの探索範囲外を探索しないように設定する．画像の全範囲を探索する必要がなくなるため，誤追跡が減少すると考えられる．探索範囲を以下に示す．

図 3.11 探索範囲

3.3.5 重み計算

3.3.5.1 ヒストグラム取得
重みを計算するために，パーティクル周辺のヒストグラムを取得する．ヒストグラムは入力画像の表色系を RGB から HSV に変換し，H(色相)の値により取得する．これは手の色はそれぞれの動画の運転手ごとに決まっているため，色による追跡が有効であると考えたためである．また，色ヒストグラムは，他の特徴量と比べ，対象物体の向きの変化，回転や歪みなどに対して特徴の変化が少ないことが挙げられる．
3.3.5.2 尤度計算
ヒストグラムの類似度を計算し，重みとなる尤度を計算する．類似度の計算には，Bhattacharyya
係数を用いる．Bhattacharyya 係数は，2 つのヒストグラムの類似度を計算する．類似度の計算方法については，以下に示す．

式 3.3 Bhattacharyya 係数

109

Bhattacharyya 係数の計算には，正規化したヒストグラムを用いる．あらかじめ用意した手画像からモデルとなるヒストグラム p を取得し，パーティクルの座標周辺から取得したヒストグラ
ム q と比べる．ヒストグラムのビンごとの乗算の平方を類似度としている．この係数は 2 つのヒ
ストグラム p と q の分布が似ているほど大きな値となり，完全に一致すると S=1 となる．ここでは，Bhattacharyya 係数により算出された値を尤度としている．

3.3.6 重み評価

図 3.12 パーティクルフィルタ(重み評価)の概念図
重みの計算を行った後に，重みの評価を行う．尤度の低いパーティクルは，状態推定に移る前に消滅させる．ここでいう消滅とは，閾値以下の尤度を 0 にすることで，高い尤度の方向にパーテ
ィクルを移動させることを示す．
3.3.6.1 パーティクルの正規化
パーティクルを尤度により正規化する．そのパーティクルの尤度の全体に占める割合を百分率で表す．以下の式に従って正規化を行う．

式 3.4 重み正規化

110

3.3.6.2 重心の算出
追跡して軌跡を取得するためには，物体の重心を求める必要がある．代表点や矩形の中心を重心として扱うことも多いが，ここでは重み付き平均により重心を算出する．正規化した重みと，パー
ティクルの位置情報を使う．これにより，すべてのパーティクルの情報を考慮することができるので，安定して重心を得ることができる．

式 3.5 重心の計算式
重心は，式 3.5 の左式で計算する．すべての重み，そして位置を足し合わせることで重み付き平均を求めることができる．重みは，パーティクルの正規化により累積が 1 になる．

111

3.4

手・頭部領域の分割

顔と手が接近し尤度が下がった場合には HSV 変換を用いてこれらを分離し，重心を再配置する処理を加えることでロバストな検出を目指した．本手法適用の際，パーティクルフィルタが色相情報を使って追跡を行うことから，手と頭部を誤追跡する事例が多くみられた．そこで手・頭部領域が接近した際には，HSV 変換を用いて頭部の平均領域サイズを取得し，その情報をもとに分離する処理をくわえた．

図 3.13 頭部サイズ取得例

112

3.5

肩位置検出
肩領域の検出には，人物検出手法として広く用いられる HOG 特徴を用いた機械学習によるΩ形状検出を採用した．これは機械学習を用いて，人物の肩から頭にかけてのΩ形状を検出するものである．
また，機械学習の手法として Real AdaBoost[9]を用いた． Real AdaBoost は AdaBoost[10][11]発展させた学習方法であり，多数の画像を学習することにより複数の識別器を生成する．この学習により得られた識別器を組み合わせて学習するため，対象物体を高精度に検出する手法として知られる．
一般に，Boosting では正解クラスと非正解クラスの境目，つまり誤検出の可能性がある部分に対して重みを高くし，検出の誤りを最小にしている．さらに，AdaBoost と Real AdaBoost の違いは，弱識別器の評価値の出力である．AdaBoost では，閾値処理により 0 か 1 であったが，Real AdaBoost では，確率密度により正解/非正解の確からしさを計算する．効果的に評価値を算出することで，さらに高精度な識別器が生成可能である．Real AdaBoost の学習の流れを以下に示す．

図 3.14 学習画像113

[学習の流れ]
学習の準備・学習するためのデータセットN個
・データセットは特徴量( x 1 , x 1 3 x N )正解画像 /非正解画像を判断するラベル + 1 / －1を与える
1.学習データの重みD(i)を初期化
1
D(i) =
i = 1,2,3 N
N
2.(1)弱識別器の確率密度Wを計算
W+j = ∑ D(i)i:u i = +1

W－j = ∑ D(i)i:u i =－1

(2)弱識別器の出力
1 W
h ( x ) = ln( + )2 W－(3)弱識別器出力の評価値
Z = 2∑ W+j W－jj

3.Zが最小の弱識別器

h tを選択する

h t = arg min Z
4.学習データの重みを更新する
D t +1 (i) = D t (i) exp[－y i h t ( x i )]D tを正規化する
最終的に強識別器を得る
T

H( x ) = sign[∑ h t ( x )]t =1

ここで使用する特徴量としては，人物検出によく用いられる HOG(Histograms Oriented
Gradients)特徴量を適用した[12][13]．HOG は，輝度の勾配方向をヒストグラム化した特徴量のことで，物体の大まかな形状で対象物体かどうかを判断することが可能である．ここでは，人物の肩から頭にかけてのΩ形状を Real AdaBoost により学習することで肩領域の検出を行っている．HOG 特徴量を取り出すために，cell と block に分割する．cell は 5×5pixels，block は 3×3cells の領域である．
画像サイズを統一した画像から，以下に示す式により，輝度の勾配と強度を算出する．ここで，I(x,y)
は画像の輝度値を，m(x,y)，g(x,y)はそれぞれ輝度の強度，勾配を示す．

114

m( x , y) = fx ( x , y) 2 + fy( x , y) 2g ( x , y) = tan -1 (fy( x , y) / fx ( x , y))fx ( x , y) = I( x + 1, y) - I( x - 1, y)fy( x , y) = I( x , y + 1) - I( x , y - 1)
式 3.6 輝度強度・勾配の計算式
ピクセルごとに計算した輝度勾配・強度をヒストグラムに投票していく．ここでは勾配方向は考える必要がないため，0～180°の勾配を 9 分割し，これをヒストグラムのビン数とする．その後，ヒストグ
ラムを正規化することで，特徴量を取り出す．3×3 のブロックをずらし，オーバーラップさせながら正規化を行っていく．

h' =

h

∑

k
i=0

2

h i +ε(ε= 1)

式 3.7 ヒストグラム正規化の計算式
h は HOG のヒストグラムを，k はブロックの HOG 特徴量の次元数を表す．ここでは，60×30pixelsの画像から HOG 特徴量を取り出しているため，3240 次元の特徴となる．
HOG を特徴量として，Real AdaBoost により学習し生成された識別器により肩領域を検出する．

115

3.6

HOG 特徴量
HOG 特徴量はエッジの勾配を量子化したヒストグラムに，強度を累積する特徴量である．探索ウ

インドウ内を Block と Cell に分割し，オーバーラップしながら特徴を記述する．そのため，物体の大まかな形状を表現可能である．
HOG 特徴量取得の流れを記述する．画像内でウインドウを操作して局所領域の特徴量を取得する．ウ
インドウ内では，まずブロック内の輝度勾配ヒストグラムに，輝度強度を累積する．

図 3.15 学習画像
一般的には Block は 3×3 の Cell で構成される．輝度勾配ヒストグラムは輝度勾配 0-180 度に変換した後，9 方向に量子化するため，1 Cell の次元数は 9 次元となる．1 Block には 9 Cells あるため，Block
あたりの次元数は 81 次元となる．特徴量の取得には，この Block を移動させる．Cell 領域をオーバーラップしながら特徴を抽出する．
特徴取得後，正規化処理によりヒストグラムの形状を整える．正規化処理により，輝度の変動に対応可能である．

以上， 入力動画像から止まれ標識の検出までの流れを示した. 次の章では， 本手法の手領域軌
跡取得を評価するために行った実験を説明する.

116

3.7

肘位置の推定得られた各部位の位置から，上腕と前腕の長さを不変と仮定して肘位置推定を行い出力結果に加えた．
今回の場合，上腕を 100 pixels 前腕を 150 pixels とし，肘は三角関数を用いて推定した(図 3.16 参照)．

図 3.16 肘位置推定

117

第4章
実験
本章では， 第 3 章にて説明した本手法の有効性を示すために， 実際にトラックに取り付けたド
ライブレコーダから得られた動画像を用いて，運転手の上半身各部位の追跡精度を検証する．

4.1 実験と結果
本研究では，運転手肩位置を検出するため，1,500 枚の正解画像と 2,000 枚の非正解画像を用意した．学習画像を基に Real AdaBoost を適用し，識別機を生成した．
今回の実験では，これら学習画像を用い学習した識別器を使用した．実験は，実際の運転映像より得られた動画像に対して行った．
上記手法を適用し，それぞれの追跡位置を線で結んだ結果を図 5 に示す．
また，運転手各部位の目視による検出精度評価を表 2 に示す．

フレーム数
部位

正解数(frame)

検出率(％)(frame)
頭部

600

600

100

肩

600

592

98.7

右手

600

563

93.8

左手

600

535

89.2

表 2．検出結果
右手に比べ左手のほうが検出率が低下しているのは，左手でギア操作をする都合上，カメラ位置から陰になってしまうことが多かったためと考えられる．また，肘位置推定の手法において，肘が外側にあるということを前提としているため，誤推定も多くみられた．今後は関節動作範囲の制約を加えた，より精密な骨格モデルを適用することで精度の向上を図る．

最初に入力動画像について説明する. 取得された動画像は 1 本平均 30 秒の avi 形式で， 画像は非圧縮に変換してあるものを用いた. また， 撮影したカメラは CCD カメラで，入力画像のサイズ
は 320×240pixel×4 画面のうち 1 画面のみを用いた． また，撮影環境は昼間のもののみ用いた．
本実験を用いた環境は以下のようになっている. しかしこの処理はオフライン処理のため，処理時間は莫大な値にならなければさほど問題はない．
○Windows XP○クアッドコア：2.83GHz○メモリ：3.00GB

118

第5章
考察
本章では， 本研究で行った実験から得られた結果を基に， 本手法の問題点・発展に注目してい
く．

5.1

考察
本研究では，路上走行中の自動車に運転席向きに取り付けられた車載ドライブレコーダの単眼カメ

ラ映像から，頭部・肩・手の位置を追跡し運転手の動作解析を試みた．その結果，頭部・手の追跡として Particle Filter を用い，肩検出の手法としてΩ検出を用いることで運転席内における運転手の動作解析を実現した．
本研究は危険動作をリアルタイムに警告するシステムのほか，熟練ドライバと初心者ドライバの運転動作の違いなど，従来のハンドル操作量の評価などとは違った運転評価を可能にするという点においても有用なものであると考える．
このような，単眼カメラを用いた運転手動作のロバストな解析を行い，リアルタイムでの危険動作警告システムを提案することができれば，今後，自動車事故の大幅な削減に貢献することが可能と考える
ここではオフラインでの処理であったが，今後はリアルタイムで危険動作を警告するシステムを目指す予定である．

119

第6章
結論
本章では， 本論文で提案した手法の有効性や実験結果を総合的に示す. また， そこから今後の発展や方針を述べる.

120

6.1 おわりにこの研究は運転手の手領域を追跡することが目的ではない．手領域の軌跡を取得することにより運転手の運転挙動特徴を推定し，それと事故との相関関係を調べることにより，将来的にはドライブレコーダ映像の取得からリアルタイムで運転手に危険を警告できるようなシステ
ムを目標としている．本論文における運転手の手移動軌跡の書き出しはその第一歩であり，これからその情報をもとに運転の安全性や手がハンドルやギアなどのどの機器におかれているのかを推定していく．
本実験の結果得られた手領域の追跡精度は 89.4%であったが，安全運転を評価する上で決して高いといえる結果ではなく，また近い色ヒストグラムを持つ腕領域を追跡してしまうなどの課題も多い．
そのため，今後の研究では手領域の追跡精度を高めるとともに，この手領域の軌跡という情報と，実際の事故発生との相関をさぐり，安全運転を評価できるようなシステムを開発していくつもりで
ある．

121

参考文献
参考文献
[1] 内閣府， 平成 17 年度版交通安全白書(http://www8.cao.go.jp/koutu/taisaku/h17kou_haku/gaiyouindex.html)度[2]鳥丸寛, “脳波・心拍による認知・反応時間の遅延発生状況の推測についての検討”，自動車技術会，
no.51,pp5-6,2004[3]瀬谷,中易,“自動車運転作業時の眼球運動解析による視覚探索法略に関する研究”,電子情報通信学会
技術研究報告, HIP107(369), pp.125-130,2007[4]小西,黒木,“近赤外線パルス照明とステレオカメラを用いた運転手の頭部追跡手法”,信学技法,Vol.105,No.259,pp19-23,2005[5] 福間,前田,”自動車ドライバ挙動解析のための光学式モーションキャプチャの開発と評価”映像情報メディア学会技術報告,33(20),13-16,2009.05[6McAllister, G.; McKenna, S.J.; Ricketts, I.W.;"Towards a non-contact driver-vehicle
interface",ITSC,1-3 Oct. 2000 Page(s):58 - 63,2000.10][7]Michael Isard, Andrew Blake, “CONDENSATION – Conditional DensityPropagation for Visual
Tracking”, International Journal of Computer Vision29(1),5-28(1998)[8] Hirokatsu Kataoka,Yoshimitsu Aoki, ”Robust Tracking of Multiple Football Players Considering
Occlusion and Crowded Situations”,ACCV2009 Workshop VCAS2009, IW2-6,September 2009[9] Friedman. J. H, Hastie. T, Tibshirani. R, “Additive Logistic Regression”, a Statistical
View of Boosting. Technical Report. Dept. of Statistics, Stanford University, 1998
[10] Y. Freund, R. E. Schapire, “A decision-theoretic generalization of on-line learning and an
application to boosting”, Computational Learning Theory, Eurocolt, pp.23 – 27, 1995
[11] Hastie. T, Tibshirani. R, Friedman. J. H, “The Elements of Statistical”, Learning, Data Mining,Inference and Prediction, Springer Series in Statistics, 2001[12] N Dalal,B Triggs, “Histograms of oriented gradients for human detection”, IEEE Conference on
Computer Vision and Pattern Recognition (CVPR), pp.886-893, 2005
[13]藤吉弘亘,”Gradient ベースの特徴抽出-SIFT と HOG-”,情報処理学会研究報告 CVIM160,
pp.211-224, 2007122