Quantcast
Channel: CAVEDU教育團隊技術部落格
Viewing all 678 articles
Browse latest View live

[開箱]可用於 NVIDIA Jetson Nano 與 Raspberry Pi 運算模組3的 1200萬像素攝影機模組,可轉接 6mm / 16mm 兩種鏡頭

$
0
0
作者/攝影 曾吉弘
材料表
  • DFrobot 12.3MP Camera Module
  • 6mm 鏡頭
  • 16mm 鏡頭

可用於 NVIDIA Jetson Nano 與 Raspberry Pi 運算模組3的 1200萬像素攝影機模組,可轉接 6mm / 16mm 兩種鏡頭

拿到了 DFrobot 針對 NVIDIA Jetson Nano 與 Raspberry Pi 運算模組3 推出的 1200 萬像素攝影機模組,採用 Sony IMX477R 晶片,並可轉接 C/CS 接環鏡頭。本模組提供相當不錯的解析度 (1200萬像素) 以及相較於 IMX219 更好的感光表現,可用於各種工業與消費性電子方案之中。由下圖可知本模組主推的 12.3 MP 所呈現的畫面差異:

圖片來源:https://www.dfrobot.com/product-2387.html

 

特色

  • Sony IMX477R 感光模組,解析度達 12.3MP
  • 每像素區域加大,低光源表現更佳
  • 背光感測器架構,感光表現更好
  • 可轉接 C/CS 接環鏡頭

規格

  • 感光元件型號:Sony IMX477R
  • CMOS 對角線長度:: 7.9mm
  • 解析度:12.3 百萬像素 (4056×3040)
  • 單一像素尺寸:1.5μm(H)×1.55μm(V)
  • 輸出格式:RAW12/10/8, COMP8
  • 後焦距離:可調
  • 鏡頭規格:C-接口 /CS-接口 (支援 C/CS 轉接環)
  • 已整合紅外線濾鏡

開箱

我拿到的是感光模組和 6mm / 16mm 鏡頭,馬上來開箱!可以看到感光元件本體,別用手去摸啊,沒用到的時候也要蓋上蓋子以免入塵影響成像。模組下方就是CSI匯流排接頭。(今天採用工業風的底板,好看嗎?)

6mm鏡頭

透過轉接環直接接上模組即可,對焦環上有固定用的螺絲,轉動時的阻尼感也很好 (一直轉)

16mm鏡頭

16mm 鏡身比 6mm 大了很多,使用要注意不要掉到底上會把整個 jetson nano 都拖到地上。

實際接上 Jetson Nano

連接方式很簡單,如同一般 CSI 相機的連接方式,只要注意排線的方向以及不要折到排線就好。接好如下圖~ 之後就是要想想如何做一個支架,因為鏡身真的很有份量呢。

下一篇就會介紹如何在 Jetson nano 上設定相關套件來操作這台相機,鏡頭升級的話,希望也可以進一步帶動視覺辨識的效能!

還沒有入手我們編寫的 Jetson nano 專書[ 初學Jetson Nano不說No-CAVEDU教你一次懂 ] 的朋友,趕快買一本回家喔!

 

相關文章:


【開箱評測文】ZyXEL NR5101 5G NR室內路由器開箱評測文(上)

$
0
0
作者/攝影 郭俊廷

這次為了我們的5G課程,跟合勤科技股份有限公司借了一台5G路由器來上課,這台ZyXEL NR5101 5G NR室內路由器。(感謝ZyXEL獨家贊助,目前台灣尚未販售,也歡迎其他的朋友們一起合作)

ZyXEL NR5101 5G NR室內路由器是可以接收5G(藉由SIM卡)訊號,並且可以發送Wi-Fi 6訊號的一台路由器,它也可以透過RJ45網路線共享接收到的5G訊號。

甚麼是5G,甚麼是Wi-Fi 6這裡稍微介紹一下

這裡說的5G不是Wi-Fi 5G喔!是第 5 代行動通訊網路(5th Generation Mobile Networks)的泛稱。5G網路具備超高頻寬、超低延遲、高連線數等三項特性,後兩者對產業發展有顯著影響。

 

根據國際電信聯盟(ITU)發表5G的IMT-2020系統規格,共有八個關鍵技術指標 (Capabilities of IMT-2020),可依據三大應用特點整理如下:

超大頻寬 (Enhanced Mobile Broadband)

超可靠低延遲 (Ultra-reliable and Low Latency Communications)

高連線數 (Massive Machine Type Communications)

 

1.超大頻寬eMBB(Enhanced Mobile Broadband)

峰值傳輸速率更高(Peak Data Rate): 每用戶/設備理想下之最大數據速率20 Gbit/s以上。

頻譜效率更高(Spectral Efficiency): 為4G用戶體驗的3倍

傳輸速率更快(User Experienced Data Rate): 用戶或設備在覆蓋區域內之最高數據傳輸速率100 Mbit/s以上。

區域流量更高(Area Traffic Capacity):服務於每個地理區域的數據總傳輸量,室內熱點10 Mbit/s/m2以上。

能源效率更好(Energy Efficiency): 可達 4G的100倍。

移動性更好(Mobility): 在不同層或不同基地台接取之間的轉換更快;都會區 30 km/h;郊區 500 km/h。

 

2.超可靠低延遲uRLLC(Ultra-reliable and Low Latency Communications)

延遲更低:從傳送到接收端之間的延遲 1 ms以下。

應用精密工業製造與生產過程、智慧交通、遠距醫療等需求,需要更可靠、更即時且無延遲的通訊。

 

3.高連線數mMTC(Massive Machine Type Communications)

裝置連線密度更高:每單位面積內可以連接的設備數量上看 100萬 devices/km2。

需要連接大量異質性的裝置,每平方公里可達 100萬以上的裝置連線,代表可同時連結更多數量/更多元的裝置。

 

上述資料引用自參考資料[1]

4G VS 5G比較表

4G 5G
峰值速率(理想上傳、下載速度) 0.1-1 Gbps 1-10 Gbps
延遲 高 15-25毫秒(0.15-0.25秒) 低 1毫秒(0.001秒)
頻率 10 GHz以下 30到300 GHz
優點 頻率低穿透性較高,較少基地台就能服務,涵蓋率較廣 相對4G,高速10倍以上,延遲低且可以同時服務較多的裝置

 

缺點 頻寬小相對容易造成壅塞 高頻率穿透力較低,與4G相比,訊號強度隨著距離快速轉弱,

因此需要建置更多基地台,以確保訊號連結順暢,需建設相對4G 2~3倍以上的基地台數量

以上表格資料引用自參考資料[2]、[3]

目前5G的基地台分為兩種模式,台灣目前大部分都採取NSA模式,希望以後SA模式能盡快商業化

SA – 獨立模式

SA則是建置新的5G基地台,核心網路使用5G架構,不再依賴4G,傳輸速率不受限制。注意5G 頻寬特性,基地台密度須大幅增加 (成本增加)。

NSA – 非獨立模式

NSA是4G和5G基地台並存,優勢在於初期投入成本較低,但傳輸速率受限。

 

以上資料引用自參考資料[4]

 

因為5G使用了高頻所以穿透力較低,這時候在很多建築物的地方又沒建置很多基地台會讓室內5G訊號微弱,甚至沒有5G訊號。

這時候我們在室內可使用Wi-Fi 6來增強我們的Wi-Fi訊號。

 

Wi-Fi 6是什麼?

首先,WiFi 6與5G擁有一樣的基礎架構,都支援正交頻分多工(OFDM)、多重輸入與輸出(MIMO)跟高階調變(HOM)技術,無論是在效能、延遲性、頻譜效益、連結密度等面向的表現,WiFi 6與5G的表現是旗鼓相當的。

其次談到安全性表現,相關研究指出 LTE技術很容易遭受攻擊,包含數據攔截與設備追蹤等,5G確實提供了相對安全的防護機制,如多種身分驗證與更好的密鑰管理,但是,WiFi 6的安全防護性也不斷提升,如新增的WPA3標準跟WiFi認證的增強型開放技術等,更重要的是,當企業將網路連結方式從WiFi轉變為5G(包含虛擬網路切片技術),意味著企業建置的SIEM、DLP等安全防護機制將失去對網路流量的可見性,同時,也沒辦法清楚掌握每一個網路活動的關聯性。

最後,5G因為物理特性導致穿透力差導致室內應用有限。想要發揮效能,必須建置大量的分散式天線或小型基地台,因而成本上升。相較之下,可以跟5G串連的WiFi 6因為在室內的移動連結性表現較佳,因此,從室內每坪建置成本與產品生命週期的角度來看,WiFi 6的成本遠較架設分散式天線與小型基地站來得實惠。

值得特別注意的是,以5G作為連結企業內部各種智慧聯網裝置的成本不僅止於網路建置成本,企業必須自行安裝兼容5G-compatible cellular modems,才能讓網路中各種裝置順利連結上5G網路,平均每一位員工的5G連線成本得向上增加100美元,因此多數企業已選用5G主外、WiFi 6主內的混合式架構,作為整體基礎架構。

 

以上資料引用自參考資料[5]

 

思科:5G 和 Wi-Fi 6 將相輔相成

當5G 成為企業架構網路的選項之一,思科Cisco認為:未來5G和Wi-Fi 6 將是相輔相成。以企業建置5G專網為例,應依應用的需求,建立不同的優先、延遲、權限,並非全然使用5G,Wi-Fi也是重要的連結方式之一。

以上資料引用自參考資料[6]

有興趣的人也可以去以下網站看看思科對於5G 和 Wi-Fi 6的介紹。

什麼是Wi-Fi 6?- 新世代Wi-Fi

 

 

實際開箱測試ZyXEL NR5101 5G NR室內路由器5G+Wi-Fi 6訊號速度

首先說一下我使用的筆電型號為ACER的Aspire 5(A515-52G系列),這款筆電並不支援Wi-Fi 6。但以目前台灣的5G訊號的速度是不常達到1Gbps的情況下,Wi-Fi 5的筆電是可以使用的,我們主要也是使用Wi-Fi 6路由器正交頻分多工(OFDM)、多重輸入與輸出(MIMO)跟高階調變(HOM)技術的功能。

如要使用Wi-Fi 6的人記得要去找2020年以後新的筆電才可能支援接收Wi-Fi 6訊號,您可以看看電腦Wi-Fi 的通訊協定有無支援802.11ax這即是Wi-Fi 6的協定。

 

以下是ZyXEL NR5101 5G NR室內路由器官網的youtube影片介紹:

 

外盒並沒有很大,上面寫著5G NR Indoor IAD,ZyXEL也有另外一款5G NR Outdoor Router是戶外使用的5G分享器。

打開盒子可以看到有 NR5101本體網路線和變壓器。

變壓器部分使用DC接頭的,輸出電壓則是24W的12V、2A。

接著接上電源開機,可以看到我用單手就拿得起來

機器上的燈號由左至右分別代表著:電源、行動網際網路(藍燈是5G、綠燈是3G、4G)、手機通話訊號強度、Wi-Fi訊號、有無電話來電

把機器轉到後面可以看到,上方有兩個外部天線連接器(SMA型),可以增強訊號。下方有兩個網路孔可以透過網路線共用網路給其他設備。

再來連線進入此機器的系統設定網頁查看,以下是操作系統主頁面網頁,目前設定語系只有英文沒有中文

Connectivity選項裡可以知道目前有多少裝置連線進入我們的裝置

System Info可以查看目前有無透過網路線共用連線至其他設備,或是本身的Wi-Fi的速度為多少。

WiFi Settings 可以更改Wi-Fi帳號跟密碼。

也可以設定訪客登入Wi-Fi帳號密碼,區域網路的部分可以進行相關IP的設定。

ZyXEL NR5101 5G NR室內路由器實際網速測試

由於市面上的其他吃到飽的5G專案目前都設有熱點流量限速根據資費不同超過規定流量以上開始限速,我們使用的SIM卡是中華電信的5G語音&數據預付卡,999元有60GB的傳輸量(熱點不限速)、300元額度通話。

由於我們通常都在各大學校上課所以我們通常使用NTU Speed 台大測速網站測速

http://speed5.ntu.edu.tw/speed5/

首先最初我們在公司測試(公司的地址為台北市中正區中華路二段165號)

地形如下圖 周遭沒有很多高樓大廈

用我的筆電連線測試的速度如下 平均下載都有187Mb/s 上傳都有77Mb/s

第一次:下載:194Mb/s上傳78Mb/s

第二次:下載:241Mb/s上傳87Mb/s

第三次:下載:126Mb/s上傳66Mb/s

 

之後測試隔一道15CM厚的水泥牆,訊號雖然有衰減但還是有達到下載160Mb/s上傳56Mb/s以上

測試速度分別為

第一次:下載:167Mb/s上傳55Mb/s

第二次:下載:179Mb/s上傳57Mb/s

 

我們測試衰減訊號的房間格局如下,如果像我們一樣是在不大坪數的房間使用上是很足夠的。

然後使用我自己手機的4G網路測試結果如下(一樣是中華電信)

以下是使用我自己的手機4G網路為下載55Mb/s上傳19Mb/s

使用手機連上我們的ZyXEL NR5101 5G NR室內路由器,可以看到速度明顯提升。

下載116Mb/s上傳66Mb/s

接著我們到各地上課測試的數據情形如下

 

digiBlock C數位創新基地(地址:台北市大同區承德路三段287號)

最快曾經到達下載302Mb/s上傳76Mb/s

但上課時人變多的時候速度變降為下載130Mb/s上傳25Mb/s

接著是在Fablab Taipei 台北自造實驗室(在圓山花博爭豔館裡面)

我們可以看到以下圖片機器全部亮綠燈,代表此地方沒有5G訊號

這時候我們可以到各電信相關網站查訊5G訊號的強度

例如以下是中華電信的5G/4G訊號地圖,我們可以看到Fablab Taipei所在地點是藍色照理來講應該要有5G訊號的,但到室內訊號就變成4G了,可能是基地台訊號強度問題,還有跟建築物大多是採取鋼筋水泥導致訊號衰減較快。

https://coverage.cht.com.tw/coverage/tw.html

 

中華電信的5G/4G訊號地圖

4G的速度下載132Mb/s上傳34Mb/s

最後我們來到了高雄測試

首先是高科大 楠梓校區行政大樓(可以發現周遭很寬敞地形如下圖)

用我的筆電連線測試的速度如下 平均有下載205Mb/s上傳25Mb/s,可以發現下載比台北快但上傳變比較慢。

第一次:下載:155Mb/s上傳24Mb/s

第二次:下載:208Mb/s上傳26Mb/s

第三次:下載:253Mb/s上傳25Mb/s

 

 

最後我們在高雄巨蛋附近進行測速,平均有下載290Mb/s上傳35Mb/s

第一次:下載:288Mb/s上傳38Mb/s

第二次:下載:289Mb/s上傳35Mb/s

第三次:下載:294Mb/s上傳33Mb/s

我們可以發現到高雄的下載速度都比台北快,但上傳都比較慢。不知道是否為使用人數/測試地方剛好訊號都不夠強。

之後如果有機會借用到Zyxel 5G NR Outdoor Router (NR7101),相信會有更精準的測試結果。

Zyxel 5G NR Outdoor Router 官方影片

 

由於以上我們都是使用台大測速,都是對國內的測速。我在高雄測速時發現網速蠻快的另外使用了市面上常用的測速網站Speedtest進行測速。

分別在高科大 楠梓校區部分測到的速度有下載:308Mb/s上傳25Mb/s

高雄巨蛋部分測到的速度有下載:412Mb/s上傳40Mb/s

ZyXEL NR5101 5G NR室內路由器的下載速度是可以超過400Mb/s的

另外有關於上課時需要多人多裝置連線時我們是如何設置5G設備的,我們會在另一篇文章繼續說明。

 

參考資料:

【開箱評測文】ZyXEL NR5101 5G NR室內路由器開箱評測文(下)

$
0
0

這次為了我們的5G課程,跟合勤科技股份有限公司借了一台5G路由器來上課,是這台ZyXEL NR5101 5G NR室內路由器。(感謝ZyXEL獨家贊助,目前台灣尚未販售,也歡迎其他的朋友們一起合作)

