OpenVINOを実際に使用したユースケースを想定し、プログラムを作成しているシリーズ。今回はビデオ会議を取り上げてみます。
みなさんご存知の通り、新型コロナの影響でビデオ会議の導入・利用が一気に進みました。また、ビジネス利用だけで無く、”宅飲み”など、普段使いのツールとして利用されている方も多いと思います。
ビデオ会議あるあるとして、家族が写り込んだり、離席した場合に部屋を映したく無いという状況があると思います。みなさんどうされていますか?この解決手段を考えてみます。まずはYouTubeの動画をご覧ください。
環境について
本ユースケースの実行環境はRaspberryPi 4(以降、RasPi)です。RasPiは安くて便利な環境です。私が講師を担当していた小学5、6年生対象のプログラミング・ロボット講座でもRasPiを配布し、みんな楽しく使っていました。(小学生がLinux使う世の中なんて、いい意味で想定外ですよ)
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
最後に
ビデオ会議ではいろんな事故がありますが、割と下半身をぽんぽんすーにしている人も多いのがびっくりです。今後は、下半身を検出してカメラをオフにする仕組みを作りたいと思います。
フリーのITエンジニア(何でも屋さん)。趣味は渓流釣り、サッカー観戦、インラインホッケー、アイスホッケー、RaspberryPiを使った工作など。AI活用に興味があり試行錯誤中です。