Biomedical Imaging Lab

Magnetic Resonance Imaging

103學年度專題:通用資料紀錄系統

 


 

前言

紀錄如何使用RaspberryPi實現通用資料紀錄系統。使用YouTube作為上傳平台,製作出有自動紀錄溫溼度功能的縮時攝影;實際上的功能為偵測溫溼度後,把溫溼度鑲嵌在照片上,最後再把照片們壓製成影片,上傳到YouTube上。而這一些過程全都是由RaspberryPi自動進行。

總共會分成九個部分介紹,分別是

  1. 安裝作業系統以及環境配置。
  2. 溫溼度感測。
  3. 照片拍攝。
  4. 後製以及壓制影片。
  5. 上傳至Youtube。
  6. 檢查MD5碼及嵌入個人網頁。
  7. 清除舊有資料。
  8. 設定排程。
  9. 實際機器照片。

(以下所有圖片點選後皆會放大。)

 


 

安裝作業系統以及環境配置

首先必須到RaspberryPi官方網站(https://www.raspberrypi.org/)下載作業系統。
這裡使用Noobs版本,比較方便上手。下載完檔案解壓縮,把檔案移到SD卡裡面即可。
1-1

接下來把SD插入RaspberryPi的晶片內,接上HDMI螢幕以及鍵盤滑鼠後,就可以接上電源。(注意:因為沒有開機鍵,因此插上電源就會自動開機。)第一次開機後會顯示以下的畫面,我們安裝預設推薦的作業系統Raspbain。1-2

安裝結束之後就會進入Linux系統,並跳到基礎設定畫面。我們要在這裡設定密碼、開啟相機功能還有開啟SSH(SSH的選項在進階選項之中)。設定完畢之後選擇Finish重新啟動系統。1-3

登入時需要輸入帳號密碼,帳號為pi,密碼為剛才修改後的密碼。如果剛才沒有變更密碼則是預設的raspberry。1-4

由於SSH需要接上網路才能使用,因此我們必須設定Wi-Fi環境;十分方便,只要設定一次之後,以後系統就會自動幫我們連線。我們使用圖像模式來設定Wi-Fi比較方便,在指令欄輸入”startx”即可進入圖形模式。1-5

從左邊的選項中可以找到設定Wi-Fi的按鈕。1-6

點選Scan之後,可以搜尋附近有的Wi-Fi網路。連結之後會顯示使用的IP位置,接下來使用putty時需要用到。1-7

下載putty之後(http://www.putty.org),在視窗內輸入剛才的IP位置即可連線。1-8

連線後的視窗會像下面所示。1-9

另外也可以使用windows的遠端桌面連線,直接連線到圖形模式。但是需要先幫RaspberryPi另外安裝組件。

sudo apt-get install xrdp

1-10

使用Windows的遠端桌面連線後的樣子。1-11

再來進行一些簡單的環境配置。首先是安裝python的開發套件,以及設定編譯器。第一行的update為更新現有資料庫位置,推薦在安裝任何額外套件時輸入以免發生問題,Vim為Linux普遍使用的編譯器,pip為安裝python額外套件時的小工具。Dev則為python開發套件。

sudo apt-get update

sudo apt-get install vim

sudo apt-get install python-pip

sudo apt-get install python-dev

安裝完畢之後,稍微設定vim編譯器,方便之後撰寫程式。要修改vim資料夾裡的設定檔vimrc。

cd /etc/vim/ #移動到vim資料夾

sudo vim vimrc #使用vim開啟設定檔

開啟vimre檔之後,直接在文件內加上以下指令即可。

syntax on #自動語法高量

set number #顯示行號

set autoindent #自動縮排

1-12

設定結束後,如果再重新開啟設定檔的話,會變成以下的樣子,表示設定成功。1-13

 


 

溫溼度感測

主要是參考此網頁。(http://ruten-proteus.blogspot.tw/2012/11/raspberry-pi-lcd-dht-11.html)
溫溼度感測器的接法在這裡就不再多敘述,可以參考上方網頁。我們使用此網站的Code進行溫濕度的感測,需要在此下載程式碼。

cd #確認回到主目錄

mkdir DHT_CharLCD #建立資料夾名稱為 DHT_CharLCD

cd DHT_CharLCD #進入名為 DHT_CharLCD 的資料夾

wget -O – http://goo.gl/Km0ye | tar xvf – #下載程式碼

sudo ./DHT 11 15 #確認程式碼可執行,線路沒有接錯

2-1

cd #確認回到主目錄

vim photo.py #創立第一個程式碼

2-2

結束之後按下esc,再輸入:wq存檔。想要測試程式是否可以執行的話,輸入”sudo python photo.py”即可。由於DHT11感測器有頻率的問題,因此讀取溫溼度時有可能需要重複嘗試。2-3

 


 

照片拍攝

cd #回到根目錄

mkdir TempPhoto #先建立一個暫存相片的資料夾

cd #回到根目錄

vim photo.py #開啟剛才的python檔

直接在剛才的photo.py中加入以下程式碼。

若想測試可以執行photo.py,即可完成照相動作,如下圖(這邊使用遠端桌面連線觀看)。

3-1

 


 

後製以及壓制影片

我們需要使用其他套件進行照片的後製處理,把每一次拍照時一同記錄的溫濕度鑲嵌在照片上。下載Pillow和讀取jpeg的套件組。並新增另一個python檔叫做video.py。

sudo apt-get update

sudo apt-get install libjpeg-dev

sudo pip install Pillow

vim video.py

執行之後再開啟一次圖片,可以發現溫溼度成功被鑲嵌在照片上。4-1

再來是壓制影片的部分,我們使用ffmpeg套件。由於ffmpeg的套件十分的便利,安裝完之後只要在程式上多加上一行即可完成壓制影片的設定。

sudo apt-get install ffmpeg

壓制成功的畫面會像這樣。(這邊只有壓制一張照片,實際動作時畫面會更長,壓制時間也會更久)4-2

 


 

上傳至YouTube

再來應該說是本系統最麻煩的部分,自動上傳到YouTube的設定。可以參考YouTube官方的文件進行設定。(https://developers.google.com/youtube/v3/guides/uploading_a_video)

而我們也需要安裝Google的套件才可以使用此功能。我們建立一個upload_video.py檔,而裡面的Code就直接複製Google官方的即可,這邊就不列出程式碼,請參照上方網址。

再來我們需要在自己的YouTube帳號申請API授權(https://console.developers.google.com/project),到API的地方啟用
“YouTube Data API”,再到驗證的地方建立新的用戶端ID。5-1

接著我們要下載json檔提拱給upload_video.py使用。這邊要使用遠端桌面連線進行下載。下載好json檔之後,從Downloads資料夾裡面移出檔案,並從新命名為”client_secrets.json”。再執行剛剛的upload_video.py檔(記得使用遠端桌面執行),執行後會給一段網址請你去點擊;如果出現”重新導向 URI”不正確,請在Google網站憑證那裡修改重新導向 URI,之後再重新下載一次json檔。成功的話會跳出以下畫面,按下”接受”鍵即可。5-2

 

此時應該可以成功上傳影片到YouTube上,但我們還要進行一些細部設定,像是影片名稱和隱私設定。在upload_video.py最下方設定。

最後在video.py中,加上呼叫upload_video.py即可。

 


 

檢查MD5碼及嵌入個人網頁

由於YouTube會自動傳回影片的ID碼,所以我們可以利用這個ID碼把影片鑲嵌在個人網頁之中,這邊使用本實驗室作為範例。但為了防止大家都可以上傳到實驗室網頁之中,我們使用檢查MD5碼的機制;在此利用hashlib完成這個功能。

sudo pip install hashlib

而實驗室網頁的接應程式如下。只要收到有人連結到此程式,便會判定MD5碼是否正確再動作。

實際嵌入影片至實驗室的程式碼。

結果會像以下所示。6-1

 


 

清除舊有資料

最後則是上傳完影片之後,把暫存資料夾裡面的所以檔案清除,以免影響下一天的系統執行。
再開一個新的檔案clean.py。

 


 

設定排程

最後是設定Linux系統的排程,我們現在有四個python檔案,分別為溫溼度感測和照相功能的photo.py、後製加壓制影片以及上傳至YouTube的video.py、Google官方衍生的upload_video.py、最後是清除動作的Clean.py。這裡我們設定每三分鐘進行一次拍照功能,從早上5點一直到晚上11點;並且在晚上11點30分進行重新開機的動作;12點開始進行影片後製和上傳,由於壓制影片需要一段時間,所以特別留了一段時間後才重新開機;隔天的4點30分再重新開機一次;4點35分清除所有資料;等到5點時便會開始拍攝新的一天。

crontab –e -l #輸入crontab 後方加上-e可以編輯,加上-l可以觀看目前有的所有排程,一次輸入一個

0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57 5-22 * * * sudo python photo.py

30 23 * * * sudo reboot

0 0 * * * sudo python video.py

30 4 * * * sudo reboot

35 4 * * * sudo python clean.py

7-1

 


 

實際機器照片

使用LEGO包裝外觀,可防止輕微雨水,又方便自由組裝。實際為11cm x 8cm x 5cm的長方體。
IMG_20150413_172625

拆開後的樣子。IMG_20150413_151226

溫溼度感測元件。IMG_20150413_151258

照相機元件。IMG_20150413_151319

安裝後的樣子。IMG_20150413_151306

USB插槽。
IMG_20150413_151401

Micro USB電源插槽。
IMG_20150413_151250

實際上工作時的英姿,因擔心被風吹落,因此用膠帶緊黏在書本上。
IMG_20150108_113113

 


 

結尾

經過這些步驟之後,就可以簡單地完成通用資料紀錄系統。這次使用的是溫溼度與相機還有YouTube的結合,但除此之外也可以發展出其他功能,像是換掉現有的感測器,或是換掉Youtube平台使用其他社群平台都可以,因此本系統還有很廣的發展性。而說實在我所撰寫的Code並沒有十分的精簡漂亮,大多是東拼西湊湊出功能來,所以修改的空間也很大。附上完整的程式碼。(https://github.com/JohnSmithWithHuruhi/Pi)

 


 

後記

特別感謝專題指導教授-黃騰毅教授,讓我做出比最初想像還好的專題成果;老師的點子和意見一直都切中核心問題。題外話是最近應徵工作時面試都是拿此專題出去面對,但現時間點最終結果還沒有出來就是。最後在這裡用此專題成果為台科大的四年學習時光畫下句點。在此紀念かをりちゃん,沒有你的四月,04.28.2015 (05.10補上第九章。)

 


 

Updated: 2015/05/30 — 11:13 pm
Biomedical Imaging Lab © 2013 Frontier Theme