ZyXEL NR5101 5G NR室內路由器可以接收5G(藉由SIM卡)訊號,並且可以發送Wi-Fi 6訊號的一台路由器,它也可以透過RJ45網路線共享接收到的5G訊號。

作者/攝影 郭俊廷

此篇文章將來介紹我們是如何配置ZyXEL NR5101 5G NR室內路由器,讓超過20人上課時也可正常連線的方法。

首先先來詳細介紹一下ZyXEL NR5101 5G NR室內路由器的功能(以下功能說明取至官網及Datasheet文件)

以下是ZyXEL NR5101 5G NR室內路由器特點介紹

  • 支援低至超高頻段 5G NR C波段頻譜,自 RF 4G LTE 到 5G NR,同樣頻寬下行速度比 4G LTE 至少提高 13.3%,大幅提升用戶上網流暢度。
  • 採用延遲控制 (Latency control)、上行鏈路服務品質(UL QoS) 管理機制等智慧延遲控制機制,可將來回通訊延遲(Round-trip delay time)減少 400% 到低於10ms (毫秒) ,協助電信營運商提供極致行動連網體驗。
  • 同步支援 TR-069/ MQTT 雙重遠距管理標準,支援系統配置管理、流量監控、錯誤診斷自動化,且支援無線韌體升級,大幅減少電信營運商派遣技術人員的需求並降低維運成本。
  • 同步支援最新 Wi-Fi 6 (11ax) 無線網路標準,透過正交頻分多址 (OFDMA)、多使用者多重輸入多重輸出 (MU-MIMO) 等技術,即使在高密度無線裝置同時連網時,也能保有優異傳輸速度。另支援 RU scheduling、BSS Coloring、1024-QAM、Target wake-up Time 等降低延遲及省電機制。

 

以上資料引用自參考資料[一]

 

以上所說的5G NR是甚麼意思呢

5G NR,它指的是5G New Radio。高通(Qualcomm)評論:NR是個複雜的話題,它涉及一種基於正交分頻多工(OFDM)的新無線標準。OFDM指的是一種「數位多載波調變方法」,其中「使用大量間隔緊密的正交子載波訊號在幾個並行資料流程或通道上傳輸資料」。隨著3GPP採用這一標準之後,NR這一術語被沿用下來,正如用LTE描述4G無線標準一樣,可以說用NR來描速5G無線標準。

5G NR是由3GPP開發的 5G 行動通訊網路之新無線接入技術,屬於5G NR的全球通用標準,相關技術細節定義於3GPP的38系列規範。

5G NR頻段在總體上被分為兩個頻率範圍:

Frequency Range 1(FR1),包括6G赫茲以下(sub-6GHz)的頻段,目前擴充到410 MHz至7125 MHz。

Frequency Range 2(FR2),包括毫米波範圍內的頻段,準確為24.25 GHz至52.6 GHz。

以上資料引用自參考資料[二]、參考資料[三]

 

至於此ZyXEL NR5101 5G NR室內路由器支援的4G、5G頻段請看以下表格(資料引用自原廠說明書):

4G 5G
支援頻段 LTE-FDD: B1/B3/B5/B7/B8/B20/B28/

B32/B38/B39

LTE-TDD: B40/B41/B42

n1/n3/n5/n7/n8/n20/n28/n41/n77/n78/n38/n40

 

下圖是我們上課時經常使用的網路配置,ZyXEL NR5101 5G NR室內路由器,加上一個Gateway(型號ZyXEL ATP100),另外接兩個AP(型號ZyXEL NWA5123-AC HD),足夠我們上課使用超過30個裝置連線。

 

以下是兩個型號的產品說明書,如有購買需求請洽詢機器人王國(電話02-2306-2900)

 

ZyXEL ATP100:https://www.zyxel.com/tw/zh/uploads/images/191030_ds_zywall_atp_series_tw_v1.pdf

ZyXEL NWA5123-AC HD:https://www.zyxel.com/tw/zh/uploads/images/20171026_ds_nwa5123-ac_hd_tw_v1.pdf

本次配合經濟部工業局,財團法人資訊工業策進會的5G+產業新星揚帆啟航計畫。其中有三門類型的課程各功能需要配合不同的網路情境。

 

第一門是5G x LinkIt 智慧居家實作工作坊

需要有多台裝置連線進入同網段網路才可進行IoT相關設定,但不會使用太多網路流量。

第二門是5G延伸應用Azure智慧商店實作工作坊

不需使用同網段即可將圖片上傳至Azure的Custom Vision進行訓練產生相關辨識模型檔,但會使用較多網路流量。

第三門是5G + AI 深度學習影像串流應用這門課程

要使用學員筆電連接網路還需使用NVIDIA Jetson Nano開發板連線,還需要使用DeepStream影像串流,需要較多同時上傳/下載的流量。

 

5G課程經常使用的網路設備的配置圖如下

5G x LinkIt 智慧居家實作工作坊,需要將LinkIt7697的物聯網小屋和筆電連線在同一個網路中才可設定其相關IoT程式設定。

我們採取的架構如上圖,不直接透過ZyXEL NR5101 5G NR室內路由器分享Wi-Fi,而是透過接收5G訊號後經過網路線分享到Gateway上之後,再透過Gateway共用給兩台無線AP,這兩台無線AP可以提供給15人以上的筆電+LinkIt7697連線,共30個裝置以上且不會斷線。(上課當天實測可以35個裝置以上連線)

 

接著是5G延伸應用Azure智慧商店的部分,使用兩台AP給30個裝置以上連線沒問題,只是在Custom Vision進行圖片上傳時也是會計算到5G的流量,目前台灣5G還沒有熱點分享吃到飽的情況下,要稍微注意一下網路流量的問題。

另外使用Azure Percept在同一個網路底下可以透過其他電腦或手機連線進去查看其辨識的狀態。

Azure Percept架設情形如下圖,我們另外架設兩台AP

老師連線進入Azure Percept查看其辨識即時影像結果的網頁(此模型是標記人物)

手機也可透過其同網段的IP連線進入查看

25人連線進入查看Azure Percept,都正常無斷線情形

最後是5G + AI 深度學習影像串流應用課程,因需有影像上傳下載同時進行的部分故使用原先的ZyXEL NWA5123-AC HD會有網路延遲的問題,因為此型號只支援到Wi-Fi 5。這時候我們實際上使用了ZyXEL NR5101 5G NR室內路由器可以同時連線10個裝置(五台電腦、五台)的影像串流是沒有問題的,但在超過10個裝置以上進行影像串流還是建議使用另外配置一個專門連線的Wi-Fi 6路由器。

至於Wi-Fi 6為甚麼可以增加影像串流傳輸的效率的詳細介紹請參考以下說明:

新世代的 Wi-Fi 6 受惠於 OFDMA 技術(Orthogonal Frequency Division Multiple Access),它改善了 Wi-Fi 5 ( 802.11ac )的 OFDM 技術缺陷,讓調製訊號符號的長度提升 4 倍之多,同時透過通過更寬的窗口把不同角度反射過來的信號組合在一起,進而改善 AP 路由器端與設備端能的多​路徑(Multipath)​衰減​問題。

受惠於 Wi-Fi 6 多路徑的解碼能力增強,在實際應用時不僅無線網路的接收穩定性提升,傳輸距離也會增加,傳輸範圍最高甚至可提升到 80% 之多。

 

OFDMA 技術讓同時傳輸的封包串流提升

Wi-Fi 6 的 OFDMA 技術不僅可以提升 WiFi 網路的覆蓋範圍,也能提升網路傳輸速度。

過往 Wi-Fi 5 的 OFDM 技術,無論應用、流量大小,都會占用整個數據串流。

舉例來說,當有橘色、藍色、綠色三位使用者同時上網時,就像有三輛貨車分別載運貨物,三輛貨車必須依序排隊離開,這種運送方式不僅會出現運送延遲( Latency ),而且因為這三輛貨車所載運的貨物不會滿載,所以很浪費空間,這樣的運送方式會佔用數據串流。

但是,如果橘色、藍色、綠色三位使用者使用的是 Wi-Fi 6 路由器同時上網,Wi-Fi 6 就有如一條實施高乘載管制的高速公路,每一輛貨車都必須載好載滿指定的數據量才能上路, Wi-Fi 6 也就是說可以在單一串流同時傳輸多種網路應用(封包)。這麼做不僅能提升資源的利用效率,還能根據應用的類型自動調整頻寬資源,甚至提升封包轉發效率、降低 WiFi 傳輸的延遲等待時間。

 

MU-MIMO 無線設備量提升

Wi-Fi 6 除了 OFDMA 技術之外,還支援 8×8 MU-MIMO 技術,能增加同時溝通的 WiFi 裝置數量。

MU-MIMO 是指路由器支援多個使用者可同時存取,也就是同一時間可與多台裝置進行傳輸。在 Wi-Fi 5 (802.11ac)時代的 MU-MIMO 僅支援下載,而 Wi-Fi 6 的 8×8 MU-MIMO 技術則是可以同時在上傳和下載使用。

 

不過,該怎麼形容 MU-MIMO 功能呢?如果把路由器想像成一家客運公司,WiFi 頻寬就像是一輛客運巴士,在 WiFi 技術剛催生時,一次只能載運乘客(封包)到一個目的地 (WiFi 設備)。

而 Wi-Fi 5 (802.11ac)支援 4×4 MU-MIMO,就像是這家客運公司可同時發出 4 輛客運將封包乘客送到 4 個不同 WiFi 設備,至於最新的 Wi-Fi 6 則是一次發 8 輛車到載運封包到 8 個不同的 WiFi 設備,如此一來就能提升 WiFi 頻寬的使用效率,同時也增加 WiFi 連線裝置的數量。

這表示無論是在串流、下載、進行 VR/AR、MMO 或 RPG 遊戲,Wi-Fi 6 支援 8 條串流,都能提供所有應用足夠的頻寬。

 

以上資料引用自參考資料[四]

 

以上就是我們的ZyXEL NR5101 5G NR室內路由器的功能介紹以及我們在5G+產業新星揚帆啟航計畫課程中的網路配置說明。

 

如有相關專案與課程合作,歡迎聯繫我們~

☎服務專線|02-2306-2900 ✉客服信箱|service@cavedu.com

 

參考資料:

 

【tinyML專題】 使用 EdgeImpulse 讓您的 Arduino 可以辨識手勢!

$
0
0
作者/攝影 曾吉弘
時間 2 小時
難度

★★★☆☆

材料表

1 認識 wio terminal

Wio Terminal 是一款專門用於 IoT 與 TinyML 的多功能開發板 – 包含了 ATSAMD51P19 晶片並以 ARM Cortex-M4F 為核心 (20MHz),已支援多種針對微控制器的 ML推論框架。

本開發板已包含:

  • 光感測器(類比)
  • 麥克風
  • 可自訂按鈕 x 3
  • 4 英吋彩色LCD
  • 加速度感測器
  • Grove 接頭 x 2,可連接多達300種 Grove 感測器

就軟體面來說, Arduino IDE 已可用於開發各種支援 Edge Impulse 與 Tensorflow Lite 的微控制器裝置來進行神經網路訓練與推論,或者您也可以玩玩看另一款熱門的開發環境 platformIO  也可以玩玩看。Edge Impulse 是一款針對邊緣運算裝置 x 機器學習的簡單易用的 coding free 開發環境。使用者可透過網頁介面就可以完成整個 tinyML 作業流程,從資料收集、資料處理、訓練神經網路到匯出部署,一條龍啊!

本文將示範如何把 wio terminal 所收集到的手勢資料 (光感測器數值變化) 上傳到 Edge Impulse,完成上述流程之後再放回到 wio terminal 來執行離線 ML 推論,超好玩又富有學習意義,您一定要試試看!

如何辨識手勢

在此的假設為,不同的手勢在光感測器上方晃動時,會產生可區別的時序資料(time series data),我們就是要把這些資料送到 Edge Impulse 網站來處理、學習,並匯出一個 wio terminal 可執行推論的神經網路模型檔!

