前言
家中監視器裝設多年,每次出遊時擔心遭小偷,總得三不五時連回家中看一下監視器串流。
想到現在影像辨識技術那麼成熟,應該有好心人士釋出免費的監控系統吧?果然找到了 motionEye 這套開源工具,本還想說需要自己訓練 YOLO,看來省事多了 XD
motionEye 非常簡單好用,看網路上教學不多,值得寫一篇來推廣!
條件
- 監視器需要支援 RTSP、RTMP、MJPEG 串流,或是支援 V4L2、MMAL
- RTSP 算是近十多年來的 DVR 主機標配,只是監視器主機支援網路孔,就幾乎肯定有這功能
- 標榜雲端串流的 WiFi 監視器通常也會有這些功能,但需要另外開啟
- 有一台 Linux 主機
- 用來安裝 motionEye、發送通知
- 我自己用 Raspberry Pi 3 (ARM 架構),當然 x86 架構也行
安裝設定
基本設定
- 到 motionEye 的 Dev repo,照著說明安裝即可
- 安裝指令最後一行是啟動 motionEye (
sudo motioneye_init
) - 執行後,瀏覽器打開 http://{your_IP_address}:8765 即可看到登入畫面
- 預設帳號
admin
- 預設帳號
-
進入後,左上角新增監視器
-
RTSP 訊源的話,可以把帳密寫在 URL 上
-
完成後,即可看到串流的影像在畫面上
設定偵測條件
- Frame Change Threshold:建議調到 1% 以下,靈敏度比較高
- Light Switch Detection:可以調高一點,避免些微燈光變化就認為有移動
- Motion Gap:連續幾秒沒有移動,即判定為移動事件結束
- Captured Before:避免漏拍前幾秒,這個可以設一些些
- Mask:設定哪些地方不需要偵測,比如說我家裡有旗子會擺動,不想造成誤判,可以將其塗紅。
偵測到移動後拍照
Capture mode 選擇 Motion Triggered,並且設定一週後刪除照片以節省硬碟空間。
在預覽畫面上,可以開啟圖庫瀏覽截圖:
設定通知
我自己習慣用 Telegram,跟 Bot Father 申請完聊天機器人,用 JSON Dump Bot 問出 Chat ID,填入即可。
成果像這樣:
加上影片通知
首先,讓 motionEye 擷取 mp4 影片:
因為 motionEye 沒有內建傳送影片的功能,因此我用 inotifywait 來監聽 mp4 檔案建立事件,並發送到 Telegram 頻道。
用之前需要安裝一下套件
sudo apt install inotify-tools
腳本如下:
#!/bin/bash
inotifywait -rm /var/lib/motioneye/Camera1 -e create -e moved_to |
while read dir action file; do
if [[ "$file" =~ .*mp4$ ]]; then
sleep 60
echo $dir$file
ls -lh $dir$file
curl -F video=@"$dir$file" https://api.telegram.org/{YOUR_BOT_TOKEN}/sendVideo?chat_id={YOUR_CHAT_ID}
echo
echo
fi
done
執行起來後,就會監控那個資料夾,一發現有新的 mp4 檔案,等 60 秒(等寫入完成,否則容易發送失敗),就發送到 Telegram。效果如下:
將發送影片腳本註冊成 daemon
為了保持影片擷取功能一直執行,可以註冊成 daemon,開機時自動執行、遇到問題時自動重啟。
-
建立文件
/etc/systemd/system/motioneye_telegram_video.service
:[Unit] Description=MotionEye video to Telegram [Service] Type=simple ExecStart=/bin/bash /home/jackkuo/motioneye_telegram_video.sh Restart=on-failure RestartSec=5s StandardOutput=file:/var/log/motioneye_telegram_video.log StandardOutput=append:/var/log/motioneye_telegram_video.log StandardError=append:/var/log/motioneye_telegram_video.log [Install] WantedBy=default.target
-
設定開機自動執行
sudo systemctl enable motioneye_telegram_video
-
啟動該 daemon
sudo service motioneye_telegram_video start
後記
motionEye 滿省資源的,在 Raspberry Pi 3 (2016 購入,瓦數 5W)這種開發版上也能夠順利運行!
comments powered by Disqus