OpenQCam專案說明 - OmniXRI/OpenQCam GitHub Wiki

一、 硬體需求:

在執行本專案前,首先要備妥下列硬體元件,詳如圖1-2所示。

  1. 樹莓派 Pi Zero W 一片 (使用Pi 1, 2 ,3, Zero皆可,只是有些設定方式不同,後面會補充說明)
  2. 樹莓派 Pi Zero 專用500萬畫素相機 (其它解析度相機亦可,請注意非Pi Zero使用者必須使用Pi對應版本的相機)
  3. 16GB記憶卡一張 (一般買樹莓派套餐附的都是8GB記憶卡,要跑OpenCV建議要升級)
  4. SPI介面2.2吋TFT LCD(QVGA 320*240) 一片 (一般市購2~3.5吋TFT LCD 多半是用ILI9341驅動,若非該驅動IC則需另外撰寫驅動程式。另外此類模組常會自帶記憶卡或觸控模組,本專案暫未使用)
  5. 雙面洞洞板 一片 (若不想自己焊板子,可直接用麵包板插線完成,只是不方便拿在手上把玩)
  6. 90度按鍵 兩個 (做為操作用按鍵,或當外部觸發拍照,數量可自行增減)
  7. 紅色、綠色LED各一個 (顏色不据,可當成閃光燈控制或指示燈用)
  8. 10k 及 220 歐姆1/4W電阻 各二個 (提供按鍵及LED使用)
  9. 40 (20 pin雙排) pin 2.54 mm 間距公、母排針 各一組 (連接樹莓派和洞洞板用)
  10. 20 (20 pin單排) pin 2.54 mm間距公、母排針 各一組 (拆成 9pin 和 4 pin,分別提供LCD模組上顯示用及記憶卡用)
  11. 5V變壓器及Micro USB連接線 一組 (負責供電給Pi Zero,若使用電腦USB或行動電源供電亦可)
  12. HDMI顯示幕及Mini HDMI轉大頭HDMI連接線 一組 (一開始設定Pi Zero使用,之後就完全用不到,可拿有HDMI功能的電視充當一下)
  13. 無線鍵盤滑鼠及USB OTG連接線 一組 (一開始設定Pi Zero使用,之後使用遠端連線操作就用不到,亦可直接借用一下家中電腦的無線鍵鼠)
  14. 可選購Pi Zero CPU專用散熱片 一組 (除非長時間CPU滿載情況造成熱當,原則不一定要裝)

其中第1, 2, 3, 4, 12, 13項可自行到露天拍賣或淘寶上採購,其它部份可自行到電子零件商場或網路上採購。一般上網購買樹莓派Pi Zero套餐(建議主板、相機及排線一起買,外殼依需求搭配)時會附4GB或8GB記憶卡(記得要換購16GB)、5V變壓器,Micro USB充電線、USB OTG連接線及Mini HDMI轉大頭HDMI連接線,有些還會附CPU散熱片。根據不同採購管道及配套大致上總體成本(不含第12, 13項)約在2000 ~ 3000台幣。

圖1-2 開源迷你相機硬體需求

另外本專案對於新手而言線路還算有點小複雜,在製作或除錯過程中難免會遇到電氣信號不良或信號被干擾等問題產生,一般家裡可能沒有高性能的儀表(如示波器、邏輯分析儀)可協助分析問題,建議至少要有一部數位三用電錶,另外可考慮選配(原則上用不到)一台簡易型低速邏輯分析儀(不到台幣500元,如圖1-3所示)來協助。依十倍(至少也要三倍以上)取樣速度理論,這台僅適合分析2 MHz以下信號,但對於重寫LCD SPI驅動程式抓問題來說已非常足夠。

圖1-3 簡易型24MHz, 8 port 邏輯分析儀

二、 硬體線路圖

本專案的線路基本上不難,如圖2-1左圖所示。主要是連接樹莓派Pi Zero GPIO到LCD模組、按鍵及LED,另外有留了一組接頭和LCD模組信號線並聯,方便邏輯分析儀連接分析問題用,原則上可不必接。為方便工作,可選擇自行以雙面洞洞板自行焊接,簡易接線圖如圖2-1右圖所示,藍色為實際焊在板上的裸銅線,紅色線為跳線(有膠皮絕緣線),請注意勿和其它線短路,以免電路無法正常工作。若要全部用OK線(有膠皮鍍銀線)焊接亦可。若實在不熟悉焊接工作,亦可使用杜邦端子線連接或用麵包板依電路圖連線亦可,只是無法像一台相機拿在手上操作。

