こんにちは。
自宅の猫部屋をYouTubeに垂れながして、食費を自分たちで稼いでもらうと企んでいるstakの上本です。
前回の記事でRaspberryPiでYouTubeLIVEの配信環境を作ったのですが、一つ大きな問題がありました。
それは、私のプライバシーが守られないということです!
LIVEで垂れ流す性質上、どうしても水をあげたりウンチを回収したりするタイミングで私が写り込んでしまいます。
猫のプライバシーは皆無ですが、自分のプライバシーは守りたい。
そんな思いで、今回はドアセンサーを使ってプライバシー保護の仕組みを作っていきます。
仕組み
では、どのようにプライバシー保護をしていくかですが、タイトルにあるように「ドアセンサー」を利用していきたいと思います。
(HotKeyを使用してキーボードで操作する方法が最も簡単だと思いますが、IoT感が無いので却下しました。)
上のわかりやすい図の通り、ドアがしまっている時はカメラON、開くとカメラOFFという感じです。
環境
- RaspberryPi 4 Model B (8GB RAM)
- Ubuntu 22.04 (LTS)
- ドアセンサ
- OBS Studio 27.x
はい。前回の記事をご覧くださった人はお気づきですね。
OSがRaspbianからUbuntuに変わっています。
Raspbianだと、OBSを別アプリから操作するためのプラグインである「obs-websocket」がうまくインストールできず諦めました。
Step1. OBS Studioの準備
インストール
OSが変わったのでOBS Studioをインストールし直します。
sudo apt update && sudo apt upgrade
sudo apt install obs-studio ffmpeg v4l2loopback-dkms qtwayland5
続いて環境変数を追加します。
# ~/.bash_profile に追加
export MESA_GL_VERSION_OVERRIDE=3.3
環境変数の読み込みと、OBS Studioの起動を確認。
source ~/.bash_profile
obs
WebSocketサーバを起動
- [ツール] – [obs-websocket設定] を開く。
- [WebSocketサーバーを有効にする] にチェックを入れる。
- [サーバーパスワード] を設定する。(
password
とします)
Step2. GPIOを制御するpigpioをインストール
Pythonのバージョンに合った、依存ライブラリをインストール。
python3 -V
# > Python 3.10.6
sudo apt install python3.10-distutils
続いてpigpioをビルドインストールします。
cd /tmp
wget https://github.com/joan2937/pigpio/archive/master.zip
unzip master.zip
make
sudo make install
sudo ldconfig
pigpioをサービスとして追加。
/lib/systemd/system/pigpiod.service
を作成し、下記内容で編集します。
[Unit]
Description=Gpio Daemon
[Service]
ExecStart=/usr/local/bin/pigpiod
Type=forking
[Install]
WantedBy=multi-user.target
# 自動起動ON
sudo systemctl enable pigpiod
# 起動
sudo systemctl start pigpiod
# 確認
sudo systemctl status pigpiod
Step3. センサーを接続
センサーのケーブルにコネクタを取り付けます。
IoT初心者の自分には、こちらのサイトがとても参考になりました。
続いて「GPIO21」に差し込みます。
GPIOについては、こちらのサイトが詳しく書かれています。
Step4. プログラムを書く
python-venv のインストール
まずは環境ごとにモジュールを読めるよう python-venv
を入れます。
※ 気にしなければ、飛ばしてOKです。
sudo apt install python3.10-venv
python3 -m venv env
source env/bin/activate
依存ライブラリのインストール
pip3 install pigpio
pip3 install gpiozero
pip3 install obs-websocket-py
プログラム
OBSのWebSocketに接続して、センサーが離れたタイミング、近づいたタイミングでOSBのシーンを切り替えるプログラムです。
# door_sensor.py
from signal import pause
from gpiozero import Button
from gpiozero.pins.pigpio import PiGPIOFactory
from obswebsocket import obsws, requests
PIN_DOOR = 21
OBS_HOST = "localhost"
OBS_PORT = 4444
OBS_PASSWORD = "password"
def main():
ws = obsws(OBS_HOST, OBS_PORT, OBS_PASSWORD)
ws.connect()
factory = PiGPIOFactory()
door = Button(PIN_DOOR, pull_up=True, bounce_time=0.3, pin_factory=factory)
def open_door():
ws.call(requests.SetCurrentScene("InActive"))
def close_door():
ws.call(requests.SetCurrentScene("Active"))
door.when_released = open_door
door.when_pressed = close_door
pause()
return
if __name__ == "__main__":
main()
※ OBS_HOST
, OBS_PORT
, OBS_PASSWORD
はOBS WebSocketの設定に合わせて適宜変更ください。
※ SetCurrentScene("xxx")
の xxx
は、OBSのシーン名に合わせて変更ください。
Step5. 設置
ここまで来たら、後は設置して実行するだけです。
白コードの長さが足りず青コードを使う羽目になり、とりあえず養生テープでとめて、ラズパイを直置きするずさん施工です(汗
実行
実行してみます。
python3 door_sensor.py
ドアが空いている時は
映像が出て
ドアが閉まると、
OBSのシーンが切り替わって「メンテナンス中…」が表示されました!
まとめ
無事、私のプライバシーが守られるようになりました!
ということで、YouTubeに垂れ流しを開始しました。是非チャンネル登録と高評価宜しくお願いします。
今後は、解像度やフレームレート周りの最適化や、表示をリッチにしていきたいですね。
YouTubeチャンネル: ねこまど