まえがき
今回の利用するプログラムはGitHubのプログラムを使います。
このプログラムは、リアルタイムでの性別判別などを行うことができます。
入力データは、ビデオファイルや画像、webカメラの3つが使えます。
主に学習させたmodelの使い方を解説します。
数式なものは触れずに、kerasの使い方になります。
必要なライブラリーのインストール
pip3 install tensorflow
pip3 install cvlib
pip3 install opencv-python
pip3 install matplotlib
STEP1 教師データの配置
教師データとなる、画像データを以下のようなディレクトリ構成で作成する。
Imageフォルダの場所はどこでもいいです。
画像サイズもバラバラで大丈夫です。
Image
├ man
├ woman
STEP2 学習させる
モデルを学習させるます。
その前に、1点だけ解説します。
train.pyの中
model.save(args.model)
で学習されたモデルを保存させています。args.modelのところの名前を変更していけば、
いろいろ試した結果を保存させておくことができるので、覚えておきましょう。
文字列で名前を指定する場合は拡張子が「.h5」になります。
例) model.save('gender_detect_model.h5')
では、ターミナルでtrain.pyのあるディレクトリに移動します。
以下のコードを打てば動くはずです。
python train.py -d 先程作ったフォルダのパス
STEP3 モデルを使ってみる
今回の記事のメイン部分にです。
まずは、先程保存したmodelを読み込みます。
ここで、少しプログラムに変更を加えます。
gitからクローンしてきた状態ですと、学習済みモデルをawsからとってきているためです。
下記の部分を消します。
# download pre-trained model file (one-time download)
dwnld_link = "https://s3.ap-south-1.amazonaws.com/arunponnusamy/pre-trained-weights/gender_detection.model"
model_path = get_file("gender_detection.model", dwnld_link,
cache_subdir="pre-trained", cache_dir=os.getcwd())
そのあとに、モデルの読み込みの部分を変更していきます。
# load model
model = load_model(model_path)
# ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓以下のように変更↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
# load model
model = load_model('先程保存したモデルのパス')
これで、モデルの読み込みは終了です。
実行すれば動きますが、少し解説していきます。
まずは、Kerasではないですがopencvのところです。
先程のload_modelの下にcv2.VideoCaptureがあると思います。
その引数が0になっています。0はパソコンで設定されているwebカメラのことをさします。
引数に、ビデオのパスを指定すればビデオでも使えます。使える拡張子は、自分で調べてください。
aviとmp4は使えることを確認済みです。
例) video = cv2.VideoCapture('test.mp4')
VideoCapture~predictまでの大まかな流れは以下のとおりです。
ビデオをフレームごとに切り出す
↓
フレームをcvlibのdetect_faceにかけ、顔検出
↓
検出した顔を矩形で囲む
↓
顔の部分を切り出し、サイズなどを変更
次に、切り出した顔画像を使い、性別判断させます。
model.predict(予測させたいもの)
返り値は、今回sigmoid関数を利用しているので確率です。
例) [0.4, 0.6] (男性:女性)
そのあと、テキストを表示する処理等を行い最後に
cv2.imshow()
を行えば、結果をみることができます。
実行方法
qで終了できます。
python detect_gender_webcam.py
まとめ
基本的に、予測をするときは.predictでできます。