以下に添付図面を参照して、本発明にかかるデータ管理装置、データ管理方法、およびデータ管理プログラムの好適な実施の形態を詳細に説明する。
図1は、本実施の形態にかかるドライブレコーダの使用方法の概要を示す説明図である。車両101は、カメラ102、車両制御装置103、データ管理装置104、センサー105を搭載している。車両101は、ドライブレコーダを搭載する自動車を示す。カメラ102は、車両101の進行方向の映像を記録し、車両制御装置103に送信する。カメラ102は、車両101の進行方向だけでなく、後退方向にあってもよい。後退方向にカメラ102が存在する場合、たとえば、後ろからの追突時の映像を記憶することができる。
車両制御装置103は、車両101を操作する運転者からの指示を受信し、各動力部に動作命令を送信する。また、車両制御装置103は、カメラ102、データ管理装置104、センサー105を制御する。また、車両制御装置103は、センサー105の計測結果に基づいて、データ管理装置104に事故が発生したことを通知する。データ管理装置104は、ドライブレコーダの機能を含む装置で、カメラ102からの映像を記録し、それに対する署名を行う。データ管理装置104の詳細の説明は図2、図3にて後述する。
センサー105は、車両101の各種状態を測るセンサー群である。具体的には、たとえば、車両101の速度、加速度、角速度、温度、湿度等を計測し、車両制御装置103に送信する。たとえば、急加速、急停止が行われた際の計測値の変化によって、車両制御装置103は、データ管理装置104に事故が発生したことを通知する。
(データ管理装置のハードウェア構成)
図2は、データ管理装置104のハードウェア構成を示すブロック図である。図2において、データ管理装置104は、CPU(Central Processing Unit)201と、ROM(Read‐Only Memory)202と、RAM(Random Access Memory)203と、を備えている。また、記憶装置として、データ管理装置104は、フラッシュROM204を備えている。また、ユーザやその他の機器との入出力装置として、データ管理装置104は、ディスプレイ205と、I/F(Interface)206と、を備えている。また、各構成部はバス200によってそれぞれ接続されている。
ここで、CPU201は、データ管理装置104の全体の制御を司る。ROM202は、ブートプログラムなどのプログラムを記憶している。RAM203は、CPU201のワークエリアとして使用される。また、同図には図示していないが、後述するハッシュ処理を専門に行うためのPLD(Programmable Logic Device)があってもよい。
フラッシュROM204は、書き換えが可能であり、電源を切ってもデータが消えないという特徴を持つ不揮発性の半導体メモリである。フラッシュROM204は、カメラ102からの映像や、映像に対する署名情報を記録する。また、アプリケーションプログラムを記憶してもよい。フラッシュROM204の代わりに、磁気ディスクであるHDD(ハードディスクドライブ)にて記憶してもよいが、フラッシュROM204を使用することにより、機械的に動作するHDDに比べて振動に強くすることができる。たとえば、車両に強い振動があった場合でも、フラッシュROM204であればデータが消える可能性を低くすることができる。また強誘電体メモリ(FeRAM)を使用してもよい。
ディスプレイ205は、必要があれば、ドライブレコーダとして記録した映像を運転手に対して表示してもよい。ディスプレイ205は、CRT、液晶ディスプレイ、等があげられるが、車両に組み込むことを考えると、省スペースである液晶ディスプレイを採用してもよい。また、運転手がディスプレイ205の液晶部に触れることにより、触れた位置をCPU201に伝え、映像に対して何らかの操作を行うことができるタッチパネルであってもよい。
I/F206は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワーク207に接続され、このネットワーク207を介して他の装置に接続される。そして、I/F206は、ネットワーク207と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。また、I/F206を通して、フラッシュROM204にて記憶された映像データを他の外部装置へ出力してもよい。
(データ管理装置104の機能的構成)
次に、データ管理装置104の機能的構成について説明する。図3は、データ管理装置104の機能的構成を示すブロック図である。データ管理装置104は、ハッシュ管理部301と、記憶部302と、イベント受信部303と、署名生成部304と、を含む構成である。この制御部となる機能は、具体的には、たとえば、図2に示したROM202、RAM203、フラッシュROM204などの記憶装置に記憶されたプログラムをCPU201が実行することにより、その機能を実現する。制御部となる機能は、ハッシュ管理部301、イベント受信部303、署名生成部304となる。または、I/F206を経由して他のCPUが実行することにより、その機能を実現してもよい。
ハッシュ管理部301は、ハッシュの管理を行う機能を有し、ハッシュ生成部305、ハッシュ格納部306、タイマー307、圧縮関数実行部308、事故発生検出部309、出力部310を含む構成である。各機能は、前述したイベント受信部303、署名生成部304と同様に、ROM202、RAM203、フラッシュROM204などの記憶装置に記憶されたプログラムをCPU201が実行することにより、その機能を実現する。
記憶部302は、順次入力されてくる一連のデータを先入れ先出しすることにより時系列なデータ群を記憶する所定の記憶装置である。時系列なデータ群とは、映像、音声といったデータを指している。記憶部302は先入れ先出しするキュー構造になっており、一つデータを入力した場合、一番古いデータを削除する。具体的には、たとえば、映像がフレームごとに入力され、一つのフレームを記憶する都度、古いフレームを削除する。なお、記憶部302は、RAM203、フラッシュROM204などの記憶装置に存在する。
イベント受信部303は、車両制御装置103からのイベントを受信し、記憶部302、ハッシュ生成部305、事故発生検出部309にイベントを送信する機能を有する。具体的には、たとえば、カメラ102によって撮影された映像が、車両制御装置103を経由して、イベント受信部303に到達する。イベント受信部303は、映像フレームの画像データを記憶部302へ入力するとともに、ハッシュ生成部305に対してフレームが入力されたことを通知する。センサー105によって車両101が急停止したことが通知されてきた場合、イベント受信部303は、事故発生検出部309に急停止したことを通知する。なお、通知された各種イベントは、RAM203、フラッシュROM204などの記憶装置に格納される。
署名生成部304は、出力されたハッシュ値に対して署名生成を行う機能を有する。具体的には、たとえば、事故発生時に、ハッシュ格納部306に格納されていたハッシュ値に対して、データ管理装置104で保持している秘密鍵にて署名を行う。なお、署名された電子署名は、RAM203、フラッシュROM204などの記憶装置に格納される。もしくは、電子署名は、I/F206を通じて外部の装置へ出力される。
ハッシュ生成部305は、N個のハッシュ値を並列に生成してハッシュ格納部306に順序付けて格納する機能を有する。具体的には、たとえば、フレームの映像データが入力された場合、記憶部302に記憶されているすべてのフレームの映像データについてハッシュ値を生成する。さらに、記憶部302に記憶されている一部分のフレームの映像データについてもハッシュ値を生成する。このように、記憶部302にN個のハッシュ値が存在するときに、N個のハッシュ値すべてについて、一番古いフレームの映像データのハッシュ値となるデータを1番目となるように順序付けて格納する。
また、ハッシュ生成部305は、記憶部302に時系列なデータが入力されるごとに、ハッシュ格納部306によって格納された2番目からN番目のハッシュ値それぞれと該入力されたデータとに基づいてN−1個のハッシュ値を生成する。続けて、ハッシュ生成部305は、それぞれ1番目からN−1番目のハッシュ値としてハッシュ格納部306に格納するとともに、入力されたデータに基づいて1個のハッシュ値を生成してN番目のハッシュ値として格納部306に格納してもよい。
また、前述の処理が実行されるトリガーとして、所定の一定時間経過後に記憶部302に時系列なデータが入力された場合でもよいし、所定の回数分ハッシュ値を生成した後に記憶部302に時系列なデータが入力された場合でもよい。所定の一定時間とは、タイマー307にて計測される一定時間である。所定の回数とは、ハッシュ値を生成するたびにカウントするカウンタの一定値である。
具体的には、たとえば、ハッシュ生成部305は、記憶部302にフレームの映像データが入力されたときに、ハッシュ格納部306の2番目からN番目のハッシュ値それぞれとフレームの映像データとに基づいてN−1個のハッシュ値を生成する。生成後、ハッシュ生成部305は、それぞれ1番目からN−1番目のハッシュ値としてハッシュ格納部306に格納し、フレームの映像データのハッシュ値をN番目のハッシュ値として格納部306に格納する。
また、ハッシュ生成部305は、最新のデータを加えた時系列なデータ群に関し、任意のデータを受け付けて任意のデータのサイズを圧縮する圧縮関数を複数回実行することでハッシュ値を生成してもよい。圧縮関数を複数回実行することは、圧縮関数実行部308を複数回機能させることに等しい。
具体的には、たとえば、フレームの画像データが入力された場合、ハッシュ格納部306から、2番目からN番目のハッシュ値それぞれを取得する。取得したハッシュ値と入力されたフレームの画像データを入力元として、圧縮関数実行部308を複数回機能させる。得られた結果を、2番目からN番目のハッシュ値に対応する画像データと入力された画像データを加えた一連の映像データに関するハッシュ値として生成する。なお、後述する実施の形態1−1、実施の形態1−2では、前述の方法でハッシュ値を生成する。
また、ハッシュ生成部305は、最新のデータのサイズを圧縮する圧縮関数を複数回実行することで、最新のデータに関するハッシュ値を生成する。続けて、ハッシュ格納部306によって格納された2番目からN番目のハッシュ値それぞれと入力されたデータに基づいて、圧縮関数を少なくとも1回実行することで、最新のデータを加えた時系列なデータ群に関するハッシュ値を生成してもよい。圧縮関数を少なくとも1回実行することは、圧縮関数実行部308を少なくとも1回機能させることに等しい。
具体的には、たとえば、フレームの画像データが入力された場合、入力されたフレームの画像データを圧縮関数実行部308に対して複数回機能させて得られた結果を、入力されたフレームの画像データに関するハッシュ値として生成する。続けて、ハッシュ格納部306から、2番目からN番目のハッシュ値に対応するフレームの映像データに関するハッシュ値を取得する。
取得したハッシュ値と入力されたフレームの画像データに関するハッシュ値を入力元として、圧縮関数実行部308を少なくとも1回機能させる。得られた結果を、2番目からN番目のハッシュ値に対応する映像データと入力された画像データを加えた一連の映像データに関するハッシュ値として生成する。なお、後述する実施の形態2−1、実施の形態2−2では、前述の方法でハッシュ値を生成する。
ハッシュ格納部306は、N個のハッシュ値を格納する機能を有する。具体的には、ハッシュ生成部305によって生成されたN個のハッシュ値を格納する。ハッシュ格納部306の格納方法は、後述する実施の形態によって異なる。格納する格納先は、RAM203、フラッシュROM204などの記憶装置である。
タイマー307は、時間経過を確認する機能を有する。後述する実施の形態1−1、実施の形態2−1では、タイマー307から現在時刻を取得して一定時間経過したかを確認する。また、タイマー307は、CPU201のクロックカウンタや、OSのタイマー機能等によって実装されている。
圧縮関数実行部308は、ハッシュ関数の内部で複数回呼ばれる処理で、情報を圧縮する機能を有する。具体的には、たとえば、512bitの固定長の入力から160bitの固定長のデータ出力を行ったり、1024bitの固定長の入力から256bitの固定長、あるいは512bitの固定長の出力を行ったりする。圧縮関数の具体的な実装例として、たとえば、ハッシュ関数であるSHA(Secure Hash Algorithm)−1での圧縮関数は、下記参考文献1での、7. COMPUTING THE MESSAGE DIGESTに記載される処理である。
(参考文献1:FIPS 180−1 − Secure Hash Standard、[online]、[平成22年02月25日検索]、インターネット<URL:http://www.itl.nist.gov/fipspubs/fip180−1.htm>)
また、同じくハッシュ関数であるMD5(Message Digest 5)での圧縮関数は、下記参考文献2での、3.4 Step 4. Process Message in 16−Word Blocksに記載される処理である。
(参考文献2:RFC 1321 − The MD5 Message−Digest Algorithm、[online]、[平成22年02月25日検索]、インターネット<URL:http://tools.ietf.org/html/rfc1321>)
圧縮関数実行部308は、ハードウェアの回路にて実装されていてもよく、たとえば、ハッシュ同時処理数を示すn個分、圧縮関数実行部308が存在すれば、n個のハッシュ処理を同時に行うことができる。なお、圧縮関数実行の結果は、RAM203、フラッシュROM204などの記憶装置に格納される。
事故発生検出部309は、イベント受信部303から事故検出のイベントを受信し、ハッシュ生成部305に送信する機能を有する。具体的には、たとえば、事故発生検出部309は、急停止したというイベントを受信すると、ハッシュ生成部305に対して事故が発生したことを通知する。ハッシュ生成部305は、事故が発生したことを通知すると、事故発生時処理を実行する。
出力部310は、所定のイベントにかかる通知情報を受け取ると、ハッシュ格納部306によって格納された1番目のハッシュ値を出力する機能を有する。所定のイベントとは、事故発生検出部309で受信したイベントである。具体的には、出力部310は、事故発生検出部309にて事故検出のイベントにかかる通知情報を受け取ると、ハッシュ格納部306によって格納された1番目のハッシュ値を署名生成部304に出力する。
図4は、ハッシュ関数の概要を示す説明図である。ハッシュ関数Hは、一方向性の関数であり、任意長のデータMと固定値であるIV(initialization vector:初期ベクトル)から、固定長のハッシュ値を算出する。一般的なハッシュ関数としては、SHAや、MD5が存在する。ハッシュ関数Hは、圧縮関数複数回処理hを任意長のデータの長さに応じて繰り返し実行することで構成されている。
たとえば、式401で示しているように、M=(m1||m2||m3||m4)のように入力されたデータを分割し、それぞれに対し圧縮関数複数回処理hを実行する。m1、m2、m3、m4は、たとえば、512bitと同じかそれ以下のデータ長となる。記号“||”はデータの連結処理を示しており、もしMが“011001”というビット列であるとき、M=“011”||“001”と表すことができる。
Mのデータ長によって、ハッシュ関数Hの処理は、符号402、符号403、符号404のいずれかで示した状態に分かれる。符号402で示している処理では、ハッシュ関数Hは、IVとm1に基づいて圧縮関数複数回処理hを実行し、実行結果となるハッシュ値の途中結果を取得する。続けて、ハッシュ関数Hは、ハッシュ値の途中結果とm2に基づいて圧縮関数複数回処理hを実行し、新しいハッシュ値の途中結果の取得を繰り返し、最後に、ハッシュ値の途中結果と(m4||1||0...0||length)とに基づいて圧縮関数複数回処理hを実行し、ハッシュ結果を取得する。lengthはMのデータ長を示す値が設定される。
もし、(m4||1||0...0||length)が指定された固定長、たとえば、512ビットより短い場合、ハッシュ関数Hは、端数に関してはパディング処理を行い、指定された固定長にあわせる。
(m4||1||0...0||length)が指定された固定長を超えてしまう場合、ハッシュ関数Hの処理は、符号403で示した処理となる。符号403で示した処理では、途中までは、符号402で示した処理と等しいが、(m4||1||0...0)と(0...0||length)とに分けて圧縮関数複数回処理hを実行する。
(m4||1||0...0)が指定された固定長を超えてしまう場合は、ハッシュ関数Hの処理は、符号404で示した処理となる。符号404で示した処理では、途中までは、符号402で示した処理と等しいが、ハッシュ値のm3までの途中結果とm4とに基づいて圧縮関数複数回処理hを実行する。さらに、前述の実行結果と(1||0...0||length)とに基づいて圧縮関数複数回処理hを実行する。
また、圧縮関数複数回1個である処理hは、圧縮関数cを複数回実行する。圧縮関数複数回処理hに入力されるデータが512bit以上である場合、入力されるデータを分割し、圧縮関数cを分割した分実行する。以上のように、ハッシュ関数Hは内部で圧縮関数cを何度も実行するため、圧縮関数c1回はハッシュ関数Hよりも高速に動作することになる。
(実施の形態1−1の概要説明)
図5は、実施の形態1−1にかかるハッシュ格納部306のハッシュ生成の様子を示す説明図である。ハッシュ格納部306には、IVとハッシュ値群が格納されている。ハッシュ値群は、ハッシュ処理途中結果(1)とその生成時刻となる開始時刻(1)、ハッシュ処理途中結果(2)とその生成時刻となる開始時刻(2)、のように、ハッシュ同時処理数であるn個生成されている。
次に、ハッシュ値の生成について、たとえば、データ管理装置104は、時刻t1に、フレームt1の画像データとIVに対して圧縮関数複数回処理hを実行し、結果の値をハッシュ処理途中結果(1)に格納し、タイマー307から取得した時刻t1の値を開始時刻(1)に格納する。続けて、データ管理装置104は、時刻t2に、フレームt2の画像データとハッシュ処理途中結果(1)に格納した値に対して圧縮関数複数回処理hを実行し、結果の値を再びハッシュ処理途中結果(1)に格納する。
前述した操作を保証するフレーム数であるm個のフレーム分繰り返し、データ管理装置104は、時刻tmに、フレームtmの画像データとハッシュ処理途中結果(1)に格納した値に対して圧縮関数複数回処理hを実行し、結果の値を再びハッシュ処理途中結果(1)に格納する。時刻tmに事故があった場合、車両制御装置103は、ハッシュ処理途中結果(1)に格納された値を署名生成部304へ出力する。ハッシュ処理途中結果(2)、・・・、ハッシュ処理途中結果(n)についても、それぞれの開始時刻にハッシュ値を生成する。
また、時刻tmに事故が起こらずに、続けて次のフレームが入力され、記憶部302には、m個までのフレームの画像データを格納する場合、データ管理装置104は、フレームt1を削除する。続けて、データ管理装置104は、フレームt1に対応するハッシュ処理途中結果(1)と開始時刻(1)に格納されていた値を、現在時刻と開始時刻(1)の値の差から判断して削除し、新しく入力されたフレームから始まるハッシュ値の格納用として使用する。
また、図5の説明では、フレームt1とフレームt2は1フレーム離れており、1フレームずつずらしてハッシュ値を生成していたが、複数のフレームずつずらしてハッシュ値を生成してもよい。また、記憶部302に格納される動画が、フレーム間予測技術を持ったMPEG(Moving Picture Experts Group)等の動画では、映像の再生単位となるGOP(Group Of Pictures)ごとにずらしてもよい。特に、同時に削除されるフレームが1つずつではなくGOPずつである場合、それにあわせてGOPごとにハッシュ値をずらして生成することで、事故が起こった際にも、現存しているフレームと一致したハッシュ値を生成しておくことができる。
次に、具体的な実施例を説明する。動画の例として、1秒間のフレームが15[フレーム]であり、1画面の画素数が640×480ピクセルで、1画素の色表現が8bitとする。また、ハードウェアの例としてCPU201の動作サイクル数が200MHz、圧縮関数の処理時間1000サイクルとする。そして、記憶部302に格納するフレーム数mを30[フレーム]、ハッシュ同時処理数nを2[個]とする。前述のm、nからハッシュ値を削除する時間は、m/1秒間のフレーム数=2[秒]となり、ハッシュ値の生成をずらす時間は、(m/1秒間のフレーム数)/n=1[秒]となる。前述の動画の設定、ハードウェアの設定では、1フレームのハッシュ生成時間は、48[ミリ秒]となる。
(実施の形態1−1の処理説明)
前述した構成を使用して、データ管理装置104は、ハッシュ管理処理を行う。ハッシュ管理処理は、録画開始処理と、録画途中処理と、事故発生時処理と、を内部に含む。録画開始処理には2種類の実装方法があり、それぞれ録画開始処理1、録画開始処理2とする。録画開始処理1と録画開始処理2は、ハッシュ格納部初期化処理と、ハッシュ開始判断処理と、ハッシュ開始処理と、ハッシュ格納部状態更新処理と、を内部に含む。録画途中処理は、前述したハッシュ開始処理と、ハッシュ格納部状態更新処理と、を内部に含む。
図6は、実施の形態1−1にかかるハッシュ管理処理のフローチャートである。初めに、データ管理装置104は、録画開始処理を行う(ステップS601)。録画開始処理は、ハッシュ格納部306の初期化、ハッシュ処理の開始を行う。詳細については、図7、図8にて後述する。録画開始処理後、データ管理装置104は、事故が発生したかを確認する(ステップS602)。なお、事故発生の検出は、事故発生検出部309にて検出する。事故を検出した場合(ステップS602:Yes)、データ管理装置104は、事故発生時処理を行う(ステップS604)。事故発生時処理の詳細は、図14にて後述する。事故発生時処理後、データ管理装置104は処理を終了する。
事故が発生していない場合(ステップS602:No)、データ管理装置104は、録画終了要求を受け付けたかを確認する(ステップS603)。録画終了要求を受け付けた場合(ステップS603:Yes)、データ管理装置104は処理を終了する。録画終了要求を受け付けていない場合(ステップS603:No)、データ管理装置104は、ハッシュ未処理のフレームが存在するかを確認する(ステップS605)。
未処理のフレームが存在する場合(ステップS605:Yes)、データ管理装置104は、録画途中処理を行う(ステップS606)。録画途中処理の詳細は、図13にて後述する。未処理のフレームが存在しない場合(ステップS605:No)、データ管理装置104は、ステップS602の処理に移行する。
図7と図8は、実施の形態1−1にかかる録画開始処理1と、録画開始処理2のフローチャートを示す。データ管理装置104は、録画開始処理として録画開始処理1と録画開始処理2のどちらを実行してもよい。それぞれの効果として、録画開始処理1は、録画開始処理2より実装がやや簡単である。また、録画開始処理2は、録画開始処理1よりも未処理のフレームが存在する以外の分岐が少ないため、高速に動作することができる。
図7は、実施の形態1−1にかかる録画開始処理1のフローチャートである。データ管理装置104は、ハッシュ格納部初期化処理を行う(ステップS701)。ハッシュ格納部初期化処理の詳細は、図9にて後述する。ハッシュ格納部初期化後、データ管理装置104は、変数xを0に設定する(ステップS702)。変数xは現在のハッシュ処理を行っている個数を示している。
次に、データ管理装置104は、ハッシュ未処理のフレームが存在するかを確認する(ステップS703)。未処理のフレームが存在しない場合(ステップS703:No)、データ管理装置104は、フレームが入力されるまで待機する(ステップS704)。フレームが入力された結果、ハッシュ未処理のフレームが存在することになる。
ハッシュ未処理のフレームが存在する場合(ステップS703:Yes)、データ管理装置104は、続けて変数xが0かを確認する(ステップS705)。変数xが0でない場合(ステップS705:No)、データ管理装置104は、ハッシュ開始判断処理を行う(ステップS706)。ハッシュ開始判断処理の詳細は、図10にて後述する。続けて、データ管理装置104は、ハッシュ開始判断処理の判断結果を確認する(ステップS707)。
判断結果が“開始する”である場合(ステップS707:Yes)、ハッシュ開始処理を行うため、データ管理装置104は、ステップS708の処理に移行する。ステップS705にて、変数xが0の場合(ステップS705:Yes)またはステップS707:Yesの場合、データ管理装置104は、変数xをインクリメントする(ステップS708)。続けて、データ管理装置104は、ハッシュ格納部内の変数x番目のハッシュ開始処理を行う(ステップS709)。ハッシュ開始処理の詳細は、図11にて後述する。
判断結果が“開始しない”である場合(ステップS707:No)、または、ステップS709の処理後、データ管理装置104は、未処理のフレームの画像データに対し、ハッシュ格納部306内の変数xまでのハッシュ格納部状態更新処理をする(ステップS710)。ハッシュ格納部状態更新処理の詳細は、図12にて後述する。
最後に、データ管理装置104は、変数xがハッシュ同時処理数n以上であるか確認する(ステップS711)。変数xがハッシュ同時処理数n以上の場合(ステップS711:Yes)、これ以上ハッシュ処理を開始しないため、データ管理装置104は処理を終了する。変数xがハッシュ同時処理数n未満の場合(ステップS711:No)、データ管理装置104は、ステップS704の処理に移行する。
図8は、実施の形態1−1にかかる録画開始処理2のフローチャートである。データ管理装置104は、ハッシュ格納部初期化処理を行う(ステップS801)。ハッシュ格納部初期化後、データ管理装置104は、変数xを1に設定する(ステップS802)。変数xは現在のハッシュ処理を行っている個数を示している。録画開始処理2では、ハッシュ未処理のフレームが存在するとすぐに1つ目のハッシュ開始処理を行うため、最初から変数xを1に設定している。
次に、データ管理装置104は、ハッシュ未処理のフレームが存在するかを確認する(ステップS803)。未処理のフレームが存在しない場合(ステップS803:No)、データ管理装置104は、フレームが入力されるまで待機する(ステップS804)。フレームが入力された結果、ハッシュ未処理のフレームが存在することになる。ハッシュ未処理のフレームが存在する場合(ステップS803:Yes)、データ管理装置104は、ハッシュ開始処理を行う(ステップS805)。ハッシュ開始処理終了後、データ管理装置104は、未処理のフレームの画像データに対し、ハッシュ格納部306内の変数xまでのハッシュ格納部状態更新処理を行う(ステップS806)。
ハッシュ格納部状態更新処理後、データ管理装置104は、変数xがハッシュ同時処理数n以上であるか確認する(ステップS807)。変数xがハッシュ同時処理数n以上の場合(ステップS807:Yes)、これ以上ハッシュ処理を開始しないため、データ管理装置104は処理を終了する。
変数xがハッシュ同時処理数n未満の場合(ステップS807:No)、データ管理装置104は、ハッシュ未処理のフレームが存在するかを確認する(ステップS808)。ハッシュ未処理のフレームが存在しない場合(ステップS808:No)、データ管理装置104は、フレームが入力されるまで待機する(ステップS809)。ハッシュ未処理のフレームが存在する場合(ステップS808:Yes)、データ管理装置104は、ハッシュ開始判断処理を行う(ステップS810)。続けて、データ管理装置104は、ハッシュ開始判断処理の判断結果を確認する(ステップS811)。
判断結果が“開始する”である場合(ステップS811:Yes)、ハッシュ開始処理を行うため、データ管理装置104は、変数xをインクリメントし(ステップS812)、ステップS805の処理に移行する。判断結果が“開始しない”である場合(ステップS811:No)、データ管理装置104は、ステップS806の処理に移行する。
図9は、実施の形態1−1にかかるハッシュ格納部初期化処理のフローチャートである。データ管理装置104は、現在時刻を取得し(ステップS901)、カウンタiを1に設定する(ステップS902)。次に、データ管理装置104は、カウンタiがハッシュ同時処理数n以下であるかを確認する(ステップS903)。
カウンタiがn以下である場合(ステップS903:Yes)、データ管理装置104は、ハッシュ格納部306内i番目の開始時刻を取得した現在時刻に設定する(ステップS904)。カウンタiがnを超えた場合、データ管理装置104は、カウンタiをインクリメントし(ステップS905)、ステップS903の処理に移行する。カウンタiがnより大きい場合(ステップS903:No)、データ管理装置104は、処理を終了する。
図10は、実施の形態1−1にかかるハッシュ開始判断処理のフローチャートである。ハッシュ開始判断処理は、呼び元の録画開始処理から現在のハッシュ処理数xを引数として取得している。データ管理装置104は、カウンタiを1に初期化し(ステップS1001)、変数tを0に設定する(ステップS1002)。次に、データ管理装置104は、カウンタiが現在のハッシュ処理数x以下であるかを確認する(ステップS1003)。カウンタiが現在のハッシュ処理数x以下の場合(ステップS1003:Yes)、データ管理装置104は、ハッシュ格納部306内のi番目の開始時刻を取得する(ステップS1004)。
取得後、データ管理装置104は、変数tが取得した開始時刻より小さいかを確認する(ステップS1005)。変数tが取得した開始時刻より小さい場合(ステップS1005:Yes)、データ管理装置104は、変数tに取得した開始時刻を設定する(ステップS1006)。ステップS1006の処理後、もしくは、変数tが取得した開始時刻以上の場合(ステップS1005:No)、データ管理装置104は、カウンタiをインクリメントし(ステップS1007)、ステップS1003の処理に移行する。ステップS1003からステップS1007の処理にて、ハッシュ格納部306内の1番目からx番目のうち、最新の開始時刻を持つものを取得している。
カウンタiが現在のハッシュ処理数xより大きい場合(ステップS1003:No)、データ管理装置104は、現在時刻と変数tの差が一定時間以上かを確認する(ステップS1008)。ここでの一定時間とは、たとえば、前述した(m/1秒間のフレーム数)/nの値となり、m=30[フレーム]、1秒間のフレーム数=15[フレーム]、n=2[個]であれば、一定時間は1秒となる。
現在時刻と変数tの差が一定時間以上の場合(ステップS1008:Yes)、データ管理装置104は、ハッシュ開始の判断結果を“開始する”に設定する(ステップS1009)。現在時刻と変数tの差が一定時間より小さい場合(ステップS1008:No)、データ管理装置104は、ハッシュ開始の判断結果を“開始しない”に設定する(ステップS1010)。データ管理装置104は、ステップS1009もしくはステップS1010によって設定された判断結果を出力して終了する。
図11は、実施の形態1−1にかかるハッシュ格納部内x番目のハッシュ開始処理のフローチャートである。ハッシュ開始処理は、呼び元の録画開始処理、録画途中処理から開始対象となるハッシュ格納部306のx番目の数値を引数として取得している。データ管理装置104は、IVを取得し、ハッシュ格納部306内x番目のハッシュ処理途中結果に取得したIVを設定する(ステップS1101)。同様に、データ管理装置104は、現在時刻を取得し、ハッシュ格納部306内x番目の開始時刻に取得した現在時刻を設定する(ステップS1102)。
図12は、実施の形態1−1にかかるハッシュ格納部状態更新処理のフローチャートである。ハッシュ格納部状態更新処理は、呼び元の録画開始処理、録画途中処理から現在のハッシュ処理数xと、処理対象となるフレームの画像データを引数として取得している。データ管理装置104は、カウンタiを1に設定する(ステップS1201)。次に、データ管理装置104は、カウンタiがx以下であるかを確認する(ステップS1202)。
カウンタiがx以下である場合(ステップS1202:Yes)、データ管理装置104は、ハッシュ格納部306内i番目のハッシュ処理途中結果を取得する(ステップS1203)。次に、データ管理装置104は、処理対象のフレームの画像データと取得したハッシュ処理途中結果から、圧縮関数複数回処理を実行する(ステップS1204)。実行後、データ管理装置104は、ハッシュ格納部内i番目のハッシュ処理途中結果に実行結果を設定する(ステップS1205)。設定後、データ管理装置104は、カウンタiをインクリメントし(ステップS1206)、ステップS1202の処理に移行する。カウンタiがxより大きい場合(ステップS1202:No)、データ管理装置104は、処理を終了する。
図13は、実施の形態1−1にかかる録画途中処理のフローチャートである。データ管理装置104は、未処理のフレームの画像データに対し、ハッシュ格納部306内n番目までのハッシュ格納部状態更新処理を行う(ステップS1301)。ハッシュ格納部状態更新処理の詳細は図12にて前述した。続けて、データ管理装置104は、カウンタiを1に設定する(ステップS1302)。データ管理装置104は、カウンタiがハッシュ同時処理数n以下であるかを確認する(ステップS1303)。カウンタiがハッシュ同時処理数n以下である場合(ステップS1303:Yes)、データ管理装置104は、ハッシュ格納部内i番目の開始時刻を取得する(ステップS1304)。
取得後、データ管理装置104は、現在時刻と取得した開始時刻の差が一定時間以上かを確認する(ステップS1305)。ここでの一定時間は、たとえば、(m/1秒間のフレーム数)で求められ、m=30[フレーム]、1秒間のフレーム数=15[フレーム]の場合、2秒となる。一定時間以上である場合(ステップS1305:Yes)、i番目のハッシュ格納部のハッシュ処理途中結果は、既に削除されたフレームに基づいて生成されていることになるため、今までのハッシュ処理途中結果を削除し、新たに未処理のフレーム画像についてハッシュ値を生成する。
ステップS1305:Yesの場合、データ管理装置104は、ハッシュ格納部内i番目のハッシュ開始処理を行う(ステップS1307)。続けて、データ管理装置104は、未処理のフレームの画像データとハッシュ格納部内i番目のハッシュ処理途中結果から、圧縮関数複数回処理を実行する(ステップS1308)。実行後、データ管理装置104は、ハッシュ格納部内i番目のハッシュ処理途中結果に実行結果を設定する(ステップS1309)。設定後、データ管理装置104は、処理を終了する。
現在時刻と取得した開始時刻の差が一定時間より小さい場合(ステップS1305:No)、データ管理装置104は、カウンタiをインクリメントし(ステップS1306)、ステップS1303の処理に移行する。カウンタiがnより大きい場合(ステップS1303:No)、データ管理装置104は、既に削除されたフレームに基づいて生成されたハッシュ処理途中結果は存在しないとして、処理を終了する。
図14は、実施の形態1−1にかかる事故発生時処理のフローチャートである。データ管理装置104は、カウンタiを1に設定し(ステップS1401)、変数tに時刻の最大値を設定する(ステップS1402)。時刻の最大値は、変数tの型で設定できる最大値を設定する。
データ管理装置104は、カウンタiがハッシュ同時処理数n以下であるかを確認する(ステップS1403)。カウンタiがハッシュ同時処理数n以下の場合(ステップS1403:Yes)、データ管理装置104は、ハッシュ格納部内i番目の開始時刻を取得する(ステップS1404)。取得後、データ管理装置104は、変数tが取得した開始時刻より大きいかを確認する(ステップS1405)。変数tが取得した開始時刻より大きい場合(ステップS1405:Yes)、データ管理装置104は、変数tを取得した開始時刻に設定する(ステップS1406)。
また、データ管理装置104は、ハッシュ格納部内i番目のハッシュ処理途中結果を出力用として記憶する(ステップS1407)。ステップS1407の処理後、または、変数tが取得した開始時刻以下の場合(ステップS1405:No)、データ管理装置104は、カウンタiをインクリメントし(ステップS1408)、ステップS1403の処理に移行する。カウンタiがハッシュ同時処理数nより大きい場合(ステップS1403:No)、データ管理装置104は、出力用として記憶したハッシュ処理途中結果を元にハッシュ値を生成(パディング、および圧縮関数処理の実行)して出力し(ステップS1409)、処理を終了する。
(実施の形態1−2の概要説明)
図15〜図21を用いて、実施の形態1−2にかかる説明を行う。実施の形態1−2のハードウェアの構成は実施の形態1−1に示したものと等しく、機能的構成はほぼ等しい。機能的構成の違いとして、実施の形態1−1では、ハッシュ格納部306のハッシュ値群として、ハッシュ処理途中結果とその生成時刻となる開始時刻が格納されていた。これに対し実施の形態1−2では、ハッシュ処理途中結果とハッシュ処理途中結果を何回計算したかを示すカウンタが格納されている。
図15は、実施の形態1−2にかかるハッシュ格納部306のハッシュ生成の様子を示す説明図である。ハッシュ格納部306には、IVとハッシュ値群が格納されている。ハッシュ値群は、ハッシュ処理途中結果(1)とハッシュ値を何回計算したかを示す値となるカウンタ(1)、ハッシュ処理途中結果(2)とそのカウンタ(2)、のように、ハッシュ同時処理数であるn個生成されている。
次に、ハッシュ値の生成について、たとえば、データ管理装置104は、時刻t1に、フレームt1の画像データとIVに対して圧縮関数複数回処理hを実行し、結果の値をハッシュ処理途中結果(1)に格納し、カウンタ(1)に1を格納する。続けて、データ管理装置104は、時刻t2に、フレームt2の画像データとハッシュ処理途中結果(1)に格納した値に対して圧縮関数複数回処理hを実行し、結果の値を再びハッシュ処理途中結果(1)に格納し、カウンタ(1)に2を格納する。
前述した操作を保証するフレーム数であるm個のフレーム分繰り返し、データ管理装置104は、時刻tmに、フレームtmの画像データとハッシュ処理途中結果(1)に格納した値に対して圧縮関数複数回処理hを実行し、結果の値を再びハッシュ処理途中結果(1)に格納する。また、データ管理装置104は、カウンタ(1)にmを設定する。時刻tmに事故があった場合、車両制御装置103は、ハッシュ処理途中結果(1)に格納された値を署名生成部304へ出力する。ハッシュ処理途中結果(2)は、カウンタ(1)の値から判断してハッシュの生成を開始する。それ以降のハッシュ処理途中結果(n)についても、ハッシュ処理を行っているカウンタ群の値から判断してハッシュ処理途中結果を生成する。
また、時刻tmに事故が起こらずに、続けて次のフレームが入力され、記憶部302にはm個までのフレームの画像データを格納する場合、データ管理装置104は、フレームt1を削除する。続けて、データ管理装置104は、フレームt1に対応するハッシュ処理途中結果(1)とカウンタ(1)に格納されていた値を、カウンタ(1)の値から判断して削除し、新しく入力されたフレームから始まるハッシュ値の格納用として使用する。
具体的な実施例について、実施の形態1−2では、実施の形態1−1と同じ結果を得るため省略する。ハッシュ処理途中結果を削除するカウンタ値は、mと等しくなり、実施の形態1−1の実施例で記述した値をそのまま使用すると、30[フレーム]となる。また、ハッシュ処理途中結果の生成をずらすカウンタの値は、m/n=15[フレーム]となる。
(実施の形態1−2の処理説明)
前述した構成を使用して、実施の形態1−2にかかるデータ管理装置104は、ハッシュ管理処理を行う。実施の形態1−2にかかるハッシュ管理処理は、実施の形態1−1にかかるハッシュ管理処理と同様に、録画開始処理と、録画途中処理と、事故発生時処理と、を内部に含む。録画開始処理に関しても実施の形態1−1と同様に、録画開始処理1と録画開始処理2が存在する。録画開始処理1と録画開始処理2も、実施の形態1−1と同様に、ハッシュ格納部初期化処理と、ハッシュ開始判断処理と、ハッシュ開始処理と、ハッシュ格納部状態更新処理と、を内部に含む。録画途中処理も、実施の形態1−1と同様に、前述したハッシュ開始処理と、ハッシュ格納部状態更新処理と、を内部に含む。
また、実施の形態1−2にかかるハッシュ管理処理と、録画開始処理1と、録画開始処理2は、実施の形態1−1にかかるハッシュ管理処理、録画開始処理1、録画開始処理2で示したフローと等しくなるため、説明を省略する。実施の形態1−2にかかるハッシュ格納部初期化処理と、ハッシュ開始判断処理と、ハッシュ開始処理と、ハッシュ格納部状態更新処理と、録画途中処理と、事故発生時処理を図16〜図20にて後述する。
図16は、実施の形態1−2にかかるハッシュ格納部初期化処理のフローチャートである。実施の形態1−2にかかるハッシュ格納部初期化処理は、図9にて前述した実施の形態1−1にかかるハッシュ格納部初期化処理とほぼ等しい処理である。具体的には、ステップS1601、ステップS1602、ステップS1604の処理は、ステップS902、ステップS903、ステップS905の処理と等しい。ステップS1602:Yesの処理後、データ管理装置104は、ハッシュ格納部内i番目のカウンタを0に設定する(ステップS1603)。
図17は、実施の形態1−2にかかるハッシュ開始判断処理のフローチャートである。ハッシュ開始判断処理は、呼び元の録画開始処理から現在のハッシュ処理数xを引数として取得している。データ管理装置104は、カウンタiを1に設定し(ステップS1701)、変数tをカウンタの最大値に設定する(ステップS1702)。カウンタの最大値は、変数tの型で設定できる最大値を設定する。次に、データ管理装置104は、カウンタiが現在のハッシュ処理数x以下であるかを確認する(ステップS1703)。カウンタiが現在のハッシュ処理数x以下の場合(ステップS1703:Yes)、データ管理装置104は、ハッシュ格納部306内のi番目のカウンタを取得する(ステップS1704)。
取得後、データ管理装置104は、取得したカウンタが0以外かを確認する(ステップS1705)。0以外の場合(ステップS1705:Yes)、データ管理装置104は、変数tが取得したカウンタより大きいかを確認する(ステップS1706)。変数tが取得したカウンタより大きい場合(ステップS1706:Yes)、データ管理装置104は、変数tに取得したカウンタを設定する(ステップS1707)。
ステップS1707の処理後、もしくは、取得したカウンタが0(ステップS1705:No)、もしくは、変数tが取得したカウンタ以下の場合(ステップS1706:No)、データ管理装置104は、カウンタiをインクリメントする(ステップS1708)。そして、データ管理装置104は、ステップS1703の処理に移行する。ステップS1703からステップS1708の処理にて、ハッシュ格納部306内の1番目からx番目のうち、0以外の最小のカウンタを持つものを取得している。
カウンタiが現在のハッシュ処理数xより大きい場合(ステップS1703:No)、データ管理装置104は、変数tが一定値以上かを確認する(ステップS1709)。ここでの一定値とは、m/nで求められ、m=30[フレーム]、n=2[個]であれば、m/n=15[フレーム]となる。
変数tが一定値以上の場合(ステップS1709:Yes)、データ管理装置104は、ハッシュ開始の判断結果を“開始する”に設定する(ステップS1710)。変数tが一定値より小さい場合(ステップS1709:No)、データ管理装置104は、ハッシュ開始の判断結果を“開始しない”に設定する(ステップS1711)。データ管理装置104は、ステップS1710もしくはステップS1711によって設定された判断結果を出力して終了する。
図18は、実施の形態1−2にかかるハッシュ格納部内x番目のハッシュ開始処理のフローチャートである。ハッシュ開始処理は、呼び元の録画開始処理、録画途中処理から開始対象となるハッシュ格納部のx番目の数値を引数として取得している。データ管理装置104は、IVを取得し、ハッシュ格納部内x番目のハッシュ処理途中結果に取得したIVを設定する(ステップS1801)。同様に、データ管理装置104は、現在時刻を取得し、ハッシュ格納部内x番目のカウンタに0を設定する(ステップS1802)。
図19は、実施の形態1−2にかかるハッシュ格納部状態更新処理のフローチャートである。実施の形態1−2にかかるハッシュ格納部状態更新処理は、図12にて前述した実施の形態1−1にかかるハッシュ格納部状態更新処理とほぼ等しい処理である。具体的には、ステップS1901〜ステップS1905、ステップS1907の処理は、ステップS1201〜ステップS1205、ステップS1206の処理と等しい。ステップS1905の処理後、データ管理装置104は、ハッシュ格納部内i番目のカウンタをインクリメントする(ステップS1906)。
図20は、実施の形態1−2にかかる録画途中処理のフローチャートである。実施の形態1−2にかかる録画途中処理は、図13にて前述した実施の形態1−1にかかる録画途中処理とほぼ等しい処理である。具体的には、ステップS2001〜ステップS2003、ステップS2006〜ステップS2009の処理は、ステップS1301〜ステップS1303、ステップS1306〜ステップS1309の処理と等しい。
また、ステップS2001でのハッシュ格納部状態更新処理は、図19にて前述した実施の形態1−2にかかるハッシュ格納部状態更新処理が実行される。同様に、ステップS2007でのハッシュ開始処理は、図18にて前述した実施の形態1−2にかかるハッシュ開始処理が実行される。
ステップS2003:Yesであった場合、データ管理装置104は、ハッシュ格納部内i番目のカウンタを取得する(ステップS2004)。取得後、データ管理装置104は、取得したカウンタが一定値以上かを確認する(ステップS2005)。ここでの一定値は、mと等しくなり、m=30[フレーム]であれば、一定値は30となる。取得したカウンタが一定値以上である場合(ステップS2005:Yes)、データ管理装置104は、ステップS2007の処理を行う。取得したカウンタが一定値より小さい場合(ステップS2005:No)、データ管理装置104は、ステップS2006の処理を行う。
図21は、実施の形態1−2にかかる事故発生時処理のフローチャートである。実施の形態1−2にかかる事故発生時処理は、図14にて前述した実施の形態1−1にかかる事故発生時処理とほぼ等しい処理である。具体的には、ステップS2101、ステップS2103、ステップS2107〜ステップS2109の処理は、ステップS1401、ステップS1403、ステップS1407〜ステップS1409の処理と等しい。ステップS2101の処理後、データ管理装置104は、変数tを0に設定する(ステップS2102)。
ステップS2103:Yesである場合、データ管理装置104は、ハッシュ格納部内i番目のカウンタを取得する(ステップS2104)。取得後、データ管理装置104は、変数tが取得したカウンタより小さいかを確認する(ステップS2105)。変数tが取得したカウンタより小さい場合(ステップS2105:Yes)、データ管理装置104は、変数tを取得したカウンタに設定する(ステップS2106)。変数tが取得したカウンタ以上の場合(ステップS2105:No)、データ管理装置104は、ステップS2108の処理に移行する。
以上説明したように、実施の形態1−1にかかるデータ管理装置と実施の形態1−2にかかるデータ管理装置は、最新のデータが入力され、古いデータが消える都度、時系列なデータ群に関するハッシュ処理途中結果を生成する。これにより、いつ故障しても故障時のハッシュ処理途中結果が保持されているため、時系列のデータの連続性を保証することができる。
また、時系列なデータ群のうち、最古のデータを除いた残余の時系列なデータ群に関するハッシュ処理途中結果を生成してもよい。これにより、新しいデータが入力された場合、残余の時系列なデータ群に新しいデータを加えた時系列のデータ群に関するハッシュ処理途中結果を生成する際に、残余の時系列なデータ群に関するハッシュ処理途中結果を使用することで容易に生成することができる。
また、最新のデータが入力される都度、格納された残余の時系列なデータ群に関するハッシュ処理途中結果と最新のデータとに基づいて、残余の時系列なデータ群に最新のデータを加えた時系列なデータ群に関するハッシュ処理途中結果を生成してもよい。これにより、事故時に、記憶装置に残されている時系列なデータ群に対応した、ハッシュ処理途中結果を生成しておくことができ、時系列のデータの連続性を保証することができる。また、フレームレートの高い動画で、保証するフレーム数mを大きくしたい場合でも、ハッシュ同時処理数nを調節することで、比較的計算能力の高くない組み込み環境でもフレームレートの高い動画に対応することができる。
また、最新のデータを加えた時系列なデータ群に関し、任意のデータを受け付けて任意のデータのサイズを圧縮する圧縮関数を複数回実行することでハッシュ処理途中結果を生成してもよい。これにより、連続性を保証することができる。また、圧縮関数を並列で行うことで、複数のハッシュ処理途中結果生成を高速化することもできる。
また、実施の形態1−1にかかるデータ管理装置では、タイマー307を用いることでフレームレートの高低に影響せず、一定時間の映像データの連続性を保証することができる。また、実施の形態1−2にかかるデータ管理装置では、カウンタを用いることで、タイマー307を実装しなくても映像データの連続性を保証できる。また、たとえばカメラ101の映像記録設定が変更され、フレームレートが低くなった場合も、フレームレートの低下にあわせて映像データの連続性の保証する時間を長くすることができる。
(実施の形態2−1の概要説明)
図22〜図26を用いて、実施の形態2−1にかかる説明を行う。実施の形態2−1のハードウェアの構成は実施の形態1−1に示したものと等しく、機能的構成はほぼ等しい。機能的構成の違いとして、実施の形態1−1では、フレームのデータとIVに対して圧縮関数複数回処理を実行し、ハッシュ値を生成していた。しかし、実施の形態2−1では、フレームのデータとIVに対してハッシュ値を生成し、さらに、生成されたハッシュ値とIVに対してハッシュ処理途中結果を生成し、生成された値は、ハッシュ格納部306に格納される。
図22は、実施の形態2−1にかかるハッシュ格納部306のハッシュ生成の様子を示す説明図である。ハッシュ格納部306には、IVとハッシュ処理途中結果群が格納されている。ハッシュ処理途中結果群は、ハッシュ処理途中結果(1)とその生成時刻となる開始時刻(1)、ハッシュ処理途中結果(2)とその生成時刻となる開始時刻(2)、のように、ハッシュ同時処理数であるn個生成されている。
次に、ハッシュ値の生成について、たとえば、データ管理装置104は、時刻t1に、フレームt1の画像データとIVに対してハッシュ関数Hを実行しハッシュ値H1を得る。さらに、データ管理装置104は、H1とIVに対して圧縮関数cを実行し、結果の値をハッシュ処理途中結果(1)に格納し、タイマー307から取得した時刻t1の値を開始時刻(1)に格納する。続けて、データ管理装置104は、時刻t2に、フレームt2の画像データとIVに対してハッシュ関数Hを実行しハッシュ値H2を得る。さらに、データ管理装置104は、H2とハッシュ処理途中結果(1)に格納した値に対して圧縮関数cを実行し、結果の値をハッシュ処理途中結果(1)に格納する。
前述した操作を保証するフレーム数であるm個のフレーム分繰り返し、データ管理装置104は、時刻tmに、フレームtmの画像データとIVに対してハッシュ関数Hを実行しハッシュ値Hmを得る。さらに、データ管理装置104は、Hmとハッシュ処理途中結果(1)に格納した値に対して圧縮関数cを実行し、結果の値をハッシュ処理途中結果(1)に格納する。時刻tmに事故があった場合、車両制御装置103は、ハッシュ処理途中結果(1)に格納された値から生成したハッシュ値を署名生成部304へ出力する。ハッシュ処理途中結果(2)、・・・、ハッシュ処理途中結果(n)についても、それぞれの開始時刻にハッシュ処理途中結果を生成する。
次に、具体的な実施例を説明する。1秒間のフレームが30フレーム[fps]であり、1画面の画素数が640×480ピクセルで、1画素の色表現が8bitとする。また、ハードウェアの例としてCPU201の動作サイクル数が200MHz、圧縮関数の処理時間1000サイクルとする。そして、記憶部302に格納するフレーム数mを600[フレーム]、ハッシュ同時処理数nを40[個]とする。前述のm、nからハッシュ値を削除する時間は、m/1秒間のフレーム数=20[秒]となり、ハッシュ値の生成をずらす時間は、(m/1秒間のフレーム数)/n=0.5[秒]となる。前述の動画の設定、ハードウェアの設定では、1フレームのハッシュ生成時間は、24[ミリ秒]となる。
実施の形態2−1の実施例が、実施の形態1−1、実施の形態1−2よりもデータ量が多いにも関わらずよい結果を出している。理由としては、実施の形態1−1、実施の形態1−2では画像に対するハッシュ値をハッシュ同時処理数であるn個分生成する。しかし、実施の形態2−1では画像に対するハッシュ値の生成は1回しか行わず、処理量の少ないハッシュ値に対するハッシュ処理途中結果をn個分生成するため、短い時間で終了することができる。
(実施の形態2−1の処理説明)
前述した構成を使用して、実施の形態2−1にかかるデータ管理装置104は、ハッシュ管理処理を行う。実施の形態2−1にかかるハッシュ管理処理は、実施の形態1−1にかかるハッシュ管理処理と同様に、録画開始処理と、録画途中処理と、事故発生時処理と、を内部に含む。録画開始処理に関しても実施の形態1−1と同様に、録画開始処理1と録画開始処理2が存在する。録画開始処理1と録画開始処理2も、実施の形態1−1と同様に、ハッシュ格納部初期化処理と、ハッシュ開始判断処理と、ハッシュ開始処理と、ハッシュ格納部状態更新処理と、を内部に含む。録画途中処理も、実施の形態1−1と同様に、前述したハッシュ開始処理と、ハッシュ格納部状態更新処理と、を内部に含む。
また、実施の形態2−1にかかるハッシュ管理処理と、事故発生時処理は、実施の形態1−1にかかるハッシュ管理処理と、事故発生時処理で示したフローと等しくなるため、説明を省略する。実施の形態2−1にかかるハッシュ格納部初期化処理と、ハッシュ開始判断処理と、ハッシュ開始処理も同様なため、説明を省略する。実施の形態2−1にかかる録画開始処理1と、録画開始処理2と、ハッシュ格納部状態更新処理と、録画途中処理を図23〜図26にて後述する。
前述した理由で説明を省略した実施の形態2−1にかかるハッシュ開始判断処理にて判断基準となる一定時間について補足する。図10で前述した実施の形態1−1にかかるハッシュ開始判断処理でのステップS1008では、データ管理装置104は、一定時間で判断を行う。実施の形態2−1での一定時間の具体例としては、たとえば、前述した(m/1秒間のフレーム数)/nの値となり、m=600[フレーム]、1秒間のフレーム数=30[フレーム]、n=40[個]であれば、一定時間は0.5秒となる。
図23と図24は、実施の形態2−1にかかる録画開始処理1と、録画開始処理2のフローチャートを示す。機能や効果は、実施の形態1−1にかかる録画開始処理1と、録画開始処理2に等しい。
図23は、実施の形態2−1にかかる録画開始処理1のフローチャートである。実施の形態2−1にかかる録画開始処理1は、図7にて前述した実施の形態1−1にかかる録画開始処理1とほぼ等しい処理である。具体的には、ステップS2301〜ステップS2304、ステップS2306〜ステップS2312の処理は、ステップS701〜ステップS704、ステップS705〜ステップS711の処理と等しい。ステップS2303:Yesの処理後、データ管理装置104は、未処理のフレームの画像データとIVでハッシュ関数を実行し、ハッシュ値Hとして保持する(ステップS2305)。保持されたハッシュ値Hは、ステップS2311にて呼ばれるハッシュ格納部状態更新処理にて使用される。
また、ステップS2301でのハッシュ格納部初期化処理は、図9にて前述した実施の形態1−1にかかるハッシュ格納部初期化処理と等しい。同様に、ステップS2307でのハッシュ開始判断処理は、図10にて前述した実施の形態1−1にかかるハッシュ開始判断処理が実行される。同様に、ステップS2310でのハッシュ開始処理は、図11にて前述した実施の形態1−1にかかるハッシュ開始処理が実行される。
図24は、実施の形態2−1にかかる録画開始処理2のフローチャートである。実施の形態2−1にかかる録画開始処理2は、図8にて前述した実施の形態1−1にかかる録画開始処理2とほぼ等しい処理である。具体的には、ステップS2401〜ステップS2404、ステップS2406〜ステップS2413の処理は、ステップS801〜ステップS804、ステップS805〜ステップS812の処理と等しい。ステップS2303:Yesの処理後、データ管理装置104は、未処理のフレームの画像データとIVでハッシュ関数を実行し、ハッシュ値Hとして保持する(ステップS2405)。保持されたハッシュ値Hは、ステップS2407にて呼ばれるハッシュ格納部状態更新処理にて使用される。
図25は、実施の形態2−1にかかるハッシュ格納部状態更新処理のフローチャートである。実施の形態2−1にかかるハッシュ格納部状態更新処理は、図12にて前述した実施の形態1−1にかかるハッシュ格納部状態更新処理とほぼ等しい処理である。具体的には、ステップS2501〜ステップS2503、ステップS2505、ステップS2506の処理は、ステップS1201〜ステップS1203、ステップS1205、ステップS1206の処理と等しい。ステップS2503の処理後、データ管理装置104は、処理対象のフレームのハッシュ値Hと取得したハッシュ処理途中結果から、圧縮関数1回の処理を実行する(ステップS2504)。
図26は、実施の形態2−1にかかる録画途中処理のフローチャートである。実施の形態2−1にかかる録画途中処理は、図13にて前述した実施の形態1−1にかかる録画途中処理とほぼ等しい処理である。具体的には、ステップS2602〜ステップS2608、ステップS2610の処理は、ステップS1301〜ステップS1307、ステップS1309の処理と等しい。
初めに、データ管理装置104は、未処理のフレームの画像データとIVでハッシュ関数を実行し、ハッシュ値Hとして保持する(ステップS2601)。また、ステップS2608の処理後、データ管理装置104は、ハッシュ値Hとハッシュ格納部内i番目のハッシュ処理途中結果から、圧縮関数1回の処理を実行する(ステップS2609)。また、ステップS2606の一定時間は、たとえば、(m/1秒間のフレーム数)で求められ、m=600[フレーム]、1秒間のフレーム数=30[フレーム]の場合、20秒となる。
(実施の形態2−2の概要説明)
図27〜図29を用いて、実施の形態2−2にかかる説明を行う。実施の形態2−2のハードウェアの構成は実施の形態2−1に示したものと等しく、機能的構成はほぼ等しい。機能的構成の違いとして、実施の形態2−1では、ハッシュ格納部306のハッシュ値群として、ハッシュ処理途中結果とその生成時刻となる開始時刻が格納されていた。これに対し実施の形態2−2では、ハッシュ処理途中結果とハッシュ処理途中結果を何回計算したかを示すカウンタが格納されている。
図27は、実施の形態2−2にかかるハッシュ格納部306のハッシュ生成の様子を示す説明図である。ハッシュ格納部306には、IVとハッシュ値群が格納されている。ハッシュ値群は、ハッシュ処理途中結果(1)とハッシュ処理途中結果を何回計算したかを示す値となるカウンタ(1)、ハッシュ処理途中結果(2)とそのカウンタ(2)、のように、ハッシュ同時処理数であるn個生成されている。
次に、ハッシュ値の生成について、たとえば、データ管理装置104は、時刻t1に、フレームt1の画像データとIVに対してハッシュ関数Hを実行しハッシュ値H1を得る。さらに、データ管理装置104は、H1とIVに対して圧縮関数cを実行し、結果の値をハッシュ処理途中結果(1)に格納し、カウンタ(1)に1を格納する。続けて、データ管理装置104は、時刻t2に、フレームt2の画像データのハッシュ値H2とハッシュ処理途中結果(1)に格納した値に対して圧縮関数cを実行し、結果の値を再びハッシュ処理途中結果(1)に格納し、カウンタ(1)に2を格納する。
前述した操作を保証するフレーム数であるm個のフレーム分繰り返し、最後にデータ管理装置104は、フレームt2の画像データのハッシュ値H2とハッシュ処理途中結果(1)に格納した値に対して圧縮関数cを実行し、結果の値を再びハッシュ処理途中結果(1)に格納し、カウンタ(1)にmを格納する。時刻tmに事故があった場合、車両制御装置103は、ハッシュ処理途中結果(1)に格納された値を署名生成部304へ出力する。ハッシュ処理途中結果(2)は、カウンタ(1)の値から判断してハッシュの生成を開始する。それ以降のハッシュ処理途中結果(n)についても、それぞれの一つ前のカウンタの値から判断してハッシュ処理途中結果を生成する。
また、時刻tmに事故が起こらずに、続けて次のフレームが入力され、記憶部302にはm個までのフレームの画像データを格納する場合、データ管理装置104は、フレームt1を削除する。続けて、データ管理装置104は、フレームt1に対応するハッシュ処理途中結果(1)とカウンタ(1)に格納されていた値を、カウンタ(1)の値から判断して削除し、新しく入力されたフレームから始まるハッシュ値の格納用として使用する。
次に、具体的な実施例について、実施の形態2−2は、実施の形態2−1と同じ結果を得る。ハッシュ値を削除するカウンタ値は、mと等しくなり、実施の形態2−1の実施例で記述した値をそのまま使用すると、600[フレーム]となる。また、ハッシュ値の生成をずらすカウンタの値は、m/n=15[フレーム]となる。
(実施の形態2−2の処理説明)
前述した構成を使用して、実施の形態2−2にかかるデータ管理装置104は、ハッシュ管理処理を行う。実施の形態2−2にかかるハッシュ管理処理は、実施の形態2−1にかかるハッシュ管理処理と同様に、録画開始処理と、録画途中処理と、事故発生時処理と、を内部に含む。録画開始処理に関しても実施の形態2−1と同様に、録画開始処理1と録画開始処理2が存在する。録画開始処理1と録画開始処理2も、実施の形態2−1と同様に、ハッシュ格納部初期化処理と、ハッシュ開始判断処理と、ハッシュ開始処理と、ハッシュ格納部状態更新処理と、を内部に含む。録画途中処理も、実施の形態2−1と同様に、前述したハッシュ開始処理と、ハッシュ格納部状態更新処理と、を内部に含む。
また、実施の形態2−2にかかるハッシュ管理処理は、実施の形態1−1にかかるハッシュ管理処理で示したフローと等しくなるため、説明を省略する。同様に、実施の形態2−2にかかる録画開始処理1と、録画開始処理2は、実施の形態2−1にかかる録画開始処理1と、録画開始処理2で示したフローと等しくなるため、説明を省略する。
同様に、実施の形態2−2にかかる事故発生時処理は、実施の形態1−2にかかる事故発生時処理で示したフローと等しくなるため、説明を省略する。実施の形態2−2にかかるハッシュ格納部初期化処理と、ハッシュ開始判断処理と、ハッシュ開始処理も同様のため、説明を省略する。実施の形態2−2にかかるハッシュ格納部状態更新処理、録画途中処理を図28、図29にて後述する。
前述した理由で説明を省略した実施の形態2−2にかかるハッシュ開始判断処理にて判断基準となる一定値について補足する。図17で前述した実施の形態1−2にかかるハッシュ開始判断処理でのステップS1709では、データ管理装置104は、一定値で判断を行う。実施の形態2−2での一定値の具体例としては、m/nで求められ、m=600[フレーム]、n=40[個]であれば、m/n=15[フレーム]となる。
図28は、実施の形態2−2にかかるハッシュ格納部状態更新処理のフローチャートである。実施の形態2−2にかかるハッシュ格納部状態更新処理は、図25にて前述した実施の形態2−1にかかるハッシュ格納部状態更新処理とほぼ等しい処理である。具体的には、ステップS2801〜ステップS2805、ステップS2807の処理は、ステップS2501〜ステップS2505、ステップS2506の処理と等しい。ステップS2805の処理後、データ管理装置104は、ハッシュ格納部内i番目のカウンタをインクリメントする(ステップS2806)。
図29は、実施の形態2−2にかかる録画途中処理のフローチャートである。実施の形態2−2にかかる録画途中処理は、図26にて前述した実施の形態2−1にかかる録画途中処理とほぼ等しい処理である。具体的には、ステップS2901〜ステップS2904、ステップS2907〜ステップS2910の処理は、ステップS2601〜ステップS2604、ステップS2607〜ステップS2610の処理と等しい。
ステップS2904:Yesであった場合、データ管理装置104は、ハッシュ格納部内i番目のカウンタを取得する(ステップS2905)。取得後、データ管理装置104は、取得したカウンタが一定値以上かを確認する(ステップS2906)。ここでの一定値は、mと等しくなり、m=600であれば、一定値は600[フレーム]となる。取得したカウンタが一定値以上の場合(ステップS2906:Yes)、データ管理装置104は、ステップS2908の処理を行う。取得したカウンタが一定値より小さい場合(ステップS2906:No)、データ管理装置104は、ステップS2907の処理を行う。
以上説明したように、実施の形態2−1にかかるデータ管理装置と実施の形態2−2にかかるデータ管理装置は、最新のデータが入力され、古いデータが消える都度、時系列なデータ群に関するハッシュ値を生成する。これにより、いつ故障しても故障時のハッシュ値が保持されているため、時系列のデータの連続性を保証することができる。
また、最新のデータのサイズを圧縮する圧縮関数を複数回実行することで、最新のデータに関するハッシュ値を生成する。そして、残余の時系列なデータ群に関するハッシュ値と最新のデータに関するハッシュ値とに基づいて、圧縮関数を少なくとも1回実行することで、最新のデータを加えた時系列なデータ群に関するハッシュ値を生成してもよい。
これにより、時系列のデータの連続性を保証することができる。さらに、画像のハッシュ値を1回しか生成せず、ハッシュ値のハッシュ値をハッシュ同時処理数であるn回分生成しているため、実施の1−1、1−2にかかるデータ管理装置104より高速に処理を行うことができる。よってハッシュ同時処理数nを大きくし、ハッシュ生成をずらす間隔を狭めることができるため、保証できるフレーム数を記憶装置に現存しているフレーム数により近づけることができる。
また、本データ管理装置が保証するデータは、映像フレームの画像データ以外に、音声データや、センサー105で取得した車両の速度、加速度、各速度を示すテキストデータをあわせて保証してもよい。また、事故時に運転手がシートベルトをしていたか、車両のギアが何になっていたか、などの状態をあわせて保証してもよい。これにより、事故時の状況をより正確に保証することができる。
また、本データ管理装置は、ドライブレコーダに適用できるが、故障を伴う監視カメラに適用してもよい。たとえば、本データ管理装置を含む監視カメラは、地震による故障時に、その時起こった映像の保証をすることができる。また、人が立ち入ることができず、人災や天災などで監視カメラが故障する可能性がある区域、たとえば、原子炉の中に対する監視カメラなどに適用してもよい。
なお、本実施の形態で説明したデータ管理方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本データ管理プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本データ管理プログラムは、インターネット等のネットワークを介して配布してもよい。