OpenVINOを実際に使用したユースケースを想定し、プログラムを作成しているシリーズ。
前回は顔認識を使用して、自分以外の顔が写り込む、または、退席した時(誰も居なくなった)場合に、ビデオ会議のカメラをオフにするという内容でした。今回も引き続きビデオ会議を取り上げてみます。
きっかけ・ゴール
テレビ会議が一気に普及し、自宅仕事が増えてる状況ですね。暑くなってきましたし、上だけフォーマルな人も増えているのは分かります。自分も今は短パンです。YouTubeで「Luke Ming Flanagan underwear speech」とか「Reporter Caught With No Pants Live on Air」とかで検索すると、ウッカリさんが面白ニュースとしていじられていますね。気持ちは分かりますよ。暑いですもん。
このようなウッカリさんの事故を防ぐためには、「ビデオ会議にはちゃんとした格好で出ましょう」みたいなルールを作るのも良いかもしれませんが、それではつまらないルールが増えていくばかり。失敗学でも言われているように個人に依存せず、システム的に防止する事が必要だなあ。と思っていたら、作っている方がいらっしゃいました。
https://www.hackster.io/nickbild/safe-meeting-b66324
記事を読んでいると、「Safe Meeting prevents embarrassing and unprofessional situations by stopping your video stream if certain attire that’s inappropriate for business is detected.
」だそうです。”ビジネスに相応しくない”というところが気になりますね。いろんなパンツとかどうやって検出しているんでしょう。謎です。セクスウィなパンツや、逆に派手なスーツやドレスもちゃんと判定してくれるのでしょうか。
という訳で、今回のユースケースではもっと単純化して「姿勢推定で腰より下が映ったら、ビデオ会議側のカメラをオフにする」というゴールにしたいと思います。
環境について
本ユースケースの実行環境はWindows10(以降、Win10)です。webカメラは2台使います。1台はビデオ会議用、1台は顔認識用です。今回はc270を使いました。webカメラも価格が高騰しているようですね。Win10で使えればお手元のカメラで問題無いと思います。
Webカメラ2台、キーボード、マウスをWin10に挿すと、ハードにもよりますが、バスパワーが不足する状況になるかもしれません。そこで、セルフパワーのUSBハブの出番です。未だお持ちでない方はぜひ購入ください。USB3.0対応の方が良いですね。(Amazonの手先ではありません)
今回利用したビデオ会議システムはオープンソースのjitsi(https://meet.jit.si)です。jitsiはもっと普及しても良いと思うOSSです。なお、理論上は他のビデオ会議でも本記事は使用可能です。
姿勢推定について
姿勢推定はOpenVINOに含まれている、human_pose_estimation_demo(c++)を流用しました。モデルはhuman-pose-estimation-001となります。まず、OpenVINOのドキュメントを確認しました。
This is a multi-person 2D pose estimation network (based on the OpenPose approach) with tuned MobileNet v1 as a feature extractor. For every person in an image, the network detects a human pose: a body skeleton consisting of keypoints and connections between them. The pose may contain up to 18 keypoints: ears, eyes, nose, neck, shoulders, elbows, wrists, hips, knees, and ankles.
とあります。キーポイントとして18箇所を判定するんですね。腰は何番だろうと思ったら、8番と11番でした。つまり、姿勢推定の結果、8番と11番に値が存在すると、腰が写っちゃっているという事になりますね。
WebカメラのOnOffについて
上記のとおり、姿勢推定の結果、腰が写った場合(8番と11番に値がある)にWebカメラをオフにすると良さそうだ。という事が分かりました。
”カメラをオフ”を手動で行う方法は、[コンピュータの管理]-[デバイスマネージャー]-[イメージングデバイス]から対象のカメラを右クリックして「デバイスを無効にする」という手順になります。これをDevConかPowerShellのどちらかで行います。
DevCon
PowerShell
https://docs.microsoft.com/en-us/powershell/module/pnpdevice/enable-pnpdevice?view=win10-ps
ここで注意なのは、どちらも管理者権限で実行する必要があるという事です。管理者権限で呼び出す方法は以下のページが参考になりそうですが、ここでは面倒だったので時間優先でUACを無効にしてダイアログが出るのを回避しました。正式に物を作る際は綺麗なお作法でお願いします。
https://qiita.com/zetamatta/items/d41552c383605b24a8c2
実行のようす
最後に
前回はRasPi4/Python/顔認証で、今回はWin10/C++/姿勢推定で、ビデオ会議のカメラの制御を実装しました。実現したい事やエンジニアが使える言語に応じて、モデルや言語を変えて貰えば良いと思います。OpenVINOでいろいろ挑戦してみてください。
フリーのITエンジニア(何でも屋さん)。趣味は渓流釣り、サッカー観戦、インラインホッケー、アイスホッケー、RaspberryPiを使った工作など。AI活用に興味があり試行錯誤中です。