可想而知,如果用傳統的做法就很難去定義,怎樣的 pattern 可以一體適用各種不同的手勢都可以有不錯的辨識效果。(後續各位在收資料的時候就知道,同一種手勢的 time series 資料形狀差異很大!

 

2 PC端設定

2-1 設定 Arduino IDE 2.0

根據原廠文件,請使用 Arduino IDE 1.9 以上,所以我直接使用 2.0,請根據您的作業系統版本取得對應的 Arduino 2.0 IDE

注意!編譯 Edge Impulse 匯出檔案才需要用到 Arduino IDE 1.9以上,如果是把 wio terminal 當作一般 arduno 使用的話,經我實測使用 Arudino 1.8.X 沒有問題

 

請在 File → Preference →  Additional Baord url 欄位中填入:

https://files.seeedstudio.com/arduino/package_seeeduino_boards_index.json

完成之後就可以透過  Tools → Board → Board manager,輸出 “Wio” 來安裝 wio terminal 相關套件,點選 INSTALL

完成就可以看到 Wio Terminal 相關選項

 

2-2 安裝 node.js 與 edge impulse 相關工具

根據您的平台安裝 Node.js 1.0 以上版本,完成之後開啟 cmd 輸入以下指令來安裝 edge-impulse-cli:

npm install -g edge-impulse-cli

3 透過 edge cli 上傳感測器資料到 Edge Impulse

請新增一個 Arduino專案,輸入以下程式碼上傳到 wio terminal,會透過 serial 把光感測器資料傳給 edge cli,再上傳到 Edge Impulse 網站的指定專案(當然是您的帳號)

由 FREQUENCY_HZ 40 可知,我們會在 1000 ms (1秒鐘) 的時間長度取得 40 筆光感測器資料,並以這一段時間中的亮度變化作為指定的手勢,也預設 石頭 的手勢差異是可以被學習出來的。

#define FREQUENCY_HZ 40
#define INTERVAL_MS   (1000 / (FREQUENCY_HZ))

void setup() {
    Serial.begin(115200);
    Serial.println("Started");
}

void loop() {
    static unsigned long last_interval_ms = 0;
    float light;
    if (millis() > last_interval_ms + INTERVAL_MS) {
        last_interval_ms = millis();
        light = analogRead(WIO_LIGHT);  //讀取 wio 光感測器類比腳位
        Serial.println(light);
    }
}

燒錄完成之後 wio terminal 就擺著,接著要透過 edge cli 來上傳資料到 edge Impulse 網站

開啟 cmd 之後輸入以下指令,會請您登入 edge Impulse 的帳號密碼並詢問以下事項:

  • 裝置所連接的 COM port
  • 命名資料欄位:如下圖的 light

由下圖可以看到您的裝置 ID: 01:DF:FE… 這一段,就是透過這個 ID 來識別您的裝置。

edge-impulse-data-forwarder

Edge Impulse – 登入與設定裝置

這一段最辛苦啦,幾乎所有的設定都是在 Edge Impulse 網站上完成,但說真的已經省很多事情了。

請先建立一個 Edge Impulse 帳號並登入。為了怕各位迷路,我會用顏色來標注現在是在哪一個 tab。以下是登入後的主畫面,也就是畫面左側 – Dashboard,可以看到專案相關設定。

左側 – Device

裝置基本設定,可以看到本帳號下的所有裝置,可以點選右側 來編輯裝置設定或刪除裝置

Edge Impulse – 收資料

這裡要收資料,請確認您的 wio terminal 已經上傳上述 arduino sketch 來準備傳資料,否則資料當然無法上傳到 Edge Impulse網站。

請點選左側 – Data acquisition

中間的 collected data 一開始當然不會有東西,因為還沒開始上傳資料。請於畫面右側這樣設定:

  • Label: rock (石頭)/ paper (布) -> 要辨識多少種手勢都沒問題,端看您願意花多少時間去收資料而已。
  • Sensor: Sensor with 1 axes (light)
  • sample length(ms): 1000
  • Frequency (39Hz) 這裡自動帶入 arduino sketch 的 FREQUENCY_HZ,不用改

好了之後,按下右下角的 Start sampling,這時候請準備好您的手在 wio terminal 的光感測器擺好手勢並晃動。取得資料,就會在畫面中間多一筆新的資料出來,點選該筆資料就可以看到他形狀(光感測器讀數 vs 時間)

上傳多筆資料之後的畫面如下,在此請讓您所要辨識的 label 的資料筆數盡量相等,反正上傳也不會很麻煩,每一筆資料右側的 都可以點選來編輯資料屬性或刪除該筆資料。

最後請點選 train / test split 來設定訓練/測試資料的分配比例,完成每一項的必要設定之後,前面會亮起綠色燈,才能進到下一步。

Edge Impulse – 訓練模型

左側 – impulse design / Create impulse

根據 EdgeImpulse 本身的定義,impulse 是指一個 pipeline,您會在此設定關於 raw data 處理方式、如何處理(processing block)、如何學習(learning block),這樣才算是一個完整的流程。

以我們的手勢辨識範例,在此是長度為一秒鐘的光感測器資料,所以屬於 time series data。在此請把 window size 與 window increase 分別設為 1000, 50ms,Frequency 會自動帶入 wio terminal Arduino 碼設定中所的頻率 (40Hz),這裡就不用動。

點選 [Add a processing block] ,選單中選擇  Raw data,就會新增這個block。

請在其中選擇 Input axes 也就是所要處理的資料,在此只有一筆,就是  light。不同型態的資料可能會用到更多 processing block,之後再慢慢說明。

接著點選 [Add a learning block] ,選單中選擇  Classification (Keras),就會新增這個 block。fafa   Input feature 選擇  Raw data,輸出會自動帶出 2 (paper, rock) 也就是 data acquisition 時所設定的 label 名稱。

本區設定完成如下圖,最後點選 Save Impulse 就完成了。

Edge Impulse – 原始資料產生特徵

左側 – impulse design / Raw data 

在此要針對原始資料產生特徵,先看到 Parameters 標籤,到時候要把 Raw feature 這一段複製到最後匯出的 arduino sketch 才能順利執行推論。

接著按下 Generate features 標籤,跑完會看到如右圖的資料特徵分布,這一段就完成了。

Edge Impulse – 訓練模型

左側 – impulse design /  NN classifier

本段要設定神經網路架構,可以自己定義神經網路架構,在此我新增了兩個 Dense 密集連接層,分別使用 20, 10 個神經元,相當小巧。另外兩個參數如下設定:

  • Number of training cycles: 看過一遍所有資料稱為一次,在此設定 500
  • Learning rate: 神經網路收斂的速度,這個數值通常非常小,在此設定 0.0001

當然功能不止這樣啦,點選 [Add an extra layer],可以看到以下 keras 層,要加入卷積層也是可以的,別急別急,之後都可以玩玩看的。

設定好架構之後,點選下方的 [Start training] 就會開始訓練,過程中沒有寫一行程式碼,真的很方便!右側可以看到訓練過程中的輸出訊息。

第一次訓練完的 accuracy / loss 只有 75%, 0.65,差強人意呢

我又上傳了一些手勢資料,用同樣的架構再跑一次,accuracy 就到 100%了!當然 loss 0.62 很高啦,不過這之後可以慢慢調,先繼續下去吧

Edge Impulse – 測試神經網路模型成效

 

網站左側,選擇Live Classification

先不急著匯出,先上傳一筆資料玩玩看,可以上傳懸心資料,或是從既有資料來看看

左下角可以看到 PAPERS 0.52, ROCK 0.48,這當然不是一個很好的結果,就需要回頭去調整資料,或是修正更好的神經網路架構

Edge Impulse – 匯出神經網路模型

網站左側,選擇 Deployment

會列出目前可匯出的平台,請點選 Arduino,另外也可以看到 NVIDIA tensorRT,各種選項愈來愈完整,非常棒。

同一個頁面往下拉,使用預設設定 Quantized (int8),接著選擇 Build

看到這張圖就沒問題了, .zip 檔不用解壓縮,等等直接匯入 Arduino IDE 即可。

 

Arduino 匯入之後開始使用

開啟 Arduino IDE,選擇 Sketch → Include Library → Add .ZIP library  匯入上一步取得的 .zip

完成之後就可以在 File 選到這個範例,請開啟其中的 static buffer

請到 Edge Impulse 網站,選擇 Impusle design / Raw data,複製 Raw features 到您的樣板專案中,有一個複製符號可以直接按,這裡的資料數量就會等於 Frequency,以本範例來說就是 40。

貼到您的 Arduino 範例中的  features[] 陣列中,這樣就可以了。

接著上傳程式到 wio termnial ,就可以從 serial monitor 看到每一次的推論結果,happy making!!

開箱 NVIDIA 全新推出的機器人模擬平臺 Isaac Sim

$
0
0

1. 介紹

NVIDIA 在今年2021的一月份釋出了最新 Open Beta 版的 Isaac Sim, 是一款主打機器人/AI模擬的平臺, 裡面不只內建物理引擎, 還有支援感測器例如光達、攝影機、力感測器的模擬, 甚至還能夠結合最新的機器人系統 ROS2 的開發。

下面是模擬 Franka Emika Panda 的機械手臂去追蹤一個物件, 其過程不能有手臂自身的碰撞,並可以即時的定位夾爪到物件的上方。

 

也許會有讀者好奇這樣的模擬系統,能不能支援自己設計的機器人? 答案是可以的哦! 目前有支援各種常見的CAD 檔,讀者可以將設計好的檔案匯入到 Isaac Sim 當中, 並設定物理上的可動參數,如下官方的示範影片:

本篇文章將介紹如何安裝單機版的 Isaac Sim, 架起模擬的伺服器,以及遠端操作模擬環境。

 

1.1. 安裝的基本需求

如果是要在電腦上安裝 Isaac Sim 的話, 官方建議是最少要有 16GB 的記憶體, 並且最好有 GeForce RTX 2070 以上的顯卡, 才能負荷得了模擬器的計算。

在作業系統的部分,目前的 Isaac Sim Server 必須是 Linux 環境才可以跑,而官方推薦的是 Ubuntu 18.04 。 但 Isaac Sim Client 的部分則是有支援 Windows 和 Linux,通常的使用情境是我們先架設一個算力比較強的電腦, 上面安裝 Linux 系統,作爲 Isaac Sim 的 Server,然後在開發時就可以用筆電連到 Server 去跑模擬。 順帶一提,官方也有提供雲端主機的 Docker Image 作爲遠端的 Server , 例如: Amzaon AWS, Microsfot Azure.

而顯卡驅動的部分,請在終端機上執行一下的指令來安裝官方建議的版本

sudo apt-get update
sudo apt install build-essential -y
wget https://us.download.nvidia.com/XFree86/Linux-x86_64/460.67/NVIDIA-Linux-x86_64-460.67.run
chmod +x NVIDIA-Linux-x86_64-460.67.run
sudo ./NVIDIA-Linux-x86_64-460.67.run

1.2. 下載 Omniverse

Isaac Sim 其實是基於模擬平臺 Omniverse 上開發,專門用來做機器人/AI 的模擬, 所以我們必須先下載 Omniverse (https://www.nvidia.com/en-us/omniverse/) 。

作爲 Isaac Sim Server 的電腦必須是Linux 系統, 所以這邊記得要選 Linux 的版本。

接下來可以點選下載完的檔案 omniverse-launcher-linux.AppImage , 就可以啓動 Omniverse 囉!

注意: Omniverse 在每次啓動時,都必須要連到網路來驗證 NVIDIA 的帳號,不然無法啓動哦!

2. 安裝 Isaac Sim

Omniverse 其實只是一個通用的模擬平臺, 接下來我們必須再安裝一些模組來讓我們成功使用 Isaac Sim 。

 

2.1. 安裝 Omniverse Nucleus

Nucleus Server 可以讓各個 client 之間可以溝通, 是 Omniverse 底層必要的元件,如下圖,可以點選上方選單中的 NUCLEUS 來初始化設定。

2.2. 安裝 Omniverse Cache

接下來是 Omniverse 的快取資料庫,請切換到 EXCHANGE 並輸入 CACHE 來搜尋並安裝。

2.3. 安裝 Isaac Sim

最後就是我們的主角啦,一樣在 EXCHANGE 這邊,輸入 SIM 來搜尋並安裝。

 

點選 INSTALL 開始下載。

整個 Isaac Sim 其實不小,大概要 1GB 左右,耐心等候一下吧。

3. 啓動 Isaac Sim !

現在系統搞定了,Isaac Sim 也安裝完成了,讓我們來點選 LAUNCH 啓動看看吧!

這邊會有四種的啓動方式,第一種是最直接的, 直接在電腦上開,如下圖:

因爲目前還是 Beta 的版本,開啓的過程中可能會有各種的警告, 或者是如下圖問你程式卡住了要不要停止之類的訊息, 這裡不用慌張,點選 Wait 等一下子就可以叫起來了。

注意:如果讀者是用的是記憶體只有剛好達16GB 的電腦,請注意到啓動前可用的記憶體 還有多少,如果太少的話有可能程式會直接突然跳掉,筆者在這邊建議還是用至少 32GB 記憶體的 電腦會比較保險哦!

而其他種的啓動方式,則是遠端連線的方法,意思是這臺電腦會作爲一個 Isaac Sim 的 Server,啓動後並不會看到任何的 GUI ,要如何操作必須透過 另一個 Isaac Sim Client 連進去才行。筆者在這邊介紹其中兩個常用的 Client。

3.1. Livestream WebSocket

第一種是走 WebSocket, 只要知道 Isaac Sim Server 的 ip 位址, 不管是用筆電還是手機都可以在瀏覽器連到下面的連接來操作 Isaac Sim 。

http://<ip address>:8211/streaming/client

不過目前的話不建議多個使用者連到同一個, 並且在一些 gamepad, touch input 的裝置上支援仍然有限。

3.2. Kit Remote Client

第二種則是走 stream 的 Kit Remote, 筆者使用的經驗是這種方法是比較穩定的遠端操作方式。 但在 Client 端的電腦就必須依照系統的不同來安裝對應的 Viewer 。

在終端機中輸入以下指令來安裝必要的編碼函式庫

sudo apt-get install libavcodec57 libavformat57 libavutil55 libsdl2-dev libsdl2-2.0-0

連線方法:

./kit-remote.sh -s <remote_ip_address>

連線方法:

kit-remote.exe -s <remote_ip_address>

注意: Kit Remote 的方法是不能夠多個使用者同時連線到同一個 Server 的哦!

4. 來玩玩看一些機器人的範例!

Isaac Sim 其實有提供一些機器人的範例可以讓我們快速的 瞭解模擬的一些功能,不過這部分必須額外下載一些套件包。

下載 Isaac Sim Assets

wget https://developer.nvidia.com/nvidia-isaac-sim-assets-20211 -O $HOME/Downloads/isaac-sim-assets.zip
sudo apt install unzip -y
unzip isaac-sim-assets.zip -d Isaac
sudo chmod -R 775 Isaac

下載完後會有解壓縮的 Isaac 資料夾放在家目錄底下的 Downloads 中, 我們必須把它上傳到 Isaac Sim 中。請在下方 Content 中,左邊的欄位點選 localhost, 右邊的檔案區按右鍵選擇 Upload Files and Folders 。

接下來選擇剛剛解壓縮後的 Isaac 資料夾上傳。

那麼最後就讓我們用兩個機器人的範例做收場吧!

4.1. Jetbot

第一個是鼎鼎大名的自駕小車機器人 Jetbot,

在上方工具列選擇:Isaac Examples >> Input Devices >> Jetbot Keyboard

點選 Load Jetbot 來載入 Jetbot 機器人到模擬環境中

如下圖,會有一台 Jetbot 被加到模擬中, 並且會有一個背景一併被加進來 。

點選左邊的播放鍵來執行鍵盤控制機器人的範例, 讀者可以使用 W/A/S/D 四個鍵來操作機器人進行移動。

範例影片:

 

4.2. RMP

第二個範例我們來玩一下 Franka Emika Panda 的機械手臂, 並讓它去追蹤一個虛擬的物件 。

首先,在上方工具列選擇:Isaac Examples >> Controlling >> Manipulation >> RMP Example

 

點選 Load Robot 來載入機械手臂。

 

接著點選左邊的播放鍵來開始模擬。

 

點選 Follow Target 會造出一個虛擬的方塊作爲要追蹤的物件,讓我們用滑鼠拖弋物件來看看機器人是否能夠順利追蹤吧!

 

範例影片:

NVIDIA Isaac Sim 強化學習實作 –讓 Jetbot 自己學會道路駕駛!

$
0
0

承續上篇 Isaac Sim 的介紹 (文章鏈接), 讀者對於如何執行 Isaac Sim 以及它最基本的環境已經有了一些初步的瞭解了, 接下來我們就要來玩一下能不能在模擬環境上部署深度學習模型來讓 Jetbot 機器人 從無到有自己學會道路駕駛,例如下面的範例影片,透過模擬的 Jetbot 鏡頭看出去, 我們可以看到機器人確實有沿着道路在行走!

本篇文章是參考 Nvidia 官方的範例教學 (https://docs.omniverse.nvidia.com/app_isaacsim/app_isaacsim/sample_training_rl.html#jetbot-lane-following-sample) 做成的, 想要進一步瞭解的讀者可以去參考看看哦。

 

2. 準備道路模型

要讓機器人學會道路駕駛,最基本的就是要先有個道路可以讓機器人去跑, 我們在這邊使用樂高的道路平板來拼湊出基本的道路,好讓機器人可以學習如直走跟轉彎。

 

2.1. LeoCAD

  1. 首先,我們必須去下載LeoCAD, 一款專門用來畫樂高模型的繪圖軟體,請點選下方的鏈接來下載並安裝。

     

  2. 安裝完成後,啓動 LeoCAD,在右邊的零件表搜尋一下四種道路平板,
    • 44336p01 Baseplate 32×32 Road 6-Stud Straight
    • 44342p01 Baseplate 32×32 Road 6-Stud Curve
    • 44341p01 Baseplate 32×32 Road 6-Stud T-Junction
    • 44343p01 Baseplate 32×32 Road 6-Stud Crossroad
  3. 可以試着把四片平板組合起來,看看是不是可以拼成以下的道路圖。

     

  4. 那麼最後就是把這幾件平板輸出成 COLLADA 檔,準備做進一步的轉檔處理。

     

2.2. Blender

前面提過我們拿到了道路的 COLLADA 檔, 這是一種用來在多個3D軟體交換用的格式。 但是我們還得要用 Blender 再進行一次轉檔, 才能轉成可以在 Isaac Sim 渲染的圖檔。

  1. 下載並安裝 Blender

     

  2. 將剛剛輸出的 COLLADA 檔匯到 Blender 中

     

    匯入後應該可以看到道路的圖檔顯示如下

     

  3. 接下來我們將每一塊零件的偏移量歸零,因爲等會要丟到 Isaac Sim 時,會用程式組裝出各種可能的道路, 所以我們必須確保零件的原點都是一致的。

     

  4. 從新命名每一個零件,方便我們待會匯入到 Isaac Sim 時比較好辨認。

     

  5. 最後輸出圖檔成 Isaac Sim 可以吃的 fbx 檔。

     

    記得要在 Transform 那邊選擇 Z Up, X Forward。

     

    輸出完成後,我們就會拿到下面四個圖檔。

    • p44336p01.fbx
    • p44342p01.fbx
    • p44341p01.fbx
    • p44343p01.fbx

2.3. 將圖檔匯入 Issac sim

接下來我們回到 Isaac Sim 中,我們要把前面的圖檔匯入到模擬環境中。 首先,開啓 Isaac Sim 並在左下角的 Content 中建立一個 Omniverse/localhost/Library/Props/Road_Tiles/Parts 的資料夾, 然後在右邊的空白欄位點右鍵,選擇 Import and Convert 來匯入 fbx 檔案。

 

假設我們前面的 fbx 檔案是存在 Download 這個資料夾, 我們就可以將他們全選並上傳到 Nucleus 伺服器, 記得在上傳的時候要勾選下面三個選項:

  • Import Materials
  • Import As Single USD
  • Generate Smooth Normals

匯入後如下圖

 

最後檢查一下是否我們要的四塊道路圖檔都有被正確匯入了。

 

3. 開始訓練深度學習的模型

接下來的操作需要使用者有事先匯入 Isaac Sim 的 Asset 套件包, 裡面有機器學習的範例檔,如果不知道怎麼匯入的讀者可以去參考我們的 上一篇文章: Isaac Sim 的介紹 (文章鏈接)。

有別於之前的操作都是直接使用 Isaac Sim 的 圖形化界面, 這次我們啓動訓練模型的程式方法是必須從終端機開始。首先, 在電腦上打開一個終端機,並輸入下面的指令:

cd ~/.local/share/ov/pkg/isaac_sim-2021.1.1/

這個的意思是切換目錄到前面提到的 Isaac Sim 的 Asset 套件包的安裝位置。

然後修改 “python_samples/jetbot/road_environment.py” 這隻程式,將道路圖塊的路徑 改到我們剛剛放的地方,如下

# 1=I 2=L 3=T, 4=X
self.tile_usd = {
    0: None,
    1: {"asset": nucleus_server + "/Library/Props/Road_Tiles/Parts/p44336p01/p44336p01.usd", "offset": 180},
    2: {"asset": nucleus_server + "/Library/Props/Road_Tiles/Parts/p44342p01/p44342p01.usd", "offset": 180},
    3: {"asset": nucleus_server + "/Library/Props/Road_Tiles/Parts/p44341p01/p44341p01.usd", "offset": 180},
    4: {"asset": nucleus_server + "/Library/Props/Road_Tiles/Parts/p44343p01/p44343p01.usd", "offset": 180},
}  # list of tiles that can be spawned

3.1. 確保 GPU 的記憶題足夠訓練模型

筆者的開發環境所用的筆電有的顯卡是RTX 3070, 但即便是擁有8G的記憶體還是無法負荷預設的模型訓練參數, 所以我們會做以下的調整,縮小模型訓練時的吞吐量, 雖然會模型學習的會比較慢,但至少確保能夠正常運作。

我們修改 “python_samples/jetbot/jetbot_train.py” , 這隻程式是我們用來訓練的主程式。 裡面有一個地方是可以設定 batch size 的大小,這個會決定模型每次訓練的吞吐量, 以筆者的8G顯卡爲例,可以設定的最大 batch size 大概是1024。修改如下:

if args.loaded_checkpoint == "":
    model = PPO(
        "CnnPolicy",
        env,
        verbose=1,
        tensorboard_log=args.tensorboard_dir,
        policy_kwargs=policy_kwargs,
        device="cuda",
        n_steps=args.step_freq,
        batch_size=1024,
        n_epochs=50,
        learning_rate=0.0001,
    )

另外,在開始訓練前,建議關掉所有的 Isaac Sim 的軟體, 因爲那都會重複佔用到 GPU 的記憶體,我們只要保留由終端機執行 訓練程式所叫起的 Isaac Sim 就好。

一切準備就緒後我們就可以執行下面的指令來開始訓練了。

./python.sh python_samples/jetbot/jetbot_train.py

上面的指令會自動叫出模擬的圖形化界面,如果讀者覺得暫時不需要 花費算力去畫出模擬的3D圖,可以在後面加上 headless 來關閉圖形化界面, 等訓練完一段時間後,再開啓圖形化界面確認模型的訓練的效果也是可以的。

./python.sh python_samples/jetbot/jetbot_train.py --headless

4. 強化學習的訓練機制

熟悉深度學習的讀者一定知道在讓模型去做學習的時候,能否給模型一個好的回饋 是學習成敗的關鍵,例如以寵物分類問題來說,我們會給模型看到哪些圖片是貓,哪些圖片是狗, 藉此來讓模型去學習。但是對於學習自動駕駛來說,機器人可以做到決策其實複雜度更高, 比如說 Jetbot 可以隨著時間變化行走的方向跟速度,至於要怎麼判斷機器人走得好不好, 也許我們可以透過機器人的中心點到道路中間的距離來判斷,另外,機器人的行走速度可能也是 一個我們希望最佳化的量,好比說我們會希望機器人過彎的時候會懂得抄近路,而不是一味地死守道路中線。

當我們搞定好模型在學習這個問題的回饋之後,我們就可以來看一下具體模型的學習策略。 對於強化學習的問題而言,我們沒有辦法馬上知道模型此刻學的行爲好或不好,比如說 Jetbot 可能在直線上可以走得 很順,但是一直到轉彎處直接跑出界才發現其實它不會轉彎。在這個範例程式中,我們主要會用以下的技術來幫助模型的學習:

  1. 使用 Open AI 所提出的 Proximal Policy Optimization (PPO) 技術來做有效的強化學習, 簡單說就是在每一次的訓練回合中,都會先生成一個固定模型參數的代打,下去我們的模擬環境跑各種的測試, 然後我們再利用這些測試所蒐集的數據來生成一個資料集,回過頭更新我們之前的模型。其中的精妙之處 在於我們不會輕易的將我們正在學的模型一直丟到測試環境中去驗證,因爲這樣會導致模型在學習上很不穩定, 同時也沒有效率,變成說每次剛更新完的模型走一步測試後,這個資料就只用那麼一次而已。
  2. 使用 Issac Sim 的 Domain Randomization 機制來加強模型的韌性。如果讀者仔細觀察機器人在學習的過程中 其實場景是一直在變化的,我們的環境模擬程式不只會將我們前面的道路圖塊隨機拼湊成不同的環形道路外, 道路週遭的背景跟物品也都會隨機生成,爲的就是儘可能的讓機器人適應不同點情況,達到我們真正想要它學習的任務。

 

5. 檢視模型訓練的結果

以筆者的經驗,模型都需要經過兩萬多次以上的回合後,Jetbot 在道路上的行爲 才會收斂到我們所想像的自動駕駛,像是筆者的電腦(Intel i7 CPU + RTX 3070 GPU)大概會需要模型跑個一天的訓練才能達到 一個可以接受的表現。

那如果是想要看看我們模型的表現如何,可以先停掉訓練的程式, 釋放出可用的 GPU ,然後執行下面的程式

./python.sh python_samples/jetbot/jetbot_train.py --eval

程式會自動挑選目前爲止訓練最好的模型參數,然後套用在 Jetbot 跑道路模型的模擬上, 如下,讀者是否都能夠看到自己訓練的 Jetbot 都能夠沿着道路跑一遍自動駕駛呢?

 

 

Raspberry Pi 安裝 Google Mediapipe,3分鐘完成!

$
0
0
作者/攝影 曾吉弘
時間 已經有可開機的 raspberry pi 的話,15分鐘
難度

★★☆☆☆

材料表

【在 Raspberry Pi 上執行 Google Mediapipe,更多應用更簡單!】

日前我 po 了一張在台科大上課的照片,於電腦端執行 Google Mediapipe 來辨識手勢並進一步驅動 LinkIt 7697 開發板,頗受好評~

(原貼文:https://www.facebook.com/CAVEEducation/posts/6364463780291109)

Google mediapipe 框架不只能執行在 PC 上,單板電腦也沒問題 (當然也是電腦的概念),執行速度相當不錯,安裝也很簡單。除了上一篇 Jetson Nano 的安裝說明之外,本篇來說明如何在 Rasbperry Pi 3/4 上的 Rspbian OS安裝,都試過了,pi 3  pi 4 執行上只有速度的差別,其他都沒問題。

更多 mediapipe 範例請參考:https://google.github.io/mediapipe/getting_started/python.html

 

安裝

真的很簡單,但還是做一下紀錄。

資料來源:https://pypi.org/project/mediapipe-rpi4/

底線請用 pastacode → bash

 

1.安裝 FFmpeg 與 OpenCV

sudo apt install ffmpeg python3-opencv python3-pip

Note: pypi 建議由此來源安裝,而非 FFmpeg OpenCV 的官方repo,因為最佳化程度較差,我們就跟著做,

 

2.安裝相依套件

sudo apt install libxcb-shm0 libcdio-paranoia-dev libsdl2-2.0-0 libxv1  libtheora0 libva-drm2 libva-x11-2 libvdpau1 libharfbuzz0b libbluray2 libatlas-base-dev libhdf5-103 libgtk-3-0 libdc1394-22 libopenexr23

 

3a. Raspberry Pi 4

sudo pip3 install mediapipe-rpi4

 

3b. 如果是 pi3 請改為

sudo pip3 install mediapipe-rpi3

 

執行

相關範例執行如下,部分修改自 Google Mediapipe 範例:

手部辨識 https://google.github.io/mediapipe/solutions/hands.html

人體姿勢,可以看到臉部與手的點數量較少,請根據實際需要來挑選

https://google.github.io/mediapipe/solutions/objectron.html

 

相關文章

 

組裝!!AI嗅覺實驗套件-GROVE線材自助手冊

$
0
0

感謝Benjamin Cabé發表這麼有趣的的專題

我承認,當初是被這個鼻子造型所吸引,所以就決定引進Wio Terminal的。

作者/攝影 腦波弱老闆
時間 裝起來很快,找材料跟測試就比較花工夫,但你都找到這篇文了,接下來應該就會順利了
成本 材料可以在機器人王國商城買到,但印那個鼻子要大概八小時。
難度 我腦波弱都做得出來,是能有多難
材料表 機器人王國購買【AI嗅覺實驗套件】連結
  • 光固化成形鼻子模型與壓克力背板 X1
  • Wio Terminal 開發板 X1
  • Grove–多通道氣體感測器 V2 X1
  • Grove–MOSFET模組 X1
  • 2510七彩變色散熱風扇 X1
  • 螺絲包
    • 螺絲M3x12 X4個(固定壓克力背板)
    • 螺帽M3 X4個(固定壓克力背板)
    • 螺絲M2x15 X4個(固定風扇)
    • 螺帽M2 X4個(固定風扇)
    • 螺絲M2x8 X2個(固定Wio Terminal)
  • 線材
  • 杜邦公接頭轉歐式端子線X2
  • Grove訊號線 X2(隨感測器包裝)

免責文先放前面:

以下為個人心得分享,受限於作者(就是我)的表達能力與相關能力素養,不保證讀者(就是正在看這篇文章的你)跟著做就一定會得到跟我一樣的成果。但如果你也願意動手試試看,相信一定會有所收穫。

 

先來張開箱圖

您可能會需要的工具

  • 一字與十字起子
  • 4mm六角套筒或是尖嘴鉗(非必要)
  • 膠帶或是白膠(非必要)

 

建議您測試過程式與各元件都功能正常後,並先看完本說明後,再開始組裝。

如果不希望壓克力上沾染到指紋,建議可以戴著手套組裝。

壓克力邊緣可能有點銳利,請注意安全。

 

開始組裝

1. 取出Wio Terminal 開發板,先接上兩條Grove訊號線。

2. 撕掉壓克力背板上的保護膜(如果有的話)

3.先穿線,再鎖螺絲:

將Grove訊號線穿過壓克力背板上的線孔,再取出螺絲M2x8兩隻,將Wio Terminal 開發板固定在壓克力背板上。

4.固定風扇:

風扇裝在壓克力板的內側(未來會在鼻子內),風扇有貼紙的那朝向外側,取出螺絲M2x15 X4個以及螺帽M2 X4個,我覺得用4.0的套筒比較容易鎖緊。

5.裝上Grove –多通道氣體感測器 V2 與Grove – MOSFET。

注意位置,Wio Terminal的兩個Grove連接埠功能不同,Grove –多通道氣體感測器 V2要接有I2C功能的那一側。

圖片來源:Get Started with Wio Terminal

這張照片是從背面拍的,注意感測器位置。

 

6.將風扇電源線接上Grove–MOSFET模組

先用一字起子把端子頭鬆開後,將風扇的紅色線接入OUT端,黑色線接GND端,再將端子頭鎖緊。

7.以杜邦公接頭轉歐式端子線,連接Wio Terminal 開發板Grove–MOSFET模組

杜邦公接頭接Wio Terminal 開發板的5V②,歐式端子這邊接Grove–MOSFET模組的端子台”+”端,另一條從Wio Terminal的GND⑥,接到端子台的”-”端。

圖片來源:Get Started with Wio Terminal

8.固定螺帽M3

鼻子模型背面的四個角落設置有放入螺帽的六角形凹槽,讓螺帽可以放置在內側,但在組裝過程中,很難避免翻轉作品。建議在放入螺帽後,以膠帶黏起來,不要讓螺帽離開位置,如果覺得膠帶看起來礙眼,也可以使用白膠,但要花一點時間等膠水乾。

9.放置Grove–多通道氣體感測器於鼻腔

中間有個專屬空間給Grove–多通道氣體感測器。

10.鎖上壓克力背板

將線路與Grove–MOSFET模組放入其中適當的位置後,以螺絲M3x12固定壓克力背板。建議先以手指小力的將螺絲鎖入螺帽,確定螺紋已咬合後,再以螺絲起子轉緊。

完工

這邊下載原作者Benjamin Cabé的範例程式:https://github.com/kartben/artificial-nose/releases

由於原廠附贈的Type-C USB線,並不是那麼適合這個模型,建議您可以準備90∘彎頭的Type-C USB線來使用。

 

最後一起來欣賞一下完整組裝影片吧!(本影片有快轉兩倍速率)

 

參考資料:

相關文章:

 

 

 


【tinyML系列專題】使用wio terminal 與氣體感測器收集咖啡氣味資料!

$
0
0
作者/攝影 曾吉弘
難度

★☆☆☆☆

材料表 機器人王國購買【AI嗅覺實驗套件】連結
  • wio terminal
  • 氣體感測器
  • 麵包
  • 咖啡
  • 清潔用75%酒精或酒類

wio terminal 與 tinyML

tinyML 是指在 Arduino 這類 MCU 板子上也能做到簡易的神經網路推論,讓基本的感測器資料分析也能透過機器學習來找到更多有趣的資訊。Wio Terminal 就是在這股浪潮下所產生的一個產品,除了使用 ATSAMD51 核心並搭配 Realtek RTL8720DN 的 Wi-Fi / 藍牙晶片,還支援自家的 Grove 系列感測器。最重要的當然是本文核心 – tinyML,可將所收集到的資料透過 edge impulse 網站來進行一條龍的處理、訓練與測試流程,再把神經網路檔案匯出到 wio terminal 上來執行,過程不能說超簡單,但確實已經方便非常多了!

我們已經寫了一篇文章 來介紹了如何使用 wio terminal 的光感測器來辨識手勢,本文要介紹使用 wio termianl 所提供的好用韌體,來收集咖啡、酒精的氣味資料。非常有趣的題目,您一定會喜歡的喔!

本文章將使用 Grove – 多通道氣體感測器 V2,直接接上 wio terminal 的任一個 grove 接口就好,也歡迎購買套件包喔~(機器人王國購買【AI嗅覺實驗套件】連結

開始吧!

1.wio terminal 的基本環境設定

關於 wio terminal 的基本環境設定,請參考 上一篇文章。我也錄製了影片帶您一步步操作:

不過呢,這次就不用自己再寫 arduino 的上傳程式了,直接使用 seeed 所提供的好用 firmware (點我下載 .uf2 檔)。請把 wio terminal 接上電腦,再把它的開關往 use port 的方向拉兩下,它會變成一個 Arduino 的磁碟,請把 .uf2 檔丟進去就會自動更新這個韌體,之後再重新插拔 usb 線讓他重開機就好了,簡單~

開啟 cmd 或 anaconda prompt,開始上傳資料 (如果還沒有安裝 node.js 的畫,請安裝 node.js v14 以上) :

2. 連上 edge impulse

先安裝 edge impulse cli 工具

npm install -g edge-impulse-cli

接著輸入以下指令來登入 edge impulse 網站 (當然您需要先註冊帳號,並在網站上建立一個專案):

edge-impulse-daemon --clean

請依序輸入帳號密碼、命名 wio terminal 裝置 (如圖中的 wio_nose)、、選擇專案 (我也取名為 wio_nose),最後看到 “[WS ] Go to https://studio.edgeimpulse.com/studio/63509/acquisition/training to build your machine learning model! ”,就可以回到 edge impulse 網站了。

3. edge impulse 收集資料

請確認氣體感測器已經接好,並開啟 edge impulse 網站,進入您所建立的專案,點選左側的 Data acquisition,先看到右側的 Sensor,從下拉式選單可以看到wio 內建與常用的感測器只要接好就好,這樣就不用修改上一份教學中的 upload.ino 的讀取邏輯了 (感動)

先輸入 Label 為你所定義的類別,在此有以下三個類別:

  • coffee: 泡一杯香濃的咖啡吧~
  • 75_alcohol: 容易取得的 75% 洗手酒精
  • surrounding:遠離以上兩種氣味的環境

將感測器置於該情境中,例如咖啡杯上方、噴了酒精的衛生紙,按下 Start sampling,在此我們把 Sample length (ms) 樣本長度設定為 10000 ms,因為氣味會延續一段時間。

收集完三類別的資料如下圖,可以看到四軸的資料變化:

  • coffee 的資料

  • 75_alcohol 的資料

  • surrounding:遠離咖啡與酒精的環境氣味資料

4.建立 impulse 來訓練神經網路

詳細設定請參考上一篇,請看我的 impulse 與神經網路設定:

使用以下設定來訓練,準確度有到 100% !別高興太早,這應該只能說這三種味道的差異本來就很大,您之後可以試試看去分析紹興酒與高粱酒的差別,挑戰性應該很高

5.使用 EON tuner 最佳化

EON tuner 可針對各平台來最佳化,整個流程需要數小時,不過這期間您還是可以進行其他操作,請參考以下設定來設定 target:

  • Dataset category: continous motion (震動、氣味等時間較久的訊號),如果是上一篇的手勢,請改選 motion events
  • Target device:wio terminal
  • Time per inference: 2000 ms (這裡可以自由設定,氣味的話就久一點吧)

 

6.匯出檔案

      匯出步驟請參考上一篇,恭喜完成囉!

【Arduino首次接觸就上手】快速執行AI圖像辨識

$
0
0

筆者之前出了一篇[LinkIt 7697也能玩AI圖像辨識][註1]文章,是有關於我們在Teachable

Machine網頁訓練出使用者需要的模型之後,可以匯出並部署於電腦上執行AI影像推論,最後於電腦終端再外接LinkIt 7697接受電腦指令來控制LED或伺服機…..等外接裝置,這樣就可以製作出很多很有趣的軟硬體專題喔。

於是筆者就想,如果將LinkIt 7697換成是【Arduino首次接觸就上手】套件呢?結果是可以的,而且程式都是差不多的,以下就來分享筆者是如何做出來的吧!

作者/攝影 許鈺莨
時間

20分鐘

難度

★★☆☆☆

材料表 機器人王國購買【Arduino首次接觸就上手】連結
  • 電腦*1台
  • Arduino首次接觸就上手*1組

硬體介紹

筆者所使用的【Arduino首次接觸就上手】套件非常的方便,所需的感測器都已經模組化,焊在開發板上,不需要額外使用傳輸線來連接(當然使用者要用開發板以外的感測器還是需要用傳輸線外接啦~)。下圖為【Arduino首次接觸就上手】套件介紹。

若要了解【Arduino首次接觸就上手】套件的詳細使用,請至CAVEDU教育團隊網站[註2]

專題說明

筆者使用【Arduino首次接觸就上手】套件的無源蜂鳴器及OLED顯示模組,當電腦辨識到不同圖像時將會發出不同聲音及OLED會顯示不同的物件名稱。

  • 流程圖

專題步驟解說

  • AI圖像辨識的模型訓練完成並匯出至電腦

本篇所訓練的模型是在Teachable Machine網頁訓練完後,匯出至電腦,使用者可以根據自己的專案需求來訓練出不同的模型,但固定為四種不同類別。以本篇為例,順序分別是LinIt7697、Raspberry、Mouse、Other (反指標,前三類之外的類別)。建議類別順序要先定義好,因為會影響到Arduino程式。

 

模型訓練並匯出至電腦的作法請參閱[LinkIt 7697也能玩AI圖像辨識][註1]文章。

LinIt7697 Raspberry Mouse Other(我的手)

這邊也提供Teachable Machine網頁訓練專案的小提醒,也強烈建議使用者養成這個習慣,若使用者做到一個階段要交給下一個人沿用,或是使用者想要擴充類別的話,可以將網頁的圖片收集專案存成副檔名為.tm的檔案,欲訓練時可以將檔案重新上傳,重點是不怕網頁突然斷線,或當機而重新收集Dataset。

步驟1-1:若圖片收集完成,將Teachable Machine網頁檔案下載到電腦端

步驟1-2:將.tm檔案上傳到Teachable Machine網頁

步驟1-3:檔案資料夾改名稱

若訓練完畢的模型,下載後檔案會命名為converted_tflite_quantized.zip,為了不要和其他的模型檔搞混,請解壓縮後更改資料夾名稱,資料夾中會有label.txt和model.tflite檔案。以本篇為例,筆者將資料夾更改為first_arduino_model

  • 【Arduino首次接觸就上手】的前置作業

步驟2-1:下載Arduino首次接觸就上手-圖形化介面軟體[註3]

建議下載到C磁碟機根目錄中。

使用【Arduino首次接觸就上手】套件前,必須要先下載圖形化介面軟體,因為筆者是要使用圖形化介面軟體解壓縮後,裡面所夾帶Arduino IDE 1.8.5版本的編譯器來撰寫。

步驟2-2 : 安裝【Arduino首次接觸就上手】的驅動程式[註4]

燒錄程式前時,電腦需要安裝驅動程式才能跟【Arduino首次接觸就上手】溝通,之後再執行AI圖像辨識也會需要。

 

步驟2-3:下載程式並改寫程式 [註5]

下載後,請解壓縮至C槽根目錄的testAI資料夾中,因最後會與執行Python程式的指令有關。

先將OLED_tone_AI.ino程式開啟,並改寫程式,需對照模型檔資料夾中的label.txt順序。以本篇辨識的物品名稱為例,顯示改寫行數如下圖所示。

請改寫7~10行程式,此為設定【Arduino首次接觸就上手】OLED顯示的字。

步驟2-4:將程式上傳至【Arduino首次接觸就上手】

將【Arduino首次接觸就上手】與電腦用USB連接起來後,先到”裝置管理員”看序列埠號,以筆者為例,序列埠號為COM3。

已經知道序列埠號為COM3後,再到Arduino IDE中,找到Tools🡪COM,選擇COM3

之後按箭頭上傳程式。

  • AI圖像辨識結合【Arduino首次接觸就上手】

前面提到過,最後將執行Python檔案,在電腦上進行圖像辨識後,硬體裝置會因為電腦辨識到的物品而有相對應的輸出,以下說明執行程式的指令。

當然【Arduino首次接觸就上手】依舊還是要連接在電腦,而由前段文章已知序列埠號為COM3,接下來執行Python檔案。

步驟3-1:切換至範例資料夾

開啟Anaconda Prompt(testAI)視窗後,在視窗中輸入指令

行數 指令
1 >cd \
2 >cd testAI\ALL_code

步驟3-2:執行Python檔案指令

指令
>python TM2_WEBCAM_adv_4_item_first_Arduino.py –model first_arduino_model –video 0 –com 3

說明:

模型存放資料夾:來自Teachable Machine匯出 Tensorflow Lite 模型所設定的資料夾。

攝影機編號:每個攝影機在電腦的編號可能都會不盡相同,使用者需自行測試確認。

序列埠編號 : 為電腦與LinkIt7697溝通的USB燒錄的編號。

 

執行成果

 

影片展示

 

LinkIt™ 7697空氣品質偵測並上傳Google表單(空氣盒子2.0)

$
0
0

之前有出了一篇【教學直擊!LinkIt™ 7697空氣品質偵測並上傳MCS(空氣盒子)】[註1]文章,但因MCS已經停用,所以筆者將空氣品質偵測的數值上透過IFTTT的方式,上傳到Google表單中,使用的是空氣盒子2.0版。

作者/攝影 許鈺莨
時間

20分鐘

難度

★★☆☆☆

材料表

 

接線介紹

以下為所需的感測器接線

  • GROVE-溫溼度感測器接線

  • GROVE-OLED模組接線

  • 按鈕模組接線

  • PMS5003模組接線

由於PMS5003模組接線複雜,下圖附上實體圖來對照。

 

  • Grove–VOC與eCO2 氣體感測器(選配)

【教學直擊!LinkIt™ 7697空氣品質偵測並上傳MCS(空氣盒子)】[註1]文章中附有Grove–VOC與eCO2 氣體感測器的函式庫。

IFTTT設定

在之前的文章【邁向AI之前哨站:收集LinkIt 7697數據至Google 表單】[註2]

,雖然從註冊到Google表單設定已詳細介紹過,但因當時IFTTT為免費使用,現在已經改版成免費的只能用三個服務通道,要多用的話需付費升級。

因改版後版面還是有稍作修改,但其實操作原理還是不變,以下還是稍作介紹IFTTT的設定流程。

 

第一步:帳號申請

1-1到網站https://ifttt.com/ ,並滑鼠點選”Get started”。

1-2再按下”sign up”,註冊E-mail信箱和密碼,之後驗證。

1-3註冊之後需重新登入,此時會跳出通知是否享有7天的專業版試用,請選”Maybe later”。

第二步:Webhooks橋接設定

2-1登入後,按下右上角”Create”

2-2按下”Add”,會進入到上百個橋接服務。

2-3在欄位中輸入”Webhooks”,並選取圖示。再點選”Receive a web request”。

2-4自行定義事件名稱,請注意這步非常重要,因為帳號中三個服務的Webhooks金鑰都會是相同的,所以不同的事件名稱,就會執行三個不同的功能服務。

第三步:Google表單設定

3-1這是決定當事件觸發後,所執行的雲端服務。

3-2欄位中輸入”google sheets”,並選其圖示。再選”Add row to spreadsheet”。

3-3選擇連結的Google帳號。

3-4若已決定好在Google表單上顯示的欄位數值時,按下”Create action”。再按下”Continue”。

3-5連動完成,按”Finish”。接下來按Webhooks圖案,再按”Documention”。

3-6測試Google表單是否連動完成。需輸入事件名稱(請看步驟2-4),和測試欄位,可輸入中、英、數字、符號來測試。

3-7按下”Test It”。

3-8若測試成功,便會在Google表單顯示在測試欄位的字。

程式修改

程式下載[註3],下載解壓縮後建議用BlocklyDuino附屬的Arduino IDE 1.8.5開啟,並請開啟”CAVEDU_AirBox_IFTTT_V2_no_sgp30.ino “檔案,開啟後,其他檔案都會匯入進來。

以下說明參數設定

行數 說明
17 輸入WIFI的SSID。
18 輸入WIFI的密碼。
21 輸入IFTTT的金鑰(請看步驟3-7的IFTTT Key)。
22 輸入IFTTT的任務名稱(請看步驟2-4的Event Name)。
26 輸入上傳感測器到IFTTT的間隔時間(單位為毫秒)。

更改完成後,就可以燒錄程式到LinkIt™ 7697中,程式預設為2秒鐘一次,透過IFTTT上傳數值到Google表單中,而空氣盒子的按鈕按下後,可以顯示目前時間。

 

那麼以上就是空氣盒子2.0的使用教學,分享給各位,我們下次見!

 

相關文章與資源連結

[註1]【教學直擊!LinkIt™ 7697空氣品質偵測並上傳MCS(空氣盒子)】 [註2] 【邁向AI之前哨站:收集LinkIt 7697數據至Google 表單】 [註3] 空氣盒子2.0程式下載(Grove -VOC與eCO2 氣體感測器程式)

(Grove -VOC與eCO2 氣體感測器程式)

Rasbperry Pi 結合 LINE messaging API –發發愛聊天

$
0
0

Rasbperry Pi 結合 LINE messageing API

    使用 LINE 來串接各種 iot 裝置已經是很普遍的應用,這篇文章要說明如何讓  rasbperry Pi 搭配 ngrok (也可改用 heroku) 來串接 LINE messaging API。最初的版本是在PC上執行,當然要換到 Pi 上也是沒問題的,這樣與 pi 互動的方式就更多啦!

建立 LINE messaging API

    請用您的LINE帳號登入LINE開發者網站,並於首頁中找到 Messageing API,根據頁面說明來操作。

 

請根據說明先建立 provider,再建立一個 channel (類型為 messageing API)。這裡比較瑣碎,請按照說明完成各欄位就好:

 

完成了,這個 channel 叫做 “發發想聊天“,雖然說是聊天,但基本上只是一個回話機器人( echo bot),只會把你丟過去的訊息原封不動傳回來而已。

接下來的設定都會在 [Basic settings] 與 [Messaging API] 兩個標籤下完成,先看到 [Basic settings]:這裡是 channel 基本設定,往下拉會看到 channel secret,這需要紀錄在 .py 檔案中,否則呼叫會失敗。

 

接著看到 [Messaging API],首先會看到加好友用的  basic IDqrcode,記得先加好友喔!

 

點選 Auto-reply(自動回復) 右邊的 [Edit]…

這時會新開一個頁面,請依序設定之後回到原本的頁面。

  • Auto-response – Disabled (因為要透過程式回復)
  • Webhooks – Enabled (允取外部程式掛接)

最後看到頁面最下方的  Channel access token,按一下 issue (派發),就會產生一大串 token,這一樣要寫在 .py 中。完成如下:

於 Pi (Linux)安裝 ngrok (參考資料)

Pi 會使用 ngrok 來掛階 LINE messaging API,使用起來很簡單。本範例作為示範性質,後續如有持續執行或更高頻率存取等進階需求的話,可改用 heroku 或其他軟體。

請開啟 pi terminal 輸入以下指令來安裝並執行 ngrok

wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-arm.zip --no-check-certificate (後者代表不檢查憑證)
unzip ngrok-stable-linux-arm.zip
./ngrok --version (檢查版本,可不做)

接著在8000 port 啟動一個 http 服務用於掛接 LINE messaging API:

./ngrok http 8000

請把 https://XXXX.ngrok.io 這一整段複製起來,這就是我們要設定的 webhook。請注意要有 https!

注意每次啟動 ngrok ,forwarding 網址(上述的 XXXX )都會改變,session 在一兩小時後之後也會過期。您也可以改用 heroku 或其他付費服務來有更好更穩定的執行效果。。

接著要回到 LINE Messaging API 來設定 webhook,把上述網址加上 /callback 作為 Webhook URL:

https://XXXX.ngrok.io/callback

app-handler.py

這個程式需要修改 channel_secret 和 channel_access_token,修改 ‘ ‘ 內容即可。

接著會在 message_text(event) 中,透過 line_bot_api.reply_message() 語法,把所接收到的內容 (event.message.text) 搭配 token 直接發送回去,這就是回話機器人的原理啦~

後續的 if (‘開’ == in_w): 這一段可先不理會,這是後續用於掛接 Linkit 7697 等無法直接連接 LINE 等裝置的做法。

# -*- coding: utf-8 -*- #此段可以中文註解,否則會執行錯誤
import os
import sys
from argparse import ArgumentParser

from flask import Flask, request, abort
from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.exceptions import (
    InvalidSignatureError
)
from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage,
)

app = Flask(__name__)

path=sys.argv[0]
print(path)

led_status = ""

#要改channel_secret和channel_access_token
channel_secret = 'XXX'
channel_access_token = 'OOO'
if channel_secret is None:
    print('Specify LINE_CHANNEL_SECRET as environment variable.')
    sys.exit(1)
if channel_access_token is None:
    print('Specify LINE_CHANNEL_ACCESS_TOKEN as environment variable.')
    sys.exit(1)

line_bot_api = LineBotApi(channel_access_token)
handler = WebhookHandler(channel_secret)


@app.route("/callback", methods=['POST'])
def callback():
    # get X-Line-Signature header value
    signature = request.headers['X-Line-Signature']

    # get request body as text
    body = request.get_data(as_text=True)
    app.logger.info("Request body: " + body)

    # handle webhook body
    try:
        handler.handle(body, signature)
    except InvalidSignatureError:
        abort(400)

    return 'OK'

@app.route("/")
def control_led():
    global led_status
    return led_status

@handler.add(MessageEvent, message=TextMessage)
def message_text(event):
    global led_status
    line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text=event.message.text)
    )
    print (event.message.text)

    in_w = event.message.text[0]
    #in_w = event.message.text
    print (in_w)
    
    if ('開' == in_w):
        led_status = '1'
    elif('關' == in_w):
        led_status = '0'
    print ("led狀態:" + led_status)

if __name__ == "__main__":
    arg_parser = ArgumentParser(
        usage='Usage: python ' + __file__ + ' [--port <port>] [--help]'
    )
    arg_parser.add_argument('-p', '--port', default=8000, help='port')
    arg_parser.add_argument('-d', '--debug', default=False, help='debug')
    options = arg_parser.parse_args()

    app.run(debug=options.debug, port=options.port)
app_handler.py

執行

執行時,如果您是直接接電腦螢幕,需開啟兩個 terminal,分別執行 ngrok 與 .py。如果是透過 ssh 連入,則需要連入兩次。

請先確認 ngrok 執行起來,webhook 都設定正確之後,再於另一個 terminal 執行以下程式

python app_handler.py

 

好的,請開啟 LINE 掃描先前建立時的 qrcode 來加入好友吧,丟訊息過去就會回話喔! 

grok 頁面也會看到對應的狀態,200 OK 代表一次成功的操作(順利回話了)。

您也可以透過網路瀏覽器開啟 <pi ip>:4040 檢視相關後台畫面

 

延伸挑戰

請參考 line bot api 要求 raspberry pi 拍一張照片發送回去,挑戰看看吧!之後再寫文章和大家分享囉

 

提供同時定位與地圖構建(SLAM)範例的深度攝影機-ZED 2i Stereo Camera

$
0
0
者/攝影 徐豐智
時間

30分鐘

難度

★★☆☆☆

材料表

 

 

本次介紹的是ZED 2i,是一支擁有3D點雲與9軸感測器的Camera,接下來我們將以幾個角度來認識這個裝置。

 

一、ZED 2i的硬體特色:

  • 擁有以120度廣角畫面的3D感知環境(註一)
  • 擁有選配1mm、4mm鏡頭的內建CPL偏光濾鏡
  • 該產品標註擁有IP66(註二)的防水防塵等級
  • 內建IMU、氣壓計與磁力計(9-DoF感測器)
  • 擁有同時定位與地圖建構(SLAM)相關技術
  • 穩定的固定方式(註三)

 

註一:深度規格

深度範圍 深度FPS 深度視野
0.2-20公尺 100Hz 110° (H) x 70° (V) x 120° (D)

 

註二:IP66防水防塵等級

等級 防護水準 備註
防塵6級 防止粉塵大小-完全防塵 灰塵無法進入,完全防護
防水6級 噴嘴12.5mm射出的高壓水柱,從各種角度噴製外殼無負面效果 測試水量:每分鐘100公升

測試水壓:距離3公尺時100kPa

測試時間:最低3分鐘

 

註三:硬體固定方式

A、可固定的USB-Type-C孔與四邊螺絲孔

 

B、攝影機腳架固定螺絲孔

 

 

二、用20~30行程式碼執行ZED 2i的功能-原文連結

功能範例 支援的程式語言
影像擷取 Python、C++、C#
深度感應
位置追踪
3D物件偵測
骨架追蹤
空間映射

 

 

三、ZED提供的函式庫與環境

ZED提供做人工智慧與影像辨識常用的套件環境,如Pytorch、Tensorflow、Yolo、ROS、NVIDIA CUDA、Matlab、OpenCV、OpenGL、OpenNI、Unity。

圖片資料來源ZED STEREOLABS

 

四、支援NVIDIA JETSON嵌入式平台優化

支援NVIDIA Jetson的ZED SDK原文連結

NVIDIA JETSON系列嵌入式平台

 

五、ZED 2i的範例測試

我們使用NVIDIA Jetson Nano套件執行ZED SDK提供的範例:

 

骨架追縱範例-Body Tracking:

以人體骨架作為畫面顯示

 

立體物件辨識-Object detection:

鳥瞰查看(Birds eye viewer):將被偵測的物件和點雲一起即時顯示在3D影像中

圖像查看(Image viewer):將被偵測的物件和點雲一起即時顯示在2D影像中

 

位置追蹤-Positional Tracking

顯示相機路徑、平移和旋轉數據

 

空間映射- Spatial Mapping

基本(Basic):可以建立網格或融合點雲,將網格覆蓋在即時影像中

 

進階點雲映射(advanced point cloud mapping):只融合點雲的映射,在即時影像的視窗畫面顯示結果

 

下篇文章我們將介紹如何安裝ZED安裝環境,我們下回再見。

[ZED深度攝影機系列] 認識 ZED 2i 深度攝影機

$
0
0

本文為 [ZED深度攝影機系列] 的第一篇(),帶您認識 ZED 2i 深度攝影機。

裡面有什麼?

恭喜入手全新的 ZED 深度攝影機,它可謂您的專題提供高品質的深度3D影像!來看看 ZED 系列有哪些不同的產品吧:

ZED 2 (本文主角) ZED MINI ZED
  • ZED 2 深度攝影機
  • 1.2m 內建 USB 3.0 傳輸線
  • 迷你三腳架
  • ZED Mini 深度攝影機
  • 1.5m / 4m 隨附 USB 3.0 傳輸線
  • One VR 固定架
  • ZED 深度攝影機
  • 1.5m 內建 USB 3.0 傳輸線
  • 迷你三腳架

本文主角為 ZED 2i (機器人王國購買連結)

 

連接攝影機

攝影機拆封,並使用隨附傳輸線連接到您電腦的 USB 3.0 接頭即可。ZED 全系列攝影機皆相容 UVC 規格,所以電腦應該可以會自動辨識到它。常見問題如下:

下載與安裝ZED SDK

ZED SDK 支援 Windows 與 Linux 作業系統,以及目前最熱門的 Nvidia Jetson 系列單板電腦。SDK 已包含驅動程式,以及所有用於測試ZED攝影機功能與設定的必要函式庫。

請根據您的作業系統平台開始安裝,後續有專文說明:Windows / Linux /Jetson.

也可以使用Docker

如果要部署於產品階段環境,建議您將應用程式與 ZED SDK 打包為 Docker 容器。

執行 ZED Explorer 軟體

ZED Explorer 軟體適用於即時預覽與錄製 ZED 攝影機的影像。您可由其中更改影像解析度、長寬比、攝影機參數,還能擷取高解析度畫面與3D影像。

如果您的電腦有順利抓到 ZED 攝影機的話,就可從其畫面中看3D 影像。

安裝完成後,ZED Explorer 會位於以下路徑:

  • WindowsC:\Program Files (x86)\ZED SDK\tools\ZED Explorer.exe
  • Ubuntu: /usr/local/zed/tools/ZED Explorer
ZED Explorer 執行畫面

執行 ZED Depth Viewer 軟體

ZED Depth Viewer 軟體會運用自身 SDK 來擷取並呈現深度地圖與 3D 點雲。請執行 ZED Depth Viewer 軟體來檢查是否正確顯示出來。請試試看不同的深度模式來選擇最適合您的品質/效能組合。

安裝完成後,ZED Depth Viewer 會位於以下路徑:

  • Windows: C:\Program Files (x86)\ZED SDK\tools\ZED Depth Viewer.exe
  • Ubuntu: /usr/local/zed/tools/ZED Depth Viewer
ZED Depth Viewer 執行畫面

範例

ZED SDK已包含許多教學範例來學習如何操作影像、追蹤與地圖功能,以及諸多與第三方產品服務的整合。

最新更新請參考GitHub,也請參考 API 文件 來深入學習,快點來玩玩看範例吧!

註:本文經原廠授權之後翻譯自 https://www.stereolabs.com/docs/get-started-with-zed/ 

Jetson Mate組成NVIDIA Jetson Xavier™及Nano™叢集電腦-使用USB3.0攝影鏡頭及VNC遠端連線設定

$
0
0
作者/攝影 胡忠信

國立高雄大學通識教育中心  兼任助理教授

時間

3~5小時

難度

★★☆☆☆

材料表 1.Jetson Mate Cluster Mini  1組-連結

2.NVIDIA® JETSON Xavier™ NX開發套件  1組-連結

3.NVIDIA® JETSON Nano™ B01開發套件  3組-連結

4.鍵盤與滑鼠組  1組-連結

5.100W功率USB Type-C 交換式電源供應器  1個-連結

6.羅技C270攝影鏡頭  1個-連結

 

實驗步驟:

  1. 打開jetson Mate 上蓋,詳如圖一,將擴充槽依序插入 JETSON Xavier™ NX系統模組(SOM)1片(Master)及JETSON Nano™ B01系統模組(SOM)3片(WORKE 1、2、3)相對應位置的插槽(slot)。
    註:有關如何由發展板取下SOM的方法,開啟Jetson Mate上蓋與安裝SOM至Master(for NX)、WORKE 1、2、3(for Nano)的方法,請詳閱前述Jetson Mate評測相關文章。當然各SOM也要插入各自的MicroSD系統卡。

       圖一、擴充槽依序插入 JETSON Xavier™ NX系統模組(SOM)1片(Master)及JETSON Nano™ B01系統模組(SOM)3片(WORKE 1、2、3)相對應位置的插槽(slot)

 

  1. 插入電源並開機:如圖二之一,將SOM插好後,在PD IN插入100W的電源供應器,此時外殼的風扇跟LED飾燈都會開啟。再按下機殼後面板的WAKE按鈕,如圖二之二,則系統模組才會開機。
    註:於後面板標示為MASTER、WORKE 1、2、3位置,可見LED燈號,顯示網路連線狀態

圖二之一、將SOM插好後,在PD IN插入100W的電源供應器,此時外殼的風扇跟LED飾燈都會開啟

 

圖二之二、再按下機殼後面板的WAKE按鈕,則系統模組才會開機

 

  1. 回到前面板,接上網路線,0座插上鍵盤滑鼠組的無線接收卡,及HDMI線連接LCD螢幕給Master主控板使用,詳圖二之一。
  2. 開啟Master的Terminal,執行 ifconfig指令,以取得Xavier NX的IP位址,本例為:192.168.0.16。讀者可在筆電上,執行wireless Network Watcher軟體,如圖三,以觀察每個SOM的IP Address。
  3. 設定Vino遠端桌面:Vino是一種VNC(Virtual Network Computing)伺服器,能協助我們將整合多個同一網域的單板電腦,運用遠端連線至一個PC電腦的桌面,以利我們從PC進行遠端操作。有關Vino server安裝、設定、測試的方法,請參考CAVEDU技術部落格”Jetson Nano遠端桌面設定”相關文章。完成後,開啟筆電上VNC Viewer程式,所顯示於視窗上的操作面板,如圖四所示。

圖三、在筆電上,執行wireless Network Watcher軟體,如以觀察每個SOM的IP Address

 

圖四、開啟筆電上VNC Viewer程式,顯示於視窗上的操作面板

 

本例設定好Xavier NX、Nano 1、2、3等4個操作icon,請注意各SOM的IP位址,每一次開機連線時,Router會動態指定IP,故需重新檢視後,修改各自icon的IP設定值,才能正常連線!

 

  1. 將羅技C270攝影鏡頭,依下次序,輪流插入4個0插座,如圖五所示,每個usb3.0插座,對應一個SOM。
    usb3.0#1—for Xavier NX(Master),usb3.0#2—for Nano #1
    usb3.0#3—for Nano #2,usb3.0#4—for Nano #3分別開啟各SOM遠端連線icon,以取得C270即時影像,如圖六之一、二、三、四。

圖五、前面板的4個usb3.0插座

 

圖六之一

 

圖六之二

 

圖六之三

 

圖六之四

 

以上是使用Jetson Mate連接攝影機與VNC遠端連線,實現將JETSON Xavier™ NX系統模組1片(Master)及JETSON Nano™ B01系統模組3片(WORKE 1、2、3)組合成叢集電腦,以筆電執行遠端連線及擷取影像的實習!未來期望能與各位同好,作相關的技術交流!


Processing 互動教學 : LinkIt7697 結合三軸加速度計

$
0
0
作者/攝影 許鈺莨
時間

0.5小時

難度

★☆☆☆☆

材料表 ADXL345………………. 一片

LinkIt7697……………… 一片

 

 

Processing最大的優勢是在於這是可以透過程式碼產生平面或者立體的圖形化互動介面,最常拿來設計成體感遊戲,而本文會使用LinkIt7697來擷取ADXL345 三軸加速度計的角度變化數值,最後透過Processing使讀者可以感受到由數值轉換成3D的視覺化效果。

ADXL345 三軸加速度計(以下簡稱ADXL345)可以透過重力加速度用來偵測物體的傾斜角度,本文結合LinkIt7697,並將其數值擷取出來,本文將分成三個步驟說明:

1、ADXL345 與LinkIt7697接線圖

2、LinkIt7697程式說明

3、Processing程式說明

 

 

1、ADXL345與LinkIt7697接線圖

ADXL345 和 LinkIt7697溝通為I²C,需接四條線至LinkIt7697 NANO擴充板,接線圖如下:

ADXL345    LinkIt7697 NANO擴充板
SDA SDA
SCL SCL
VCC 5V
GND G

 

 

2、LinkIt7697程式說明

LinkIt7697的程式是透過BlocklyDuino 撰寫,需要下載BlocklyDuino,而使用BlocklyDuino是因為可以快速利用積木拼出程式碼,而BlocklyDuino裡面已含有ADXL345 的函示庫,所以可直接拼出ADXL345的積木進而讀取數值。

ADXL345積木可以從左方欄位的【感測模組】→【動態感測】可以找到。

#include <Wire.h>
#include <adxl345_blockly.h>

ADXL345Block adxl345;

void setup()
{
  adxl345.begin();
  Serial.begin(9600);
}

void loop()
{
  Serial.print(adxl345.getRoll());  //顯示ADXL345的俯仰角度
  Serial.print("/");
  Serial.println(adxl345.getPitch()); //顯示ADXL345的翻滾角度
}

從程式中可以可以看出BlocklyDuino已經把ADXL345的函示庫包在積木裡面,所以可以從積木中直接找出我們需要的『翻滾』和『俯仰』角度,而LinkIt7697跟Processing溝通則是靠序列埠傳輸。

 

3、Processing程式說明

再來是Processing程式撰寫,程式是引用至下列網站修改-連結

import processing.serial.*;
Serial myPort;

String data="";
float roll, pitch;

void setup() {
  size (960, 640, P3D); //執行的視窗大小,及顯示3D圖示

  myPort = new Serial(this, "COM3", 9600);  //由序列埠COM3溝通

  myPort.bufferUntil('\n');
}

void draw() {
  translate(width/2, height/2, 0); //畫面位置置中,和縮放比例
  background(150); //背景顏色
  textSize(22); //背景文字的大小
  text("Roll: " + int(roll) + "     Pitch: " + int(pitch), -100, 265);  //背景文字的位置

 
  rotateX(radians(pitch)); // 計算ADXL345的俯仰角度
  rotateZ(radians(-roll));  // 計算ADXL345的翻滾角度
  
  fill(roll+pitch, roll*50, pitch*200); //設定3D 物件顏色,隨著翻轉而有不同的顏色變化
  box (400, 40, 200);   // 設定3D 物件的尺寸
  textSize(25); //3D 物件字的大小
  fill(255, 255, 255); //3D 物件字的顏色
  text("blog.cavedu.com", -110, 10, 101); //要在3D 物件上要顯示的文字,以及位置
}

void serialEvent (Serial myPort) {  // 從序列埠讀取數據

  data = myPort.readStringUntil('\n');

  if (data != null) {
    data = trim(data);
  
    String items[] = split(data, '/');   // 利用"/" 來分隔data,得到兩種數值,再放入items字串中  
    if (items.length > 1) {

    // 得到滾動和俯仰角度
      roll = float(items[0]);
      pitch = float(items[1]);
    }
  }
}

最後執行,將手晃動ADXL345,3D物件會依照傾斜角度不同,在3D物件中也會隨著翻轉產生不同的顏色變化。

 

  • 【教學】Processing互動專題:結合 LinkIt 7697

https://blog.cavedu.com/2020/04/01/processing-linkit-7697/

[ZED深度攝影機系列] 安裝 ZED SDK

$
0
0

本文為 [ZED深度攝影機系列] 的第二篇(),帶您安裝 ZED SDK,可搭配 Windows / 2i 深度攝影機。請先回顧第一篇文章 [ZED深度攝影機系列] 認識 ZED 2i 深度攝影機

推薦之基本系統規格請參考本連結

安裝 ZED SDK – Windows作業系統

下載 ZED SDK

Windows 版的 ZED SDK 已包含所有必需的驅動程式與函式庫,以及用於測試攝影機各種功能與設定的工具軟體。

  • 下載  Windows 版的 ZED SDK,已提供多種CUDA版本,如果沒有特定想法的話先安裝最新的。

安裝 ZED SDK

  • 下載完成後,執行安裝程式

設定CUDA

CUDA 是由 NVIDIA 所維護的函式庫,ZED SDK 運用 CUDA 搭配您的顯示卡來執行高速 AI 與電腦視覺任務。在 ZED SDK 安裝過程中如果沒有在系統上偵測到 CUDA,安裝程式會要求您先安裝CUDA。

您也可以跳過本步驟,並按照 NVIDIA CUDA Toolkit 頁面說明來自行安裝。

重新啟動電腦

  • 安裝完畢之後,請重新啟動系統來更新Windows環境變數。

注意:跳過本步驟可能會產生[找不到函式庫] (library not found er)錯誤。請勿一重新啟動電腦,尤其是在您首次安裝 SDK的時候。


安裝 ZED SDK – Linux作業系統

下載與安裝ZED SDK

Linux 版的 ZED SDK 也已包含所有必需的驅動程式與函式庫,以及用於測試攝影機各種功能與設定的工具軟體。

  • 下載 Linux 版的 ZED SDK
  • 下載好之後,於終端機中切換到安裝程式資料夾
$ cd path/to/download/folder
  • 使用 chmod +x 指令對安裝程式賦予執行權限。請確認以下指令中是您所下載的軟體版號。
$ chmod +x ZED_SDK_Ubuntu18_v3.0.run
  • 執行 ZED SDK 安裝程式
$ ./ZED_SDK_Ubuntu18_v3.0.run
  • 安裝開始時會顯示相關軟體授權,閱讀完畢之後請按 q
  • 安裝過程中可能要回答一些關於相依套件、工具與範例的問題。輸入 y 代表要安裝,n 代表不安裝,或按下 Enter來選擇所需的選項。

於寂靜模式中安裝

寂靜模式(silent-mode) 可讓您安裝 ZED SDK 的特別設定,安裝過程中不會出現任何顯示或手動設定選項。

請用 -- silent 選項來啟動寂靜模式即可(注意 -- 與 silent之間要有空格),如下:

$ ./ZED_SDK_Ubuntu18_v3.0.run -- silent`

安裝SDK但不需要工具程式與範例

請用 skip_tools 選項來安裝 ZED SDK,這樣不會安裝任何工具程式或範例。

$ ./ZED_SDK_Ubuntu18_v3.0.run -- silent skip_tools`

只安裝執行階段版本

請用 runtime_only 選項來安裝 ZED SDK,這樣不會安裝任何靜態函式庫、工具程式與範例。

$ ./ZED_SDK_Ubuntu18_v3.0.run -- silent runtime_only`

設定 CUDA

CUDA 是由 NVIDIA 所維護的函式庫,ZED SDK 運用 CUDA 搭配您的顯示卡來 執行高速 AI 與電腦視覺任務。在 ZED SDK 安裝過程中如果沒有在系統上偵測到 CUDA,安裝程式會要求您先安裝CUDA。

    請根據以下步驟來自行安裝CUDA:

  • 請由 CUDA Toolkit 頁面下載 CUDA
  • 請在頁面中選擇以下選項,且建議下載 deb (network) 版本:
    • Linux
    • x86_64
    • Ubuntu
    • 18.04 or 16.04
    • deb (network)

  • 使用 lsb_release 指令來檢查您所使用的 Ubuntu 版本。
$ source /etc/lsb-release
$ UBUNTU_VERSION=ubuntu${DISTRIB_RELEASE/./}
  • 加入 CUDA apt repository
$ wget https://developer.download.nvidia.com/compute/cuda/repos/${UBUNTU_VERSION}/x86_64/cuda-${UBUNTU_VERSION}.pin
$ sudo mv cuda-${UBUNTU_VERSION}.pin /etc/apt/preferences.d/cuda-repository-pin-600
$ sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/${UBUNTU_VERSION}/x86_64/7fa2af80.pub
$ sudo add-apt-repository "deb http://developer.download.nvidia.com/compute/cuda/repos/${UBUNTU_VERSION}/x86_64/ /"
  • 更新 apt repository 快取
$ sudo apt-get update
  • 安裝CUDA時建議明確指定所要安裝的版本
$ sudo apt-get -y install cuda-10-2

重新啟動電腦

安裝完畢之後,請重新啟動系統來確認所有路徑皆已更新。

安裝 ZED SDK – NVIDIA Jetson 單板電腦

NVIDIA Jetson 系列平台也可以安裝 ZED 系列相機,包含兩大步驟。CAVEDU 豐智老師已經在 Jetson Nano 上裝好了 ZED 2i 了,快點我看看!

下載與安裝 JetPack

NVIDIA Jetson 開發板需要先安裝 NVIDIA 自家所提供的 JetPack (作業系統),推薦您使用 NVIDIA SDK Manager 將您的 Jetson 單板電腦刷新到最新的作業系統映像檔與開發工具。

下載與安裝ZED SDK

  • 下載 ZED SDK for Jetson,已支援多種 JetPack 版本,請確認所選的 SDK 是正確對應到您的 Jetson 系統
  • 下載好之後,於終端機中切換到安裝程式資料夾
$ cd path/to/download/folder
  • 使用 chmod +x 指令對安裝程式賦予執行權限。請確認以下指令中是您所下載的軟體版號
$ chmod +x ZED_SDK_JP4.3_v3.0.run
  • 執行 ZED SDK 安裝程式
$ ./ZED_SDK_JP4.3_v3.0.run
  • 安裝開始時會顯示相關軟體授權,閱讀完畢之後請按 q
  • 安裝過程中可能要回答一些關於相依套件、工具與範例的問題。輸入 y 代表要安裝,n 代表不安裝,或按下 Enter來選擇所需的選項。

Jetson 系列單板電腦上的 CUDA 已隨著 JetPack 一併裝好了,所以已經可以在 Jetson 上執行 ZED SDK了。

於寂靜模式中安裝

寂靜模式(silent-mode) 可讓您安裝 ZED SDK 的特別設定,安裝過程中不會出現任何顯示或手動設定選項。

請用 -- silent 選項來啟動寂靜模式即可(注意 -- 與 silent之間要有空格),如下:

$ ./ZED_SDK_Ubuntu18_v3.0.run -- silent`

安裝SDK但不需要工具程式與範例

請用 skip_tools 選項來安裝 ZED SDK,這樣不會安裝任何工具程式或範例。

$ ./ZED_SDK_JP4.3_v3.0.run -- silent skip_tools`

只安裝執行階段版本

請用 runtime_only 選項來安裝 ZED SDK,這樣不會安裝任何靜態函式庫、工具程式與範例。

$ ./ZED_SDK_JP4.3_v3.0.run -- silent runtime_only`

在 Docker 容器中執行ZED SDK

在 Linux 與 NVIDIa Jetson 系列單板電腦上設定 ZED SDK 最簡單的方法就是使用 Docker。Docker 運用了容器技術來建立包含了所有相依套件的虛擬環境,還能與系統其他部分區隔開來。

Stereolabs 針對各版本提供了兩種 ZED SDK Docker映像檔

  • runtime 映像檔包含了執行 ZED SDK 相關應用的最低限度相依套件。這版映像檔建議用於產品階段。
  • devel 映像檔較適合開發,其中包含了編譯應用程式所需的所有工具,包含 CUDA、靜態函式庫與 ZED SDK 相關標頭。

執行 ZED SDK 容器

請用以下指令執行 docker:

$ docker pull stereolabs/zed:[tag]  # Download image with specified tag
$ docker run --gpus all -it --privileged stereolabs/zed:[tag]  # Start container

--gpus all 指令會把所有可用的 GPU 加入容器中,而 --privileged 則賦予容器去存取 USB 攝影機的權限。

接下來呢?

更多資訊請參考 ZED 原廠對於 LinuxJetson 的 Docker 安裝說明。

註:本文經原廠授權之後翻譯自 https://www.stereolabs.com/docs/installation/ 

[ZED深度攝影機系列] Python 開發環境與範例

$
0
0
本文為 [ZED深度攝影機系列] 的第三篇(),帶您安裝 ZED 的 Python3 SDK,包含環境建置並帶您順利執行範例程式。
請先回顧先前文章:
1. [ZED深度攝影機系列] 認識 ZED 2i 深度攝影機
2. [ZED深度攝影機系列] 安裝 ZED SDK

安裝ZED Python API

本文章將說明如何在 Windows 與 Linux 作業系統上使用 ZED 的 Python3 SDK。

前言

ZED SDK 的 Python API 是針對底層 C++ 實作的 ZED SDK 打包。我們透過 Cython 讓外部的 Python 程式碼得以取用 ZED SDK。

您需要安裝以下套件與相關套件來使用 ZED Python3 SDK:

  • ZED SDK (下一段說明)
  • Python 3.6+ (x64)
  • Cython 0.26+
  • Numpy 1.13+
  • OpenCV Python (非必要)
  • PyOpenGL (非必要)

請確認所安裝的 64位元 Pythonpip 套件管理器,接著再於終端機中安裝相依套件:

python -m pip install cython numpy opencv-python pyopengl

安裝Python API

ZED SDK 的安裝資料夾中已提供一份 Python 腳本,可自動偵測您的作業系統、CUDA 與 Python 版本,還可對應下載已編譯好的 Python API 套件。

注意:若您使用的是 Linux,這份腳本可在SDK安裝程式時自動執行。如果希望這麼做的話,請在看到以下訊息時按 Y

Do you want to install the Python API (recommended) [Y/n] ?

執行安裝腳本

Windows

Python 安裝腳本路徑為 C:\Program Files (x86)\ZED SDK\.

⚠ 請確認您有 Program Files 資料夾的管理員權限,否則會發生 Permission denied 錯誤。但您可以把這份檔案複製到其他無須權限的資料夾下執行,效果相同。

Linux

Python 安裝腳本路徑為 /usr/local/zed/.

請於終端機中執行腳本:

完成了!Python API 安裝完成,請繼續參考 ZED 教學範例程式

注意:如果您是使用虛擬環境 (本文後半詳述),請記得要先啟動虛擬環境,再執行該腳本。詳細資料請參考本連結

錯誤排除

“NUMPY BINARY INCOMPATIBLITY”

Traceback (most recent call last):
    ...
    File "__init__.pxd", line 918, in init pyzed.sl
ValueError: numpy.ufunc size changed, may indicate binary incompatiblity. Expected 216 from C header, got 192 from PyObject

這通常是因為還沒有安裝 numpy,請用以下指令安裝即可:

# On Jetson (aarch64) cython needs to be installed first since numpy needs to be compiled.
python3 -m pip install cython
python3 -m pip install numpy

執行 ZED Python 應用程式

只要在 Python 程式碼或終端機中匯入 pyzed 套件,就可以開始使用 ZEd SDK了:

import pyzed.sl as sl

請參考 ZED Python API 教學範例,您會知道如何使用 Python 來操作  ZED SDK 的各個模組。


於虛擬環境中執行 ZED Python API

本段要說明如何在虛擬環境中設定 ZED Python wrapper。

設定

整體來說就是在 Anaconda 中完成,它可處理虛擬環境與相關套件與IDE。安裝完成之後請開啟 Anaconda Navigator,如下圖。也可以參考這一篇教學:【AI人工智慧-神經運算】環境建置:安裝Anaconda、Tensorflow、Keras與openCV(Windows篇)

建立虛擬環境

現在要建立一個新的虛擬環境,並可在其中操作 ZED Python API。請選擇左側的 Environments 標籤,再點選頁面下方的 Create

這時會新增一個視窗,請為虛擬環境取名(如以下 ZED_Env),接著點選 Create

稍待一會,這個新的虛擬環境會被列在原有的 base(root) 環境下方。

新增 ZED 套件

這裡做的事情與先前的[安裝Python API]是差不多的,主要差別現在是把東西安裝在虛擬環境中,而之前是直接安裝在電腦上。

請點選虛擬環境名稱,在向右箭頭上點選 Open Terminal

如本文前半所述,請把 get_python_api.py 複製到一個方便執行的路徑,接著就執行它:

$ python get_python_api.py

ZED 套件已安裝完成,請關閉終端機視窗。為了檢查是否正確安裝,可點選 Update index.., 應可在右側畫面看到名為 pyzed 的新項目,這就是 ZED 套件了。

由於範例程式會用到 OpenGL 來顯示畫面,請一併安裝或更新 OpenGL 套件。

操作 ZED 環境

請確認您的電腦上已有 ZED github 範例,也可以自行下載。請點選畫面左側的 Home 標籤,再從下拉式選單選擇方才建立的虛擬環境。

請在您慣用的 IDE (如以下的 VSCODE) 中開啟任一個 python 範例,一定要確認是在虛擬環境中喔!這樣就沒問題了,快點執行範例來試試看吧!

以下是 ZED 的範例程式頁面,都提供了 C++ / Python 兩種語言。說明如下:

  1. Hello ZED: 入門範例,說明如何連接 ZED 攝影機,並於終端機中顯示裝置序列編號。
  2. Image Capture: 開啟 ZED 攝影機,取得影像,並於終端機中顯示時間戳記、影像尺寸。
  3. Depth Perception: 取得畫面的深度資料與點雲,並於終端機中顯示指定點的距離。
  4. Camera Tracking: 啟用位置追蹤,可即時更新攝影機的位置與指向。
  5. Spatial Mapping: 啟用地圖繪製,可擷取環境的網格或融合點雲。
  6. 3D Object Detection: 偵測畫面中的物體,並進行 3D 定位 (只適用於 ZED 2 機型)。
  7. Using Sensors: 取得攝影機的 IMU、氣壓計與磁力感測器資料。

 

 

 

[活動紀錄] 2021 RK-Jetbot機器學習道路識別競賽-中區邀請賽

$
0
0

首場2020 RK-Jetbot機器學習道路辨別競賽是在 2020 台北市教育博覽會舉辦,很高興能在后綜高中舉行了 2021 年的中區邀請賽

感謝NVIDIA提供「2021 RK-Jetbot機器學習道路辨別競賽-中區邀請賽競賽」贊助。第一名獎品是目前奇貨可居的【RTX-3060】顯示卡一張。還要感謝地主后綜高中跟參加比賽的僑泰高中豐原高中台中二中師生,這次的活動,因您的努力而圓滿。

我們先用兩個週六對各校的參賽師生進行兩次集訓課程,由本團隊曾俊霖老師主講。接著在2021年12月11號進行RK-Jetbot機器學習道路識別競賽-中區邀請賽競賽。

 

第一次訓練課程為基礎的Jetbot操作,選手們順利的讓車子動起來,也學習如果搜集賽道資料等技巧,我們也提供各校參賽隊伍RK-Jetbot與比賽場地,讓選手們回學校後,可以進行自主練習。

第二次課程時,有些隊伍已有不錯的訓練成果,課程中有些選手已經可以用很快的速度建立自動駕駛模型,順利跑完整圈賽道。我們也講解比賽規則以及比賽時需要注意的事項,大家都很專心聽課,準備正式比賽。

課程中大家發表關於對於課程的心得感想,大家都很有信心,想要得到第一名,拿走NVIDIA所提供的大獎-顯示卡。

比賽當天時大家都提早來準備練習比賽以及詢問老師Jetbot相關問題,進行Jetbot相關檢測及維修。


這次參加隊伍有來自后綜高中、台中二中、僑泰高中、豐原高中的七隊學生。同學們雖然都已經操作過也於平日在學校練習,因為比賽現場環境不同、環境光亮度不同,需要新增訓練照片與調整模型策略,經過反覆的修正才能調校出更棒的機器人!

本次賽制規則,改為跑五圈賽道取其中最快速度為最終成績,大家都很專心聽裁判的講解,準備比賽了。

正式比賽時雖然都有一些小狀況,各組都盡全力有限的時間中排除困難,完成比賽。

 

成績前3名的隊伍完賽時間相差不到一秒!真的相當刺激緊張。恭喜僑泰高中的同學勇奪第一名,獲得NVIDIA提供的 RTX-3060 顯示卡(好羨慕啊)~

第二名:后綜高中

第三名:豐原高中

最後來張大合照吧,學習的路很長,到了大學還有機會再碰面的呢

根據僑泰高中的選手透露,雖然他們在學校已經花了很多時間搜集資料,但現場也花了很多力氣來記錄並比較各類環境參數的差異。注重細節的實驗精神正是勝出的關鍵,值得鼓勵喔!喜歡這類比賽嗎?有興趣導入相關課程嗎?歡迎跟我們聯絡喔!

 

ASUS Tinker Board 2S新版Debian 10 V2.0.3 系統與相依套件安裝教學

$
0
0

ASUS Tinker Board 2 / 2S 推出至今,搭配Debian作業系統操作的版本也從先前介紹的2.0.0版更新到了2.0.3版,上次的安裝教學內容連結如下:https://blog.cavedu.com/2021/09/01/tinker-board-2s-2/

撰寫/攝影 曾俊霖
前情提要 Tinker Board 2 / 2S 推出至今,搭配Debian作業系統操作的版本也從先前介紹的2.0.0版更新到了2.0.3版,上次的安裝教學內容連結如下:https://blog.cavedu.com/2021/09/01/tinker-board-2s-2/
時間 6小時以上 材料表 ASUS  Tinker Board 2S / 2GB

這次華碩IoT團隊更新了Debian作業系統的內容,這次更新的內容強化了通訊的功能、周邊介面存取的功能,相關的更新內容請參考下表(原廠文件):

1. Fix OV5647 mirror issue
2. Fix ufw and iptables not working in Debian 10
3. xfce4-power-manager: set blank after to “never”
4. Add auto_ums config in config.txt
5. Add modem manager
6. Add ASUS.GPIO library for Python 3
7. Support Quectel EM06-E LTE module
8. Support USB to Serial Chip CH934X
9. Support WinChipHead CH340/CH341
10. Add support for ASUS API
11. Enable CONFIG_TUN kernel config
12. Power Manager add support for GPU configuration
13. Fix Debian apt-get repo issue
14. Fix UART0 RTS not working

本篇教學將主要說明各種常用的Python相依套件程式安裝流程,也透過本篇的內容強化即將使用Tinker Board 2S進行各種專案開發的朋友,有更多可以參考的文件,這些Python相依套件基本上都已經過各種範例的實測,在目前最新發表的Debian-10 2.0.3版 作業系統都是可以正常操作。

本次的安裝教學主要是針對新版核心(Debian-10 2.0.3版)進行安裝,相關安裝流程與較舊版本核心的安裝流程略有差異,若是新版核心建議還是按照本篇教學進行安裝,以確保相關的套件流程都可以正確安裝與執行。


本篇教學文將會針對以下這些AI應用程式設計中常用的套件程式安裝進行說明:
1. nano (用於簡易文字編輯器操作)
2. OpenCV 4.5.0 (用於相關視覺影像的介面操作)
3. imutils (用於視覺影像處理的介面操作)
4. pillow (用於視覺影像處理的介面操作)
5. tkinter (用於圖形化使用者介面 GUI 程式設計)
6. Tensorflow 2.4.1 與 Tensorflow-Lite Runtime 2.5.0 (用於神經網路運算)
7. SciKit-Learn (用於神經網路運算)
8. mediapipe(用於各種人體肢體或表情變化偵測操作)
9. pygame(用於各種多媒體遊戲或媒體撥放功能操作)
10. AudioPlayer、Playsound(用於撥放mp3或wav音訊檔案)
11. I2C介面與PCA9685電路驅動(用於周邊電路的控制)

一、安裝簡易文字編輯器nano

由於在許多的終端機操作環境下需要快速編修文件,採用精巧且功能完整的 nano 文字編輯器,一直是許多系統操作者的最愛之一,以下說明安裝流程:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install nano

 

二、安裝GTK-2.0相依套件libgtk2.0-dev

本次安裝測試的過程當中,在安裝OpenCV 4.5.0套件程式時,發生了相依套件斷裂的問題,在Tinker Board 2S的Debian 10 Linux系統中因為沒有安裝GTK-2.0  的libgtk2.0-dev套件程式,這將導致在OpenCV 4.5.0因cmake無法將 libgtk2.0-dev相依套件進行編譯設定,雖然在後續的make流程都能完成,但最後會在最後Python程式執行階段無法正確使用如imshow、putText等畫面顯示或繪圖的函數,並且會在執行階段報錯,並且提示需要重新進行cmake。

為了將libgtk2.0-dev相依套件程式安裝至系統,筆者初期使用sudo apt-get install libgtk2.0-dev這種方式安裝相依套件程式,但系統卻又報錯,表示還有許多其他相關相依套件有「相依斷裂」的問題,筆者嘗試再以sudo apt-get install去安裝那些相依套件程式,卻依然發現更多的「相依斷裂」,更糟糕的是還發生「循環相依」,所謂「循環相依」表示其他的相依套件程式又循環相依libgtk2.0-dev。

為了解決這種「相依斷裂」與「循環相依」的問題,最後只能透過額外安裝「套件安裝設定程式」的方式來解決,本文將透過 aptitude 套件程式來解決這個問題。
透過「aptitude」套件程式便可以進行libgtk2.0-dev套件程式安裝,以下說明安裝流程:

sudo apt-get install aptitude
sudo aptitude install libgtk2.0-dev

三、安裝OpenCV 4.5.0套件

本文使用 OpenCV 4.5.0 來進行視覺影像介面處理,筆者曾嘗試以 sudo apt-get install python-opencv 來安裝。但經過檢查發現,以這種方式安裝的OpenCV版本是3.6版,雖然簡單Python程式函式還是可以執行,可是當遇到更進階的函式如DNN等相關進階應用時,便會產生函數缺漏的問題,有鑑於此,筆者選擇重新以Build from Source的方式進行安裝。

在這裡要特別強調一個重要關鍵,在安裝OpenCV 4.5.0套件程式之前,「一定要」先裝好上一步的GTK-2.0相依套件 libgtk2.0-dev,切莫跳過這個重要步驟。

由於OpenCV 4.5.0的安裝過程需要大量的記憶體運作空間以進行後續的make流程,因此必須先行安裝虛擬記憶體的套件程式,並且將虛擬記憶體設為10240MB,並且將Tinker Board 2S重新開機,以下說明虛擬記憶體設定流程:

sudo apt-get update
sudo apt-get upgrade

#安裝dphys-swapfile套件程式
sudo apt-get install dphys-swapfile

#以nano編輯 /etc/dphys-swapfile設定檔案
sudo nano /etc/dphys-swapfile
#尋找 #CONF_SWAPSIZE=  字串內容,並且將註解符號 # 取消。
#設定CONF_SWAPSIZE=10240
#離開nano文字編輯器

sudo reboot #重新開機

下載並編譯安裝OpenCV 4.5.0,請注意,這個階段的安裝時間非常久,筆者大約安裝了近4小時,且在make階段時Tinker Board 2S的散熱片會產生高溫。筆者使用 make -j4 等多核心編譯指令來以加快make流程。另外在編譯過程務必確保電源穩定,最好拿電風扇幫忙散熱,以確保編譯過程順利完成。以下說明OpenCV 4.5.0的安裝流程:

sudo apt-get update
sudo apt-get upgrade

sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev

sudo apt-get install libjpeg-dev libpng-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install libgtk2.0-dev libcanberra-gtk* libgtk-3-dev
sudo apt-get install python3-dev python3-numpy python3-pip
sudo apt-get install libtbb2 libtbb-dev libdc1394-22-dev
sudo apt-get install libv4l-dev v4l-utils
sudo apt-get install libopenblas-dev libatlas-base-dev libblas-de
sudo apt-get install liblapack-dev gfortran libhdf5-dev
sudo apt-get install libprotobuf-dev libgoogle-glog-dev libgflags-dev
sudo apt-get install protobuf-compiler
sudo apt-get install qt5-default

wget -O opencv.zip https://github.com/opencv/opencv/archive/4.5.0.zip

wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.5.0.zip

unzip opencv.zip
unzip opencv_contrib.zip

mv opencv-4.5.0 opencv
mv opencv_contrib-4.5.0 opencv_contrib
更新並取得 openCV
cd ~/opencv
mkdir build
cd build

cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
-D ENABLE_NEON=ON \
-D WITH_OPENMP=ON \
-D BUILD_TIFF=ON \
-D WITH_FFMPEG=ON \
-D WITH_TBB=ON \
-D BUILD_TBB=ON \
-D BUILD_TESTS=OFF \
-D WITH_EIGEN=OFF \
-D WITH_GSTREAMER=OFF \
-D WITH_V4L=ON \
-D WITH_LIBV4L=ON \
-D WITH_VTK=OFF \
-D WITH_QT=ON \
-D OPENCV_ENABLE_NONFREE=ON \
-D INSTALL_C_EXAMPLES=OFF \
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D BUILD_NEW_PYTHON_SUPPORT=ON \
-D BUILD_opencv_python3=TRUE \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D BUILD_EXAMPLES=OFF \
-D WITH_GTK=ON ..

make -j4
sudo make install
sudo ldconfig
make clean
build and make

接著要透過 .bashrc 設定OpenCV 4.5.0路徑,安裝完成OpenCV 4.5.0之後,必須要設定相關執行路徑,若跳過這個步驟,會導致Python程式在 import cv2 時產生allocation memory 報錯,以下說明 .bashrc 路徑設定方式:

cd ~

#以nano文字編輯器編輯 .bashrc 設定檔
sudo nano ~/.bashrc

#到文件末端將以下敘述補在最後一行
export LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libgomp.so.1

 

#執行 .bashrc 內容
source ~/.bashrc

 

四、安裝其他視覺影像處理與圖形化使用者介面套件程式

本段要安裝多個乘用的影像處理與 GUI 套件

#安裝pillow套件程式
cd ~
sudo apt-get update
sudo apt-get upgrade
pip3 install setuptools
pip3 install pillow

#安裝tkinter套件程式
cd ~
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install python3-tk
sudo apt-get install python3-pil.imagetk

#安裝imutils套件程式
cd ~
sudo apt-get update
sudo apt-get upgrade
pip3 install imutils

五、安裝Tensorflow 2.4.1 神經網路運算套件程式

Tinker Board 2S 具有強大的CPU與GPU運算效能,可進行神經網路運算,搭配OpenCV可以進行各種AI影像辨識的應用,依照Tinker Board 2S的各種硬體規格,筆者認為神經網路的框架可採用Tensorflow 2.4.1來進行神經網路的推論(Inference)運算,以下說明套件程式安裝流程:

#更新作業系統套件資訊
sudo apt-get update
sudo apt-get upgrade

#更新安裝pip3套件程式
sudo apt-get install python-pip python3-pip

#移除舊版Tensoflow套件程式
sudo pip uninstall tensorflow
sudo pip3 uninstall tensorflow

#安裝各種系統相依套件程式
sudo apt-get install gfortran
sudo apt-get install libhdf5-dev libc-ares-dev libeigen3-dev
sudo apt-get install libatlas-base-dev libopenblas-dev libblas-dev
sudo apt-get install liblapack-dev

#安裝各種Python3各種套件程式
sudo -H pip3 install --upgrade setuptools
sudo -H pip3 install pybind11
sudo -H pip3 install wrapt
sudo -H pip3 install termcolor
sudo -H pip3 install Cython==0.29.21
sudo -H pip3 install h5py==2.10.0 
更新系統套件
#安裝下載工具
pip3 install gdown
sudo cp ~/.local/bin/gdown /usr/local/bin/gdown

#下載Tensorflow 2.4.1套件程式安裝檔
gdown https://drive.google.com/uc?id=1WDG8Rbi0ph0sQ6TtD3ZGJdIN_WAnugLO

#安裝Tensorflow 2.4.1套件程式
sudo -H pip3 install tensorflow-2.4.1-cp37-cp37m-linux_aarch64.whl
安裝 tensorflow

 

六、安裝Tensorflow-Lite Runtime 2.5.0 套件程式

對於Tinker Board 2S / 2GB而言,由於受限於主記憶體僅有2GB的緣故,因此對於神經網路進行推論運算時所需使用的主記憶體容量,就必須要謹慎運用這有限的容量,若需要在神經網路推論時有較高的運算效能,往往就必須要選擇神經網路模型規模較小的模型格式,在Tensorflow族系裡有種Tensorflow-Lite格式就是一種模型規模較小的格式,在Tensorflow的原廠網站裡也特別將Tensorflow-Lite格式定義適用於物聯網應用場域。以下說明套件程式安裝的方式,也歡迎參考我們的相關文章:http://blog.cavedu.com/?s=tensorflow

cd ~
sudo apt-get update
sudo apt-get upgrade

pip3 install https://github.com/google-coral/pycoral/releases/download/v2.0.0/tflite_runtime-2.5.0.post1-cp37-cp37m-linux_aarch64.whl
更新系統與安裝 tf runtime

七、安裝其他支援神經運算的套件程式SciKit-Learn

cd ~
sudo apt-get update
sudo apt-get upgrade
sudo pip3 install sklearn

八、安裝mediapipe Python相依套件

Google mediapipe 是最近非常熱門的 ML 套件,把各種視覺辨識變得更簡單好用,也歡迎參考我們的相關文章:http://blog.cavedu.com/?s=mediapipe

sudo apt update
sudo apt install -y python3-dev protobuf-compiler python3-pip git make libssl-dev
sudo pip3 install pip --upgrade
sudo pip3 install opencv_contrib_python
git clone https://github.com/PINTO0309/mediapipe-bin && cd mediapipe-bin

./v0.8.4/numpy120x/mediapipe-0.8-cp37-none-linux_aarch64_numpy120x_download.sh
sudo pip3 install \
cmake-3.20.2-cp37-none-linux_aarch64.whl \
numpy-1.20.3-cp37-none-linux_aarch64.whl \
mediapipe-0.8-cp37-none-linux_aarch64.whl

sudo pip3 install opencv-python dataclasses
安裝 mediapipe 與相關套件

 

九、安裝pygame套件

https://www.pygame.org/news

sudo aptitude install libsdl-image1.2-dev

wget https://files.pythonhosted.org/packages/0f/9c/78626be04e193c0624842090fe5555b3805c050dfaa81c8094d6441db2be/pygame-1.9.6.tar.gz

sudo apt-get install python-dev libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-ttf2.0-dev libsdl1.2-dev libsmpeg-dev python-numpy subversion libportmidi-dev ffmpeg libswscale-dev libavformat-dev libavcodec-dev

sudo apt-get install libfreetype6-dev

pip3 install pygame-1.9.6.tar.gz

十、安裝AudioPlayer套件

https://pypi.org/project/audioplayer/

sudo apt-get install python-gst-1.0
sudo apt-get install gir1.2-gstreamer-1.0 
sudo apt-get install gstreamer1.0-tools
sudo apt-get install gir1.2-gst-plugins-base-1.0 
sudo apt-get install gstreamer1.0-plugins-good
sudo apt-get install gstreamer1.0-plugins-ugly
pip3 install audioplayer
pip3 install playsound==1.2.2

十一、安裝Playsound套件

https://pypi.org/project/playsound/

sudo apt-get install python-gst-1.0
sudo apt-get install gir1.2-gstreamer-1.0 
sudo apt-get install gstreamer1.0-tools
sudo apt-get install gir1.2-gst-plugins-base-1.0 
sudo apt-get install gstreamer1.0-plugins-good
sudo apt-get install gstreamer1.0-plugins-ugly
pip3 install playsound==1.2.2

十二、安裝I2C介面與PCA9685電路驅動套件程式

在操作I2C介面驅動套件程式安裝之前,必須先至 tinker-config 系統管理工具啟用 I2C 介面服務,之後才能安裝相關套件與操作範例程式。

sudo tinker-config

設定完成之後,繼續安裝,快完工了!https://pypi.org/project/smbus2/

pip3 install SMBUS2

pip3 install setuptools
sudo pip3 install adafruit-circuitpython-servokit
sudo pip3 install adafruit-pca9685

總結

本次的安裝教學主要是針對新版核心(Debian-10 2.0.3版)進行安裝,相關安裝流程與較舊版本核心的安裝流程略有差異,若是新版核心建議還是按照本篇教學進行安裝,以確保相關的套件流程都可以正確安裝與執行。

相關文章

 

 

Viewing all 678 articles
Browse latest View live