コロナ禍の状況により、リモートワークが急速に普及しました。様々な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で処理を行った状態でカメラが入力されている事が確認できます。
OpenVINOで顔認識した領域以外にモザイクを掛け、Web会議で利用するという流れがご確認いただけると思います。
この仕組みを利用すると、例えば、OpenVINOで姿勢推定を行い、腰以下が映り込んだ場合にカメラをオフにするという件も簡単に実装できます。他にもいろいろと応用できそうですね。ぜひご検討ください。
フリーのITエンジニア(何でも屋さん)。趣味は渓流釣り、サッカー観戦、インラインホッケー、アイスホッケー、RaspberryPiを使った工作など。AI活用に興味があり試行錯誤中です。