用 Raspberry pi 做一個網路監控系統吧!

之前在 google play 上找到某個 app,可以將舊手機轉為網路監視器, 雖然方便好用,但是監視鏡頭的控制權在別人手上,沒辦法知道有沒有資安問題。另一方面更進階的調控會需要付費。因此研究後打算使用 Raspberry pi 4 + 相機模組 + motioneye 這套 open source 來搭建,我們就來一起看看如何製作吧!

準備硬體元件

這次製作需要準備的材料為:

  1. Raspberry pi 4
  2. Camera module

啟用相機模組

在 Raspbian 下預設相機模組功能是關閉的,必須到 raspi-config 中啟用
Interface Options -> P1 Camera -> Yes (enable)

用 Raspberry pi 做一個網路監控系統吧!
用 Raspberry pi 做一個網路監控系統吧!
用 Raspberry pi 做一個網路監控系統吧!

安裝 Docker

由於使用 docker 的方式架設 motioneye,必須在 Raspbian 中安裝 docker

curl -fsSL get.docker.com | sudo bash

以及安裝 docker-compose,因為 Raspbian 目前還是 32 bit,指令集是 armhf,必須自己從源碼安裝

# install pip3 and python dev
sudo apt install -y python3-pip python3-dev libffi-dev libevent-dev
sudo pip3 install setuptools

# install docker-compose
sudo pip3 install docker-compose

啟動 motioneye

motioneye 其實是另一個開發者將 motion 包上了他設計的前端控制頁面而成,所以骨子裡還是 motion,很多設定參數都是一樣的。同時還有 mobile app 可以安裝(也是叫 motioneye)從手機上遠端遙控很方便!

用以下這份 docker-compose 檔案來起 motioneye

version: '2.3'
services:
  motioneye:
    image:  ccrisan/motioneye:0.42.1-armhf
    container_name: motioneye
    restart: always
    mem_limit: 3G
    logging:
      driver: "json-file"
      options:
        max-size: "1k"
        max-file: "3"
    ports:
     - "8765:8765"
     - "8081:8081"
     - "7999:7999"
    devices:
      - "/dev/video0:/dev/video0"
    networks:
      - motioneye-network
    volumes:
      - ./config:/etc/motioneye
      - ./record:/var/lib/motioneye
      - /etc/localtime:/etc/localtime:ro

networks:
  motioneye-network:
    name: motioneye-network
    driver: bridge

其中參數解釋一下:

port 部分

  1. 8765 是進入 motioneye 所使用的 port
  2. 8081 是監控視訊串流使用的 port
  3. 7999 是 motion api 的 port,可以用此操控他

device 部分

因為需要使用相機硬體,所以必須將  /dev/video0 接入 container 裡。

volume 部分

  1. config 是用來存放設定參數,外置後重啟 container 就不會消失
  2. record 是 motion 錄影後影片檔案存放的路徑

進入 motioneye web 控制頁面

先找到 raspberry pi 的 ip,假設是 192.168.1.11,使用瀏覽器輸入 http://192.168.1.11:8765,就會看到登入畫面,預設帳號是 admin,密碼留空即可。

用 Raspberry pi 做一個網路監控系統吧!

進入後,需要給定相機來源,點選畫面中央提示新增一個。Camera type 選擇 Local V4L2 Camera,Camera 會自動帶入 /dev/video0(截圖時因為已經加入相機,所以才顯示 no cameras)

用 Raspberry pi 做一個網路監控系統吧!

沒問題的話馬上就會看到目前相機拍攝到的畫面,左邊也有相當多的選項可以自行設定

用 Raspberry pi 做一個網路監控系統吧!

設定 Motion Detection

既然是網路監控系統,當然希望他能夠自行偵測畫面變化後啟動錄影!
左邊設定選單往下滑找到 Motion Detection 並開啟,可以自行調整參數玩玩看。

用 Raspberry pi 做一個網路監控系統吧!

主要幾個參數介紹一下:

Motion Gap