電路上的SW1 & SW2可直接按鍵操作或者以外部觸發(Strob)信號連接亦可,但請注意系統目前以3.3V為主要控制電源,因此當外部觸發信號GPIO 21(SW1)或 GPIO 26(SW2) 提供3.3V時,相當於按鍵被按下。另外LED 1 & 2可做為指示信號燈或推動閃光燈,不過由樹莓派GPIO的輸出電流很小(10~20mA),因此若要推動大電流的燈具時要額外接一電晶體來放大驅動電流,避免把GPIO埠燒壞。

圖2-1 開源迷你相機OpenQCam電路圖(左)及手焊轉接板圖(右)

三、 作業系統安裝

一般如果上網買樹莓派Pi Zero W套餐時,通常會附一片4GB或8GB SD卡,裡面已安裝好原廠作業系統,開機就能使用。為了後續系統擴充及安裝更新版本的OpenCV,強烈建議至少要換成16GB記憶卡。為避免要從8GB記憶卡搬到16GB時會產生許多設定工作,建議直接以16GB空白記憶卡開始安裝會簡單些。首先到樹莓派官網下載視窗版環境最新版本的作業系統Raspbian Stretch with DESKTOP 的ZIP檔,https://www.raspberrypi.org/downloads/raspbian/ ,解壓縮後會得到作業系統影像檔 (Image File) 2017-11-29-raspbian-stretch.img。

圖3-1 樹莓派官網下載畫面

接著利用Win32 Disk Imager將影像檔(Image File)燒寫到記憶卡中,如圖3-2所示。首先選擇要燒寫的檔案路徑及名稱,接著選擇要寫入的記憶卡磁碟機代號,最後按下【Write】就開始燒錄工作,此過程大約要半小時左右。如果沒有此記憶卡燒錄工具可以到 https://sourceforge.net/projects/win32diskimager/ 進行下載安裝。

圖3-2 燒錄影像檔步驟

記憶卡燒錄完成,放入Pi Zero W 記憶卡槽後就可準備送電啟動。第一次送電前有幾個動作要注意。

  1. 以HDMI連接線連接Pi Zero W和HDMI螢幕(可用有HDMI功能的電視取代),第一次啟動無法以遠端(無螢幕)方式進入。
  2. 先不要將無線鍵盤滑鼠的接收器插入USB OTG插孔中,不然啟動後會進不了作業系統,一直反覆重新開機,估計可能是啟動電流過大造成,可以等到進到桌面環境後再插入。
  3. 接著就可送電,樹莓派Pi Zero W板子上有兩個Micro USB孔,靠外側那個是+5V電源,原則上Pi Zero W非常省電,一般5V 1A的變壓器就足夠所需電力,甚至一般電腦的USB 2.0插孔(500mA)也能推的動,而靠板子中間那個是USB OTG,切記不要搞錯,以免後續外接USB裝置無法工作。

樹莓派Pi Zero W有支援無線網路功能,強烈建議使用,如此後續就可直接遠端連線操作,不必再連接螢幕及無線鍵盤滑鼠。因此進入視窗作業環境桌面後,第一件事就是點選右上角網路符號,啟動無線網路(WIFI ON),連線到自家的無線網路環境,輸入帳號密碼。為確保無線網路工作正常,可點選畫面左上方地球圖案,啟動瀏覽器進行測試,可試著隨便連到任意一個網址(如GOOGLE)看看是否正常工作。接著將滑鼠移到畫面右上角無線符號處,此時會出現目前WIFI動態配置的IP位置(192.168.xxx.xxx),先記下來,等下會要用到。

由於系統預設是英文介面,而其中許多系統參數設定不符需求加上特殊介面也未開啟,所以要先點選畫面左上角樹莓圖案進入主選單/Preference/Raspberry Pi Configuration。進入後共有四個子頁面,如圖3-3所示。樹莓派原廠預設使用者名稱pi,密碼為raspberry,且會自動登入(Auto Login),若不喜歡預設值,可於System頁面下修改,建議可先不更動。由於後續要遠端登入操作,所以螢幕解析度可依自己需求按下[Resolution]鍵進行修改。再來切到Interfaces頁面,預設全部都為Disable,為讓本專案能順利完成,必須將Camera, VNC及SPI致能(Enable)起來。而Performance頁面預設撥給GPU 128MB,這個部份可暫時不動。最後切到Localisation頁面,設定下列參數:

  1. 按下[Set Local]鍵,將Language設為Zh (Chinese) 或 lzh (Literay Chinese), Country設為TW(Taiwan), Character Set設為UTF-8。
  2. 按下[Set Time Zone]鍵,將Area設為Asia,Location設為Taipei。
  3. 按下[Keyboard]鍵,系統預設為英國鍵盤,這會導致有些符號打不出來(如@),因此須選擇左邊United States,選擇右邊English(US),鍵盤才能正常工作。
  4. 按下[Set WiFi Country],將設定改為TW (Taiwan),如此系統時間才會和網路同步。 最後按下[OK]鍵,系統會詢問是否重新開機(Reboot),選擇YES後,馬上拔掉USB OTG上的接收器,讓系統重新啟動。接下來就不需要螢幕、鍵盤、滑鼠,只須利用VNC軟體遠端連線操作即可。

