Zoom用Face Trackingカメラ! – 機能とセットアップ編 –

9月 23, 2020

はじめに

2020年, COVID-19の影響でZoomでのリモート会議が増えてきました. 「カメラにいい位置で映らねば」という強迫観念から、ずっと同じ姿勢で固まったままになりがちです. そこで身体を動かして顔の位置が変わってもカメラが顔を追いかけてくれるようなシステムを作ってみました.
ぜひお試しを!

複数記事に分けて解説しています.

Zoom用顔追従カメラ! – 機能とセットアップ編 –
Zoom用顔追従カメラ! – 作成編 –
Zoom用顔追従カメラ! – 検証編 –

顔追従カメラとは?

姿勢を崩して, 顔がカメラから外れようとする際, 動く顔にカメラが追従することで, 常に顔がカメラの枠内に収まるようにするシステムです. AIによる顔認識で顔の中心座標を取得し, その点がカメラの中心座標からずれると, モーターが動いてそのずれをなくす仕組みです.

システム定義

顔認識兼Zoom用のPC, Zoomに使うWEBカメラ, WEBカメラを動かすためのモーター, Wifi通信で顔認識結果をPCから受け取りモーターを制御するRaspberry Piから構成されています.

実装した機能

  • 顔認識をして, 顔を追従する
  • 顔がカメラの撮影範囲外にいるときは, 定期的にカメラを動かして, 顔の探索をする(モーターの可動域内).

準備したもの

Raspberry Pi関連

3D Printer関連

駆動部

カメラ

セットアップ

顔認識兼Zoom用のPC

Zoomのようなリモート会議用のソフトウェアを普段使っているPCを使用しました. このPCの性能が顔認識のFPSに効いてきます.
以下そのスペック

OS : Ubuntu 18.04 LTS
GPU : GeForce RTX 2080 Ti

Zoom

UbuntuでZoomをインストールする際は以下を参考にしました.

face recognition

今回顔認識に用いるdlibベースで作成されたFace recognitionをインストールします.
公式で推奨されているUbuntuでのインストール方法を以下に示します.

# How to install dlib v19.9 in Ubuntu

sudo apt-get -y update
sudo apt-get install -y --fix-missing
sudo apt-get install build-essential cmake gfortran git wget curl 
sudo apt-get install graphicsmagick libgraphicsmagick1-dev libatlas-base-dev
sudo apt-get install libavcodec-dev libavformat-dev libgtk2.0-dev libjpeg-dev
sudo apt-get install liblapack-dev libswscale-dev pkg-config python3-dev 
sudo apt-get install python3-numpy software-properties-common zip
git clone -b 'v19.9' --single-branch https://github.com/davisking/dlib.git
cd  dlib
python3 setup.py install --yes USE_AVX_INSTRUCTIONS

# 検証 import dlibでエラーが出なければインストール成功です
python
import dlib

# Install face_recognition
pip install face_recognition

# 検証 オバマ大統領を認識できればインストール成功です
git clone https://github.com/ageitgey/face_recognition.git
cd examples
python recognize_faces_in_pictures.py

v4l2loopback

今回のシステムは1つのWEBカメラで撮影した映像を2つのソフトウェア, Zoomと顔認識, で使います. 両方のソフトウェアでWEBカメラ映像を使うと「他アプリケーションにてカメラを使用中です.」とエラーが出てしまいます. そこで今回は「仮想カメラデバイス」というものを使用することにします. WEBカメラで撮影した映像を取得後, 作成した仮想カメラデバイスにその取得した映像を入力します. Zoomではカメラとして, その仮想カメラデバイスを選択することでエラーを回避することができます. その仮想カメラデバイスを作成することができるv4l2loopbackをインストールします.

# WEBカメラをPCに接続した際のWEBカメラのデバイス番号を取得 /dev/video0や/dev/video1と出力されます.
ls /dev/video*
/dev/video0 /dev/video1

# v4l2loopbackのインストール
git clone https://github.com/umlaeute/v4l2loopback.git
cd v4l2loopback
make
sudo make install
sudo depmod -a

# v4l2loopbackの起動
sudo modprobe v4l2loopback

# 検証 先ほどは出なかった/dev/video*が出力されれば成功です.
ls /dev/video*
/dev/video0 /dev/video1 /dev/video2

FFmpeg

WEBカメラで撮影した映像を取得後, 作成した仮想カメラデバイスにその取得した映像を入力するときに用います.

sudo apt-get install ffmpeg

Raspberry Pi

pigpio

Raspberry PiのGPIOにアクセスするためのライブラリです. サーボモータ制御に用いています.

# モジュールのインストール
pip3 install pigpio

# pigpioの起動
sudo pigpiod

参考

3Dプリンタ

以下のサイトを参考にセットアップしました.
流れとしては3Dプリンタ本体の組み立て⇒台の高さ調整⇒設計図作成⇒設計図データをプリントできるファイル形式に変換(stl⇒gcode)⇒3Dプリンタでプリントとなります.

3Dプリンタ本体のセットアップ
[ANYCUBIC MEGA-S]セットアップつまずきポイントまとめ[3万円3Dプリンター]

3Dプリンタの設計図作成ソフト
https://www.autodesk.co.jp/products/fusion-360/overview

STL⇒GCODE変換ソフト
https://ultimaker.com/ja/software/ultimaker-cura

セットアップが完了したら, 次は実際に作成していきましょう.

複数記事に分けて解説しています.

Zoom用顔追従カメラ! – 機能とセットアップ編 – 今ここ
Zoom用顔追従カメラ! – 作成編 –
Zoom用顔追従カメラ! – 検証編 –