7 マルチメディア分析の使用

ビッグ・データ環境でマルチメディア分析フレームワークを使用すると、ビデオおよびイメージで顔認識を実行できます。

注意:

Big Data Spatial and Graphのマルチメディア・アナリティクス機能は、Big Data Spatial and Graphリリース2.5で非推奨となり、将来のリリースでサポートされなくなる可能性があります。マルチメディア・アナリティクス機能の代替機能はありません。

7.1 マルチメディア分析について

Oracle Big Data Spatial and Graphのマルチメディア分析機能は、Apache Hadoopでビデオおよびイメージ・データを処理するためのフレームワークを提供します。

このフレームワークにより、ビデオおよびイメージ・データの分散処理が可能になります。このフレームワークには、次のような機能があります。

  • Apache Hadoopでビデオおよびイメージ・データを処理および分析するためのAPI

    • MapReduceを使用してビデオおよびイメージ・データを処理および分析するためのAPI (入力データはHDFS、Oracle NoSQL DatabaseまたはApache HBaseのいずれかに格納されます)

    • Apache Sparkを使用してストリーミング・ビデオをリアルタイムで処理および分析するためのAPI

  • Apache Hadoopの並列性を活用した、スケーラブルな高速処理

  • OpenCVを使用した組込みの顔認識

  • カスタム・ビデオ/イメージ処理(ライセンス・プレート認識など)をインストールおよび実装して、Apache Hadoopでこのフレームワークを使用して実行できる機能

ビデオ分析フレームワークは、Oracle Spatial and Graphのライセンスが付与されている場合にOracle Big Data Applianceにインストールされ、他のHadoopクラスタにインストールできます。

7.2 マルチメディア分析フレームワークを使用したHDFSに格納されたビデオおよびイメージの処理

マルチメディア分析フレームワークは、MapReduceを使用してHDFSに格納されたビデオおよびイメージ・データを処理します。

OpenCVを使用した顔認識は、フレームワークに統合されており、製品で使用できます。顔認識、ライセンス・プレート認識およびオブジェクト認識などの様々なユースケースを対象としてサード・パーティの処理コードをフレームワークに統合することもできます。

ビデオおよびイメージ・データの処理には、次が含まれます

  1. 入力データは、HDFS、Oracle NoSQL DatabaseまたはApache HBaseから提供されます。

    • ビデオ入力データをHDFSに格納したり、デコードされたフレームをOracle NoSQL DatabaseまたはApache HBaseに格納したりできます。

    • イメージ入力データは、HDFS、Oracle NoSQL DatabaseまたはApache HBaseに格納できます。

  2. データは、一連のイメージまたはビデオ・フレームに分割されます。

  3. イメージまたはビデオ・フレームは、OpenCVまたはサード・パーティのコードを使用して各ノードで処理されます。

  4. 処理の出力は、HDFSまたはApache HBaseに格納されます。

7.3 マルチメディア分析フレームワークを使用したストリーミング・ビデオの処理

マルチメディア分析フレームワークは、Apache Sparkを使用してRTSPおよびHTTPサーバーからのストリーミング・ビデオを処理します。

OpenCVを使用した顔検出および顔認識は、フレームワークに統合されており、製品で使用できます。顔認識、ライセンス・プレート認識およびオブジェクト認識などの様々なユースケースを対象としてサード・パーティの処理コードをフレームワークに統合できます。

ストリーミング・ビデオは、Apache Sparkジョブによって処理されます。Sparkジョブは、各フレームを処理し、結果をHDFSに出力するか、出力を書き込むためのカスタム実装を使用した特別な出力場所に出力します。ローカル・ファイル・システムに書き込み、データをデモ・イメージ・プレーヤに送信するカスタム・ライターのサンプル実装は、製品に用意されています。

ストリーミング・ビデオ処理には、次が含まれます

  1. 入力データは、RTSPまたはHTTPストリーミング・サーバーまたはHDFSから提供されます。フレームワークは、ビデオ・ストリーミングをHDFSに読み込むこともできます。

  2. ビデオ・ストリーミングは、フレームにデコードされます。

  3. ビデオ・フレームは、Apache Sparkによって処理されます。

  4. 処理の結果は、HDFSに書き込むか、カスタム・プラグインを使用したイメージ・プレーヤなどの特別な場所に書き込むことができます。サンプル・プラグインは、次を目的として使用できます。

    • ローカル・ファイル・システムへのJSON、CSVおよび/またはイメージ・データの書込み

    • イメージ・プレーヤへのイメージ・データの送信による結果のリアルタイム表示の実現。(デモ・イメージ・プレーヤは製品に含まれています。)

7.4 マルチメディア分析フレームワークを使用した顔認識

マルチメディア分析機能は、OpenCVライブラリを使用して顔認識を実行するように構成されています。このOpenCVライブラリは製品で使用できます。

このトピックでは、この顔認識機能をMapReduceとともに使用して、HDFSに格納されているビデオおよびイメージを処理する方法について説明します。顔認識には次の2つのステップがあります。

  1. 顔のイメージを使用してモデルをトレーニングします。このステップは、任意のHadoopクライアントまたはノードで実行できます。

  2. トレーニング・モデルを使用して、入力ビデオまたはイメージから顔を認識します。このステップは、Hadoopクラスタで実行するMapReduceジョブです。

トレーニング・プロセスにより、ファイルに格納されるモデルが作成されます。このファイルは、ビデオまたはイメージからの顔認識の入力として使用されます。

7.4.1 顔を検出するためのトレーニング

トレーニングは、ordhadoop_multimedia_analytics.jarの一部であるJavaプログラムOrdFaceTrainerを使用して行われます。このプログラムへの入力は、イメージと、イメージをラベルにマッピングするラベル・マッピング・ファイルのセットです。出力は、ファイルに書き込まれるトレーニング・モデルです。(このファイルは編集しないでください。)

