ビデオ会議でのwebカメラのオン・オフユースケース(顔認識編)

OpenVINOを実際に使用したユースケースを想定し、プログラムを作成しているシリーズ。今回はビデオ会議を取り上げてみます。

みなさんご存知の通り、新型コロナの影響でビデオ会議の導入・利用が一気に進みました。また、ビジネス利用だけで無く、”宅飲み”など、普段使いのツールとして利用されている方も多いと思います。

ビデオ会議あるあるとして、家族が写り込んだり、離席した場合に部屋を映したく無いという状況があると思います。みなさんどうされていますか?この解決手段を考えてみます。まずはYouTubeの動画をご覧ください。

環境について

本ユースケースの実行環境はRaspberryPi 4(以降、RasPi)です。
  • RaspberryPi 4
  • intel Neural Compute Stick 2
  • Logicool c270 x 2台
  • ELECOM U3H-A408SBK
  • Jitsi(on ubuntu 18.04)
  • モデル:face-detection-retail-0004
  • 言語 :python
  • 宝島社 もっとひょっこりはんをさがせ!
  • RasPiは安くて便利な環境です。私が講師を担当していた小学5、6年生対象のプログラミング・ロボット講座でもRasPiを配布し、みんな楽しく使っていました。(小学生がLinux使う世の中なんて、いい意味で想定外ですよ)

    RasPi4、USBハブ、intel Neural Compute Stick2

    webカメラは2台使います。1台はビデオ会議用、1台は顔認識用です。今回はc270を使いました。webカメラも価格が高騰しているようですね。RasPiで使えればお手元のカメラで問題無いと思います。

    RasPiでOpenVINOを使うには、Intel Neural Compute Stick 2(以降、NCS2) が必須です。Amazonで1万円程度で購入出来ますので、未だお持ちでない方はぜひ購入ください。

    Webカメラ2台とNCS2、キーボード、マウスをRasPiに挿すと、バスパワーが不足するという状況になります。ssh,VNCで接続してもキーボード・マウスだけが回避出来るので心もと無いです。そこで、セルフパワーのUSBハブの出番です。未だお持ちでない方はぜひ購入ください。USB3.0対応の方が良いですね。(Amazonの手先ではありません)

    今回利用したビデオ会議システムはオープンソースのjitsi(https://jitsi.org)です。ubutu server 18.04 上に構築済のローカルjitsiを利用しました。jitsiはもっと普及しても良いと思うOSSです。なお、理論上は他のビデオ会議でも本記事は使用可能です。

    RasPiのモデル利用について

    実際の顔認識用のデモアプリは流用するとして、ここでは実行時に注意する点についてご案内します。以下のようにモデル利用時にエラーが出る場合、まずはモデルを疑ってください。忘れていると1日くらい損します。

    [ INFO ] 2020-06-05 11:14:48,240 Loading models [ INFO ] 2020-06-05 11:14:48,241 Loading the model from '/home/pi/openvino/models/face-detection-retail-0004/FP16/face-detection-retail-0004.xml' face_recognition_demo.py:177: DeprecationWarning: Reading network using constructor is deprecated. Please, use IECore.read_network() method instead model = IENetwork(model_description_path, model_weights_path) Traceback (most recent call last): File "face_recognition_demo.py", line 446, in main() File "face_recognition_demo.py", line 441, in main visualizer = Visualizer(args) File "face_recognition_demo.py", line 240, in __init__ self.frame_processor = FrameProcessor(args) File "face_recognition_demo.py", line 131, in __init__ face_detector_net = self.load_model(args.m_fd) File "face_recognition_demo.py", line 177, in load_model model = IENetwork(model_description_path, model_weights_path) File "ie_api.pyx", line 1099, in openvino.inference_engine.ie_api.IENetwork.__cinit__ RuntimeError: fc7_mbox_priorbox/naked_not_unsqueezed has zero dimension that is not allowable

    このようなエラーが出る場合は、2019R3のモデルをダウンロードして使ってみてください。(他のエラーパターンもあるので基本的には2019R3で良いかもしれません) https://download.01.org/opencv/2019/open_model_zoo/R3/20190905_163000_models_bin/

    なお、本ユースケースでは、face-detection-retail-0004を利用しました。

    WebカメラのOnOffについて

    基本的に、顔認識用カメラ側でnot(自分の顔認識がされた)場合に、web会議側のカメラをオフにする動作となります。以下のページが参考になりました。ありがとうございます。

    https://www.raspberrypi.org/forums/viewtopic.php?t=242059

    https://artfinex.co.jp/wp/wp-content/uploads/2019/03/afx_RaspberryPiRaspbianUSB_Reset_UHF.pdf

    最後に

    ビデオ会議ではいろんな事故がありますが、割と下半身をぽんぽんすーにしている人も多いのがびっくりです。今後は、下半身を検出してカメラをオフにする仕組みを作りたいと思います。