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}
使い方
- 定数;変数を各自変更。
- contacamを起動、動作検知モードを有効化。
- bash:. /mnt/c/pg/run_bash_automatically/1s_detect_changes_in_a_directory_contacam.sh
実際にウェブカメラの前で動いてみて、5秒位して音がなったら成功。
5秒待たないと鳴らないのはちょっとアレですが、これはcontacamの動作検知と動画出力速度の問題なので、こちらからはどうしようもできません。
基本的にそれなりの音で鳴らさなければいけないので、スピーカーを常に繋げておくことです。
イヤホンとか開放型ヘッドホンだと、侵入者をビビらせるほどの音量は出しづらいので。
autohotkeyで自動的に音量をもとの音量に戻して、かつ実行後はミュートにしてくれるので、うるさい音量で流しっぱなしになるってことや、忘れた頃に音流して大音量事故ってこともないです。
“自動的にリモートサーバーに撮影動画をアップロード”も合わせれば、侵入者対策は万全です。