樹莓派 Raspberry Pi 與 USB 網路攝影機,自製縮時攝影設備教學

這裡介紹如何使用樹莓派與 USB 的網路攝影機,拍攝縮時攝影,放在車上就可以作為旅遊的路程紀錄。

樹莓派是一張平價、但非常多功能的開發板,可以組合出各種的應用,例如加上一個簡單的 USB 網路攝影機,就可以做出縮時攝影的效果,由於它是使用 USB 供電,所以也可以非常方便的安裝在汽車上面,當作旅行的記錄器。

旅行縮時攝影

這個影片就是我用一張樹莓派 Raspberry Pi Model B+ 開發板與一個羅技 Logitech C920R HD PRO 網路攝影機所拍攝出來的旅行縮時攝影。

影片剛開始的前幾秒鐘,我還在調整攝影機的角度,裝好之後就開始上路實測了,這段路程只是簡單的一段台南到新營的道路,所以沒有什麼新鮮感,我是打算先打造好這個旅行縮時攝影工具,日後到各地景點旅遊的時候,就可以用這個紀錄沿途的風景了,以下是使用樹莓派打造旅行縮時攝影機的詳細教學。

基本概念

用樹莓派打造縮時攝影機的觀念很簡單,就是讓樹莓派可以控制 USB 網路攝影機,讓它可以每隔一段固定的時間就自動拍攝一張照片(例如每秒拍攝一張),最後再將這些照片串起來製作成影片,就是所謂的縮時攝影了。

使用樹莓派打造旅行縮時攝影機,需要的硬體設備主要有以下幾項:

樹莓派(含 MicroSD 記憶卡、無線網路卡)
不管是哪一代的樹莓派都可以,新一點的樹莓派其 CPU 比較快,可以拍攝比較精細的照片或影片,但是可能要擔心散熱問題,舊的樹莓派 CPU 較慢,既省電、又不會很熱,沒辦法做比較複雜的動作,但我覺得堪用,這裡我示範用的就是第一代的樹莓派 Raspberry Pi Model B+
USB 網路攝影機
只要是樹莓派支援的 USB 網路攝影機都可以,我是使用羅技 Logitech C920R HD PRO 網路攝影機做示範。
車用 USB 充電器
一般平板電腦用的 2A 車用 USB 充電器,用於樹莓派的供電。

在軟體安裝與設定方面,主要可分為三大項:

motion
motion 是用來操作網路攝影機,進行照相、錄影與偵測變動部位的工具,我們這裡是使用它的縮時攝影功能。
hostapd
hostapd 是用來提供無線網路 AP 的 daemon 服務。
udhcpd
udhcpd 是一般的 DHCP 伺服器,負責分配 IP 位址給連線進來的無線網路設備(通常是手機)。

motion 是縮時攝影最關鍵的工具,只要有硬體設備與 motion 就可以進行縮時攝影了,但由於我們會將樹莓派安裝在汽車上,在車上若要裝鍵盤、滑鼠或螢幕通常不太可能,就算真的裝上去也很不方便,透過手機連線的方式會是比較可行的方案。

hostapdudhcpd 就是用來建立無線網路熱點用的,讓手機可以直接連線至樹莓派,進行各種操作。

以下我們就要介紹如何使用這些軟硬體自製縮時攝影機。

安裝 motion

在樹莓派上使用 apt 安裝 motion

sudo apt-get install motion

修改 /etc/motion/motion.conf 設定檔,以下是縮時攝影的基本設定方式:

# 照片解析度
width 1280
height 720

# 關閉輸出變動照片
output_pictures off

# jpeg 品質
quality 90

# 關閉輸出影片
ffmpeg_output_movies off

# 定時拍照,每秒一張
snapshot_interval 1

# 設定右下方文字
text_right "G.T.Wang"

# 設定輸出圖檔檔名格式
snapshot_filename %Y%m%d%H%M%S-snapshot

# 開啟串流與網頁管理功能
stream_localhost off
webcontrol_localhost off

照片解析度的部分需要依據自己的網路攝影機與樹莓派的規格來調整,通常我們都會希望解析度越高越好,調整的技巧是一開始先調成網路攝影機支援的最大的解析度,然後進行測試,看看是否能正常運作,如果跑不動的話(例如拍攝的過程會漏掉部分的照片,或是樹莓派的負載太重等),再慢慢下修解析度,找出最佳的設定。

motion 可以自動將畫面上有變動的部分儲存下來,這個功能在縮時攝影時不需要,所以把 output_pictures 關閉。

縮時攝影通常比較注重照片的品質,所以對於高規格的網路攝影機,記得將 quality 調高一些。