圖3-3 樹莓派系統參數設定

根據實測,強烈建議不要直接用apt-get安裝tightvncserver到樹莓派上,有部份軟體(如QT)在遠端連線時會造成鍵盤無法正確輸入文字問題,建議依上一步驟說明將系統參數VNC設定為Enable即可。接下來要在桌機或筆電上安裝RealVNC才能遠端操控Pi Zero W,相關軟體可至 https://www.realvnc.com/en/connect/download/vnc/ 下載。啟動RealVNC後輸入剛才記下的IP(192.168.xxx.xxx),帳號:pi,密碼raspberry,即可遠端登入,進行所有操作。如果有習慣常的VNC軟體亦可。

四、 工作環境建置

接下來可依需求安裝相關軟體,大部份安裝都在命令模式下進行,點擊畫面上左上方,黑色[ >_ ]的圖案,就會開啟一黑色視窗,進入命令(CMD)模式。請注意大部份的命令英文字母大小寫是被認為不同文字,所以不要打錯。

4.1 更新系統 雖然樹莓派的作業系統可能已是最新的,但其它依賴包(函式庫)就不一定,因此首先要更新樹莓派,輸入以下指令。

sudo apt-get update

sudo apt-get upgrade

sudo rpi-update (更新樹莓派韌體,可忽略不作)

sudo reboot (重新開機)

4.2 測試相機 輸入下列指令,測試相機是否可正常拍照,執行後應會在同一目錄下產生一test.jpg的影像檔。若無法取像,則需檢查相機的軟排線是否正確的插在連接座上沒有鬆脫。

raspistill -o test.jpg

4.3 安裝中文輸入法 (選配,可不裝) 這裡推薦 SCIM,因為它支援的輸入法包括兩岸三地常見中文輸入法。當然如你有習慣的其它輸入法亦可安裝。

sudo apt-get install scim scim-tables-zh scim-chewing

4.4 安裝影音播放軟體 (本專案用不到,但建議安裝) 由於之後可能會透過攝像頭錄製影片,為方便觀看影片建議可安裝著名開源影音播放軟體 VLC。

sudo apt-get install vlc

4.5 安裝OpenCV 及編譯程式必要依賴包 OpenCV是網路上最多人使用的開源電腦視覺、影像處理工具,功能與時俱進,內容包山包海,連最新的深度學習都有,目前(Dec. 2017)已到了3.3版,想多了解一下可參閱官網 https://opencv.org/ 。這裡為方便大家工作,不要浪費太多時間及遇到奇怪情況裝不起來的問題,建議大家直接用編譯好的OpenCV 2.4.9版就非常夠用了,安裝後包含C, C++及Python都可使用。若各位想使用最新版本可自行編譯,請參考 https://www.pyimagesearch.com/2015/12/14/installing-opencv-on-your-raspberry-pi-zero/ ,這裡有完整說明,不過要有心理準備,整個過程會超過十二小時,甚至偶而還會發生花了二十四小時以上還編譯不過的情況產生,祝好運。為加快各位上線時間請依序執行下面指令安裝OpenCV 2.4.9版即可,安裝時間頗長,請多一些耐性。

sudo apt-get -y install build-essential cmake cmake-curses-gui pkg-config

sudo apt-get -y install libgtkglext1-dev

sudo apt-get -y install libv4l-dev v4l-utils

sudo apt-get -y install libopencv-dev python-opencv

