ビッグ・データ環境でマルチメディア分析フレームワークを使用すると、ビデオおよびイメージで顔認識を実行できます。
hadooop
コマンドで構成プロパティを指定するために標準メソッドを使用します。oracle.ord.hadoop.OrdPlayImages
を使用して、出力HDFSディレクトリ内のすべてのイメージを表示できます。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クラスタにインストールできます。
マルチメディア分析フレームワークは、MapReduceを使用してHDFSに格納されたビデオおよびイメージ・データを処理します。
OpenCVを使用した顔認識は、フレームワークに統合されており、製品で使用できます。顔認識、ライセンス・プレート認識およびオブジェクト認識などの様々なユースケースを対象としてサード・パーティの処理コードをフレームワークに統合することもできます。
ビデオおよびイメージ・データの処理には、次が含まれます
入力データは、HDFS、Oracle NoSQL DatabaseまたはApache HBaseから提供されます。
ビデオ入力データをHDFSに格納したり、デコードされたフレームをOracle NoSQL DatabaseまたはApache HBaseに格納したりできます。
イメージ入力データは、HDFS、Oracle NoSQL DatabaseまたはApache HBaseに格納できます。
データは、一連のイメージまたはビデオ・フレームに分割されます。
イメージまたはビデオ・フレームは、OpenCVまたはサード・パーティのコードを使用して各ノードで処理されます。
処理の出力は、HDFSまたはApache HBaseに格納されます。
RTSPおよびHTTPサーバーからのストリーミング・ビデオは、Apache Sparkを使用してリアルタイムで処理できます。ストリーミング・ビデオはHDFSから読み込むこともできます。
OpenCVを使用した顔検出および顔認識は、フレームワークに統合されており、製品で使用できます。顔認識、ライセンス・プレート認識およびオブジェクト認識などの様々なユースケースを対象としてサード・パーティの処理コードをフレームワークに統合できます。
ストリーミング・ビデオは、Apache Sparkによって処理されます。Sparkジョブは、各フレームを処理し、結果をHDFSに出力するか、出力を書き込むためのカスタム実装を使用した特別な出力場所に出力します。ローカル・ファイル・システムに書き込み、データをデモ・イメージ・プレーヤに送信するカスタム・ライターのサンプル実装は、製品に用意されています。
ストリーミング・ビデオ処理には、次が含まれます
入力データは、RTSPまたはHTTPストリーミング・サーバーまたはHDFSから提供されます。フレームワークは、ビデオ・ストリーミングをHDFSに読み込むこともできます。
ビデオ・ストリーミングは、フレームにデコードされます。
ビデオ・フレームは、Apache Sparkによって処理されます。
処理の結果は、HDFSに書き込むか、カスタム・プラグインを使用したイメージ・プレーヤなどの特別な場所に書き込むことができます。サンプル・プラグインは、次を目的として使用できます。
ローカル・ファイル・システムへのJSON、CSVおよび/またはイメージ・データの書込み
イメージ・プレーヤへのイメージ・データの送信による結果のリアルタイム表示の実現。(デモ・イメージ・プレーヤは製品に含まれています。)
マルチメディア分析機能は、組込みの顔認識に含まれています。顔認識では、製品で使用可能なOpenCVライブラリが使用されます。
このトピックでは、この顔認識機能をMapReduceとともに使用して、HDFSに格納されているビデオおよびイメージを処理する方法について説明します。顔認識には次の2つのステップがあります。
顔のイメージを使用してモデルをトレーニングします。このステップは、任意のHadoopクライアントまたはノードで実行できます。
トレーニング・モデルを使用して、入力ビデオまたはイメージから顔を認識します。このステップは、Hadoopクラスタで実行するMapReduceジョブです。
トレーニング・プロセスにより、ファイルに格納されるモデルが作成されます。このファイルは、ビデオまたはイメージからの顔認識の入力として使用されます。
トレーニングは、ordhadoop_multimedia_analytics.jar
の一部であるJavaプログラムOrdFaceTrainer
を使用して行われます。このプログラムへの入力は、イメージと、イメージをラベルにマッピングするラベル・マッピング・ファイルのセットです。出力は、ファイルに書き込まれるトレーニング・モデルです。(このファイルは編集しないでください。)
顔を検出(認識)するためにマルチメディア分析機能をトレーニングするには、次の手順に従います。
認識の対象となるイメージを格納する、親ディレクトリとサブディレクトリを作成します。
各サブディレクトリには、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つ含まれています。
イメージのサブディレクトリをラベルにマップするマッピング・ファイルを作成します。
ラベルとは、認識されるイメージの人物に関連付けられる数値IDです。たとえば、Andrewはラベル値100に関連付けられ、Bettyはラベル値101に関連付けられる、というようになります。マッピング・ファイル内の各レコード(行)には、次の構造が含まれている必要があります。
<subdirectory>,<label-id>,<label-text>
次に例を示します。
1,100,Andrew 2,101,Betty 3,101,Betty
必須の構成プロパティを設定します。
oracle.ord.hadoop.ordfacemodel oracle.ord.hadoop.ordfacereader oracle.ord.hadoop.ordsimplefacereader.dirmap oracle.ord.hadoop.ordsimplefacereader.imagedir
使用可能なプロパティの詳細は、「マルチメディア分析の構成プロパティ」を参照してください。
CLASSPATHを設定します。Java CLASSPATH定義に次を含めます。各アスタリスク(*)は、実際のバージョン番号に置き換えてください。
$MMA_HOME/lib/ordhadoop-multimedia-analytics.jar $MMA_HOME/opencv_3.0.0/opencv-300.jar $HADOOP_HOME/hadoop-common-*.jar $HADOOP_HOME/hadoop-auth-*.jar $HADOOP_HOME/commons-lang*.jar $HADOOP_HOME/commons-logging-*.jar $HADOOP_HOME/commons-configuration-*.jar $HADOOP_HOME/commons-collections-*.jar $HADOOP_HOME/guava-*.jar $HADOOP_HOME/slf4j-api-*.jar $HADOOP_HOME/slf4j-log4j12-*.jar $HADOOP_HOME/log4j-*.jar $HADOOP_HOME/commons-cli-*.jar $HADOOP_HOME/protobuf-java-*.jar $HADOOP_HOME/avro-*.jar $HADOOP_HOME/hadoop-hdfs-*.jar $HADOOP_HOME/hadoop-mapreduce-client-core-*.jar
トレーニング・モデルを作成します。次の一般的な形式でコマンドを入力します。
java -classpath <…> oracle.ord.hadoop.recognizer.OrdFaceTrainer <training_config_file.xml>
注意:
$MMA_HOME/example
には、サンプル・ファイルのセットがあります。これには、Java CLASSPATH
を設定するためのスクリプトが含まれています。トレーニング・モデルを作成するために、必要に応じて例を編集できます。 トレーニング・モデルの作成に使用するイメージは、顔のみを含み、できるかぎり顔の周囲に細かいものが写っていないようにする必要があります。次のいくつかの例は、同じ男性がそれぞれ異なる表情をした4つのイメージを示しています。
トレーニングのためのイメージの選択は、正確なマッチングのために重要です。次のガイドラインが適用されます。
イメージのセットには、目を閉じたり笑ったりするなど、考え得るあらゆる構えや表情の顔を含める必要があります。
イメージは同じサイズである必要があります。
イメージは解像度が高く、ピクセル品質がよい必要があります。
非常に似ているイメージを含めることは避けてください。
人物をいくつかの異なる背景や照明条件の下で認識する必要がある場合は、それらの背景を持つイメージを含めます。
含めるイメージの数は、入力データで予想される動きや背景の多様さによって異なります。
一連のイメージ内のイメージを処理し、質の高いトレーニング・イメージを作成する方法の例は、$MMA_HOME/example/facetrain/runFaceTrainUIExample.sh
を参照してください
ビデオ内の顔を検出(認識)するには、ビデオ処理ソフトウェアでビデオ・データをトランスコードするために、次のオプションがあります。
OpenCVで使用可能な任意の正面顔のカスケード分類器とともに、フレーム・プロセッサとしてOrdOpenCVFaceRecognizerMulti
を使用します。
手始めにHaarcascade_frontalface_alt2.xml
を使用すると便利です。様々なカスケード分類器を試して、要件に合ったものを特定できます。
サードパーティの顔認識ソフトウェアを使用します。
認識を実行するには、次の手順に従います。
(顔を認識するビデオを含む)ビデオ・ファイルをHDFSにコピーします。
これらの必要なファイルを、クラスタのすべてのノードがアクセス可能な共有の場所にコピーします。
生成したトレーニング・モデル
イメージ・サブディレクトリをラベルにマップするマッピング・ファイル
カスケード分類器XMLファイル
構成ファイルを作成します。
必須構成パラメータ:
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.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
の実装クラスの値クラス。
HADOOP_CLASSPATHを設定します。
HADOOP_CLASSPATHに、「顔を検出するためのトレーニング」にリストされているファイルが含まれていることを確認します
顔を認識する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>
顔の検出の正確さは、照明、明度、顔の向き、カメラから顔までの距離、ビデオまたはイメージの鮮明さなど、様々な要因によって決まります。複数の構成プロパティを試して、ユースケースに最も適した値のセットを特定する必要があります。偽陽性(顔が異なるオブジェクトの識別)と誤認(顔のラベル付けの誤り)は、常に発生する可能性があることに注意してください。
注意:
$MMA_HOME/example
には、サンプル・ファイルのセットがあります。 これには、Java CLASSPATHを設定するためのスクリプトが含まれています。必要に応じて編集し、顔を検出するジョブを発行します。イメージ上の顔を検出するには、イメージをHDFSにコピーします。次のプロパティを指定します。
<property> <name>oracle.ord.hadoop.inputtype</name> <value>image</value> </property>
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
を指定します。
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列ファミリの名前。
顔の検出を始める際に役立つように、いくつかの例とトレーニング資料が提供されています。
$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
マルチメディア分析フレームワークでは、hadooop
コマンドで構成プロパティを指定するために標準メソッドを使用します。
構成ファイルを指定する場合は–conf
オプションを使用し、個別のプロパティを指定する場合は-D
オプションを使用します。
このトピックでは、次のサブトピックに分けられた構成プロパティに関する参照情報を示します。
マルチメディア分析フレームワークの構成プロパティのこのカテゴリは、格納されているビデオおよびイメージの処理に適用されます。
これらのプロパティ名はすべてoracle.ord
から始まります。これらは、2つのサブカテゴリに分けることができます。
一般的なフレームワーク・プロパティ
顔認識プロパティ(文字列recognizer
が含まれます)
各サブカテゴリ内では、使用可能な構成プロパティがアルファベット順にリストされます。各プロパティについて、プロパティ名をリストし、その次にそのプロパティに関する情報を示します。
一般的なフレームワーク・プロパティ
文字列。マルチメディア分析の出力の記憶域オプション: HBase表を使用して出力を格納する場合はHBase
、それ以外の場合はHDFS
です。デフォルト値: HDFS
。例:
<property> <name>oracle.ord.hadoop.datasink</name> <value>hbase</value> </property>
文字列。入力データの記憶域オプション: 入力データがHBaseデータベース内にある場合はHBase
、入力データがOracle NoSQL Database内にある場合はkvstore
、それ以外の場合はHDFS
です。デフォルト値: HDFS: 例:
<property> <name>oracle.ord.hadoop.datasource</name> <value>hbase</value> </property>
文字列。処理のためにフレームを抽出するタイムスタンプ間隔(秒)。許容値: 正の整数および浮動小数点数。デフォルト値: 1。例:
<property> <name>oracle.ord.hadoop.frameinterval</name> <value>1</value> </property>
文字列。フレームワーク内の入力ファイル・タイプを表す、フレームワーク内のInputFormat
クラス名。デフォルト値: oracle.ord.hadoop.OrdVideoInputFormat
。例:
<property> <name>oracle.ord.hadoop.inputformat</name> <value>oracle.ord.hadoop.OrdVideoInputFormat</value> </property>
文字列。入力データのタイプ: video
またはimage
。例:
<property> <name>oracle.ord.hadoop.inputtype</name> <value>video</value> </property>
正の整数。Hadoopクラスタ上のビデオ・ファイルの分割の数で、Hadoopクラスタの各ノードで1つの分割を分析できます。推奨値: クラスタのノード/プロセッサの数。デフォルト値: 1。例:
<property> <name>oracle.ord.hadoop.numofsplits</name> <value>1</value> </property>
文字列。トレーニングによって作成されたモデルを格納するファイルの名前。例:
<property> <name> oracle.ord.hadoop.ordfacemodel </name> <value>ordfacemodel_bigdata.dat</value> </property>
文字列。顔認識モデルのトレーニングに使用されるイメージを読み込むJavaクラスの名前。例:
<property> <name> oracle.ord.hadoop.ordfacereader </name> <value> oracle.ord.hadoop.OrdSimpleFaceReader </value> </property>
文字列。特定のアプリケーション用の追加の構成プロパティを含むファイル。例:
<property> <name> oracle.ord.hadoop.ordfacereaderconfig </name> <value>config/ordsimplefacereader_bigdata.xml</value> </property>
文字列。ビデオ・ファイルをデコードする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>
文字列。フレームの処理および対象オブジェクトの認識のためにマッパーによって使用される、インタフェースOrdFrameProcessorの実装済Javaクラスの名前。デフォルト値: oracle.ord.hadoop.mapreduce.OrdOpenCVFaceRecognizerMulti。例:
<property> <name>oracle.ord.hadoop.ordframeprocessor </name> <value>oracle.ord.hadoop.mapreduce.OrdOpenCVFaceRecognizerMulti</value> </property>
文字列。Javaクラス名、インタフェースOrdFrameProcessor
の実装済クラスの出力キー・クラス。デフォルト値: org.apache.hadoop.io.Text
。例:
<property> <name>oracle.ord.hadoop.ordframeprocessor.k2</name> <value>org.apache.hadoop.io.Text</value> </property>
文字列。Javaクラス名、インタフェースOrdFrameProcessor
の実装済クラスの出力値クラス。デフォルト値: oracle.ord.hadoop.mapreduce.OrdImageWritable
。例:
<property> <name>oracle.ord.hadoop.ordframeprocessor.v2 </name> <value>oracle.ord.hadoop.mapreduce.OrdImageWritable</value> </property>
文字列。カスタム(ユーザー指定)プラグインにのみ関連します。Reduceフェーズでマップ出力からのキー値ペアを処理する、インタフェースOrdOutputProcessor
の実装済Javaクラスの名前です。例:
<property> <name>oracle.ord.hadoop.ordframeprocessor</name> <value>mypackage.MyOutputProcessorClass</value> </property>
文字列。顔ラベルをディレクトリ名と顔イメージにマップするマッピング・ファイル。例:
<property> <name> oracle.ord.hadoop.ordsimplefacereader.dirmap </name> <value>faces/bigdata/dirmap.txt</value> </property>
文字列。モデルの作成に使用される顔を含む、ファイル・システム・ディレクトリ。これは通常、ローカルのファイル・システムです。例:
<property> <name> oracle.ord.hadoop.ordsimplefacereader.imagedir </name> <value>faces/bigdata</value> </property>
文字列。フレームワーク内の出力ファイル・タイプを表す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>
文字列。識別される顔の顔ラベルとタイムスタンプ、場所および一致の信頼度を含む出力の形式は、json
、image
またはtext
である必要があります。例:
<property> <name>oracle.ord.hadoop.outputtype</name> <value>json</value> </property>
文字列。特定のジョブ用の追加の構成プロパティを含むファイル。例:
<property> <name>oracle.ord.hadoop.parameterfile </name> <value>oracle_multimedia_face_recognition.xml</value> </property>
文字列。このプロパティは、オブジェクト検出のタイプを選択するために使用します。CASCADE_DO_CANNY_PRUNING
、CASCADE_SCALE_IMAGE
、CASCADE_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>
浮動小数点値。モデルの顔と入力データの顔の間に許容される距離(差異)を指定します。値が大きいと一致率は高くなりますが、精度が低くなります(偽陽性が多くなります)。値が小さいと一致率は減りますが、精度が上がります。例:
<property> <name> oracle.ord.hadoop.recognizer.cascadeclassifier.maxconfidence</name> <value>200.0</value> </property
文字列。入力データが含まれるHBase列の名前。例:
<property> <name>oracle.ord.hbase.input.column</name> <value>binary_data</value> </property>
文字列。入力データが含まれるHBase列ファミリの名前。例:
<property> <name>oracle.ord.hbase.input.columnfamily</name> <value>image_data</value> </property>
文字列。入力データが含まれるHBase表の名前。例:
<property> <name>oracle.ord.hbase.input.table</name> <value>images</value> </property>
文字列。出力HBase表内のHBase列ファミリの名前。例:
<property> <name>oracle.ord.hbase.output.columnfamily</name> <value>face_data</value> </property>
文字列。出力データのHBase表の名前。例:
<property> <name>oracle.ord.hbase.output.table</name> <value>results</value> </property>
文字列。読込み時の整合性制約を定義します。読込み操作は、マスターまたはレプリカ・ノードで処理できます。デフォルト値のABSOLUTE
の場合、読込み操作がマスター・ノードで処理されることを確認できます。例:
<property> <name>oracle.ord.kvstore.get.consistency</name> <value>absolute</value> </property>
数字。ラージ・オブジェクトのチャンクまたはその関連メタデータを取得するための時間間隔の上限。指定された限度を超えないよう最善が尽くされます。ゼロの場合、KVStoreConfig.getLOBTimeout(java.util.concurrent.TimeUnit)
値が使用されます。デフォルト値は5です。例:
<property> <name>oracle.ord.kvstore.get.timeout</name> <value>5</value> </property>
文字列。timeout
パラメータの単位をNULLにできるのは、timeout
がゼロである場合のみです。デフォルト値はseconds
です。例:
<property> <name>oracle.ord.kvstore.get.timeunit</name> <value>seconds</value> </property>
文字列。Oracle NoSQL Databaseストア内のアクティブなノードのホストおよびポート。例:
<property> <name>oracle.ord.kvstore.input.hosts</name> <value>localhost:5000</value> </property>
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 NoSQL Databaseストアの名前。ここで指定する名前は、ストアをインストールしたときに使用した名前と同一である必要があります。例:
<property> <name>oracle.ord.kvstore.input.name</name> <value>kvstore</value> </property>
文字列。Oracle NoSQL Database表の主キー。例:
<property> <name>oracle.ord.kvstore.input.primarykey</name> <value>filename</value> </property>
文字列。入力データが含まれるOracle NoSQL Database表の名前。例:
<property> <name>oracle.ord.kvstore.input.table</name> <value>images</value> </property>
顔認識プロパティ(文字列recognizer
が含まれます)
文字列。このプロパティは、オブジェクト検出のタイプを選択するために使用します。CASCADE_DO_CANNY_PRUNING
、CASCADE_SCALE_IMAGE
、CASCADE_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>
浮動小数点値。モデルの顔と入力データの顔の間に許容される距離(差異)を指定します。値が大きいと一致率は高くなりますが、精度が低くなります(偽陽性が多くなります)。値が小さいと一致率は減りますが、精度が上がります。例:
<property> <name> oracle.ord.hadoop.recognizer.cascadeclassifier.maxconfidence</name> <value>200.0</value> </property
文字列(具体的には値のペア)。検出されるオブジェクトの境界ボックスの最大サイズを指定します。オブジェクトが近いと境界ボックスが大きくなり、海辺での顔のようにオブジェクトが遠いと、境界ボックスが小さくなります。境界ボックスが最大サイズよりも大きいオブジェクトは無視されます。例:
<property> <name> oracle.ord.hadoop.recognizer.cascadeclassifier.maxsize</name> <value>(500,500)</value> </property>
整数。入力データでオブジェクトを検出するために使用される、スライディング・ウィンドウのサイズを決定します。値が高いほど、検出されるオブジェクトは少なくなりますが、品質は高くなります。デフォルト値: 1。例:
<property> <name> oracle.ord.hadoop.recognizer.cascadeclassifier.minneighbor</name> <value>1</value> </property>
文字列(具体的には値のペア)。検出されるオブジェクトの境界ボックスの最小サイズを指定します。オブジェクトが近いと境界ボックスが大きくなり、海辺での顔のようにオブジェクトが遠いと、境界ボックスが小さくなります。境界ボックスが最小サイズよりも小さいオブジェクトは無視されます。例:
<property> <name> oracle.ord.hadoop.recognizer.cascadeclassifier.minsize</name> <value>(100,100)</value> </property>
浮動小数点数。顔ラベルをディレクトリ名と顔イメージにマップするマッピング・ファイルとともに使用される、スケーリング係数。値1.1は、ランタイム入力の顔とトレーニング・プロセス中にサブディレクトリに格納されたイメージを比較する前に、スケーリングされないことを意味します。例:
<property> <name> oracle.ord.hadoop.recognizer.cascadeclassifier.scalefactor</name> <value>1.1</value> </property>
文字列。顔の分類器を含むXMLファイル。この機能は、OpenCVで使用可能な任意の正面顔のトレーニング前の分類器とともに使用できます。例:
<property> <name> oracle.ord.hadoop.recognizer.classifier</name> <value>haarcascade_frontalface_alt2.xml</value> </property>
文字列。顔ラベルをディレクトリ名と顔イメージにマップするマッピング・ファイル。例:
<property> <name> oracle.ord.hadoop.recognizer.labelnamefiler</name> <value>haarcascade_frontalface_alt2.xml</value> </property>
文字列。トレーニング・ステップで生成されたモデルを含むファイル。このファイルは、すべてのクラスタ・ノードがアクセスできる共有の場所に格納する必要があります。例:
<property> <name> oracle.ord.hadoop.recognizer.modelfile</name> <value>myface_model.dat</value> </property>
マルチメディア分析フレームワークの構成プロパティのこのカテゴリは、ストリーミング・ビデオの処理に適用されます。
これらのプロパティ名はすべてspark.oracle.ord
から始まります。これらは、2つのサブカテゴリに分けることができます。
一般的なフレームワーク・プロパティ
顔認識および顔検出プロパティ(文字列recognizer
が含まれます)
各サブカテゴリ内では、使用可能な構成プロパティがアルファベット順にリストされます。各プロパティについて、プロパティ名をリストし、その次にそのプロパティに関する情報を示します。
一般的なフレームワーク・プロパティ
文字列。サンプル・イメージ・プレーヤによって結果が処理の結果が含まれるフレームとして表示される場合のフレーム・レート。プレーヤにより、新しいフレームがn秒ごとに表示されます。デフォルトは1です。
例:
spark.oracle.ord.demo.imageplayer.framerate=1
文字列。ビデオ・フレーム処理のCSV出力を受け取るローカルのファイル・システム・ディレクトリ。例:
spark.oracle.ord.demo.localfswriter.outputcsvpath=/home/oracle/example/spark/facerecognizer/output/csv
文字列。ビデオ・フレーム処理のイメージ出力を受け取るローカルのファイル・システム・ディレクトリ。例:
spark.oracle.ord.demo.localfswriter.outputimagepath=/home/oracle/example/spark/facerecognizer/output/image
文字列。ビデオ・フレーム処理のJSON出力を受け取るローカルのファイル・システム・ディレクトリ。例:
spark.oracle.ord.demo.localfswriter.outputjsonpath=/home/oracle/example/spark/facerecognizer/output/json
文字列。Sparkストリーミング・アダプタからビデオ・フレームを受け取るHDFSディレクトリ。例:
spark.oracle.ord.inputdirectory=spark_input
文字列。ビデオ・フレーム処理のイメージ出力を受け取るローカルのファイル・システム・ディレクトリ。例:
spark.oracle.ord.demo.localfswriter.outputimagepath=/home/oracle/example/spark/facerecognizer/output/image
文字列。ビデオ・フレーム処理のJSON出力を受け取るローカルのファイル・システム・ディレクトリ。例:
spark.oracle.ord.demo.localfswriter.outputjsonpath=/home/oracle/example/spark/facerecognizer/output/json
文字列。ビデオ・フレームを処理するために使用するプロセッサ。顔検出および認識用として製品で使用可能な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=oracle.ord.spark.demo.OrdSparkImagePlayer
文字列。ビデオ・フレーム処理の出力を受け取るHDFSディレクトリ。例:
spark.oracle.ord.outputdirectory=spark_output
文字列。生成された結果の形式(JSON
/text
/image
)。例:
spark.oracle.ord.outputtypes=JSON
数字。バッチとして処理されるフレーム・セットを決定する時間間隔。単位はミリ秒です。デフォルトは5です。例:
spark.oracle.ord.streamingduration=5
文字列。Sparkジョブ・プロセスの出力。デフォルトでは、出力はHDFSに書き込まれますが、カスタム・ライターを実装できます。製品には、ローカル・ファイル・システムおよびイメージ・プレーヤに書き込むためのカスタム・ライターが含まれています。例:
spark.oracle.ord.streamsink=HDFS
Sparkジョブの入力データ。これには、HTTPまたはRTSPストリーミング・サーバーまたはHDFSを使用できます。デフォルトはHDFS
です。例:
spark.oracle.ord.streamsource=HDFS
顔認識および顔検出プロパティ(文字列recognizer
が含まれます)
文字列。顔の分類器を含むXMLファイル。この機能は、OpenCVで使用可能な任意の正面顔のトレーニング前の分類器とともに使用できます。例:
spark.oracle.ord.recognizer.classifier=haarcascade_frontalface_alt2_opencv3.0.xml
文字列。このプロパティは、オブジェクト検出のタイプを選択するために使用します。CASCADE_DO_CANNY_PRUNING
、CASCADE_SCALE_IMAGE
、CASCADE_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
数字。ヒストグラムを抽出するために各フレームで使用されるX軸上のグリッド・セルの数。通常の値は8です。値が大きくなるほど、結果として生成される機能ベクトルの次元が高くなります。例:
spark.oracle.ord.recognizer.gridx=8
数字。ヒストグラムを抽出するために各フレームで使用されるY軸上のグリッド・セルの数。通常の値は8です。次に例を示します。
spark.oracle.ord.recognizer.gridy=8
文字列。顔ラベルをディレクトリ名と顔イメージにマップするマッピング・ファイル。例:
spark.oracle.ord.recognizer.labelfilepath=faces/bigdata/dirmap.txt
文字列。検出されたオブジェクトの境界ボックスの最大サイズを(XおよびY軸上のピクセルの数として)指定します。オブジェクトが近いと境界ボックスが大きくなり、海辺での顔のようにオブジェクトが遠いと、境界ボックスが小さくなります。境界ボックスが最大サイズよりも大きいオブジェクトは無視されます。例:
spark.oracle.ord.recognizer.maxsize=500
整数。使用可能なオプションは1、2または3です。1の場合、より多くの顔が認識されますが、顔でないオブジェクトが認識される可能性があります。3が最も正確ですが、一部の顔を検出し損なう可能性があります。例:
spark.oracle.ord.recognizer.minneighbors=1
文字列。検出されたオブジェクトの境界ボックスの最小サイズを(XおよびY軸上のピクセルの数として)指定します。オブジェクトが近いと境界ボックスが大きくなり、海辺での顔のようにオブジェクトが遠いと、境界ボックスが小さくなります。境界ボックスが最小サイズよりも小さいオブジェクトは無視されます。例:
spark.oracle.ord.recognizer.minsize=100
数字。円形のローカル・バイナリ・パターンを作成するためのサンプル・ポイントの数。例:
spark.oracle.ord.recognizer.neighbors=8
浮動小数点数。アルゴリズムがイメージに対して複数のパスを作成する際にスケールを拡大する速度を指定します。この値を大きくすると、(パスの数が減るために)ディテクタがより高速に動作しますが、非常に大きい値にすると、新しいスケールにジャンプするために情報をとり逃す可能性があります。デフォルトは1.1です。これは、パスごとにスケールが10%ずつ大きくなることを意味します。このパラメータには、値1.1、1.2、1.3または1.4を使用できます。例:
spark.oracle.ord.recognizer.scalefactor=1.1
数字。顔が一致するかどうかを決定する値。顔をビデオ内の顔と比較する際の出力値がこの値より大きい場合、この顔は一致しないと見なされます。それ以外の場合は、一致すると見なされます。デフォルトは130
です。例:
spark.oracle.ord.recognizer.threshold=130
文字列。トレーニングによって作成されたモデルを格納するファイルの名前。例:
spark.oracle.ord.recognizer.trainingmodelpath=ordfacemodel_bigdata.data
マルチメディア分析フレームワークの構成プロパティのこのカテゴリは、顔認識のイメージのトレーニングに適用されます。
これらのプロパティには文字列face
が含まれ、これらはアルファベット順にリストされます。各プロパティについて、プロパティ名をリストし、その次にそのプロパティに関する情報を示します。
文字列。トレーニングによって作成されたモデルを格納するファイルの名前。例:
<property> <name> oracle.ord.hadoop.ordfacemodel </name> <value>ordfacemodel_bigdata.dat</value> </property>
文字列。顔認識モデルのトレーニングに使用されるイメージを読み込むJavaクラスの名前。例:
<property> <name> oracle.ord.hadoop.ordfacereader </name> <value> oracle.ord.hadoop.OrdSimpleFaceReader </value> </property>
文字列。特定のアプリケーション用の追加の構成プロパティを含むファイル。例:
<property> <name> oracle.ord.hadoop.ordfacereaderconfig </name> <value>config/ordsimplefacereader_bigdata.xml</value> </property>
文字列。顔ラベルをディレクトリ名と顔イメージにマップするマッピング・ファイル。例:
<property> <name> oracle.ord.hadoop.ordsimplefacereader.dirmap </name> <value>faces/bigdata/dirmap.txt</value> </property>
文字列。モデルの作成に使用される顔を含む、ファイル・システム・ディレクトリ。これは通常、ローカルのファイル・システムです。例:
<property> <name> oracle.ord.hadoop.ordsimplefacereader.imagedir </name> <value>faces/bigdata</value> </property>
マルチメディアのデコードおよび処理のために、カスタム・モジュールを実装およびインストールできます。
抽出クラス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
にあります。