ffmpeg_output_movies 是可以讓 motion 即時輸出影片檔,但我們我們這裡是在事後使用 ffmpeg 指令的方式自行製作影片,所以不需要這個功能。

snapshot_interval 是拍照間隔,單位為秒,設定為 1 代表每秒拍攝一張照片。

text_right 是設定右下方的文字,這個預設應該是時間戳記,但是因為樹莓派本身沒有時間的資訊,所以我把它改為一般的文字。

stream_localhostwebcontrol_localhost 兩個參數是設定串流與網頁管理功能是否只有 localhost 能使用,由於我們需要透過 WiFi 存取,所以要設成 off

在設定完 motion 的設定檔之後,插上 USB 網路攝影機,重新啟動 motion 服務:

service motion restart

另外順便確認一下 motion 服務開機會自動啟動:

update-rc.d motion enable

這個很重要,因為等到我們把樹莓派裝上車之後,沒有鍵盤、滑鼠與螢幕可用,如果他沒有自動啟動就麻煩了。

另外如果您在啟動 motion 服務時,出現類似這樣的錯誤訊息,就代表目錄的權限有些問題:

Nov 21 00:23:23 raspberrypi motion: [1] [ERR] [ALL] myfopen: Error opening file /var/lib/motion/01-20161121002323-snapshot.jpg with mode w:
Nov 21 00:23:23 raspberrypi motion: [1] [ERR] [ALL] put_picture: Can't write picture to file /var/lib/motion/01-20161121002323-snapshot.jpg - check access rights to target directory#012Thread is going to finish due to this fatal error:
Nov 21 00:23:23 raspberrypi motion: [1] [ERR] [EVT] event_image_snapshot: Could not create symbolic link [01-20161121002323-snapshot.jpg]:

請手動更改一下 /var/lib/motion 目錄的權限,讓 motion 有權限可以寫入這個目錄:

sudo chown motion:motion /var/lib/motion

正常來說,現在應該就可以在 /var/lib/motion 這個目錄中看到一些從網路攝影機擷取的照片了。

樹莓派設定 WiFi 熱點

使用 apt 安裝 hostapdudhcpd

sudo apt-get install hostapd udhcpd

編輯 /etc/udhcpd.conf

# The start and end of the IP lease block
start   192.168.50.20   #default: 192.168.0.20
end     192.168.50.254  #default: 192.168.0.254

# The interface that udhcpd will use
interface   wlan0       #default: eth0

option  subnet  255.255.255.0

編輯 /etc/default/udhcpd 設定檔,啟用 udhcpd 服務:

# Comment the following line to enable
#DHCPD_ENABLED="no"

編輯 /etc/network/interfaces,設定 wlan0 無線網路,自訂一個虛擬的 IP 位址與網域:

auto wlan0
iface wlan0 inet static
  address 192.168.50.1
  netmask 255.255.255.0

建立 /etc/hostapd/hostapd.conf 設定檔,內容如下:

interface=wlan0
ssid=GTWang
hw_mode=g
channel=6
auth_algs=1
wmm_enabled=0

其中的 ssid 是無線網路的識別名稱,這個名字可以自己取。

若是第三代的樹莓派,還要加上這幾行:

ieee80211n=1          # 802.11n support
wmm_enabled=1         # QoS support
ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40]

因為這個無線網路 AP 只是提供給手機連線至樹莓派使用的,沒有任何上網功能,所以我就不設任何密碼了。如果想要設定密碼,可以使用這個設定:

interface=wlan0
driver=nl80211
ssid=GTWang
hw_mode=g
channel=6
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=My_Passphrase
wpa_key_mgmt=WPA-PSK
#wpa_pairwise=TKIP  # 低安全性加密,適用於舊設備
rsn_pairwise=CCMP

編輯 /etc/default/hostapd 設定檔,指定 hostapd 的設定檔位置:

DAEMON_CONF="/etc/hostapd/hostapd.conf"

重新啟動 hostapdudhcpd 服務:

sudo service hostapd start
sudo service udhcpd start

並確認這兩個服務也都會在開機時自動啟動:

sudo update-rc.d hostapd enable
sudo update-rc.d udhcpd enable

關於樹莓派的 AP 設定,也可以參考樹莓派 Raspberry Pi 設定無線網路 WiFi AP 這篇文章。

樹莓派系統校調

最後可以觀察一下樹莓派的運行狀況,如果記憶體不足的話,可以將幾個沒有用到的服務關閉,例如 DHCP 的 client 與 ntp 校時服務在沒有對外網路的環境通常是用不到的:

sudo update-rc.d dhcpcd disable
sudo update-rc.d ntp disable

