プログラミング

Windows 10で「ウェブカメラが動作検知したら警告音を鳴らす」

WSL + contacam + autohotkeyで、Windows 10で”ウェブカメラが動作検知したら警告音を鳴らす”システムを構築してみた。

環境:windows 10 ; WSL

やってること:
contacamで撮影し、動作検知して動画をフォルダAへ保存。
BashでフォルダAの変更を監視し、検知したらAutohotkeyスクリプトを起動
autohotkeyで音声ファイルを起動したりミュート/音量コントロールしたり。

システム構成

フォルダ/ファイル構成

  • “C:\pg\run_bash_automatically\1s_detect_changes_in_a_directory_contacam.sh”
  • “C:\pg\detect_changes\detect_changes_in_a_directory_contacam.sh”
  • “C:\pg\detect_changes\cmd_contacam.sh”
  • C:\pg\detect_changes_meta
  • “C:\pg\autohotkey\sound_warn.ahk”

その他の変数

  • “C:\ContaCam\Logicool HD Pro Webcam C920\2018”:contacamの撮影動画の保存先ディレクトリの親ディレクトリ。使用するウェブカメラによってこのパスは変わる。
  • “C:\google_drive_musics\HIKAKIN.wav”:autohotkeyで起動する音声ファイル。youtubeでも可能。

ソースコード

“C:\pg\run_bash_automatically\1s_detect_changes_in_a_directory_contacam.sh”

while [ 1=0 ]
do
  sleep 1
  echo "running..."
  . "/mnt/c/pg/detect_changes/detect_changes_in_a_directory_contacam.sh"
done

“C:\pg\detect_changes\detect_changes_in_a_directory_contacam.sh”

DIR_TO_CHECK='/mnt/c/ContaCam/Logicool HD Pro Webcam C920/2018'
# PATH_TO_EXCLUDE="/mnt/c/pg/detect_changes/_meta*"

OLD_SUM_FILE='/mnt/c/pg/detect_changes/_meta/old_sum_contacam.txt'

if [ -e $OLD_SUM_FILE ]
then
    OLD_SUM=`cat $OLD_SUM_FILE`
else
    OLD_SUM="nothing"
fi

NEW_SUM=`find "$DIR_TO_CHECK"/* \! -path "$PATH_TO_EXCLUDE"  -print0| xargs -0 du -b --time --exclude=$PATH_TO_EXCLUDE | sort -k4,4 | sha1sum | awk '{print $1}'`

if [ "$OLD_SUM" != "$NEW_SUM" ]
then
    echo "Directory has changed. Do shomething!"

    . /mnt/c/pg/detect_changes/cmd_contacam.sh &

    # update old sum
    echo $NEW_SUM > $OLD_SUM_FILE
fi

“C:\pg\detect_changes\cmd_contacam.sh”

cmd.exe /C "C:\Program Files\AutoHotkey\AutoHotkeyU64.exe" C:/pg/autohotkey/sound_warn.ahk

“C:\pg\autohotkey\sound_warn.ahk”


; TrayTip, sound_warn, sound warning!, 1 sleep, 200 ;ミュートならミュート解除 SoundGet, MuteState, Master, Mute if ErrorLevel { MsgBox, %ErrorLevel% Return } if MuteState=On { MuteState=1 } if MuteState=1 { Send, {Volume_Mute} } SoundGet, master_volume ;音量 SoundSet, 60 ; 曲を指定 ;run, "C:\_musics\flac\EGOIST - GREATEST HITS 2011-2017 “ALTER EGO” [FLAC 96kHz/24bit]\11. 名前のない怪物.flac" ; youtube ; run, "https://www.youtube.com/watch?v=xYVcxsuj0PI" run, "C:\google_drive\_musics\HIKAKIN.wav" ; 1分経過で自動的にミュートにする+音量を戻す sleep, 20000 ; sleep, 6000 SoundSet, master_volume sleep, 200 Send, {Volume_Mute}

使い方

  1. 定数;変数を各自変更。
  2. contacamを起動、動作検知モードを有効化。
  3. bash:. /mnt/c/pg/run_bash_automatically/1s_detect_changes_in_a_directory_contacam.sh

実際にウェブカメラの前で動いてみて、5秒位して音がなったら成功。
5秒待たないと鳴らないのはちょっとアレですが、これはcontacamの動作検知と動画出力速度の問題なので、こちらからはどうしようもできません。

基本的にそれなりの音で鳴らさなければいけないので、スピーカーを常に繋げておくことです。
イヤホンとか開放型ヘッドホンだと、侵入者をビビらせるほどの音量は出しづらいので。

autohotkeyで自動的に音量をもとの音量に戻して、かつ実行後はミュートにしてくれるので、うるさい音量で流しっぱなしになるってことや、忘れた頃に音流して大音量事故ってこともないです。

“自動的にリモートサーバーに撮影動画をアップロード”も合わせれば、侵入者対策は万全です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です