顔を検出(認識)するためにマルチメディア分析機能をトレーニングするには、次の手順に従います。

  1. 認識の対象となるイメージを格納する、親ディレクトリとサブディレクトリを作成します。

    各サブディレクトリには、1人の人物のイメージが1つ以上含まれている必要があります。1人の人物のイメージを複数のサブディレクトリに格納することはできますが、1つのサブディレクトリに含めることができるのは1人の人物のイメージのみです。たとえば、imagesという名前の親ディレクトリが存在し、1つのサブディレクトリ(d1)にはAndrewという名前の人物のイメージが含まれ、2つのサブディレクトリ(d2およびd3)にはBettyという名前の人物のイメージ(2つの異なる場所で2つの異なる時間に撮影された写真など)が含まれているとします。この例では、ディレクトリとその内容は次のようになる可能性があります。

    • images/1には、Andrewのイメージが5つ含まれています。

    • images/2には、Bettyのイメージが2つ含まれています。

    • images/3には、Bettyのイメージが4つ含まれています。

  2. イメージのサブディレクトリをラベルにマップするマッピング・ファイルを作成します。

    ラベルとは、認識されるイメージの人物に関連付けられる数値IDです。たとえば、Andrewはラベル値100に関連付けられ、Bettyはラベル値101に関連付けられる、というようになります。マッピング・ファイル内の各レコード(行)には、次の構造が含まれている必要があります。

    <subdirectory>,<label-id>,<label-text>

    次に例を示します。

    1,100,Andrew
    2,101,Betty
    3,101,Betty
  3. 必須の構成プロパティを設定します。

    oracle.ord.hadoop.ordfacemodel
    oracle.ord.hadoop.ordfacereader
    oracle.ord.hadoop.ordsimplefacereader.dirmap 
    oracle.ord.hadoop.ordsimplefacereader.imagedir
    

    使用可能なプロパティの詳細は、「マルチメディア分析の構成プロパティ」を参照してください。

  4. トレーニング・モデルを作成します。次の一般的な形式でコマンドを入力します。

    hadoop jar ${MMA_HOME}/lib/ordhadoop-multimedia-analytics-example.jar faceTrainer <training_config_file.xml>

注意:

$MMA_HOME/exampleには、サンプル・ファイルのセットがあります。これには、Java CLASSPATHを設定するためのスクリプトが含まれています。トレーニング・モデルを作成するために、必要に応じて例を編集できます。

7.4.2 トレーニングに使用する顔の選択

トレーニング・モデルの作成に使用するイメージは、顔のみを含み、できるかぎり顔の周囲に細かいものが写っていないようにする必要があります。次のいくつかの例は、同じ男性がそれぞれ異なる表情をした4つのイメージを示しています。


faces_for_training.jpgの説明が続きます
図faces_for_training.jpgの説明

トレーニングのためのイメージの選択は、正確なマッチングのために重要です。次のガイドラインが適用されます。

  • イメージのセットには、目を閉じたり笑ったりするなど、考え得るあらゆる構えや表情の顔を含める必要があります。

  • イメージは同じサイズである必要があります。

  • イメージは解像度が高く、ピクセル品質がよい必要があります。

  • 非常に似ているイメージを含めることは避けてください。

  • 人物をいくつかの異なる背景や照明条件の下で認識する必要がある場合は、それらの背景を持つイメージを含めます。

  • 含めるイメージの数は、入力データで予想される動きや背景の多様さによって異なります。

一連のイメージ内のイメージを処理し、質の高いトレーニング・イメージを作成する方法の例は、$MMA_HOME/example/facetrain/runFaceTrainUIExample.shを参照してください

7.4.3 ビデオでの顔の検出

ビデオ内の顔を検出(認識)するには、ビデオ処理ソフトウェアでビデオ・データをトランスコードするために、次のオプションがあります。

  • OpenCVで使用可能な任意の正面顔のカスケード分類器とともに、フレーム・プロセッサとしてOrdOpenCVFaceRecognizerMultiを使用します。

    手始めにHaarcascade_frontalface_alt2.xmlを使用すると便利です。様々なカスケード分類器を試して、要件に合ったものを特定できます。

  • サードパーティの顔認識ソフトウェアを使用します。

認識を実行するには、次の手順に従います。

  1. (顔を認識するビデオを含む)ビデオ・ファイルをHDFSにコピーします。

  2. これらの必要なファイルを、クラスタのすべてのノードがアクセス可能な共有の場所にコピーします。

    • 生成したトレーニング・モデル

    • イメージ・サブディレクトリをラベルにマップするマッピング・ファイル

    • カスケード分類器XMLファイル

  3. 構成ファイルを作成します。

    必須構成パラメータ:

    • oracle.ord.hadoop.inputtype: 入力データのタイプ(videoまたはimage)。

    • oracle.ord.hadoop.outputtypes: 生成された結果の形式(JSON/テキスト/イメージ)。

    • oracle.ord.hadoop.ordframegrabber: ビデオ・データからビデオ・フレームを取得します。製品で使用可能なJavaクラスを使用するか、または抽象の実装を提供できます。

      • OrdJCodecFrameGrabberは製品で使用できます。このクラスは、追加のステップなしで使用できます。JCodecの詳細は、www.jcodec.orgを参照してください。

      • OrdFFMPEGFrameGrabberは製品で使用できます。このクラスは、FFMPEGライブラリのインストールを必要とします。詳細は、www.ffmpeg.orgを参照してください

    • oracle.ord.hadoop.ordframeprocessor: ビデオ・フレームで顔を認識するために使用するプロセッサ。製品で使用可能なJavaクラスを使用するか、または抽象の実装を提供できます。製品で使用できるクラスは次のとおりです。

      • 顔認識用のoracle.ord.hadoop.mapreduce.OrdOpenCVFaceRecognize

      • 顔検出用のoracle.ord.hadoop.demo.OrdFaceDetectionSample

    • oracle.ord.hadoop.recognizer.classifier: カスケード分類器XMLファイル。

    • oracle.ord.hadoop.recognizer.labelnamefile: イメージ・サブディレクトリをラベルにマップするマッピング・ファイル。

    オプションの構成パラメータ:

    • oracle.ord.hadoop.frameinterval: 処理されるフレーム間の時間間隔(秒数)。デフォルト: 1。

    • oracle.ord.hadoop.numofsplits: Hadoopクラスタ上のビデオ・ファイルの分割の数で、Hadoopクラスタの各ノードで1つの分割が分析されます。デフォルト: 1。

    • oracle.ord.hadoop.recognizer.cascadeclassifier.scalefactor: トレーニングで使用されたイメージと、ビデオ・フレームまたはイメージで認識された顔をマッチングするために使用されるスケール係数。デフォルト: 1.1 (スケーリングなし)

    • oracle.ord.hadoop.recognizer.cascadeclassifier.minneighbor: ビデオ・フレームまたはイメージで顔を検出するためのスライディング・ウィンドウのサイズを決定します。デフォルト: 1。

    • oracle.ord.hadoop.recognizer.cascadeclassifier.flags: 顔検出のタイプを決定します。

    • oracle.ord.hadoop.recognizer.cascadeclassifier.minsize: 顔の検出に使用される最小の境界ボックス。

    • oracle.ord.hadoop.recognizer.cascadeclassifier.maxsize: 顔の検出に使用される最大の境界ボックス。

    • oracle.ord.hadoop.recognizer.cascadeclassifier.maxconfidence: 検出される顔とモデルの顔の間の最大許容距離。

    • oracle.ord.hadoop.ordframeprocessor.k2: OrdFrameProcessorの実装クラスのキー・クラス。

    • oracle.ord.hadoop.ordframeprocessor.v2: OrdFrameProcessorの実装クラスの値クラス。

  4. 顔を認識するHadoopジョブを実行します。次の形式でコマンドを入力します。

    $ hadoop jar $MMA_HOME/lib/orhadoop-multimedia-analytics.jar -conf <conf file> <hdfs_input_directory_containing_video_data> <hdfs_output_directory_to_write_results>

    構成ファイルでoracle.ord.hadoop.ordframeprocessorプロパティが必要な値で指定されていることを確認してください。

