
肌色検出器は、ビデオを分類する検出器の1つです。 動き検出器やフラグメント検出器ほど複雑ではなく、非常に単純なことさえあるかもしれません。 最初は、ビデオに肌の色に関連するたくさんのアイデアがありました。 しかし、分類のための最も簡単なアプローチを試みたので、結果に非常に満足しているので、(一時的かもしれませんが)分類することに決めました。 だから。
肌の色の決定
私たちの前に2つのタスクがありました:
- 「肌の色」と呼ばれる色を決定し、
- ポルノビデオを肌の色で分類します。
それでは、肌の色から始めましょう。 まず最初に、数千枚の写真を撮りました。 私たちは主にちょうどそのようなビデオに興味があったので、ポルノを含むビデオからのちょうど写真とフレーム。
次に、簡単な自家製プログラムを使用します。

写真では、皮膚のある領域とない領域に注目しました。 したがって、数百万点の座標(RGB)を取得し、これらの座標が人間の皮膚に属していることで分類しました。
次に、ポイントの座標を考慮するカラーモデルを選択する問題がありました。 RGB、LAB、HSV、YbCrから選択します。 いくつかのテストを実施し、YbCrに注目することに決めました。特に、色で分類する必要があるため、「灰色」の輝度成分Yを破棄できるためです。
bスケールの写真の点は次のとおりです。

そして、Crスケールで:

つまり、これらの2つの座標はスキンピクセルで区別できることがわかります。 座標CbおよびCrを持つ特定のポイントがスキンである可能性(データによる)は次のとおりです。

青は確率0%、赤は100%です。 このスライドは、たとえば肌を分類するためのしきい値として50%を選択すると、肌の光(CbおよびCr座標)を他のすべての色から簡単に分離できることを示しています。
分類の目的でSVMを使用するのではなく、スキンピクセルを最適に分類する長方形の領域を単に定義することにしました。 つまり、4つの参照ベクトルを持つこのような擬似SVMです。 これが長方形です:

黒い線は長方形です。 緑の線は、この曲線上の点が皮膚を指す確率が50%(赤:90%、青:10%)です。 つまり、黒い長方形の内側にある座標CbとCrを持つすべてのポイントは、スキンのピクセルです。
以下に、システムによるスキン定義の例を示します。
この長方形では、もちろんすべて興味深いので、調査を中止しましたが、肌の色によるポルノの分類に移る必要があります。
肌の色の分類
だから、私たちは肌をどう考えるかを決めました。 ビデオデータを処理するため、YCbCr色空間からYUVに切り替えました(実際、これは同じことであり、ロシアのウィキペディアはYCbCrページからYUVページにリダイレクトします )。 この場合のC YUV作業は非常に便利です。 生のビデオを再エンコードしないだけでなく、取得するペア(U、V)はフレーム内のポイントの半分です(ビデオがyuv420p形式の場合)、一般に、確実な節約になります。
しかし、分類はどうですか? 分類により、すべてが肌の色の決定よりもさらに簡単であることが判明しました。 ポルノとポルノ以外のビデオの肌の色の割合を計算するとどうなるかを考えました(つまり、「肌」ピクセルの数をビデオのピクセルの総数で除算します)。 結果はそのような写真です:

これらは、ローラーの分布のヒストグラムです。 y軸はローラーの数、x軸はローラーのスキンピクセルの割合です。 両方の場合の分布が正常であると仮定した場合、点線は分布密度のプロットを示しますが、これは単に説明のためです。
クリップ全体ではなく、ポルノおよびポルノ以外のフラグメントで皮膚ピクセルの割合を測定し、そのようなフラグメントもある場合-モーション検出器を作成したときに手動でそれらをカットすると、結果はさらに良くなります。
肌色検出器は、フラグメントがポルノである可能性を返します(ただし、他の検出器と同様)。 そして、この確率は、フラグメント内のスキンピクセルの割合の関数です。 関数はほぼ次のようになります。

したがって、特定のクリップのフラグメントを分類するには、次のようにします。
- フラグメントのすべてのフレームのスキンピクセル数をカウントします。
- フラグメントのすべてのフレームのスキンのピクセルの総数で除算-スキンのピクセルの割合を取得します。
- 肌のピクセルの割合に応じて、断片がポルノである確率を取得します。
- フラグメントとビデオ全体の最終的な分類には、この確率と他の検出器から取得した確率を使用します。