4.6 安裝樹莓派GPIO及介面驅動庫 一般驅動樹莓派的GPIO(包括SPI, I2C, PWM…)有很多方式,網路上有提供很多免費工具包可驅動,亦可直接對直接位置寫入,由於本專案是用C++語言完成,所以推薦採用BCM2835(樹莓派Pi Zero W的主晶片名稱為BCM2835)套件包來驅動即可,可免去很多設定及變數使用問題。更進一步資訊可參考官網 http://www.airspayce.com/mikem/bcm2835/index.html ,目前(Dec. 2017)最新版本為1.52。請依以下步驟下載、解壓及安裝。另外要注意的一點,這裡用的40pin GPIO,所以用程式控制時要選用RPI_V2_GPIO_P1_X (X表示第幾腳,而非GPIO編號)。

wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.52.tar.gz

tar zxvf bcm2835-1.52.tar.gz

cd bcm2835-1.52

./configure

make

sudo make check

sudo make install

為使一開機相機就能啟用且可讓OpenCV直接驅動相機不必透過其它工具,所以要修改系統檔案,其步驟如下。

cd /etc/modules-load.d/

sudo nano modules.conf (這裡使用內建文字編輯器nano進行編輯,亦可用其它文字編輯器)

進入後在最後一行按下ENTER,新增一空白行,加入

bcm2835-v4l2

按下Ctrl + W存檔,再按[Ctrl + X]離開,完成編輯工作,再輸入 reboot 重新開機完成所有系統環境設定。

4.7 系統備份 (選配,可自由決定) 作到這裡已大致完成系統環境建置,如果怕開發過程安裝太多東西搞亂環境,或者後續要複製到另一台Pi Zero W上,建議可再利用Win32 Disk Imager將系統備份。首先將Pi Zero W關機,抽出目前已正常工作的記憶卡,放入桌機或筆記型電腦記憶卡槽,啟動Win32 Disk Imager,指定存檔之路徑及檔名,選擇欲備份的記憶卡磁碟機代號,按下[Read],耐心等待進度條到100%,就完成備份。

五、 開源迷你相機OpenQCam系統開發

接下來就要開始說明如何進行程式開發。本專案是採C++語言,原則上只須文字編輯器(可用內建nano或其它習慣編輯器亦可)即可,不需視窗也不需要IDE環境就可獨立完成。若不習慣傳統文字編輯器的人,亦可在視窗環境點選檔名,按滑鼠右鍵,啟用Text Editor(類似Windows上的工具軟體-[筆記本]),即可進行編輯。另外在Linux上知名的視窗開發整合環境軟體QT,經測試在Pi Zero W上執行非常卡,且和OpenCV有些許不相容,後續若有找到比較合適的解法會再另外撰文說明,如想使用其它IDE亦可

本專案目前僅支援TFT LCD 320*240像素(一般正常是直式顯示,目前預設用程式轉成橫式顯示),ILI9341驅動IC之SPI介面,此類LCD在網路上為主流產品很容易買到。程式中有提供顯示直式介面的函式,可自行修改利用。若有其它顯示規格需求請上網查閱驅動IC資料手冊自行修改,但請注意改錯參數有可能造成LCD損壞,後果請自行負責。

工作前建議先建立一個Project目錄,再將本專案所有檔案下載該目錄下。接著執行本專案已預建編譯指令批次檔 go.sh進行編譯,等待約30秒後即可完成,產生執行檔camera,由於BCM2835須要較高權限,所以執行時要加上 sudo,完整操作如下所示。

sudo ./go.sh(編譯程式)

sudo ./camera (執行程式)

執行後,攝像頭會取像並自動降低影像解析度,從五百萬畫素降至320* 240,LCD上會同步顯示取像內容及在左上角顯示目前速度(取像加顯示),單位是FPS(每秒幀數),正常狀況約有15 ~ 18 FPS。當按下SW1時紅燈會亮,模擬快門按下後閃光燈會亮,畫面涷結1秒並自動存檔。按下SW2時綠燈會亮,並結束程式。

本專案是做為後續利用OpenCV進行影像辨識的很好入門平台,程式的相關註解詳見各程式原始碼。受限於個人能力有限,撰文上難免產生誤解或疏漏,如有任何問題歡迎留言或來信指教!

六、 參考文獻及網址

樹莓派基金會 https://www.raspberrypi.org

記憶卡備份Win32 Disk Imager https://sourceforge.net/projects/win32diskimager/

遠端操控 RealVNC https://www.realvnc.com

電腦視覺OpenCV https://opencv.org/

介面控制 BCM2835 http://www.airspayce.com/

LCD驅動IC資料手冊 https://cdn-shop.adafruit.com/datasheets/ILI9341.pdf

作者:歐尼克斯實境互動工作室 https://omnixri.blogspot.tw/ (Dec. 2017)