星期四, 12月 14, 2017

Raspberry Pi 筆記(四十五):安裝R語言及互動介面的 Shiny Server

[2017/12/14]
只要有學過統計的人,對於R語言並不陌生。R語言,一種自由軟體程式語言與操作環境,主要用於統計分析、繪圖、資料探勘。R本來是由來自紐西蘭奧克蘭大學的羅斯·伊哈卡和羅伯特·傑特曼開發(也因此稱為R),現在由「R開發核心團隊」負責開發。R基於S語言的一個GNU計劃專案,所以也可以當作S語言的一種實現,通常用S語言編寫的代碼都可以不作修改的在R環境下執行。[維基百科]




Shiny Server是一個快速可將 R 統計結果,呈現在網頁上的伺服主機程式。Shiny是 Rstudio 這家公司開發的產品,自2012年推出後,廣受大家好評與喜愛,讓不懂網頁程式的 R語言使用者,可以輕鬆的部署互動式的統計資料在網頁上。



[R語言安裝程序]

編輯套件更新的來源 URL,編輯 /etc/apt/sources.list
$ sudo nano /etc/apt/sources.list

將以下這行加到 sources.list 最後一行:
deb http://archive.raspbian.org/raspbian/ stretch main

執行更新及安裝 R語言
$ sudo apt-get update
$ sudo apt-get install r-base r-base-core r-base-dev

到這裡,R語言已經安裝完成,可輸入 R 啟動程式,q() 退出程式。
$ R

[安裝 Shiny-Server]

安裝 Shiny 前需要先安裝以下套件:
•  python 2.6 or 2.7 (3.x 目前尚不支援)
•  cmake (需 2.8.10之後版本),如要安裝 cmake 套件的話,可執行以下指令進行安裝:
$ sudo apt-get install cmake

•  gcc (需 4.8或更新版本)
•  g++ ( 需 4.8或更新版本)
•  git
•  R-base-devel (請參考前面安裝方法)


(1) 安裝 R 的 Shiny套件
$ sudo su - -c "R -e \"install.packages('shiny', repos='http://cran.rstudio.com/')\"" 

(2) 從 GitHub 下載程式
$ git clone https://github.com/rstudio/shiny-server.git

(3) 建立一個暫存的目錄 Get into a temporary directory in which we'll build the project
$ cd shiny-server
$ mkdir tmp
$ cd tmp

(4) 增加 bin 目錄到路徑中
$ DIR=`pwd`
$ PATH=$DIR/../bin:$PATH

(5) 用以下指令檢查 Python 版本是否為 2.6.x 或 2.7.x
$ PYTHON=`which python`
$ $PYTHON --version

(6) 使用 cmake 作為 make 的前置設定,如果要將程式安裝在不同路徑下,可修改"--DCMAKE_INSTALL_PREFIX" 參數
$ cmake -DCMAKE_INSTALL_PREFIX=/usr/local -DPYTHON="$PYTHON" ../

(7) 假使這裡有錯誤,檢查一下 python 版本是否正確?編譯時間會花比較多時間,大約要將近一個多小時,要稍微耐心等候。
$ make
$ mkdir ../build
$ (cd .. && ./bin/npm --python="$PYTHON" install)
$ (cd .. && ./bin/node ./ext/node/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js --python="$PYTHON" rebuild)

(8) 安裝軟體到預設位置
$ sudo make install

(9) 建立 shiny-server 執行檔捷徑,放置於 /usr/bin
$ sudo ln -s /usr/local/shiny-server/bin/shiny-server /usr/bin/shiny-server

(10)建立 shiny 使用者
$ sudo useradd -r -m shiny

(11) 建立日誌、設定及應用程式目錄
$ sudo mkdir -p /var/log/shiny-server
$ sudo mkdir -p /srv/shiny-server
$ sudo mkdir -p /var/lib/shiny-server
$ sudo chown shiny /var/log/shiny-server
$ sudo mkdir -p /etc/shiny-server

