Web会議のカメラをOpenVINOでカスタマイズする(RaspberryPi利用)

コロナ禍の状況により、リモートワークが急速に普及しました。様々なWeb会議サービスがあり、使い分けをされていると思います。

背景をぼかしたり、壁紙を変更したりという機能を活用されていると思いますが、今回はそれをOpenVINOで実現してみようという内容になります。

なお、本記事はRaspberryPi 4Bを利用した内容になります。RaspberryPiでOpenVINOを実行する場合はNCS2が必須となりますので、予め準備をお願いします。

全体の流れ

Webカメラの入力(/dev/video0)をOpenVINOで処理を行った後、仮想カメラデバイス(v4l2loopback)に入れ、Web会議で利用するという流れになります。

Raspberry Piセットアップ

まずはOSを用意します。Raspberry Pi Imagerで作成しました。

OSセットアップ

vimのインストール,ufwの設定,ffmpegが入っている事を確認しました。

Webカメラも接続しておきます。ここではLogicool c270を利用しています。

v4l2loopback のインストール

インストール

sudo apt install v4l2loopback-dkms

現在のデバイスを確認

$ v4l2-ctl --list-devices
bcm2835-codec-decode (platform:bcm2835-codec):
	/dev/video10
	/dev/video11
	/dev/video12

bcm2835-isp (platform:bcm2835-isp):
	/dev/video13
	/dev/video14
	/dev/video15
	/dev/video16

UVC Camera (046d:0825) (usb-0000:01:00.0-1.1):
	/dev/video0
	/dev/video1

モジュールのロード

sudo modprobe v4l2loopback exclusive_caps=1

必ずexclusive_caps=1の指定が必要です。

デバイスの再確認

$ v4l2-ctl --list-devices
bcm2835-codec-decode (platform:bcm2835-codec):
	/dev/video10
	/dev/video11
	/dev/video12

bcm2835-isp (platform:bcm2835-isp):
	/dev/video13
	/dev/video14
	/dev/video15
	/dev/video16

Dummy video device (0x0000) (platform:v4l2loopback-000):
	/dev/video2

UVC Camera (046d:0825) (usb-0000:01:00.0-1.1):
	/dev/video0
	/dev/video1

ここではDummy video deviceとして、/dev/video2が追加されました。

OpenVINO環境の構築

OpenVINOが動作するように環境を構築しておきます。

プログラム

以下にソースを格納しました。

https://github.com/OpenVINO-jp/WebMeetingAICamera_RaspberryPi

実行の様子

RaspberryPiにWebカメラを接続し、でプログラムを実行します。その状態で、Chromiumを起動し、Web会議を利用してみます。

Web会議(ここではjitsi meetを利用)を起動すると、OpenVINOで処理を行った状態でカメラが入力されている事が確認できます。

c270のピントを近接に調整しておきました

OpenVINOで顔認識した領域以外にモザイクを掛け、Web会議で利用するという流れがご確認いただけると思います。

この仕組みを利用すると、例えば、OpenVINOで姿勢推定を行い、腰以下が映り込んだ場合にカメラをオフにするという件も簡単に実装できます。他にもいろいろと応用できそうですね。ぜひご検討ください。