這是指每錄完一段影片後,中間的不反應期。比如說一隻狗走入畫面內,motion 偵測到並啟動錄影。接著狗走離開畫面,motion 停止錄影。假設 motion gap 設定為 30 sec,此時停止錄影後的三十秒內,就算狗在畫面裡面跳舞,motion 也不會再次啟動錄影。但其實對我來說兩個事件都應該要錄到,所以我將它設定為一秒。

Captured Before

指錄影時,事件發生起始點前多少格數也要錄製。比如說在下午 1點 30 分 30 秒狗走入畫面,此時 motion 偵測到動靜開始錄影,但因為 Captrued Befored 設定為 30 frames,假設我們是每秒 30 張,最後看到的影片錄製起始點就會是 1點 30分 30 秒 – 1 秒 = 1點 30分 29秒開始。

Captured After

指錄影時,在動態事件結束後,持續錄影多少格數。如同先前,狗如果在  1點 30分 40秒離開畫面,我們設定為 30 frames,他就會錄製到 1點 30分 41秒。

設定 File Storage

記憶卡空間有限,motioneye 提供將影片上傳至雲端的功能(目前裡面有提供 FTP、Google drive、Google photo、Dropbox)。這邊以 Google drive 為例,設定 upload service 為 google drive,Location 為上傳檔案到 google drive 的資料夾名稱,這邊以 motion 為名。接著點擊 obtain key 跳轉估狗登入頁面,使用你的 google 帳號登入後,可以點擊 Test Service 確認是否連結成功。

用 Raspberry pi 做一個網路監控系統吧!

之後如果有錄影,motioneye 就會自動幫你上傳到對應 google drive 路徑,並依照日期分類。

用 Raspberry pi 做一個網路監控系統吧!

設定 檔案存活時間

既然我們都設定讓他自動上傳影片,Rasberry 中的影片就可以讓他自動刪除,避免儲存空間不夠。

找到 Movies 設定欄位,調整 Preserve Movies 的時間,我是改成 For One Day,只要一天後就會自動刪除。這欄位裡面也有一些影片錄製的參數可以自行調整看看!

用 Raspberry pi 做一個網路監控系統吧!

裝機測試

因為只是簡單土炮一個,所以外殼就直接拿紙盒手工挖洞,外加電火布固定,效仿目前智慧裝置使用膠水固定的概念。

實測在室溫 16 度的情況下,裸機被動散熱跑 motioneye CPU 溫度大約在 50 度附近。

用 Raspberry pi 做一個網路監控系統吧!
自行黏上光華買的便宜散熱片,寒流時測試溫度還是來到五十度

裝入土炮機殼後,溫度直接來到 60 度。這要是到夏天完全無法,只好拿出散熱風扇,也是簡單用電火布固定在外部。

此時溫度來到 30 度附近,已經可以長期運作使用了!

一個網路監控系統就完成了!但其實還可以客製化啟動動態偵測時機,傳送事件訊息,以及透過 vpn 保護,這部分在下一篇文章中分享吧!如果覺得我文章內容對你有幫助的話,請在文章後面幫我按 5 個讚!讓我知道大家都喜歡什麼內容哦!

延伸閱讀:
使用 Face Recognition 套件快速建立自己的人臉辨識系統!
如何優化 Face Recognition 套件的人臉辨識?
如何用 LINE Notify 做免費的 bot 訊息推播?

J
Written by J
雖然大學唸的是生物,但持著興趣與熱情自學,畢業後轉戰硬體工程師,與宅宅工程師們一起過著沒日沒夜的生活,做著台灣最薄的 intel 筆電,要與 macbook air 比拼。離開後,憑著一股傻勁與朋友創業,再度轉戰軟體工程師,一手扛起前後端、雙平台 app 開發,過程中雖跌跌撞撞,卻也累計不少經驗。可惜不是那 1% 的成功人士,於是加入其他成功人士的新創公司,專職開發後端。沒想到卻在採前人坑的過程中,拓寬了眼界,得到了深層的領悟。