(12) 下載預設的設定檔
Shiny Server 安裝完成後,是沒有設定檔的,設定檔名為 shiny-server.conf,存放在 /etc/shiny-server/ 目錄下,假使沒有這個檔案,就會使用預設值當作設定。可以到以下網站下載預設的設定檔:
$ cd /etc/shiny-server/
$ sudo wget http://withr.me/misc/shiny-server.conf

(13) 執行程式
$ sudo shiny-server


(14) 使用瀏覽器進行連線,我的 Pi IP為192.168.1.103,連線方式要帶 Port 號:3838

http://192.168.1.103:3838

(15) 建立 server.R 及 ui.R 程式
瀏覽器看到的是空白對嗎?主要是因為安裝完成後,Shiny Server沒有網頁程式可呈現,需自行將放置在 /srv/shiny-server 目錄內,先建立一個目錄,再將 server.R 及 ui.R兩程式放在目錄內。


• 方法一:自行建立 server.R 及 ui.R,以 hello為範例
$ cd /srv/shiny-server
$ mkdir hello_shiny
$ cd hello_shiny

分別建立 server.R 及 ui.R,我參考官方教學說明,列出程式範例:

server.R
library(shiny)
# Define server logic required to draw a histogram
shinyServer(function(input, output) {

  # Expression that generates a histogram. The expression is
  # wrapped in a call to renderPlot to indicate that:
  #
  #  1) It is "reactive" and therefore should re-execute automatically
  #     when inputs change
  #  2) Its output type is a plot
  output$distPlot &le- renderPlot({
    x    &le- faithful[, 2]  # Old Faithful Geyser data
    bins &le- seq(min(x), max(x), length.out = input$bins + 1)

    # draw the histogram with the specified number of bins
    hist(x, breaks = bins, col = 'darkgray', border = 'white')
  })
})


ui.R
library(shiny)

# Define UI for application that draws a histogram
shinyUI(fluidPage(

  # Application title
  titlePanel("Hello Shiny!"),

  # Sidebar with a slider input for the number of bins
  sidebarLayout(
    sidebarPanel(
      sliderInput("bins",
                  "Number of bins:",
                  min = 1,
                  max = 50,
                  value = 30)
    ),

    # Show a plot of the generated distribution
    mainPanel(
      plotOutput("distPlot")
    )
  )
))


• 方法二:下載網路上的程式
網友 Huidong Tian 在以下網站放了 server & ui 的程式,可供下載:

$ cd /srv/shiny-server
$ mkdir kmeans; cd kmeans
$ wget http://withr.me/misc/kmeans/ui.R
$ wget http://withr.me/misc/kmeans/server.R



這裡有一些範例可下載參考: rstudio/shiny-examples
使用 Shiny,官方有相關教學說明:https://shiny.rstudio.com/tutorial/

[問題]

第一次安裝完成時,執行 shiny-server,透過Web連線時會出現以下錯誤訊息:

Error: An error has occured. Check your logs or contact the app author for clarification.

發現是寫log 檔案的問題,修正方式是要在 shiny-server.config 設定檔中,加入開啟 Log保留的設定:

$ cd /etc/shiny-server
$ sudo nano shiny-server.conf

在檔案內加入以下一行,網頁就可以正常執行,如下圖:
preserve_logs true;



[參考資料]
• Huidong Tian:Install Shiny Server on Raspberry Pi
• RStudio:shiny gallery
• https://github.com/rstudio/shiny-server/wiki/Building-Shiny-Server-from-Source

Share:

星期二, 12月 12, 2017

Raspberry Pi 筆記(四十四): 使用群暉Synology 雲端裝置儲存Webcam 錄影資料

[2017/12/12]
最近有朋友問到一些樹莓派上使用WebCam的問題,如果要看即時動態資料,只要樹莓派連接到網際網路,就可以透過瀏覽器看到即時影像。如果要將影像存檔的話,就需要透過其他的系統進行儲存。

