FRI第3回:複数人の顔検出に対応させるツイートツイート前回、顔を検出してお面をかぶせるところまでつくってみました。今回はさらにそれを発展させ、複数人の顔を検出できるようにします。Komura(CGWORLD)<1>お面の位置暴れを解消するこんにちは、Codelight株式会社の高田です。ARCHITECTURE:音のアーキテクチャ展」に行ってきました。ARCHITECTURE』をベースに複数の作家が制作した映像作品が会場を大きく使ったステージに投影される、とても見ごたえのあるイベントでした。これは音楽を聴きながらiPhoneで自撮りをすると、音に連動して自分の顔にエフェクトがかかるという非常に面白いもので、エフェクトの表現がユニークでしたので、次回以降このアプリをヒントにしたコンテンツをつくってみたいと思います。前回はOpenCVで顔検出を行い、お面をかぶせました。このくらいならばそれほど難しくなかったのではと思います。2人以上で試してみた方は気づいたと思いますが、今のままでは複数人にお面をかぶせることができません。お面の位置が暴れてしまうことが多かったのではないでしょうか。原因を考えてみましょう。OpenCVの顔検出アルゴリズム自体は複数個の顔の検出に対応しています。表示できないのはコンテンツがあえてお面の表示を1回で打ち切っているからで、お面を複数表示させるように変更する必要があります。これは主にUnityスクリプトを使っての作業になります(後述)。お面の位置が暴れてしまう問題はどうでしょうか。これはいくつかの原因が考えられます。顔検出は主に画像の明暗差(コントラスト)を使って検出を行なっているため、検出用の画像のコントラストが低いと認識しにくくなってきます。ほかに画面に対して顔が映っている範囲が大きすぎる、小さすぎる、動きが早くてぶれてしまう、カメラのフォーカス外れ、画像にノイズが多いなど様々です。良いアプローチは、アルゴリズムが検出しやすい画像を取得することができるように環境を整えることです。下記のポイントに気を付けると暴れが激減します。・十分な光量を確保する・ライトを逆光にしない・影をつくらない●ノイズの除去それではひとつずつ解説していきます。一般的に、こういったコンテンツで利用するカメラは、Webカメラと呼ばれるUSBでPCに接続するものです。筆者は、画質の高さからLogicoolのC9xx系を利用することが多いです。状況によってはいわゆる手持ちのビデオカメラや産業用カメラなどを利用することもあります。これらは撮影環境に合わせて最適なレンズを選ぶことができる利点があります。C920のカメラ設定例を示します。自動設定は全て外し、フォーカスは無限大にします。ゲインは最小にして画面が暗いようであればできるだけ対象に当てるライトを追加します。露出も値を上げるとシャッター速度が落ちるので、これもできるだけ小さくしておきます。注意するべき点として、突然カメラの設定が飛んでしまうことがあるようです。ある朝PCを起動するとカメラの設定が全てデフォルトに戻っているという事態もままあります。これを回避するためには、コンテンツの方で、起動時にカメラの設定を行う処理を加えておくのが良いでしょう。どこにその処理を付け加えるかというと、いま題材として扱っているプログラムではUnityのWebCamTextureでカメラ画像の取得を行なっていますが、このクラスにフォーカスや露出を設定する機能はありません。Windowsではカメラの値を書き込むために、「videoInput」というフリーのライブラリが使われることが多いようです。Cameraアセットを利用するのが良いと思います。以下のようにカメラパラメータをプログラムから変更することができるのと、パフォーマンスの向上が期待できます。これも完璧ではないように感じています。安定した運用が必要な場合は産業用やプロ用機材の導入を検討してください。HD」といったUSBキャプチャカードが1つあると、様々なカメラの出力をUSBカメラとして受けられるので便利です。照明を調整できる場合は、できるだけ顔にフラットに光が当たるようにしてみてください。十分な照明が確保できると、シャッター速度を上げることができるようになるので顔の動きに対する追従性が上がります。カメラのゲインを上げる必要がなくなるので画像のノイズが減ります。これらは設置場所によって調整する必要があり、インタラクティブコンテンツの設置では必ず悩むところです。次に検出データのノイズを除去します。今回の処理では前後フレームでの検出位置が大きく移動しすぎた場合の対処だけで十分です。カルマンフィルタなどのワードが出てくると思いますが、今回は非常にシンプルなローパスフィルタの1種でいきましょう。現在の位置と新しい位置を一定の重みでブレンディングするだけですが、十分な効果が得られます。値を小さくしすぎると動きがどんどん鈍くなります。赤の枠はOpenCVが検出した生の領域を示しています。smoothの値を小さくしていくとお面のブレが収まっていることがわかると思います。今回は、コンテンツ開発におけるUnityとTouchDesigner、それぞれの特徴と必要な知識について考えます。/...2019.09.27第11回:デバッグと設定ファイル今回は、コンテンツ開発の過程では欠かせないデバッグと、設定ファイルの記述法について紹介します。Toshinori...2019.08.20第10回:Spoutを使ってリアルタイムに画像を共有する今回は、UnityとTouchDesignerの間でリアルタイムに画像を共有する方法を紹介します。Controlでライトを制御する今回は、通信プロトコルOSCを、Unityで使えるようにセットアップします。Takata(C...2019.05.21第8回:押しボタンの入力をUnityで取得する今回は、押しボタンの入力をUnityで取得できるように、ボタンとデジタル入出力装置とPCを接続し、設定をしていきます。TEXT_高田稔則...2019.04.18第7回:プロジェクタのキャリブレーションをする第5回から引き続き、測域センサを用いたコンテンツの制作を進めていきます。今回はプロジェクタによる投影位置をより使いやすいよう調整します。...2019.02.21第6回(番外編):裸眼立体視ホログラムディスプレイを使ってみる前回から測域センサを用いたコンテンツの紹介がスタートしましたが、今回は番外編として、今注目の裸眼立体視用ホログラムディスプレイ「Looki...2019.01.24第5回:測域センサを使ってみる今回からは、レーザー式測域センサを利用したコンテンツを考えていきます。Unityで使えるようセットアップをし、簡単なインタラクティ...2018.12.19第4回:顔検出まとめ前回は、複数人の顔を検出してお面をかぶせるところまでコードをアレンジしてみました。今回は、さらにその精度を高めつつ、他の顔検出アルゴリズム...2018.10.26第3回:複数人の顔検出に対応させる前回、顔を検出してお面をかぶせるところまでつくってみました。今回はさらにそれを発展させ、複数人の顔を検出できるようにします。TEXT_高...2018.09.21第2回:OpenCVで顔検出こんにちは、Codelight株式会社の高田です。真さんの「おいしいデ」を読みました。ハリウッドでも活躍する佐藤隆之氏がFRONTIERのクリエイター向けPCをレビュー。ハリウッドでも活躍する佐藤隆之氏がFRONTIERのクリエイター向けPCをレビュー。次の100年も愛されるフォントを創る。FIX!森田悠揮氏、マーザ・アニメーションプラネット、カヤック、萌、SNKの登壇が決定。