顔の検出の正確さは、照明、明度、顔の向き、カメラから顔までの距離、ビデオまたはイメージの鮮明さなど、様々な要因によって決まります。複数の構成プロパティを試して、ユースケースに最も適した値のセットを特定する必要があります。偽陽性(顔が異なるオブジェクトの識別)と誤認(顔のラベル付けの誤り)は、常に発生する可能性があることに注意してください。

注意:

$MMA_HOME/exampleには、サンプル・ファイルのセットがあります。 これには、Java CLASSPATHを設定するためのスクリプトが含まれています。必要に応じて編集し、顔を検出するジョブを発行します。

7.4.4 イメージでの顔の検出

イメージ上の顔を検出するには、イメージをHDFSにコピーします。次のプロパティを指定します。

<property>
  <name>oracle.ord.hadoop.inputtype</name>
  <value>image</value>
</property>

7.4.5 Oracle NoSQL Databaseの操作

Oracle NoSQL Databaseを使用すると、イメージなどの小さいオブジェクトを操作するときにパフォーマンスが向上します。イメージは、Oracle NoSQL Databaseに格納し、マルチメディア分析フレームワークによってアクセスできます。入力データがビデオである場合、ビデオをフレームにデコードし、フレームをOracle NoSQL Databaseに格納する必要があります。HDFSまたはHBaseを使用して、マルチメディア処理の出力を格納できます。

Oracle NoSQL Database Release 4.3以降、ユーザー認証がデフォルトで有効になります。Oracle NoSQL Databaseを使用する場合、ユーザー・アクセスを認証するためのメカニズムを設定する必要があります。$MMA_HOME/example/kvliteでデモを構成する手順は、$MMA_HOME/example/README.txtを参照してください。

入力がOracle NoSQL Database内にある場合、次のプロパティが必要です。

  • oracle.ord.hadoop.datasource – 入力データの記憶域オプション。入力データがOracle NoSQL Database内にある場合、kvstoreを指定します。デフォルトはHDFSです。

  • oracle.ord.kvstore.input.name – NoSQL Database記憶域の名前。

  • oracle.ord.kvstore.input.table – NoSQL Database表の名前。

  • oracle.ord.kvstore.input.hosts – ホスト名およびポート。

  • oracle.ord.kvstore.input.primarykey – 表内のレコードにアクセスするための主キー。

  • oracle.ord.hadoop.datasink – マルチメディア分析の出力の記憶域オプション。デフォルトはHDFSです。出力を格納するためにHBase表を使用する場合、HBaseを指定します。

7.4.6 Apache HBaseの操作

Apacheを使用すると、イメージなどの小さいオブジェクトを操作するときにパフォーマンスが向上します。イメージは、HBase表に格納し、マルチメディア分析フレームワークによってアクセスできます。入力データがビデオである場合、ビデオをフレームにデコードし、フレームをHBase表に格納する必要があります。

入力または出力がHBase表内にある場合、次のプロパティが使用されます。

  • oracle.ord.hadoop.datasource – 入力データの記憶域オプション。入力データがHBase表内にある場合、HBaseを指定します。デフォルトはHDFSです。

  • oracle.ord.hbase.input.table – 入力データが含まれるHBase表の名前。

  • oracle.ord.hbase.input.columnfamily – 入力データが含まれるHBase列ファミリの名前。

  • oracle.ord.hbase.input.column – 入力データが含まれるHBase列の名前。

  • oracle.ord.hadoop.datasink – マルチメディア分析の出力の記憶域オプション。出力を格納するためにHBase表を使用する場合、HBaseを指定します。デフォルトはHDFSです。

  • oracle.ord.hbase.output.columnfamily – 出力HBase表内のHBase列ファミリの名前。

7.4.7 顔検出の例およびトレーニング資料

顔の検出を始める際に役立つように、いくつかの例とトレーニング資料が提供されています。

$MMA_HOMEには次のディレクトリがあります。

video/ (contains a sample video file in mp4 and avi formats)
facetrain/
analytics/

facetrain/にはトレーニングの例が含まれています。facetrain/config/にはサンプル構成ファイルが含まれており、facetrain/faces/には、トレーニング・モデルを作成するためのイメージと、イメージにラベルをマップするマッピング・ファイルが含まれています。

runFaceTrainExample.shは、トレーニング手順を実行するためのbashのスクリプト例です。

次のようにして、トレーニング・モデルを作成できます。

$ ./runFaceTrainExample.sh

トレーニング・モデルはordfacemodel_bigdata.datに書き込まれます。

ビデオでの顔の検出について、analytics/には、入力ビデオ・ファイルで顔を検出するためのHadoopジョブの実行例が含まれています。このディレクトリには、構成ファイルの例を含むconf/が含まれています。

次のようにして、ジョブを実行できます(HDFSディレクトリvinputへのビデオ・ファイルのコピーも含みます)

$ ./runFaceDetectionExample.sh

ジョブの出力はHDFSディレクトリvoutputに含められます。