我有一個群暉Synology的NAS DS214 Play,系統上可以安裝 Surveillance Station來對 IP CAM的裝置進行錄影存檔的功能,如果使用 DDNS機制,還可隨時連線至家裡的群暉主機,看到即時的影像。以下就來看看如何進行設定:

(圖片取自網路)
 

[安裝影像軟體 Motion]

有關Motion 的安裝與設定可以參考我的另一篇文章:Raspberry Pi 筆記(十九): Webcam 拍照與瀏覽串流媒體 。

(1)先檢查插在USB的 Webcam 是否已經驅動:
$ sudo lsusb
Bus 001 Device 006: ID 046d:081b Logitech, Inc. Webcam C310
...

(2)安裝 motion 軟體
$ sudo apt-get install motion

(3)安裝完成後,修改設定檔 motion.conf ,將DAEMON OFF改為ON,設定為自動啟動 motion,Webcam_localhost ON改為 OFF,不從Raspberry Pi連線至Webcam:
$ sudo vi /etc/motion/motion.conf
daemon on
steam_localhost off

# Web連線使用8081 Port
webcam_port 8081

# 管理用的連線使用8080 Port
control_port 8080

#如果要修改畫面大小,可修改
# 影像寬度 (pixels). 預設: 320
width 640

# 影像高度 (pixels). 預設: 240
height 480

# 影像品質(百分比). 預設: 75
webcam_quality 100

(4)修改 /etc/default/motion 將 start_motion_daemon=no 改為 yes
$ sudo vi /etc/default/motion
start_motion_daemon=yes

(5)重新啟動motion服務
$ sudo service motion restart

[設定群暉Synology DSM進行監視錄影]

(1) 安裝 Surveillance Station 套件
登入群暉NAS管理介面 DSM,登入後桌面上有一個「套件中心」,點選左方的「商務」選項,找到 Surveillance Station進行安裝:


(2) 安裝設定網路攝影機
執行 Surveillance Station,開始安裝攝影機:選擇「網路攝影機」,再按「新增」。

選擇「完整設定」,再按「下一步」:

這時會看到以下畫面,輸入 Raspberry Pi IP及Port 8081,選擇「MJPEG」格式,如以下畫面:

接著按「下一步」,出現以下畫面:

再按「下一步」,出現以下畫面:設定錄影畫質及儲存NAS位置。

再按「下一步」,出現以下畫面:設定錄影排程。

按下「完成後」,就可以透過 synology的DSM介面看到影像,並進行錄影存檔的動作。如果要管理影像可按「錄影」,進行管理作業:

亦可按「即時影像」看目前攝影機的畫面:



Share:

星期日, 10月 22, 2017

【旅遊】老漂鳥環島日記:Day 10

2017/10/9 (一) Day10:新竹 à 台中潭子 

吃完早餐,回到空軍基地準備出發:


沿著東大路往天府路方向進入17公里海岸線,早上人比較少,看風景拍照都比較優:


到香山風情海岸前,有一段榕樹林,林葉茂密,很涼爽,我們也輪流在這裡留下獨照:




17公里自行車道,到香山段風情海岸時,欣治跟池姐在這裡等我們。稍做休息補充水分後,改騎台61線往通宵方向前進:



過了竹南,找了高架橋下比較涼快的地方,繼續提供補給,完全讓我們沒有機會進便利商店:


拱天宮快到了,先在山邊媽祖這裡休息一下:


到拱天宮了,跟辛苦幫我們補給的欣治來張合照:


欣治跟池姐的補給也是超級好,還請大家吃香腸米腸串,看吧!! 連宏奇都豎起大拇指說「讚」!!


到了苑裡車站旁的停車場,池姐跟欣治在這裡等我們,補給的涼麵是用磁盤裝的喔,變成涼式義大利麵了,夠高檔吧!!


