Pythonでwebカメラ処理!リアルタイムサリエンシーマップ

  • このエントリーをはてなブックマークに追加

Pythonでwebカメラを操作できるようになれば、実時間で様々な処理が可能になります。ここでは、人間の視線が行く場所を推定する計算に用いられる「サリエンシーディテクション」をwebカメラの画像に対して適用した事例を紹介します。

こんにちは。wat(@watlablog)です。
webカメラをプログラムで扱えるようになったので、リアルタイムにサリエンシーディテクションの計算を行う方法を紹介します

Pythonを使ったWebカメラ操作

Python/OpenCVでWebカメラの情報をリアルタイムに表示」では、Pythonでwebカメラにアクセスしてリアルタイムに画像情報を取得する基本のコーディングを習得しました。

ここではそのコードに少し手を加えるだけでリアルタイムに画像処理結果を表示させる方法を紹介します。

Webカメラの情報をリアルタイムに表示させる

まず初めに前回のおさらいですが、Python等のプログラムを使ってWebカメラにアクセスすると、フレームと呼ばれる1枚1枚の静止画を取得することができます。

以下の図のように、このフレームをPCのディスプレイに単純に表示させるというのが、前回の記事の内容でした。

リアルタイム表示の図

Webカメラの情報に画像処理を施してから表示させる

今回は上記処理に加え、フレーム画像に画像処理を施したものをPCに表示させるだけです。

以下の図はそのイメージですが、上記リアルタイム表示との違いとして画面表示させる直前に画像処理を行うというのが今回の内容です。

リアルタイム画像処理の図

サリエンシーディテクションのおさらい

サリエンシーディテクションは目立つ場所を特定する計算手法

今回Webカメラで行う画像処理は、「Pythonでサリエンシーマップを作成!人の視線の行き場を数値化」で行った内容です。

サリエンシーとは、顕著性という意味で、サリエンシーの計算は簡単に言うと画像の中で目立つ場所を計算で定量的に特定しようというものです。

以下の図は先ほど紹介した記事の内容ですが、元の画像に対してサリエンシーディテクションの計算をかけると、サリエンシーマップという輝度値分布を得ることができます。

サリエンシーマップの例

この輝度値の高い部分が人の視線の行きやすい場所になっていると言われております。この技術は人の視覚の数値化の1つと考えられ、既にスマートな機能を積むために様々な産業界で利用され始めている技術です。

サリエンシーディテクションの応用例

当WATLABブログでは、そんなに難しい応用をしているわけではありませんが、サリエンシーディテクションを使った応用例として「Pythonでブログの広告が目立つかどうか「動的」に評価する方法」に示す内容を紹介しました。

この記事では、予めスマホを使ってWebページをスクロールしながら閲覧した動画ファイルに対しサリエンシーディテクションを使い、「ページの中でどこに視聴者の視線が行きやすいか?」を可視化しました。

そして記事の中ではマップを得るだけではなく、さらにサリエンシー値が高い場所を特定して、下の図のように円を描画することをやってみました。

サリエンシーディテクションの応用例

しかしこの内容では、予め動画を用意する工程が必要でいまいち汎用性にかけていました。

今回はこの処理をWebカメラで取得したフレームに対して適用することで、リアルタイムにサリエンシーを検出するコードを紹介します。

Webカメラでサリエンシーディテクションを行うPythonコード

実行例

百聞は一見にしかず!まずは以下のYouTube動画をご覧下さい。

今回行う処理は、Webカメラで映し出した映像に対してサリエンシーディテクションをかけるので、動画ファイルを用意する必要はありません。

以下の動画は実際にWebカメラで被写体の撮影を行っている最中のPC画面をキャプチャしたものです。

上記動画では円を描画して目立つ場所の一点のみを指示していましたが、実際にやっている画像処理のイメージは以下の動画のように画像の明暗を使っています。

全コード

実行例の動画を見るとプログラムコードのイメージがつきやすいと思いますが、以下が今回のプログラムの全コードになります。

brightnessは画像情報を受け取って輝度値の高い位置座標を特定するための関数ですが、詳細のアルゴリズムの説明は「Pythonでブログの広告が目立つかどうか「動的」に評価する方法」に記載しましたので、ご興味のある方は是非参照してみて下さい。

camera=の部分からはWebカメラの処理です。ここに記載しているサリエンシーディテクションの方法も上記記事に使い方を記載しています。今回は「Python/OpenCVでWebカメラの情報をリアルタイムに表示」で紹介したWebカメラの扱い方と併用しているだけです。

まとめ

本ページではWebカメラを使ったリアルタイム映像表示と、人の視線の行き場を数値化するサリエンシーディテクションのコラボレーションを紹介しました。

今回の方法の画像処理部分を色々変えることで様々なWebカメラ処理ができるようになりますので、是非お試し下さい。

やっとWebカメラに対する画像処理が出来てきた!これは可能性が拡がったね!
Twitterでも関連情報をつぶやいているので、wat(@watlablog)のフォローお待ちしています!

SNSでもご購読できます。

コメントを残す

*