ビデオでの顔の認識について、analytics/には、入力ビデオ・ファイルで顔を認識するためのHadoopジョブの実行例が含まれています。このディレクトリには、構成ファイルの例を含むconf/が含まれています。次のようにして、ジョブを実行できます(HDFSディレクトリvinputへのビデオ・ファイルのコピーも含みます):

$ ./runFaceRecognizerExample.sh

顔認識ジョブの後、出力イメージを表示できます。

$ ./runPlayImagesExample.sh

7.5 マルチメディア分析の構成プロパティ

マルチメディア分析フレームワークでは、hadooopコマンドで構成プロパティを指定するために標準メソッドを使用します。

構成ファイルを指定する場合は–confオプションを使用し、個別のプロパティを指定する場合は-Dオプションを使用します。

このトピックでは、次のサブトピックに分けられた構成プロパティに関する参照情報を示します。

7.5.1 格納されたビデオおよびイメージの処理用のプロパティの構成

マルチメディア分析フレームワークの構成プロパティのこのカテゴリは、格納されているビデオおよびイメージの処理に適用されます。

これらのプロパティ名はすべてoracle.ordから始まります。これらは、2つのサブカテゴリに分けることができます。

  • 一般的なフレームワーク・プロパティ

  • 顔認識プロパティ(文字列recognizerが含まれます)

各サブカテゴリ内では、使用可能な構成プロパティがアルファベット順にリストされます。各プロパティについて、プロパティ名をリストし、その次にそのプロパティに関する情報を示します。

一般的なフレームワーク・プロパティ

oracle.ord.hadoop.datasink

文字列。マルチメディア分析の出力の記憶域オプション: HBase表を使用して出力を格納する場合はHBase、それ以外の場合はHDFSです。デフォルト値: HDFS。例:

<property>
  <name>oracle.ord.hadoop.datasink</name>
  <value>hbase</value>
</property>
oracle.ord.hadoop.datasource

文字列。入力データの記憶域オプション: 入力データがHBaseデータベース内にある場合はHBase、入力データがOracle NoSQL Database内にある場合はkvstore、それ以外の場合はHDFSです。デフォルト値: HDFS: 例:

<property>
  <name>oracle.ord.hadoop.datasource</name>
  <value>hbase</value>
</property>
oracle.ord.hadoop.frameinterval

文字列。処理のためにフレームを抽出するタイムスタンプ間隔(秒)。許容値: 正の整数および浮動小数点数。デフォルト値: 1。例:

<property>
  <name>oracle.ord.hadoop.frameinterval</name>
  <value>1</value>
</property>
oracle.ord.hadoop.inputformat

文字列。フレームワーク内の入力ファイル・タイプを表す、フレームワーク内のInputFormatクラス名。デフォルト値: oracle.ord.hadoop.OrdVideoInputFormat。例:

<property>
  <name>oracle.ord.hadoop.inputformat</name>
  <value>oracle.ord.hadoop.OrdVideoInputFormat</value>
</property>
oracle.ord.hadoop.inputtype

文字列。入力データのタイプ: videoまたはimage。例:

<property>
  <name>oracle.ord.hadoop.inputtype</name>
  <value>video</value>
</property>
oracle.ord.hadoop.numofsplits

正の整数。Hadoopクラスタ上のビデオ・ファイルの分割の数で、Hadoopクラスタの各ノードで1つの分割を分析できます。推奨値: クラスタのノード/プロセッサの数。デフォルト値: 1。例:

<property>
   <name>oracle.ord.hadoop.numofsplits</name>
   <value>1</value>
</property>
oracle.ord.hadoop.ordfacemodel

文字列。トレーニングによって作成されたモデルを格納するファイルの名前。例:

<property>
   <name> oracle.ord.hadoop.ordfacemodel </name>
   <value>ordfacemodel_bigdata.dat</value>
</property>
oracle.ord.hadoop.ordfacereader

文字列。顔認識モデルのトレーニングに使用されるイメージを読み込むJavaクラスの名前。例:

<property>
   <name> oracle.ord.hadoop.ordfacereader </name>
   <value> oracle.ord.hadoop.OrdSimpleFaceReader </value>
</property>
oracle.ord.hadoop.ordfacereaderconfig

文字列。特定のアプリケーション用の追加の構成プロパティを含むファイル。例:

<property>
   <name> oracle.ord.hadoop.ordfacereaderconfig </name>
   <value>config/ordsimplefacereader_bigdata.xml</value>
</property>
oracle.ord.hadoop.ordframegrabber

文字列。ビデオ・ファイルをデコードするJavaクラスの名前。これはOrdFrameGrabberの実装済クラスで、ビデオ・ファイルをデコードするためにマッパーによって使用されます。製品で使用可能なインストール済の実装: oracle.ord.hadoop.OrdJCodecFrameGrabber (デフォルト)およびoracle.ord.hadoop.OrdFFMPEGFrameGrabber (ユーザーによってFFMPEGがインストールされている場合)。カスタム実装を追加できます。例:

<property>
    <name>oracle.ord.hadoop.ordframegrabber</name>
    <value>oracle.ord.hadoop.OrdJCodecFrameGrabber</value>
</property>
oracle.ord.hadoop.ordframeprocessor

文字列。フレームの処理および対象オブジェクトの認識のためにマッパーによって使用される、インタフェースOrdFrameProcessorの実装済Javaクラスの名前。デフォルト値: oracle.ord.hadoop.mapreduce.OrdOpenCVFaceRecognizerMulti。例:

<property>
  <name>oracle.ord.hadoop.ordframeprocessor </name>
  <value>oracle.ord.hadoop.mapreduce.OrdOpenCVFaceRecognizerMulti</value>
</property>
oracle.ord.hadoop.ordframeprocessor.k2

文字列。Javaクラス名、インタフェースOrdFrameProcessorの実装済クラスの出力キー・クラス。デフォルト値: org.apache.hadoop.io.Text。例:

<property>
  <name>oracle.ord.hadoop.ordframeprocessor.k2</name>
  <value>org.apache.hadoop.io.Text</value>
</property>
oracle.ord.hadoop.ordframeprocessor.v2

文字列。Javaクラス名、インタフェースOrdFrameProcessorの実装済クラスの出力値クラス。デフォルト値: oracle.ord.hadoop.mapreduce.OrdImageWritable。例:

<property>
  <name>oracle.ord.hadoop.ordframeprocessor.v2 </name>
  <value>oracle.ord.hadoop.mapreduce.OrdImageWritable</value>
</property>
oracle.ord.hadoop.ordoutputprocessor

文字列。カスタム(ユーザー指定)プラグインにのみ関連します。Reduceフェーズでマップ出力からのキー値ペアを処理する、インタフェースOrdOutputProcessorの実装済Javaクラスの名前です。例:

<property>
  <name>oracle.ord.hadoop.ordframeprocessor</name>
  <value>mypackage.MyOutputProcessorClass</value>
</property>
oracle.ord.hadoop.ordsimplefacereader.dirmap

文字列。顔ラベルをディレクトリ名と顔イメージにマップするマッピング・ファイル。例:

<property>
   <name> oracle.ord.hadoop.ordsimplefacereader.dirmap </name>
   <value>faces/bigdata/dirmap.txt</value>
</property>
oracle.ord.hadoop.ordsimplefacereader.imagedir

文字列。モデルの作成に使用される顔を含む、ファイル・システム・ディレクトリ。これは通常、ローカルのファイル・システムです。例:

<property>
   <name> oracle.ord.hadoop.ordsimplefacereader.imagedir </name>
   <value>faces/bigdata</value>
</property>
oracle.ord.hadoop.outputformat

文字列。フレームワーク内の出力ファイル・タイプを表すOutputFormatクラスの名前。デフォルト値: org.apache.hadoop.mapreduce.lib.output.TextOutputFormat。例:

<property>
  <name>oracle.ord.hadoop.outputformat</name>
  <value> org.apache.hadoop.mapreduce.lib.output.TextOutputFormat; </value>
</property>
oracle.ord.hadoop.outputtype

文字列。識別される顔の顔ラベルとタイムスタンプ、場所および一致の信頼度を含む出力の形式は、jsonimageまたはtextである必要があります。例:

<property>
  <name>oracle.ord.hadoop.outputtype</name>
  <value>json</value>
</property>
oracle.ord.hadoop.parameterfile

文字列。特定のジョブ用の追加の構成プロパティを含むファイル。例:

<property>
  <name>oracle.ord.hadoop.parameterfile </name>
  <value>oracle_multimedia_face_recognition.xml</value>
</property>
oracle.ord.hadoop.recognizer.cascadeclassifier.flags

文字列。このプロパティは、オブジェクト検出のタイプを選択するために使用します。CASCADE_DO_CANNY_PRUNINGCASCADE_SCALE_IMAGECASCADE_FIND_BIGGEST_OBJECT (最も大きい顔のみを調べます)またはCASCADE_DO_ROUGH_SEARCHである必要があります。デフォルト: CASCADE_SCALE_IMAGE | CASCADE_DO_ROUGH_SEARCH。例:

<property>
  <name> oracle.ord.hadoop.recognizer.cascadeclassifier.flags</name>
  <value>CASCADE_SCALE_IMAGE</value>
</property>
oracle.ord.hadoop.recognizer.cascadeclassifier.maxconfidence

浮動小数点値。モデルの顔と入力データの顔の間に許容される距離(差異)を指定します。値が大きいと一致率は高くなりますが、精度が低くなります(偽陽性が多くなります)。値が小さいと一致率は減りますが、精度が上がります。例:

<property>
  <name> oracle.ord.hadoop.recognizer.cascadeclassifier.maxconfidence</name>
  <value>200.0</value>
</property
oracle.ord.hbase.input.column

文字列。入力データが含まれるHBase列の名前。例:

<property>
  <name>oracle.ord.hbase.input.column</name>
  <value>binary_data</value>
</property>
oracle.ord.hbase.input.columnfamily

文字列。入力データが含まれるHBase列ファミリの名前。例:

<property>
  <name>oracle.ord.hbase.input.columnfamily</name>
  <value>image_data</value>
</property>
oracle.ord.hbase.input.table

文字列。入力データが含まれるHBase表の名前。例:

<property>
  <name>oracle.ord.hbase.input.table</name>
  <value>images</value>
</property>
oracle.ord.hbase.output.columnfamily

文字列。出力HBase表内のHBase列ファミリの名前。例:

<property>
  <name>oracle.ord.hbase.output.columnfamily</name>
  <value>face_data</value>
</property>
oracle.ord.hbase.output.table

文字列。出力データのHBase表の名前。例:

<property>
  <name>oracle.ord.hbase.output.table</name>
  <value>results</value>
</property>
oracle.ord.kvstore.get.consistency

文字列。読込み時の整合性制約を定義します。読込み操作は、マスターまたはレプリカ・ノードで処理できます。デフォルト値のABSOLUTEの場合、読込み操作がマスター・ノードで処理されることを確認できます。例:

<property>
    <name>oracle.ord.kvstore.get.consistency</name>
    <value>absolute</value>
</property>
oracle.ord.kvstore.get.timeout

数字。ラージ・オブジェクトのチャンクまたはその関連メタデータを取得するための時間間隔の上限。指定された限度を超えないよう最善が尽くされます。ゼロの場合、KVStoreConfig.getLOBTimeout(java.util.concurrent.TimeUnit)値が使用されます。デフォルト値は5です。例:

<property>
    <name>oracle.ord.kvstore.get.timeout</name>
    <value>5</value>
</property>
oracle.ord.kvstore.get.timeunit

文字列。timeoutパラメータの単位をNULLにできるのは、timeoutがゼロである場合のみです。デフォルト値はsecondsです。例:

<property>
    <name>oracle.ord.kvstore.get.timeunit</name>
    <value>seconds</value>
</property>
oracle.ord.kvstore.input.hosts

文字列。Oracle NoSQL Databaseストア内のアクティブなノードのホストおよびポート。例:

<property>
    <name>oracle.ord.kvstore.input.hosts</name>
    <value>localhost:5000</value>
</property>
oracle.ord.kvstore.input.lob.prefixおよびoracle.ord.kvstore.input.lob.suffix

Oracle NoSQL Databaseは、これらを使用して、ラージ・オブジェクト(LOB)をロードおよび取得するために使用するキーを作成します。oracle.ord.kvstore.input.lob.prefixのデフォルト値はlobprefixです。oracle.ord.kvstore.input.lob.suffixのデフォルト値はlobsuffix.lobです。例:

<property>
    <name>oracle.ord.kvstore.lob.prefix</name>
    <value>lobprefix</value>
</property>
<property>
    <name>oracle.ord.kvstore.lob.suffix</name>
    <value>lobsuffix.lob</value>
</property>
oracle.ord.kvstore.input.name

文字列。Oracle NoSQL Databaseストアの名前。ここで指定する名前は、ストアをインストールしたときに使用した名前と同一である必要があります。例:

<property>
    <name>oracle.ord.kvstore.input.name</name>
    <value>kvstore</value>
</property>
oracle.ord.kvstore.input.primarykey

文字列。Oracle NoSQL Database表の主キー。例:

<property>
    <name>oracle.ord.kvstore.input.primarykey</name>
    <value>filename</value>
</property>
oracle.ord.kvstore.input.table

文字列。入力データが含まれるOracle NoSQL Database表の名前。例:

<property>
    <name>oracle.ord.kvstore.input.table</name>
    <value>images</value>
</property>

顔認識プロパティ(文字列recognizerが含まれます)

oracle.ord.hadoop.recognizer.cascadeclassifier.flags

文字列。このプロパティは、オブジェクト検出のタイプを選択するために使用します。CASCADE_DO_CANNY_PRUNINGCASCADE_SCALE_IMAGECASCADE_FIND_BIGGEST_OBJECT (最も大きい顔のみを調べます)またはCASCADE_DO_ROUGH_SEARCHである必要があります。デフォルト: CASCADE_SCALE_IMAGE | CASCADE_DO_ROUGH_SEARCH。例:

<property>
  <name> oracle.ord.hadoop.recognizer.cascadeclassifier.flags</name>
  <value>CASCADE_SCALE_IMAGE</value>
</property>
oracle.ord.hadoop.recognizer.cascadeclassifier.maxconfidence

浮動小数点値。モデルの顔と入力データの顔の間に許容される距離(差異)を指定します。値が大きいと一致率は高くなりますが、精度が低くなります(偽陽性が多くなります)。値が小さいと一致率は減りますが、精度が上がります。例:

<property>
  <name> oracle.ord.hadoop.recognizer.cascadeclassifier.maxconfidence</name>
  <value>200.0</value>
</property
oracle.ord.hadoop.recognizer.cascadeclassifier.maxsize

文字列(具体的には値のペア)。検出されるオブジェクトの境界ボックスの最大サイズを指定します。オブジェクトが近いと境界ボックスが大きくなり、海辺での顔のようにオブジェクトが遠いと、境界ボックスが小さくなります。境界ボックスが最大サイズよりも大きいオブジェクトは無視されます。例:

<property>
  <name> oracle.ord.hadoop.recognizer.cascadeclassifier.maxsize</name>
  <value>(500,500)</value>
</property>
oracle.ord.hadoop.recognizer.cascadeclassifier.minneighbor

整数。入力データでオブジェクトを検出するために使用される、スライディング・ウィンドウのサイズを決定します。値が高いほど、検出されるオブジェクトは少なくなりますが、品質は高くなります。デフォルト値: 1。例:

<property>
  <name> oracle.ord.hadoop.recognizer.cascadeclassifier.minneighbor</name>
  <value>1</value>
</property>
oracle.ord.hadoop.recognizer.cascadeclassifier.minsize

文字列(具体的には値のペア)。検出されるオブジェクトの境界ボックスの最小サイズを指定します。オブジェクトが近いと境界ボックスが大きくなり、海辺での顔のようにオブジェクトが遠いと、境界ボックスが小さくなります。境界ボックスが最小サイズよりも小さいオブジェクトは無視されます。例:

<property>
  <name> oracle.ord.hadoop.recognizer.cascadeclassifier.minsize</name>
  <value>(100,100)</value>
</property>
oracle.ord.hadoop.recognizer.cascadeclassifier.scalefactor

浮動小数点数。顔ラベルをディレクトリ名と顔イメージにマップするマッピング・ファイルとともに使用される、スケーリング係数。値1.1は、ランタイム入力の顔とトレーニング・プロセス中にサブディレクトリに格納されたイメージを比較する前に、スケーリングされないことを意味します。例:

<property>
  <name> oracle.ord.hadoop.recognizer.cascadeclassifier.scalefactor</name>
  <value>1.1</value>
</property>
oracle.ord.hadoop.recognizer.classifier

文字列。顔の分類器を含むXMLファイル。この機能は、OpenCVで使用可能な任意の正面顔のトレーニング前の分類器とともに使用できます。例:

<property>
  <name> oracle.ord.hadoop.recognizer.classifier</name>
  <value>haarcascade_frontalface_alt2.xml</value>
</property>
oracle.ord.hadoop.recognizer.labelnamefile

文字列。顔ラベルをディレクトリ名と顔イメージにマップするマッピング・ファイル。例:

<property>
  <name> oracle.ord.hadoop.recognizer.labelnamefiler</name>
  <value>haarcascade_frontalface_alt2.xml</value>
</property>
oracle.ord.hadoop.recognizer.modelfile

文字列。トレーニング・ステップで生成されたモデルを含むファイル。このファイルは、すべてのクラスタ・ノードがアクセスできる共有の場所に格納する必要があります。例:

<property>
  <name> oracle.ord.hadoop.recognizer.modelfile</name>
  <value>myface_model.dat</value>
</property>

7.5.2 ストリーミング・ビデオの処理用のプロパティの構成

マルチメディア分析フレームワークの構成プロパティのこのカテゴリは、ストリーミング・ビデオの処理に適用されます。

これらのプロパティ名はすべてspark.oracle.ordから始まります。これらは、2つのサブカテゴリに分けることができます。

  • 一般的なフレームワーク・プロパティ

  • 顔認識および顔検出プロパティ(文字列recognizerが含まれます)

各サブカテゴリ内では、使用可能な構成プロパティがアルファベット順にリストされます。各プロパティについて、プロパティ名をリストし、その次にそのプロパティに関する情報を示します。

一般的なフレームワーク・プロパティ

spark.oracle.ord.demo.imageplayer.framerate

文字列。サンプル・イメージ・プレーヤによって結果が処理の結果が含まれるフレームとして表示される場合のフレーム・レート。プレーヤにより、新しいフレームがn秒ごとに表示されます。デフォルトは1です。

例:

spark.oracle.ord.demo.imageplayer.framerate=1
spark.oracle.ord.demo.localfswriter.outputcsvpath

文字列。ビデオ・フレーム処理のCSV出力を受け取るローカルのファイル・システム・ディレクトリ。例:

spark.oracle.ord.demo.localfswriter.outputcsvpath=/home/oracle/example/spark/facerecognizer/output/csv
spark.oracle.ord.demo.localfswriter.outputimagepath

文字列。ビデオ・フレーム処理のイメージ出力を受け取るローカルのファイル・システム・ディレクトリ。例:

spark.oracle.ord.demo.localfswriter.outputimagepath=/home/oracle/example/spark/facerecognizer/output/image
spark.oracle.ord.demo.localfswriter.outputjsonpath

文字列。ビデオ・フレーム処理のJSON出力を受け取るローカルのファイル・システム・ディレクトリ。例:

spark.oracle.ord.demo.localfswriter.outputjsonpath=/home/oracle/example/spark/facerecognizer/output/json
spark.oracle.ord.inputdirectory

文字列。Sparkストリーミング・アダプタからビデオ・フレームを受け取るHDFSディレクトリ。例:

spark.oracle.ord.inputdirectory=spark_input
spark.oracle.ord.demo.localfswriter.outputimagepath

文字列。ビデオ・フレーム処理のイメージ出力を受け取るローカルのファイル・システム・ディレクトリ。例:

spark.oracle.ord.demo.localfswriter.outputimagepath=/home/oracle/example/spark/facerecognizer/output/image
spark.oracle.ord.demo.localfswriter.outputjsonpath

文字列。ビデオ・フレーム処理のJSON出力を受け取るローカルのファイル・システム・ディレクトリ。例:

spark.oracle.ord.demo.localfswriter.outputjsonpath=/home/oracle/example/spark/facerecognizer/output/json
spark.oracle.ord.ordsparkframeprocessor

文字列。ビデオ・フレームを処理するために使用するプロセッサ。顔検出および認識用として製品で使用可能なJavaクラスを使用するか、または抽象の実装を提供できます。次に例を示します。

  • spark.oracle.ord.ordsparkframeprocessor=oracle.ord.spark.demo.OrdSparkFaceDetectorは、ビデオ・フレーム内に顔があることを検出します。

  • spark. oracle.ord.ordsparkframeprocessor=oracle.ord.spark.demo.OrdSparkFaceRecognizerは、トレーニング・モデルを使用して顔を識別します。

OrdSparkFaceDetectorおよびOrdSparkFaceRecognizerは、spark.oracle.ord.ordsparkframeprocessorとともに使用するサンプル実装として製品で使用できます。

spark.oracle.ord.ordsparkresultwriter

文字列。ビデオ・フレームを再生するイメージ・プレーヤを実装するクラスの名前。例:

spark.oracle.ord.ordsparkresultwriter=oracle.ord.spark.demo.OrdSparkImagePlayer
spark.oracle.ord.outputdirectory

文字列。ビデオ・フレーム処理の出力を受け取るHDFSディレクトリ。例:

spark.oracle.ord.outputdirectory=spark_output
spark.oracle.ord.outputtypes

文字列。生成された結果の形式(JSON/CSV/image)。例:

spark.oracle.ord.outputtypes=JSON
spark.oracle.ord.streamingduration

数字。バッチとして処理されるフレーム・セットを決定する時間間隔。単位はミリ秒です。デフォルトは5です。例:

spark.oracle.ord.streamingduration=5
spark.oracle.ord.streamsink

文字列。Sparkジョブ・プロセスの出力。デフォルトでは、出力はHDFSに書き込まれますが、カスタム・ライターを実装できます。製品には、ローカル・ファイル・システムおよびイメージ・プレーヤに書き込むためのカスタム・ライターが含まれています。例:

spark.oracle.ord.streamsink=HDFS
spark.oracle.ord.streamsource

Sparkジョブの入力データ。これには、HTTPまたはRTSPストリーミング・サーバーまたはHDFSを使用できます。デフォルトはHDFSです。例:

spark.oracle.ord.streamsource=HDFS

顔認識および顔検出プロパティ(文字列recognizerが含まれます)

spark.oracle.ord.recognizer.classifier

文字列。顔の分類器を含むXMLファイル。この機能は、OpenCVで使用可能な任意の正面顔のトレーニング前の分類器とともに使用できます。例:

spark.oracle.ord.recognizer.classifier=haarcascade_frontalface_alt2_opencv3.0.xml
spark.oracle.ord.recognizer.flags

文字列。このプロパティは、オブジェクト検出のタイプを選択するために使用します。CASCADE_DO_CANNY_PRUNINGCASCADE_SCALE_IMAGECASCADE_FIND_BIGGEST_OBJECT (最も大きい顔のみを調べます)またはCASCADE_DO_ROUGH_SEARCHである必要がありますデフォルト: CASCADE_SCALE_IMAGE | CASCADE_DO_ROUGH_SEARCH。例:

spark.oracle.ord.recognizer.flags=CASCADE_SCALE_IMAGE|CASCADE_DO_ROUGH_SEARCH
spark.oracle.ord.recognizer.gridx

数字。ヒストグラムを抽出するために各フレームで使用されるX軸上のグリッド・セルの数。通常の値は8です。値が大きくなるほど、結果として生成される機能ベクトルの次元が高くなります。例:

spark.oracle.ord.recognizer.gridx=8
spark.oracle.ord.recognizer.gridy

数字。ヒストグラムを抽出するために各フレームで使用されるY軸上のグリッド・セルの数。通常の値は8です。次に例を示します。

spark.oracle.ord.recognizer.gridy=8
spark.oracle.ord.recognizer.labelfilepath

文字列。顔ラベルをディレクトリ名と顔イメージにマップするマッピング・ファイル。例:

spark.oracle.ord.recognizer.labelfilepath=faces/bigdata/dirmap.txt
spark.oracle.ord.recognizer.maxsize

文字列。検出されたオブジェクトの境界ボックスの最大サイズを(XおよびY軸上のピクセルの数として)指定します。オブジェクトが近いと境界ボックスが大きくなり、海辺での顔のようにオブジェクトが遠いと、境界ボックスが小さくなります。境界ボックスが最大サイズよりも大きいオブジェクトは無視されます。例:

spark.oracle.ord.recognizer.maxsize=500
spark.oracle.ord.recognizer.minneighbors

整数。使用可能なオプションは1、2または3です。1の場合、より多くの顔が認識されますが、顔でないオブジェクトが認識される可能性があります。3が最も正確ですが、一部の顔を検出し損なう可能性があります。例:

spark.oracle.ord.recognizer.minneighbors=1
spark.oracle.ord.recognizer.minsize

文字列。検出されたオブジェクトの境界ボックスの最小サイズを(XおよびY軸上のピクセルの数として)指定します。オブジェクトが近いと境界ボックスが大きくなり、海辺での顔のようにオブジェクトが遠いと、境界ボックスが小さくなります。境界ボックスが最小サイズよりも小さいオブジェクトは無視されます。例:

spark.oracle.ord.recognizer.minsize=100
spark.oracle.ord.recognizer.neighbors

数字。円形のローカル・バイナリ・パターンを作成するためのサンプル・ポイントの数。例:

spark.oracle.ord.recognizer.neighbors=8
spark.oracle.ord.recognizer.scalefactor

浮動小数点数。アルゴリズムがイメージに対して複数のパスを作成する際にスケールを拡大する速度を指定します。この値を大きくすると、(パスの数が減るために)ディテクタがより高速に動作しますが、非常に大きい値にすると、新しいスケールにジャンプするために情報をとり逃す可能性があります。デフォルトは1.1です。これは、パスごとにスケールが10%ずつ大きくなることを意味します。このパラメータには、値1.1、1.2、1.3または1.4を使用できます。例:

spark.oracle.ord.recognizer.scalefactor=1.1
spark.oracle.ord.recognizer.threshold

数字。顔が一致するかどうかを決定する値。顔をビデオ内の顔と比較する際の出力値がこの値より大きい場合、この顔は一致しないと見なされます。それ以外の場合は、一致すると見なされます。デフォルトは130です。例:

spark.oracle.ord.recognizer.threshold=130
spark.oracle.ord.recognizer.trainingmodelpath

文字列。トレーニングによって作成されたモデルを格納するファイルの名前。例:

spark.oracle.ord.recognizer.trainingmodelpath=ordfacemodel_bigdata.data

7.5.3 トレーニング・イメージおよび顔認識用のプロパティの構成

マルチメディア分析フレームワークの構成プロパティのこのカテゴリは、顔認識のイメージのトレーニングに適用されます。

これらのプロパティには文字列faceが含まれ、これらはアルファベット順にリストされます。各プロパティについて、プロパティ名をリストし、その次にそのプロパティに関する情報を示します。

oracle.ord.hadoop.ordfacemodel

文字列。トレーニングによって作成されたモデルを格納するファイルの名前。例:

<property>
   <name> oracle.ord.hadoop.ordfacemodel </name>
   <value>ordfacemodel_bigdata.dat</value>
</property>
oracle.ord.hadoop.ordfacereader

文字列。顔認識モデルのトレーニングに使用されるイメージを読み込むJavaクラスの名前。例:

<property>
   <name> oracle.ord.hadoop.ordfacereader </name>
   <value> oracle.ord.hadoop.OrdSimpleFaceReader </value>
</property>
oracle.ord.hadoop.ordfacereaderconfig

文字列。特定のアプリケーション用の追加の構成プロパティを含むファイル。例:

<property>
   <name> oracle.ord.hadoop.ordfacereaderconfig </name>
   <value>config/ordsimplefacereader_bigdata.xml</value>
</property>
oracle.ord.hadoop.ordsimplefacereader.dirmap

文字列。顔ラベルをディレクトリ名と顔イメージにマップするマッピング・ファイル。例:

<property>
   <name> oracle.ord.hadoop.ordsimplefacereader.dirmap </name>
   <value>faces/bigdata/dirmap.txt</value>
</property>
oracle.ord.hadoop.ordsimplefacereader.imagedir

文字列。モデルの作成に使用される顔を含む、ファイル・システム・ディレクトリ。これは通常、ローカルのファイル・システムです。例:

<property>
   <name> oracle.ord.hadoop.ordsimplefacereader.imagedir </name>
   <value>faces/bigdata</value>
</property>

7.6 サードパーティ・ソフトウェアとマルチメディア分析フレームワークの併用

マルチメディアのデコードおよび処理のために、カスタム・モジュールを実装およびインストールできます。

抽出クラスoracle.ord.hadoop.decoder.OrdFrameGrabberを実装することにより、フレームワークでカスタム・ビデオ・デコーダを使用できます。詳細は、Javadocを参照してください。製品には、JCodecおよびFFMPEG用にOrdFrameGrabberを拡張するビデオ・デコーダの実装が2つ含まれています(FFMPEGは別途インストールする必要があります)。

2つの抽出クラスを実装することにより、フレームワークでカスタム・マルチメディア分析を使用できます。

  • oracle.ord.hadoop.mapreduce.OrdFrameProcessor<K1,V1,K2,V2>OrdFrameProcessorの拡張クラスは、ビデオ・フレームまたはイメージを処理するMapReduceジョブのMapフェーズで使用されます。(K1, V1)は入力キー値ペア・タイプで、(K2, V2)は出力キー値ペア・タイプです。詳細は、Javadocを参照してください。製品には、OpenCVを使用した実装が含まれています。

  • oracle.ord.hadoop.mapreduce.OrdOutputProcessor<K1,V1,K2,V2>OrdFrameProcessorの拡張クラスは、ビデオ・フレームまたはイメージを処理するMapReduceジョブのReducerフェーズで使用されます。(K1, V1)は入力キー値ペア・タイプで、(K2, V2)は出力キー値ペア・タイプです。詳細は、Javadocを参照してください。ほとんどの実装は、このクラスの実装を必要としません。

フレームワーク構成パラメータの例は、$MMA_HOME/example/analytics/conf/oracle_multimedia_analysis_framework.xmlにあります。

7.7 出力のイメージの表示

出力がイメージとして表示される場合、oracle.ord.hadoop.OrdPlayImagesを使用して、出力HDFSディレクトリ内のすべてのイメージを表示できます。

これは、識別された顔のラベルでマークされたイメージ・フレームを表示します。次に例を示します。

$ java oracle.ord.hadoop.demo.OrdPlayImages –hadoop_conf_dir $HADOOP_CONF_DIR –image_file_dir voutput