如果涼式義大利麵看不清楚,來張特寫:


這張照片有點怪怪的,BJ4:


欣治跟池姐不僅提供補給外,還提供專業拍照服務,真是感動:



鎮瀾宮前合影:


在鎮瀾宮旁一家賣芋頭冰淇淋的門口吃冰。吃完冰,二哥、德星跟子惠就會走另一條路回各自的家,晚上再一起到宏奇家烤肉慶功。


從鎮瀾宮出發走132縣道,經過幾個連續爬坡後,汗流浹背,來到月眉觀光糖廠前,有冰冰涼涼的椰子水喝,是件很幸福的事,謝謝欣治跟池姐:


接著走台13線到豐原潭子。先去潭水亭拜拜,平安歸來。


宏奇的爸爸從四點就一直等我們回去,在巷口一直張望。等大家回來要放鞭炮幫大家慶祝一下:




晚上的慶功宴,宏奇一家人準備很多吃的,很感謝他們。有一段宏奇簡要跟大家說一下我們這10天來的過程,充滿感性與歡笑,就來看看這段影片:






後記:

這10天的老漂鳥環島行,遇到各式各樣的挑戰,從天候到路程耐力的考驗,感謝所有一起協助老漂鳥完成的朋友伙伴,因為有你們的支持與加油,才能順利完成。

如果要為整個行程做一個總結,就是:「老漂鳥不是睡覺,就是吃東西,不然就是要去吃東西的路上」。雖然有點頹廢的說法,可是美麗的風景卻烙印在每個老漂鳥的心中。


Share:

【旅遊】老漂鳥環島日記:Day 8 & 9

2017/10/7 (六) Day8:宜蘭市 à 新北市金山 

飯店有提供早餐,吃完早餐,拍團體照後準備出發:


沿著191縣道往北,再接台2線,在頭城中崙中興廟休息,喝個水、拉拉筋:


下一站:蘭陽博物館,看到這美麗的建築物,又開始玩起來了:


繼續上路,再來一張合照:


過了頭城到北關海潮公園休息,今天天氣灰濛濛的,遠眺龜山島,還是清晰可見:


在舊草嶺隧道口,拍了這張蠻有趣的照片。二哥說他想走隧道內到福隆,我們其他幾位則決定走台2線繞三貂角到福隆:


到了很接近台灣東邊的三貂角燈塔旁的觀景台,坐在草地上悠閒欣賞風景,拍出各種不同輕鬆的照片,各位看照片是靜態的,其實當時風還蠻大的:




拍完照,繼續沿台2線往福隆方向騎,中午在福隆車站旁吃便當,Annie & Linden就在這裡跟我們碰面,提供接下來的補給跟拍照。吃完就到東北角風景區管理處休息,這裡因為專案關係來過好幾次,帶大家來遊客中心這裡休息:


所有人都小睡片刻,Ken 你不會累嗎?


休息過後準備出發,跟 Linden 來張合照:


有了 Linden的加持,我們拍照立刻升級為大砲級的單眼相機:





Linden 推薦鼻頭國小要去走一走,看看這個很特別的小學:




從鼻頭國小下來,在一家古意盎然的雜貨店旁來張合照:


為了感謝 Linden & Annie的補給,Ken 將昨天買的桂圓蛋糕送給他們兩位,但隨即將盒子打開跟大家分享。一路上笑聲不斷,真是有趣....


看一下他們兩位幫大家準備的補給品:咖啡、冷泡茶、啤酒、滷味、餅乾等,非常豐盛,還有一瓶大丈夫米酒,哈哈!! 不是啦,裝的是冷開水。








到了海洋科技博物館,休息一下,喝水、上洗手間。



到了基隆港,剛好有一部公主號的遊輪停在港口,一起合照,旁邊還有國旗陪襯,真的很美麗。


