Raspberry pi + Webcam + MJPEG2的 Webcam Server


1.        準備編譯環境與Library
a.    $sudo apt-get update
b.    $sudo apt-get install subversion
c.    $sudo apt-get install libjpeg8-dev
d.    $sudo apt-get install imagemagick

2.        下載 mjoeg-streamer source 並執行編譯
a.    $svn co https://svn.code.sf.net/p/mjpg-streamer/code/mjpg-streamer/ mjpg-streamer
b.    $sudo make
è如果編譯成功,目錄中應該會多出類似:mjpg_streamer, input_uvc.so, output_http.so ......,其中的mjpg_streamer是主程式,而那些input_xxxx.so output_xxxx.so 則是輸出、輸入的plugins。有了這些檔案,我們就可以將 Webcam 接上 Raspberry PI USB 插槽中來測試了。

3.        測試編譯結果
a.    輸入以下指令
$./mjpg_streamer -i "./input_uvc.so" -o "./output_http.so -w ./www"

如果出現以下訊息
MJPG Streamer Version: svn rev: 3:172
 i: Using V4L2 device.: /dev/video0
 i: Desired Resolution: 640 x 480
 i: Frames Per Second.: 5
 i: Format............: MJPEG
Unable to set format: 1196444237 res: 640x480
 Init v4L2 failed !! exit fatal
 i: init_VideoIn failed

如果有類似「Unable to set format: 1196444237 res: 640x480」這行的訊息,表示 Webcam 並不支援輸出 MJPEG 的格式,那就在指令裡加個「-y」的參數,讓它改用 YUYV 的格式。
b.    指令變更成:
$./mjpg_streamer -i "./input_uvc.so -y" -o "./output_http.so -w ./www"

如果 stream server 正常啟動的話,應該會在最後面看到底下的訊息:
 o: www-folder-path...: ./www/
 o: HTTP TCP port.....: 8080
 o: username:password.: disabled
 o: commands..........: enabled
如果正確啟動(終端機不要關掉),然後透過以下步驟驗證。

4.        透過Http server遠端觀看Webcam stream
a.    Webcam 抓到的影像可以利用由 MJPG-streamer output_http.so plugin 所提供的 HTTP server ,用網頁瀏覽器來當 client,以網址觀看 Demo 的網站。假設 Raspberry PI IP 192.168.0.105,輸入
http://192.168.0.105:8080
b.    在這個 MJPG-streamer Demo Pages中,我們可以看到它示範靜態影像的顯示、streamJavaJavscript ...... 的語法,可以依需求選用。
c.    輸出結果如下,這樣表示mjpg-streamer可以順利流暢的運行,先別把它ctrl+c結束掉。在開另外一個連線進入motion結合的部分


5.        motion進行背景監控
a.    安裝 motion
$sudo apt-get install motion
b.    編輯motion的配置檔,來啟動執行以下動作
$sudo vi /etc/motion/motion.conf
Ø         啟動常駐(daemon)服務
    Daemon = OFF to ON
Ø         讓非local端的連線能夠進入,
    webcam_localhost = ON to OFF
Ø         設定Webcam URL,取代MJPEG-Streamer Port:8080的設定
   
netcam_url http://localhost:8080/?action=stream
Ø         8080 port(motion預設管理攝影機的頁面)給換掉,這樣才不會跟上面mjpg-streamerport衝到(也可以改mjpg-streamer啦,看心情決定)
   
control_port = 8080 to 8085 (看你要改成8085之類的都可以~,不要重複就好)

6.        motion常駐服務給開啟
a.        變更vi /etc/default/motion
    start_motion_daemon = no to yes
b.        啟動 motion
    sudo service motion start

7.        最後到瀏覽器去看 Port 8081 Streamer.
a.        http://192.168.0.105:8081/
b.        之所以是Port 8081
是因為 /etc/motion/motion.conf 中預設 webcam_port 8081的緣故。

[補充]
1.        SVN: 是一個開放原始碼的版本控制系統
2.        jpeg library:
3.        ImageMagicK: 是一個強大的圖像處理工具包。它提供了幾個非常方便的命令行命令: display, animate,import, montage,mogrify,identify等,可以進行圖像的顯示,縮放,旋轉,調色,加框,加註釋等,還能製作GIF動畫,圖像索引,能自動生成圖像.
4.        MJPEG-Streamer: 可以將 WebcamJPEG影像以單張單張儲存或是多張組合成以Motion JPEG Video (MJPG) 編碼的 Stream ,另外如你的 Camera 有支援HD可以輸入用以下指令。
以羅技C310最高可以支援到1280*960 @ 30fps,指令如下:
    $./mjpg_streamer -i "./input_uvc.so -f 30 -r 1280x960" -o "./output_http.so -w ./www"
5.        MJPEG-Stream 參數說明,
a.        input_uvc.so帶的參數有以下幾種:
Ø         -d => 手動指定要取得哪個裝置的訊號(例如/dev/video0,預設不指定就是這個)
Ø         -r => 解析度,可以用以下字串直接帶入QSIF QCIF CGA QVGA CIF VGA SVGA XGA SXGA。或者你也可以手動輸入。例如1920*1080
Ø         -f => fps,不用解釋了吧
Ø         -y => 有些cam止吐YUYV格式,不支援mjpg的格式,如果你在開起攝影機有些狀況,可以試試看下一下這個參數
Ø         -q => 手動指定YUYV格式的JPEG品質,預設是80,如果你的裝置是支援mjpg,但還手動去指定他可能會被換成YUYV格式輸出,這時候畫面可能會變得極度Delay..(畫質也不會比mjpg…)
Ø         -l => 手動指定camled是否要亮(有些不一定會有用),後面可以接on或者off或者blink,沒指定則為auto
b.        output_http.so帶的參數有:
Ø         -w => 後面接要開串流網頁的畫面(預設是放官方demo畫面)
Ø         -p => 要開到幾port,預設8080
Ø         -c => 看要不要啟動帳號管理功能,如果要,則後頭接 username:password(例如 –c jack:12345)
Ø         -n => 關閉可以執行的命令(例如設定攝影機曝光值等等)
6.         


留言