4K 動画にも対応しました

terminator

Face01 は USB カメラからの入力を想定していました。ちょっと前まではそれでよかったのですが、最近は超高画質 USB カメラが登場したみたいです。そのままでも動くのですが、無駄に高画質な分無駄に計算をさせているので対応させようと思いました。

4K の解像度を持つ USB カメラ
4K の解像度を持つ USB カメラ

よく見たら「Amazon’s Choice」になっていたのでこういうカメラはこれから増えていくのでしょう。基本的には先に縮小率を決めておいて openCV からリサイズするという方法です。

width  = video_capture.get(cv2.CAP_PROP_FRAME_WIDTH)
if width > 3800:
	reductionRate = 0.2
elif width > 1900:
	reductionRate = 0.6
elif width > 800:
	reductionRate = 1
small_frame = cv2.resize(frame, (0, 0), fx=reductionRate, fy=reductionRate)

このままだと顔認識の四角形を描画する時に描画ポイントがずれてしまいますので、修正します。

for (top, right, bottom, left), name in zip(face_locations, face_names):
	top = int(top / reductionRate)
	right = int(right / reductionRate)
	bottom = int(bottom / reductionRate)
	left = int(left / reductionRate)

このようにしておけば無駄な計算リソースはなくなります。

これらのコードは既に Face01 シリーズに組み込まれているのでユーザは意識しないでも大丈夫です。

さて検証として高画質動画を探しました。選んだのはターミネーター6の予告動画です。

ビデオ解像度は 1920×804 でした。縮小しなければ自分のデスクトップには映しきれません。

Terminator の1シーン Face01 で顔認証を行っている
Terminator の1シーン Face01 で顔認証を行っている

大きな画素数を持つ動画ファイルでも軽快に動くことが検証されました。

自動保存された顔認識動画はこちらです。

Follow me!