したがって、ステップ1で正しい軌道に乗っていると思います(画像にアルゴリズムを適用して、画像を一連の機能に変換します)。
このプロジェクトは、生データ (漫画を構成する個々のフレーム) から実際にトレーニング データ セットを作成する必要があるため、ほとんどの ML の問題よりも困難です。たとえば、フレームを取得し、そのフレーム内の 2 人のキャラクター、ディルバートと角のあるキャラクター (ディルバートのボスだと思いますが、彼の名前はわかりません) を特定し、そのフレームからこれら 2 つのキャラクターを抽出し、それぞれに適切なクラス ラベル (例: Dlibert の場合は「1」)。
ステップ1
ディルバートの漫画を構成する各フレームから個々のキャラクターを抽出するには、各フレームのスペクトル分解を提案します。この手法に慣れていない場合、その核心は、単なる固有ベクトル分解です。
python (またはRPyのような python-to-R バインディングを使用できる場合は R ) が好きな場合は、 sklearnを参照することを強くお勧めします。特に、この優れたライブラリ (元々はSciPy scikitsプロジェクトの傘下で開発されたため、NumPy + SciPy を行列計算に使用しています) には、画像セグメンテーション用のアルゴリズムがいくつかあり、そのうちの 1 つはスペクトル クラスタリングに基づいています。プロジェクトのこのステップでは、これら 2 つの scikits.learn モジュールを参照することをお勧めします。
これらの 2 つのモジュールには、2 つの優れたサンプル スクリプトが含まれています。1 つはデジタル写真を分割し、もう1 つは、互いに最小限のコントラストで部分的に重ね合わされた 3 つの円で構成された画像を分割し、背景も含めます。どちらも、実行する必要がある分解よりも難しい問題だと思います。言い換えれば、sklearnにはソース配布物に含まれる 2 つの完全で十分に文書化されたサンプル スクリプトがあり、どちらもあなたと同様のデータを処理します。いずれかまたは両方が、このステップの優れたテンプレートになります。
ステップ2
これが最初のステップです。2 つ目:分解されたイメージのすべてのコンポーネントをグループに並べ替えます。ディルバート文字ごとに 1 つのグループです。次に、各グループにクラス ラベルを割り当てます。たとえば、分解ステップで 4 文字の場合、適切なクラス ラベルの選択は「0」、「1」、「2」、および「3」です。これらのクラス ラベルをコンポーネント マトリックス (手順 1 の分解生成物) に追加して、各文字マトリックスが対応するクラス (ディルバート文字) にマップされるようにします。
ステップ 3
適切な ML 手法を選択します。このステップには多くの選択肢があります。唯一の基準は、手法が教師付きカテゴリに属していること (データにクラス ラベルを割り当てているため) と、それが分類器として機能すること(つまり、数値を出力するリグレッサーではなく、クラス ラベルを返すこと) です。これは個人的なプロジェクトなので、あなたにとって最も興味深いものを選びました。今述べた基準を満たすものは、多層パーセプトロン(ニューラル ネットワーク)、サポート ベクター マシン(SVM)、およびk 最近傍(kNN) です。
ステップ 4
分類器のトレーニング、検証、およびテスト
代替手法:テンプレート マッチング
ステップ 1 が完了すると (各画像が一連のオブジェクトに分解され、その中には間違いなくキャラクターを表すものもあります)、これらの分解生成物を手動でふるいにかけ、漫画の各キャラクターの手本を収集できます。これらはテンプレートです。
次に、画像からセグメント化されたオブジェクトを、この一意のテンプレートのセットと比較します。別の scipy scikit であるscikit-imageでは、テンプレート画像と候補画像を渡すメソッドmatch_templateを使用できます。このメソッドは、ピクセルごとの相関 (-1 と 1 の間) を示す 2D 配列を返します。 )。