(57)【要約】【課題】映像から複数種類の特徴量を並列に抽出する映像解析装置において，必要なメモリ量を不必要に増大させることなく，トータルの処理時間を短縮する。【解決手段】フレームデータ取得部１２が取得した解析対象の画像データを，Ｎ個の映像解析部１０が共通に使用するフレームデータＭ個分の容量を持つフレームバッファ部１３に格納し，制御部１４は，フレームバッファ部１３のＭ個のバッファ領域ごとにＮ個の映像解析部１０の動作状況を記憶する動作状況テーブル２０によって，バッファ領域に格納された画像データの処理の進捗を管理し，この動作状況に基づいて，フレームデータ取得部１２およびＮ個の映像解析部１０を非同期に実行させる制御を行う。【選択図】図１
2010204892.tif 000002
【特許請求の範囲】
【請求項１】
映像からその映像の特徴的な区間やそれに付随する値である複数種類の特徴量を抽出して出力する映像解析装置であって，
映像をフレームごとの画像データとして取得するフレームデータ取得部と，
前記フレームデータ取得部により取得された画像データを一時的に蓄積する，１フレーム分の容量を持つバッファ領域をＭ個（Ｍ≧２）有するフレームバッファ部と，
前記フレームバッファ部からフレームごとの画像データを入力して解析することによって，前記特徴量を個別に抽出するＮ個（Ｎ≧２）の映像解析部と，
前記フレームバッファ部における前記Ｍ個の各バッファ領域ごとに，少なくとも前記各バッファ領域に格納された画像データに対する前記Ｎ個の各映像解析部の処理が完了しているか処理中であるかを示す動作状況情報を記憶する動作状況記憶部と，
前記動作状況記憶部に記憶された動作状況を示す情報に基づき，前記フレームデータ取得部および前記Ｎ個の各映像解析部を非同期に実行させる制御を行い，前記フレームデータ取得部による前記バッファ領域への画像データの格納を，そのバッファ領域に対する前記Ｎ個の各映像解析部の処理が完了していることを確認してから行わせる制御部と，
を備えることを特徴とする映像解析装置。
【請求項２】
請求項１記載の映像解析装置において，
前記制御部は，前記動作状況記憶部の動作状況を示す情報を参照し，前記Ｎ個の映像解析部のうち前記フレームバッファ部に格納されている画像データの処理が遅れている映像解析部の処理の実行優先度が高くなるように調整する手段を有する
ことを特徴とする映像解析装置。
【請求項３】
映像からその映像の特徴的な区間やそれに付随する値である複数種類の特徴量を，それぞれ個別に抽出するＮ個（Ｎ≧２）の映像解析部を備える映像解析装置が実行する映像解析方法であって，
映像をフレームごとの画像データとして取得し，１フレーム分の容量を持つバッファ領域をＭ個（Ｍ≧２）有するフレームバッファ部のバッファ領域に格納するフレームデータ取得過程と，
前記Ｎ個の映像解析部が，前記フレームバッファ部からフレームごとの画像データを入力して解析することによって，前記特徴量を抽出する処理を並列に実行する映像解析過程と，
前記フレームバッファ部における前記Ｍ個の各バッファ領域ごとに，少なくとも前記各バッファ領域に格納された画像データに対する前記Ｎ個の各映像解析部の処理が完了しているか処理中であるかを示す動作状況情報を動作状況記憶部によって管理し，該動作状況記憶部に記憶された動作状況を示す情報に基づき，前記フレームデータ取得過程および前記映像解析過程を非同期に実行する制御を行い，前記フレームデータ取得過程による前記バッファ領域への画像データの格納を，そのバッファ領域に対する前記映像解析過程の処理がすべて完了していることを確認してから行わせる制御過程と，
を有することを特徴とする映像解析方法。
【請求項４】
請求項３記載の映像解析方法において，
前記制御過程では，前記動作状況記憶部の動作状況を示す情報を参照し，前記Ｎ個の映像解析部のうち前記フレームバッファ部に格納されている画像データの処理が遅れている映像解析部の処理の実行優先度が高くなるように調整する
ことを特徴とする映像解析方法。
【請求項５】
請求項３または請求項４記載の映像解析方法を，コンピュータに実行させるための映像解析プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，映像データから各種特徴量を解析する映像解析装置，映像解析方法およびそのプログラムに関するものである。
【背景技術】
【０００２】
映像データを解析して，その映像の特徴的な区間やそれに付随する値（以下「特徴量」という）を自動的に出力する方式に関しては，従来から各種の技術が存在しており，例えば映像データ列から映像カット点を検出する技術（“ＣＵＴ映像解析”と呼ぶこととする），画像データ列（映像データと同義）からカメラパラメータを推定する技術（“ＣＡＭ映像解析”と呼ぶこととする) ，フレーム画像の中から文字部分を画素連結領域として抽出する文字領域抽出技術（“ＴＬＰ映像解析”と呼ぶこととする) ，映像から動物体アップフレーム画像（アップショットともいう）を検出する技術（“ＵＰＳ映像解析”と呼ぶこととする）などの種々の技術がある。
【０００３】
これらの技術に共通することは，映像を，連続する画像データ（フレームと呼ばれる）と捉え，時間的に近接する複数のフレームを入力データとして，それぞれ，カット，カメラワーク，テロップ，動物体アップショットなどの特微量を算出して出力することにある。そのため，単一のフレームデータ取得部（映像をフレーム画像データとして取得する機能）と，これらの技術とを組み合わせ，単一の映像データに対して，様々な特徴量を同時に出力する映像解析装置あるいは映像解析プログラムを構成することは可能であった。
【０００４】
実際に，映像からフレーム画像データを取得する処理は，ＣＰＵやメモリといったコンピュータ上のリソースを多く消費するため，一度のデコード処理で複数の特徴量を抽出することのメリットは大きい。
【０００５】
コンピュータ上のプログラムの実行にあたっては，ＣＰＵで実行する複数の処理単位からなるアプリケーションの処理を，各処理単位ごとに並列に非同期に実行するためのマルチスレッドという技術が従来から知られている。また，マルチスレッドプログラムにおいては，各スレッドの優先度を調整することにより，特定のスレッドに対して優先的にＣＰＵを割り当てることができる。このようなマルチスレッド処理やスレッドに対する優先度の調整は，多くのオペレーティングシステム（ＯＳ）によりサポートされている。
【０００６】
また，近年のコンピュータにおいては，１つのコンピュータにＣＰＵを複数搭載していたり（マルチＣＰＵと呼ぶ) ，１つのＣＰＵに複数の処理機構が組み込まれていたり（マルチコアと呼ぶ) することが一般化してきている。マルチコア，マルチＣＰＵ構成のコンピュータでは，マルチスレッドの非同期プログラム実行が，実際に複数のコアあるいはＣＰＵで同時に行われるため，トータル処理時間を短縮することが可能となる。
【０００７】
さらに，各フレームデータに対する繰り返し処理を行う場合，フレームごとに異なる処理時間を平準化する方法としては，一般にバッファリングを行うことが知られている。例えば，特許文献１の段落０００４などに，バッファリング技術が記載されている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開平９−２１４９５８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
一般に映像処理をコンピュータ上のプログラムとして実行する場合，膨大な計算量処理のために，ＣＰＵネックとなることが多い。しかしながら，単純な従来技術の組み合わせでは，十分な処理時間短縮効果が得られない。
【００１０】
図７は，本発明の課題を説明するための図であり，個別の特徴量抽出の技術を組み合わせて，様々な特徴量を同時に出力する装置の構成例を示す図である。図８は，図７に示す装置の動作シーケンスを示す図である。
【００１１】
従来技術の個別の特徴量抽出を実現する映像解析装置を組み合わせて，様々な特徴量を同時に出力する装置を考えた場合，例えば図７に示すような装置構成になると考えられる。
【００１２】
図７において，ＣＵＴ映像解析部１０１は，映像のカット点の検出を行うものであり，その検出結果であるカット点に関する特徴量の出力機能を持つＣＵＴ特徴量出力部１０２を有する。ＣＡＭ映像解析部１１１は，カメラパラメータの推定を行うものであり，その推定結果であるカメラワークに関する特徴量の出力機能を持つＣＡＭ特徴量出力部１１２を有する。ＴＬＰ映像解析部１２１は，映像中のテロップの検出を行うものであり，その検出結果であるテロップに関する特徴量の出力機能を持つＴＬＰ特徴量出力部１２２を有する。ＵＰＳ映像解析部１３１は，動物体アップフレーム画像の検出を行うものであり，その検出結果である動物体アップフレーム画像に関する特徴量の出力機能を持つＵＰＳ特徴量出力部１３２を有する。
【００１３】
フレームデータ取得部１５０は，圧縮符号化された映像データを，フレーム画像にデコードし，デコード結果のフレームデータを，制御部１４０の制御の下に，適当なタイミングで，ＣＵＴ映像解析部１０１，ＣＡＭ映像解析部１１１，ＴＬＰ映像解析部１２１，ＵＰＳ映像解析部１３１に渡す。制御部１４０は，これらの各部に映像を解析させる制御を行う。
【００１４】
例えば，図７に示すような装置構成を採用し，フレームデータ取得部１５０により取得されたフレームデータを，制御部１４０の制御の下に複数の映像解析部１０１〜１３１に渡し，これらの映像解析部１０１〜１３１がマルチスレッド構成により同時に実行されたとしても，以下に述べる理由により，次のフレームデータ処理に際して待ち状態が発生しやすくなる。このため，十分な処理時間短縮効果が得られないという問題が残る。
【００１５】
その理由は，以下のとおりである。各映像解析部１０１〜１３１は，それぞれ映像コンテンツに応じて必要な計算量がフレームによって異なる。例えば，画面にほとんど動きがない（カット，カメラワークといった特徴量がほとんどない）が，文字らしいものが映っているシーンの場合，テロップ特徴量抽出のみがＣＰＵ処理量が増大する。その後，文字が消えて，カメラの前をスキーヤーが通過するシーンになった場合，動物体アップショット特徴量抽出のみがＣＰＵ処理量が増大する。
【００１６】
図８はその状態を示しており，［ｋ，ｋ＋１］フレームにおいては，前者の文字シーン，［ｋ＋２，ｋ＋３］フレームにおいては，後者のスキーシーンである。なお，高々２フレーム程度でシーンが別になることはあり得ないが，ここでは説明のために簡素化している（実際には，それぞれ長く連続する) 。
【００１７】
このように，フレームデータ取得部１５０から全映像解析部１０１〜１３１へフレームデータを渡すところで，もっとも処理時間がかかる映像解析部に対して待ちが発生してしまい，全体としてＣＰＵ使用率を高めることができなくなるため，トータル処理時間の短縮効果が小さくなる。
【００１８】
処理時間の平準化効果を利用してこの問題を回避するために，バッファリングの方法を応用することは可能である。バッファ領域を複数フレーム分設け，入力データを一時的にそこに溜める方法である。しかし，この方法を採用した場合には，ハードウェア資源であるバッファメモリの必要量が増大するという新たな問題が生じる。
【００１９】
図９に，図７に示す装置の問題をバッファリング技術によって回避することを考えた場合の装置の構成例を示す。図１０は，その動作シーケンスを示す図である。図９の装置では，バッファリングの方法を応用して処理時間の平準化を図るために，フレームデータ取得部２５０と各映像解析部２０１〜２３１との間に，それぞれフレームバッファ部２０３〜２３３を設けている。
【００２０】
この場合，フレームデータ取得部２５０は，取得したデータを各フレームバッファ部２０３〜２３３のバッファ領域におくだけで，個々の映像解析部２０１〜２３１の処理終了に依存せずに次のフレームデータ取得を行うことができる。このため，図１０に示すように，フレームデータの各映像解析部２０１〜２３１への受け渡しを一定の時間内で済ませることができ，トータル処理時間の短縮を図ることができる。
【００２１】
しかしながら，この場合，各映像解析部２０１〜２３１ごとにバッファ領域を設ける必要がある。一般に映像データの場合，デコードされたフレームデータは大きなメモリ領域が必要となるため，各映像解析部２０１〜２３１ごとに複数フレーム分のバッファ領域を設けることは非常に多くのメモリを必要とする。また，メモリへのコピー動作も必要となることから，その動作のために処理時間短縮効果が小さくなるという課題もある。
【００２２】
本発明は，上記問題点の解決を図り，必要なメモリ量を不必要に増大させることなく，トータルの処理時間を短縮することができるようにすることを目的とする。
【課題を解決するための手段】
【００２３】
上記課題を解決するため，本発明においては，共通的なバッファを１つだけ設け，そのバッファの動作状況をＭ×Ｎのテーブル（Ｍは全バッファ容量を１フレームデータ分のサイズで割った値，Ｎは映像解析部の個数）などによって監視する管理機能をもった制御部により管理を行い，マルチスレッド処理で映像解析を行う。
【００２４】
すなわち，本発明は，複数種類の要素技術を並列して用いて映像データから複数種類の特徴量を抽出する際に，処理に必要なメモリ量を抑制しつつ，処理時間の短縮を図る。このため，本発明は，要素技術が共通して用いる共通バッファ（図１のフレームバッファ部１３）に処理対象となるフレーム情報を書き込み，各要素技術の映像解析部は，共通バッファに記録されているフレームに対する解析処理を実施する。制御部のフレームバッファ管理部は，動作状況テーブルにより解析処理の状況等を管理し，共通バッファ内に処理完了フレームがある場合に，フレームデータ取得部に新規フレームの共通バッファへの書き込みを行わせる。
【００２５】
この処理によって，要素技術ごとの専用バッファなしに，要素技術ごとの専用バッファがある場合と同様に，全要素技術の処理完了を待つことなく，要素技術ごとに独立してフレームの解析処理を実施できるようになる。
【００２６】
詳しくは，本発明は，映像からその映像の特徴的な区間やそれに付随する値である複数種類の特徴量を抽出して出力する映像解析装置であって，映像をフレームごとの画像データとして取得するフレームデータ取得部と，前記フレームデータ取得部により取得された画像データを一時的に蓄積する，１フレーム分の容量を持つバッファ領域をＭ個（Ｍ≧２）有するフレームバッファ部と，前記フレームバッファ部からフレームごとの画像データを入力して解析することによって，前記特徴量を個別に抽出するＮ個（Ｎ≧２）の映像解析部と，前記フレームバッファ部における前記Ｍ個の各バッファ領域ごとに，少なくとも前記各バッファ領域に格納された画像データに対する前記Ｎ個の各映像解析部の処理が完了しているか処理中であるかを示す動作状況情報を記憶する動作状況記憶部と，前記動作状況記憶部に記憶された動作状況を示す情報に基づき，前記フレームデータ取得部および前記Ｎ個の各映像解析部を非同期に実行させる制御を行い，前記フレームデータ取得部による前記バッファ領域への画像データの格納を，そのバッファ領域に対する前記Ｎ個の各映像解析部の処理が完了していることを確認してから行わせる制御部とを備えることを特徴とする。
【００２７】
また，上記発明において，前記制御部が，前記動作状況記憶部の動作状況を示す情報を参照し，前記Ｎ個の映像解析部のうち前記フレームバッファ部に格納されている画像データの処理が遅れている映像解析部の処理の実行優先度が高くなるように調整する手段を有することを特徴とする。
【発明の効果】
【００２８】
本発明により，必要なメモリ量を不必要に増大させることなく，Ｎ個の映像解析部が並列に特徴量抽出処理を実行する際のトータルの処理時間の短縮が可能となる。
【図面の簡単な説明】
【００２９】
【図１】本発明の実施形態に係る映像解析装置の構成例を示す図である。
【図２】本実施形態で用いる動作状況テーブルおよび管理用メモリ域の例を示す図である。
【図３】バッファ格納時の処理フローチャートである。
【図４】バッファ参照時の処理フローチャートである。
【図５】動作状況テーブルの具体的な使用例を示す図である。
【図６】非同期実行制御部および優先度調整部の処理フローチャートである。
【図７】本発明の課題を説明するための第１の構成例を示す図である。
【図８】図７の構成例の動作シーケンス図である。
【図９】本発明の課題を説明するための第２の構成例を示す図である。
【図１０】図９の構成例の動作シーケンス図である。
【発明を実施するための形態】
【００３０】
以下では主に，本発明の各部を，ＣＰＵやメモリなどのハードウェアとソフトウェアプログラムを用いて実施する場合を例として述べる。
【００３１】
図１は，本発明の実施形態に係る映像解析装置の構成例を示す。映像解析装置１は，映像データからそれぞれ異なる特徴量を抽出するＮ個（Ｎ≧２）の映像解析部１０［０］，１０［１］，１０［２］，…（以下，符号を単に１０と表記する場合もある）と，解析対象の映像をフレームごとの画像データとして取得するフレームデータ取得部１２と，これらの実行を制御する制御部１４とを備える。また，メモリ領域を利用した記憶手段として，フレームデータ取得部１２により取得された画像データを一時的に蓄積するフレームバッファ部１３と，フレームバッファ部１３に格納された画像データに対する各映像解析部１０の処理がどこまで進んでいるかを示す動作状況情報を記憶する動作状況テーブル２０を備える。
【００３２】
フレームバッファ部１３は，１フレーム分の容量を持つバッファ領域を少なくともＭ個（Ｍ≧２）有する。動作状況テーブル２０は，このＭ個の各バッファ領域ごとに，各映像解析部１０の動作状況を示す情報を管理する。
【００３３】
映像解析部１０［０］，１０［１］，１０［２］，…は，フレームバッファ部１３に格納された画像データから抽出した特徴量を出力する特徴量出力部１１［０］，１１［１］，１１［２］，…（以下，符号を１１と簡略表記する）を持つ。これらの特徴量出力部１１自体は，それぞれ従来技術と同様なものでよい。
【００３４】
制御部１４は，フレームバッファ部１３を管理する機能を持つフレームバッファ管理部１５，フレームデータ取得部１２と各映像解析部１０とを非同期に実行させる機能を持つ非同期実行制御部１６，各映像解析部１０の処理の実行優先度を調整する優先度調整部１７を備える。
【００３５】
この例では，説明をわかりやすくするために，フレームデータ取得部１２，制御部１４，映像解析部１０は，単一のコンピュータ上で実行されるソフトウェアモジュールによって構成されるものであり，各構成要素間の動作は，そのソフトウェアの関数コールの形式で実行されるものとして説明する。もちろん，本発明の実施は，必ずしも上記各部が単一のコンピュータ上で実行されるソフトウェアモジュールによって構成されるものに限定されるわけではなく，また，各部のインタフェースとして関数コールの形式を用いなくても実施できることは明らかである。
【００３６】
フレームデータ取得部１２は，ＭＰＥＧなどの形式で符号化・圧縮化等の処理がなされたファイルを入力し，フレーム画像にデコードする機能を有するソフトウェアによって実現される。このようなソフトウェアは数多く出回っており，デコード方法などの詳細な説明は省略するが，その基本的な動作は，初期化時に指定された（実際の指定方法は，コマンドラインにおける入力パラメータとして指定したり，初期化時にファイルオープンダイアログボックス等を画面に表示して利用者が選択したり，といった実施方法がある）ＭＰＥＧ等のファイルをオープンし，逐次，映像を構成する瞬間瞬間の画像データ（フレームデータと呼ばれる）を１フレームずつ取り出すことである。取り出されたフレームデータは，制御部１４の制御の下にフレームバッファ部１３内の領域に置かれる（詳しい動作は後述) 。ファイルの最後に到達し，これ以上フレームデータを取得できなくなった場合には，ファイルをクローズして処理を終了させる。
【００３７】
映像解析部１０は，以下のような既存の技術を用いて実施することができる。例えば，映像解析部１０が，映像データ列から映像カット点を検出し，時間的にゆっくりとしたシーン変化を含むカット点（カット区間）を出力するＣＵＴ映像解析を行う場合の実現方法としては，特許第２８３９１３２号に記載の方法がある。
【００３８】
また，他の特徴量抽出の例として，映像解析部１０が，画像データ列（映像データと同じ意味で記載されている）からカメラパラメータを推定し，映像データから，パン，チルトなどと呼ばれるカメラ動作がある区間について，そのパラメータ値と共に出力するＣＡＭ映像解析を行う場合の実現方法としては，特許第３４０８１１７号に記載の方法がある。
【００３９】
また，映像解析部１０が，フレーム画像の中から文字部分を画素連結領域として抽出する文字領域を抽出し，この方法を映像データのフレーム画像に適用することにより，映像データから，一般にテロップと呼ばれている文字領域が含まれる映像区間と，そのテロップ位置情報を出力するＴＬＰ映像解析を行う場合の実現方法としては，特許第３４６７１９５号に記載の方法がある。
【００４０】
また，映像解析部１０が，映像から動物体アップフレーム画像を検出し，動物体がクローズアップされ比較的大きく写っている映像フレーム区間を出力するＵＰＳ映像解析を行う場合の実現方法としては，特開２００６−２４４０７４号公報に記載の方法がある。
【００４１】
もちろん，これらに限定されず，フレームデータを逐次入力することにより，特徴量を解析して，ファイル等へ出力できる従来技術であれば，本発明の１機能として構成することは可能である。さらに，今後開発される技術に対しても，同様にフレームデータを逐次入力することにより，特徴量を解析して，ファイル等へ出力できるものであれば，適用することも可能である。
【００４２】
本発明における映像解析部１０としては，制御部１４の制御によりフレームバッファ部１３からフレームデータを参照して入力とすることが必要となる。その動作については，制御部１４を説明する際に詳述する。
【００４３】
なお，Ｎ個の映像解析部１０は，０，１，２，…，Ｎ−１という番号を付与して管理する。
【００４４】
フレームバッファ部１３は，最大Ｍ個のフレームデータを格納するために，Ｍ個に区切られた必要なメモリ領域として構成される。これらのメモリ領域（バッファ領域ともいう）は，０，１，２，…，Ｍ−１という番号を付与して管理する。
【００４５】
処理の詳細を説明するに先立ち，本実施形態の制御部１４において，フレームバッファ管理部１５がフレームバッファ部１３の管理に用いる動作状況テーブル２０と，その他の管理用メモリ域の内容を，図２に従って説明する。
【００４６】
動作状況テーブル２０は，図２（Ａ）に示すように，バッファ番号（図２ではバッファ＃０，＃１，…，＃Ｍ−１と表記）ごとに，各映像解析部１０［０］，１０［１］，…，１０［Ｎ−１］の動作状況を示すフラグＦ［ｉ，ｊ］（ｉ＝０，１，…，Ｍ−１；ｊ＝０，１，…，Ｎ−１）を保持する。
【００４７】
この動作状況フラグＦ［ｉ，ｊ］の値は，図２（Ｂ）に示すように遷移する。初期値は，すべて「処理完」である。フレームデータ取得部１２がフレームバッファ部１３のバッファに画像データを書き込む準備ができたときに，Ｆ［ｉ，ｊ］の値は「デコード中」に遷移し，画像データの書き込みが終了すると「デコード完」となる。続いて，各映像解析部１０がバッファ内の画像データを読み出して解析している間，Ｆ［ｉ，ｊ］の値は「解析中」に設定され，解析が終了してバッファ内の画像データが不要になると，「処理完」の状態に戻される。
【００４８】
フレームデータ取得部１２が画像データを格納すべきバッファ番号を格納するメモリ域として，図２（Ｃ）に示す書き込み用バッファ番号格納メモリＢdec が用いられる。また，図２（Ｄ）に示すように，各映像解析部１０［ｊ］（ｊ＝０，１，…，Ｎ−１）が画像データを参照すべきバッファ番号を格納するメモリ域として参照用バッファ番号格納メモリＢ［ｊ］が用いられる。Ｂdec およびＢ［ｊ］の初期値は，すべて０とする。
【００４９】
なお，図２に示すメモリ域（動作状況テーブル２０を含む）は，単にフラグや番号を格納するに過ぎないので，必要とするメモリの容量としては，フレームデータと比較して非常に小さい。
【００５０】
図３は，フレームバッファ部１３への画像データの格納時のフレームデータ取得部１２とフレームバッファ管理部１５の処理フローを示している。
【００５１】
フレームバッファ管理部１５は，前述した図２（Ａ）に示す動作状況テーブル２０によって，フレームバッファ部１３のバッファ領域に対するフレームデータ取得部１２および各映像解析部１０の動作状況を管理する。フレームバッファ部１３に対する映像解析装置１の動作は，基本的に「フレームデータ取得部１２によるバッファへの書き込み」，「すべての映像解析部１０によるバッファの参照」を繰り返すことである。そのため，動作状況テーブル２０の各動作状況フラグＦ［ｉ，ｊ］によりその動作順を保証している。
【００５２】
フレームデータ取得部１２は，制御部１４の制御のもとに，フレームバッファ部１３にデータを書き込む際に，まず指定された映像ファイルから１フレーム分のデータを取得する（ステップＳ１０）。このステップＳ１０は，最初にＭＰＥＧ等の映像ファイルをオープンし，その映像ファイルから，逐次，１フレーム分のデータを呼び出してくる処理である。このような処理は，映像データに対するデコーダと呼ばれる機能であり，各種フォーマットの映像ファイルに対して，多くのデコーダがソフトウェアライブラリの形式で利用できるようになっているため，それを使うことで実施可能である。
【００５３】
フレームデータ取得部１２は，１フレーム分のデータを取得すると，フレームバッファ管理部１５の格納開始処理を呼び出す（ステップＳ１１）。格納開始処理は，例えば制御部１４が提供する関数として呼び出される。なお，後述するフレームバッファ管理部１５の他の処理機能も同様の方法により呼び出されるが，サブルーチンあるいはマクロ命令機能を用いた呼び出し方法などを用いてもよい。
【００５４】
フレームバッファ管理部１５では，動作状況テーブル２０からＢdec で示されるバッファのフラグ値，すなわち，Ｆ［Ｂdec ，０］，Ｆ［Ｂdec ，１］，…，Ｆ［Ｂdec ，Ｎ−１］を取得する（ステップＳ２０）。次に，取得したＮ個のフラグ値がすべて「処理完」かどうかを調べる（ステップＳ２１）。フラグ値がすべて「処理完」になっていなければ，あらかじめ定められたＴwait秒間待った後（ステップＳ２２），再度，ステップＳ２０の処理を繰り返す。
【００５５】
すべてのフラグ値が「処理完」である場合には，動作状況テーブル２０におけるＦ［Ｂdec ，０］，Ｆ［Ｂdec ，１］，…，Ｆ［Ｂdec ，Ｎ−１］のフラグ値を，すべて「デコード中」にセットする（ステップＳ２３）。その後，フレームデータ取得部１２に制御を戻す。
【００５６】
格納開始処理が終了すると，フレームデータ取得部１２は，フレームバッファ部１３におけるＢdec 番目のバッファに，１フレーム分のデータをデコードして格納する（ステップＳ１２）。デコードが終わったならば，フレームバッファ管理部１５の格納終了処理を呼び出す（ステップＳ１３）。
【００５７】
フレームバッファ管理部１５では，動作状況テーブル２０のＢdec で示される動作状況フラグＦ［Ｂdec ，０］，Ｆ［Ｂdec ，１］，…，Ｆ［Ｂdec ，Ｎ−１］をすべて「デコード完」にセットする（ステップＳ３０）。次に，書き込み用バッファ番号格納メモリＢdec の値をカウントアップする（ステップＳ３１）。すなわち，「Ｂdec ＝（Ｂdec ＋１）  ｍｏｄ  Ｍ」とする。ここで「ｍｏｄ  Ｍ」は，Ｍによる剰余計算を表す。その後，フレームデータ取得部１２に制御を戻す。
【００５８】
フレームデータ取得部１２は，映像ファイルのデータが終了するまで，以上のステップＳ１０〜Ｓ１３を同様に繰り返す（ステップＳ１４）。
【００５９】
図４は，フレームバッファ部１３に格納された画像データの参照時の各映像解析部１０［ｉ］とフレームバッファ管理部１５の処理フローを示している。
【００６０】
映像解析部１０［ｉ］は，画像データから特徴量を抽出するにあたって，解析対象となる画像データが格納されたバッファ領域を特定するために，まず，フレームバッファ管理部１５の参照開始処理を呼び出す（ステップＳ４０）。
【００６１】
フレームバッファ管理部１５では，動作状況テーブル２０からＢ［ｉ］で示されるバッファの映像解析部１０［ｉ］の動作状況を示すフラグ値Ｆ［Ｂ［ｉ］，ｉ］を取得する（ステップＳ５０）。次に，取得したＦ［Ｂ［ｉ］，ｉ］が「デコード完」になっているかどうかを調べる（ステップＳ５１）。「デコード完」になっていなければ，あらかじめ定められたＴwait秒間待った後（ステップＳ５２），再度，ステップＳ５０の処理を繰り返す。
【００６２】
Ｆ［Ｂ［ｉ］，ｉ］が「デコード完」になっていれば，動作状況テーブル２０におけるＢ［ｉ］番目のバッファに対する映像解析部１０［ｉ］のフラグ値Ｆ［Ｂ［ｉ］，ｉ］を，「デコード完」から「解析中」に更新する（ステップＳ５３）。その後，Ｂ［ｉ］で示されるバッファ領域情報を戻り値として，映像解析部１０［ｉ］に制御を戻す（ステップＳ５４）。
【００６３】
映像解析部１０［ｉ］は，Ｂ［ｉ］で示されるバッファ領域から画像データを読み込み，特徴量解析処理を行う（ステップＳ４１）。読み込んだ画像データを解析することにより，特徴量が取得できた場合には，特徴量出力部１１［ｉ］によりその特徴量の出力処理を行う（ステップＳ４２）。その後，フレームバッファ管理部１５の参照終了処理を呼び出す（ステップＳ４３）。
【００６４】
フレームバッファ管理部１５では，動作状況テーブル２０におけるＢ［ｉ］番目のバッファに対する映像解析部１０［ｉ］のフラグ値Ｆ［Ｂ［ｉ］，ｉ］を，「解析中」から「処理完」に更新する（ステップＳ６０）。次に，映像解析部１０［ｉ］の参照用バッファ番号格納メモリＢ［ｉ］の値をカウントアップする（ステップＳ６１）。すなわち，「Ｂ［ｉ］＝（Ｂ［ｉ］＋１）  ｍｏｄ  Ｍ」とする。その後，映像解析部１０［ｉ］に制御を戻す。
【００６５】
映像解析部１０［ｉ］は，解析対象のすべての画像データの処理が終了するまで，以上のステップＳ４０〜Ｓ４３を同様に繰り返す（ステップＳ４４）。
【００６６】
図３および図４の処理フローには，フレームデータの書き込みや参照において，所望する状態（動作状況テーブル２０のフラグによって管理される状態）にない場合，「Ｔwait秒間待つ」という処理（Ｓ２２，Ｓ５２）が入っている。Ｔwait秒間待たずに繰り返しフラグ状態を見ることも可能であるが，実際にはそのフラグ状態確認のためのＣＰＵ処理負荷が高くなるため，Ｔwaitとして，０．０１〜０．１秒程度の待ちを入れるほうが実用的な実施例となる。ここでは，図３，図４ともに，同じ値で記載しているが，それぞれ異なる値としてもよい。
【００６７】
また，実際の発明実施にあたっては，フラグチェック中に別スレッドによる動作状況テーブル２０の書き換えを防ぐ必要があるが，これについてはＯＳの機能により容易に対処可能であるので，詳しい説明は省く。
【００６８】
図５は，動作状況テーブル２０の具体例を示している。この例では，１フレーム分の容量のバッファ領域が１０個あり，映像解析部１０が４個ある。フレームデータ取得部１２は，現在，バッファ＃９へのデータの書き込みを行っており，この書き込みが終了すると，バッファ＃９の動作状況フラグはすべて「デコード完」になる。続いて，バッファ＃０の動作状況フラグがすべて「処理完」であるので，フレームバッファ管理部１５によってこのフラグを「デコード中」に更新し，フレームデータ取得部１２は，バッファ＃０に対して次のフレームのデータの書き込みを続けることになる。
【００６９】
映像解析部１０［０］は，現在，バッファ＃８のデータを解析中であり，この解析が終了すると，フレームバッファ管理部１５によってこのフラグを「処理完」にセットし，続くバッファ＃９が「デコード完」になるのを待って，次のフレームの解析を行うことになる。他の映像解析部１０［１］，１０［２］，１０［３］についても同様に，それぞれバッファ＃２，＃５，＃７のデータを解析中であり，その解析が終了すると，「デコード完」になっている次のバッファに格納された１フレーム分の画像データの解析を続けることになる。
【００７０】
次に，制御部１４における非同期実行制御部１６および優先度調整部１７の処理フローについて，図６に従って説明する。
【００７１】
現在のオペレーティングシステム（ＯＳ）は，スレッドの生成，スレッドに対するプログラムコードの割り当て，スレッド優先度の設定，といった機能をアプリケーションインタフェース（ＡＰＩ）として提供している。これらの機能の実施にあたっては，このようなＯＳのＡＰＩを利用することにより，実施可能である。生成されたスレッドに対して，プログラムコードを割り当てると，そのプログラムにより実装された機能が，個別のスレッドとして，非同期に実行される。
【００７２】
図６のうち，Ｔcheck 秒は，全体の動作状況管理のための周期であり，実施時においては，１秒などと固定すればよい。この場合，１秒ごとに，終了したかどうかを確認し，優先度の変更がなされる。
【００７３】
この時間ごとに，動作状況テーブル２０を調べる。動作状況テーブル２０は，動作時には，例えば図５のようになっており，この動作状況テーブル２０から各映像解析部１０の処理の進捗状況を把握することができる。すなわち，フレームデータ取得部１２が取得したフレームに対して，処理が遅れている映像解析部１０は，「デコード完」フラグとなっているバッファ数が多くなるので，その数を調べることにより，優先的にＣＰＵを割り当てるべき映像解析スレッドが分かる。図５の動作状況テーブル２０の例では，各映像解析部１０の動作状況フラグのうち「デコード完」になっているフラグの数が一番多いのは映像解析部１０［１］であるので，この映像解析部１０［１］の処理が遅れていることが分かる。そこで，この場合には，優先度調整部１７は，映像解析部１０［１］のスレッドの実行優先度を上げて，他のスレッドの実行優先度よりも高くする。
【００７４】
非同期実行制御部１６，優先度調整部１７は，詳しくは以下の処理を行う。非同期実行制御部１６は，映像の解析にあたって，最初にフレームデータ取得部１２のスレッドを起動し，フレームデータ取得部１２の処理機能を実現するプログラムコードを，スレッドに割り当てる（ステップＳ７０）。次に，映像解析部１０がＮ個必要となる場合には，ｉ＝０，１，…，Ｎ−１まで，ステップＳ７２の処理を繰り返す（ステップＳ７１）。ステップＳ７２では，映像解析部１０［ｉ］のスレッドを起動し，映像解析部１０［ｉ］の処理機能を実現するプログラムコードを，スレッドに割り当てる。
【００７５】
その後，Ｔcheck 秒ごとに，ステップＳ７４，Ｓ８０，Ｓ８１の処理を繰り返す（ステップＳ７３）。Ｔcheck 秒経過したならば，フレームデータ取得部１２がファイル終了により終了したかを判定する（ステップＳ７４）。フレームデータ取得部１２が終了した場合には，全映像解析部１０のスレッドに対して終了を通知し（ステップＳ７５），処理を終了する。各映像解析部１０では，終了通知を受けると，フレームバッファ部１３に残っているデータをすべて解析した後，処理を終了する。
【００７６】
フレームデータ取得部１２が終了していない場合，優先度調整部１７は，動作状況テーブル２０から各映像解析部１０［ｉ］ごとに，動作状況フラグが「デコード完」になっている割合を計算する（ステップＳ８０）。次に，計算した割合が大きい映像解析部１０［ｉ］のスレッドに対して，より高いスレッド優先度を割り当てる（ステップＳ８１）。これにより，処理が遅れている映像解析部１０［ｉ］のスレッドに対するＣＰＵ割り当て時間が増え，処理の遅れが解消されやすくなる。
【００７７】
以上の映像解析装置が行う処理は，コンピュータとソフトウェアプログラムとによって実現することができ，そのプログラムをコンピュータ読み取り可能な記録媒体に記録することも，ネットワークを通して提供することも可能である。
【符号の説明】
【００７８】
１  映像解析装置
１０  映像解析部
１１  特徴量出力部
１２  フレームデータ取得部
１３  フレームバッファ部
１４  制御部
１５  フレームバッファ管理部
１６  非同期実行制御部
１７  優先度調整部
２０  動作状況テーブル
【図１】
2010204892.tif 000003
【図２】
2010204892.tif 000004
【図３】
2010204892.tif 000005
【図４】
2010204892.tif 000006
【図５】
2010204892.tif 000007
【図６】
2010204892.tif 000008
【図７】
2010204892.tif 000009
【図８】
2010204892.tif 000010
【図９】
2010204892.tif 000011
【図１０】
2010204892.tif 000012