FACE01 GRAPHICS の numpy.ndarray 出力から matplotlib で動画再生

はじめに
FACE01 GRAPHICSを呼び出すサンプルプログラム。今回は FACE01 から出力される numpy.ndarray から matplotlib を用いて動画ウィンドウを作成してみます。
この様に出力から簡単に動画ウィンドウが生成される様子をご覧ください。
サンプルプログラム
import cv2
import FACE01_GRAPHICS_121 as f
import matplotlib.pyplot as plt
import numpy as np
from face01lib import load_priset_image  # face01libからインポート
kaoninshoDir, priset_face_imagesDir = f.home()
    
known_face_encodings, known_face_names = load_priset_image.load_priset_image(
    kaoninshoDir,
    priset_face_imagesDir, 
    jitters = 10, 
    upsampling=0, 
    mode='cnn', 
    model='small'
)
xs = f.face_attestation(
    kaoninshoDir, 
    known_face_encodings, 
    known_face_names, 
    tolerance=0.5, 
    jitters=0,
    upsampling=0,
    mode='cnn', 
    model='small',
    frame_skip=1,
    movie='test.mp4',
    rectangle='false',
    target_rectangle='true',
    show_video='true',
    frequency_crop_image=10
)
matplotlibx=1
for x in xs:
    (name, pict, date, img, location, percentage_and_symbol) = (x['name'], x['pict'], x['date'], x['img'], x['location'], x['percentage_and_symbol'])
    # matplotlibによる描画を行う場合
    if matplotlibx==1:
        plt.cla()
        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        plt.imshow(img)
        plt.pause(0.01)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            matplotlibx=0出力結果
左がmatplotlabで出力したウィンドウ、右がopenCVで出力したウィンドウ
FACE01 GRAPHICS 呼び出し時の引数指定
- upsampling: 0- 80×80 ピクセルで顔探索
 
- mode: ‘hog’- HOG 形式で顔認識
 
- frame_skip ( 手動でのフレームドロップ ) : 1- フレームドロップしない
 
- target_rectangle: ‘true’- 顔周りの枠を表示
 
- show_video: ‘true’- 動画の出力
 
まとめ
出力動画は FACE01 呼び出し時の引数指定で表示させることが出来ますが、何らかの理由で別の形で動画表示をさせたい時、FACE01 は numpy.ndarray 形式で動画を出力しているのでこれを利用することが出来ます。
今回は機械学習でよく使われる matplotlab を用いて動画出力を行いました。
matplotlab は出力が続くと処理動作が重くなっていくので
plt.cla()
を使って毎回表示を初期化しています。
動画は 1 枚ずつのフレームに分割されて出力されますので
plt.imshow(img)
として numpy.ndarray として受け取り
plt.pause(0.01)
として 0.01 秒に一度表示するようにしています。
ちなみに BGR と RGB を変換するために
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
を行っています。
たったこれだけで FACE01 が出力する numpy.ndarray データを動画として表現することが出来ます。今回は簡単な紹介でしたので matplotlab を使いましたが、他の GUI として映像出力したいときにも同じように行うことが出来ます。
もちろん、FACE01 を呼び出す時に
show_video=’true’
としていただければ openCV の GUI 表示を行うことが出来ます。今回はサンプルということで両方出力させています。
いかがだったでしょうか。
今後の参考にしていただければ幸いです。
なお、FACE01 の呼び出し方については
「FACE01 1.1.2 の呼び出し方について解説します」
にて説明させていただいておりますので合わせてご覧ください。
最後までお読み頂きましてありがとうございました。


