顔認識+サーボモーターで顔追従モニターの作成

2021/7/23 更新 2021/7/23 作成

Tags : ML Jetson OpenCV python

このエントリーをはてなブックマークに追加

先日、NT金沢2021というイベントに、リモートで出展参加した。「リモートで出展参加」というのは、具体的に言うと、展示物としてはオンラインで遊べるものをポスターで出展して、私はGoogleMeet(ビデオ会議)をつないでリモートで一部作品の説明をしていた。(関係機材は現地出展した友人に運んでもらった。)

GoogleMeetをつなぐには、とりあえずPCが現地(NT金沢の会場)にあれば事足りる。ただせっかくなので、モニターが、話している相手の顔を追跡するようにした。

動作の様子

検証時の動画だが、概ね完成形。当日はこのモニターに、GoogleMeetの画面を表示して運用していた。

ハードウェア

使用部品一覧

部品名 備考
JetsonNano開発者キット 顔認識・ビデオ会議・サーボ制御用
Webカメラ×2 1個は顔認識用、1個はビデオ会議用
モニター スピーカーも内蔵
サーボモーター S03T/2BBMG/F×2 強そうなものをチョイス
PCA9685モジュール サーボ制御用

サーボやモニタ等を固定するための部品は3Dプリンターで作成した。

WebカメラはとりあえずAmazonで安いものを適当に買った。1種類目はUSB Wi-Fi子機との相性が良くなかったようで、Wi-Fiの接続が不安定になった。2種類目は特に問題なく動いていそうだったので、採用した。ただ、この記事を書いている時点で、採用したWebカメラのAmazonの商品ページはリンク切れになっていた。

ソフトウェア

ソフトウェアに関する部分としては、JetsonNano起動後にコンソールで顔追従用プログラムを実行した後、ブラウザ(Chromium)でGoogleMeetを動かしていた。GoogleMeetの方は特に書くことがないため、顔追従用プログラムのソースコード及びセットアップ周りを書いていく。

顔追従用プログラムのソース

ソースは以下に置いてある。

顔追従用プログラムのセットアップ周り

上記のソースを動かすには、関係ライブラリをインストールする必要がある。

PCA9685用ライブラリのインストール

サーボ制御モジュールPCA9685をPythonから制御するためのPythonパッケージをインストールする。まず以下のコマンドでpip3をインストールする。

sudo apt-get install python3-pip

参考元: NVIDIA Jetson Nano 開発者キットに TensorFlow をインストールする - Qiita

以下のコマンドでPythonパッケージAdafruit_PCA9685をインストールする。

pip3 install Adafruit_PCA9685 --user

参考元: Jetson nanoとPCA9685でサーボを動かそうとするときのI2Cエラー対処法! - KOKENSHAの技術ブログ

TensorFlowのインストール

今回はマスクを付けている顔も認識するため、以下のモデルを利用した。ライセンスはMIT。

このモデルを利用するためにはTensorFlowをインストールする必要がある。

利用しているJetPack SDKのバージョンがJetPack4.5でかつ、pipインストール済みの場合は以下コマンドを実行。

sudo apt-get update
sudo apt-get install libhdf5-serial-dev hdf5-tools libhdf5-dev zlib1g-dev zip libjpeg8-dev liblapack-dev libblas-dev gfortran
sudo pip3 install -U numpy==1.19.4 future==0.18.2 mock==3.0.5 h5py==2.10.0 keras_preprocessing==1.1.1 keras_applications==1.0.8 gast==0.2.2 futures protobuf pybind11
sudo pip3 install --pre --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v45 tensorflow

参考元: Installing TensorFlow For Jetson Platform :: NVIDIA Deep Learning Frameworks Documentation

pip3 install -U pipするとよくないという記事があったのでそこらへんはやめた。

参考元: Jetson Nanoでディープラーニング - Qiita

運用してみての反省点

安いWebカメラのマイクでは音質がかなり悪く、モニターに付属のスピーカーだと音量が足りなかった。広くて周りに音が出る物がある会場でWeb会議をやるには、マイクスピーカーのようなものを別途用意した方がいいと思った。

アフィリエイト

シェア
このエントリーをはてなブックマークに追加

関連記事一覧

機械学習を使ってApexのプレイ動画から武器使用率を算出する

html要素の背景色が変化するアニメーションをCSSで(無理やり)実装する

ロジスティック回帰を使ってYouTubeタイトルから投稿者を推論する

全国規模の感染シミュレーションと結果の可視化をしてみる

LogisticRegression().fit()のConvergenceWarningを解消する

都道府県間通勤・通学を考慮したパンデミックシミュレーションもどき

感染症数理モデルについて触りの部分だけ学ぶ

カメラ画像から対象物の向きを検出する(OpenCV)