而藍芽通常也很少用,若使用 Raspberry Pi 3 的話也可以關掉:

sudo update-rc.d bluetooth disable

X Window 桌面也是非常耗費記憶體空間的,可以使用 raspi-config 這個設定工具將開機模式設定為文字模式:

sudo raspi-config

Boot Options 中設定開機進入 Console 模式,順便將 Splash Screen關閉,這樣可加快開機速度。

在沒有用到 X Window 的情況下,可將 GPU 的記憶體配置調降一些,這樣可以讓系統有更多記憶體可以使用,這部分一樣是在 raspi-config 的選單中做調整,在 Advanced Options 中選擇 Memory Split,設定 GPU 的記憶體為 16 MB。

必要時也可以考慮調整一下樹莓派的 swap 記憶體交換空間,不過以我的例子來說是不需要。

準備好所有的軟硬體與設定之後,接下來就是最重要的裝機實測了,請繼續閱讀下一頁。

樹莓派, 物聯網

14 留言

  1. elephant

    請問若是要放在家中當監視器可以從手機即時觀看
    是不是可以設定樹莓派連上家中wifi
    就不用設定一個虛擬IP
    手機在進入那組IP就可以觀看?

    • G. T. Wang

      若在家中讓手機與樹莓派都連上同一個無線 AP,
      就不需要自己建立 AP,
      直接使用家裡無線 AP 的 DHCP 配發的 IP 位址即可使用。
      建議您先研究基本的網路知識再來實作。

  2. Jimmy

    你好,請問如果是放在家中當監示器,但在公司要用手機觀看,有哪些方式可以達到呢??是不是一定要架個server??MQTT可以嗎?

    • G. T. Wang

      是一定要有 server,架設方式有很多種,但是一言難盡。

      MQTT 只是簡單的訊息傳輸協定,在這裡用不到。

      • Jimmy

        1. 謝謝回覆,我查到這個網頁可以設定從外部網路連回來,好像不用架server,還是我對server的理解錯誤?以為架server就是要另一台PC去架設,或是用網路免費的server。
        https://pimylifeup.com/raspberry-pi-security-camera/
        2. 若我想從公司經由樹莓派控制家裡的電器,可以用MQTT的軟體嗎?還是MQTT的軟體只適合區域網路嗎?

        • G. T. Wang

          1. 這裡的 server 可以使用各種設備架設,不一定要是 PC,通常網路上最常見的實作是使用樹莓派本身作為 server,您提供的連結就是一例。
          2. 從公司經由樹莓派控制家裡的電器,用 MQTT 很適合,它跟網路環境沒有直接關係,只不過要把路由相關的問題處理好,讓外部的連線可以進的來。(不過如果只是非常簡單的開關控制,用 MQTT 是殺雞用牛刀)

          • Jimmy

            1. 我看你另一篇”樹莓派架設 RTMP 串流(Streaming)伺服器,傳送即時攝影機影像”,可以知道Nginx是server。但我反覆再看我貼的那個網頁,仍不清楚哪個地方是在安裝server,還是motion就有server的功能??
            2. https://pimylifeup.com/raspberry-pi-webcam-server/
            這篇是同網站的另一篇教學,他是設定路由器就可以由外部網路連線,你這篇是不是也可以經由設定路由器讓外部網路連線??
            3. 如果只是非常簡單的開關控制,用 MQTT 是殺雞用牛刀,有建議的殺雞刀嗎??
            不好意思…不太懂…所以問題有點多

          • G. T. Wang

            1. motion 本身就有 server 的功能。
            2. 是。
            3. 沒有建議的,通常選自己喜歡的。

            我想您應該先從基本的觀念學起,這樣問應該是很難弄懂的。

  3. Jimmy

    再請問一下,如果要從公司連到家裡的樹莓派,家裡的網路是不是要有固定IP?如果家裡的網路是用4G訊號來分享的是不是就沒有固定IP?

    • G. T. Wang

      固定 IP 是最方便,浮動 IP 可配合 DDNS,若是虛擬 IP 可能就只能用 ssh tunnel 之類的方式了。

      4G 通常是沒有實體 IP 的吧?

  4. Petere

    這邊樹莓派要做熱點使用應該還需要一張網卡吧?

  5. Petere

    沒事我沒看到第一頁

  6. xin

    如果我想將樹梅派利用自己寫的python程式opencv顯示攝影機畫面時,可以透過手機或是電腦觀看影像,請問要如何辦到

  7. Dylan

    您好請問一下,使用樹梅派時 Logitech C920R 會自動對焦嗎?
    因為最近在使用樹梅派與 Logitech 可自動對焦的WebCam,卻發現無法自動對焦有點困擾。

Comments are Closed