過了基隆,來到外木山,看基隆嶼很漂亮,只是當時天色漸漸昏暗,拍照起來有一種特殊的美感。這時請 Linden & Annie 先到金山老街幫大家買鵝肉跟麵當作晚餐。


到了大武崙情人海灘前的一個路口走錯路,開始往上爬坡,因為很陡,有一小段我還下車推車上去,才能爬到最高點。往下滑時,發現旁邊就有一條較平坦靠海岸的路,Google地圖上沒顯示旁邊海岸邊的這條路,早知道就不用爬得這麼辛苦:


大約六點多到民宿,Annie & Linden 已經幫大家買好晚餐,子惠一起到民宿跟我們會合一起用餐:


很豐盛的一頓晚餐:


吃飯前,先來個餐前歡呼:一點都不會累ㄟ,我還要再騎兩天兩夜:


Annie & Linden 吃過晚餐後,就先回台北的家,謝謝他們兩位一天幫我們補給跟拍照。

民宿老闆娘告知附近有一個公共澡堂,宏奇去沖澡,我則去泡泡溫泉澡,雖然有點簡陋,但是泡過湯後,感覺蠻舒服的。

晚上八點多,大家出去金山街上找自助洗衣店,趁著洗衣服的同時,逛逛夜市。去買飲料喝,回到民宿,在一樓閒聊到十點多才各自回房。

剩下倒數兩天了,繼續加油!!

2017/10/8 (日) Day9:新北市金山 à 新竹市 

在民宿旁的慈護宮來個合影,準備出發去吃早餐:



早餐吃金山有名的王肉包,店裡生意很好,長長的排隊人龍,我們挪幾個位置,就在店裡用餐:


沿著台2線繼續往淡水方向前進。第一站石門洞:



沿著樓梯走到上面,大家同時朝海邊看,知道我們在看什麼嗎?


墾丁沒看到比基尼辣妹,竟然這裡有一位。其實距離還蠻遠的,要有長距離鏡頭才可以拍這麼清楚:


這些老漂鳥拍照的同時,已經被偷拍:


過了石門,有一個婚紗廣場,蠻適合情侶拍照的,我們這群老漂鳥也來拍一下:







跟遠方的富貴角燈塔來張合照:



快到三芝時,Linden & Annie 繼續來提供半天的補給跟拍照:



連等紅綠燈,也可以拍照:


接近淡水市區時,下了一場雨,還好時間很短。來到淡水一定要來品嚐一下阿給跟黑輪:


吃完阿給,下一個行程到淡水河渡船口搭船到關渡:



到了八里渡船頭老街,跟 Annie來張合照:


天氣很熱,吃碗古早味的冰休息一下,再繼續上路:


沿著台64快速道路下方,騎到台61縣交叉路口沒多遠,這時由新竹來的兩位貴婦接手補給。很謝謝 Annie & Linden 來幫大家提供這麼好的補給跟拍照:


今天是順風,接下來到新竹的時速平均都在30幾公里,是我們這 9 天以來,速度最快的一天。下一站竹圍漁港,由於今天是連續假日,漁港塞爆了, 兩位貴婦找到了高架橋下的地方休息:




這是兩位貴婦準備的補給品,除了茶和水果,還有遠從新竹帶來的涼麵:


下一站到白沙岬燈塔,沒進到燈塔裡面,在附近的高架橋下提供補給:


下一站預計到紅毛港,我們沒繞進去,在等補給到來的時間,來點餘興節目:


除了拍照,還有錄影:


到了竹港大橋,還不到五點。今天的傍晚的景色很漂亮:


德星跟二哥騎的速度比較穩定,早已經抵達空軍基地旁的便利商店,跟欣治碰面:


全部抵達後,先到小木屋盥洗,約好 7:00在附近一家海產店吃晚餐:





 晚餐有各式海鮮、米粉湯,非常豐盛。大家在歡樂聲中度過,作為第九天的 Ending.

Share: