【Python/OpenCV】HoG特徴+SVM識別器の学習/作成

Python版OpenCVでHoG特徴+SVM識別器(分類器・xmlファイル)を作成する方法をソースコード付きで解説します。

【画像分類】HoG特徴 + SVM識別器

HoG SVMは、物体検出に使われる識別器の1つです。
HoG SVMでは、HoG特徴量とSVM(サポートベクタマシン)を組み合わせて識別器を作成します。
前回は、画像(手書き数字画像)をリサイズのみしてそのまま学習させましたが、今回はHoG SVMで学習します。

動画解説

本ページの内容は以下動画でも解説しています。

前回記事

【Python/OpenCV】SVMで画像分類①(手書き数字編)
Pythonライブラリ「OpenCV」でSVM(サポートベクタマシン)を実装し、手書き数字画像から数字を判別します。

人検出などでは明暗差よりも輪郭情報を捉えたほうが検出精度が良いとされています。
そのため、人検出はHaar-like特徴よりもHoG特徴をよく使います。

画像処理ライブラリOpenCVにも実装されているので、今回はそちらを利用して識別器を作成してみます。

関連記事

HoG特徴量の原理・計算式
HoG特徴量の基本的な原理や仕組みについてまとめました。
404 NOT FOUND | Python入門速報

【サンプルコード】cv2.HOGDepreorで実装

サンプルプログラムのソースコードです。
Hog特徴量の計算をcv2.HOGDepreorで行います。


cv2.HOGDepreor

cv2.HOGDepreorでは、グレースケール画像のHog特徴を計算できます。

hog = cv2.HOGDepreor(win_size, block_size, block_stride, cell_size, nbins)
hog.compute(img)
パラメータ 説明
win_size 検出窓サイズ
block_size ブロックサイズ
block_stride ブロックの移動量(セルサイズの倍数にする)
cell_size セルサイズ
nbins 1セル毎のビン数
img グレースケール画像(8bit)

【サンプルコード】HoG特徴を自前で実装

サンプルプログラムのソースコードです。


【Python版OpenCV超入門】使い方とサンプルコードを解説
Python版OpenCVで画像処理プログラミングを行う方法を入門者向けにソースコード付きで解説するページです。

コメント

  1. k より:

    識別機を作成した後の使い方を教えて頂けないでしょうか。
    宜しくお願い致します。

    • 管理人 より:

      ※k様

      コメントありがとうございます。
      作成した識別器の扱い方ですが、私も現在調査中でうまく行っていません。
      申し訳ないのですが、分かり次第、追記したいと思います。
      もしk様が使い方がわかれば教えてくださると嬉しいです。

      • k より:

        返信ありがとうございます。
        このサイトにはいつもお世話になっております。
        機械学習を研究に使用しておりまして、現在勉強中です。
        分かりましたらお知らせお知らせ致します。
        ご丁寧にありがとうございました。

  2. T より:

    自作識別器の出力はどこに出力されるのですか?

    • 管理人 より:

      ※T様

      コメントありがとうございます。
      自作識別器(hog_train.xml)はPythonスクリプトと同じフォルダ内に出力されます。

      • T より:

        出力されていない場合の対処法等わかりますか??

        • 管理人 より:

          ※T様
          コメントありがとうございます。
          エラーメッセージ等は出てないでしょうか。
          出ていなければ、pos、negフォルダ内の学習用画像を読み込めていないかもしれません。

          • T より:

            返信ありがとうございます。
            こちらの手違いで読み込めていませんでした。
            お手数かけました。
            ありがとうございます。

          • 管理人 より:

            ※T様
            コメントありがとうございます。
            無事解決されたようで何よりです。

  3. 匿名 より:

    やかん、土鍋、マグカップ画像をWEBカメラに映して、リアルタイムで認識させる方法はどうすればいいのでしょうか。