0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

グリーンスクリーンを設置するのも大変だから顔だけ切り出して背景画像に重ねてみた

Last updated at Posted at 2020-05-05

Webカメラから自分の顔を検出して、顔だけを背景画像に重ねてみました。 Web会議アプリにWebカメラとして映像を渡せば、お手軽にWeb会議に顔を出せます。
treeman_example.png
小さい頃なりたかった(?)木の賢者にもなれます。

注)目伏せ追加機能はありません。 目伏せはこの記事のためにスクショに後から手加工で追加しました。

課題

3月上旬から在宅でWeb会議ざんまいの日々になってます。
あまりに部屋が汚いのでビデオはなしで、音声と画面共有だけでなんとかやってきました。でもやはりWeb会議だけでは今までの信頼貯金を取り崩している気がします。たまに顔を映してくれる人がいると、とても嬉しく思ってる自分がいます。自分も顔出したい。 でも部屋が狭いし汚すぎる!

普通は諦めて部屋を片付けたてきれいにするか、グリーンスクリーンを設置してクロマキー合成でビデオにするのでしょう。でもやっぱり片付けられない。。。

会社で広く使われているWeb会議システムはWebExです。 Zoomのように背景変換機能はないし、Teamsのようにすぐ開発してくれる気がしない。。。 Zoomもたまに使ってるけど、マシンパワーが足りなくてグリーンスクリーン必須。でもグリーンスクリーンを設置する場所もない。。。

妄想

そういえばZoomは顔だけじゃなくて、手や上半身を背景から切り出している。だからヘビーな処理が必要なのか??
顔検出だけと割り切れば非力なPCでもそんなに負荷なくできるはず!?

構想

こんな感じ。

Webカメラ --> OpenCVで顔領域検出 --> 顔領域だけ取り出して背景画像に重ね合わせ --> Webカメラの映像として出力 --> WebExやZoomで利用

このブログ記事を見るとやはりOpenCVでFace detectionはすぐできそう。
切り出しや重ね合わせはPython Imaging Library (Pillow)でやったことある。
1秒間に5回ぐらい処理できれば、Web会議で使うには十分な映像になるはず。
さて、作った画像をWebカメラの映像として出力するのはどうしたらいいか? OpenCVにそんな機能はなさそう。PythonからもMacやWindowsで使えるライブラリは見つからず。

あまりスマートではないけど、MacOSならCamTwistで画面の一部をキャプチャーして他のソフトにWebカメラとして認識させて渡すことができるらしい。

やってみた

コードをGitHubに上げておきました。
自分が書いた部分はPythonですが、OpenCVとQtを利用しています。
GW中なのでまだ実戦投入してません。早く次のWeb会議にならないかなぁ。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?