觀念與Quick learn

觀念澄清

很多人問Jetson nano要怎麼教學,其實Jetson Nano就是硬體,搭載ubuntu,但是是Nvidia所生產製造,所以會使用cuda放到GPU去執行,如果您買的是其他的硬體,都可以做相同的事情,只是效能跟CP值的差別。


我這麼說好了,你有開車嗎?你開的是賓士,我開的是二手神車,我們開車都需要基於交通規則下的駕駛技巧,但是你的是賓士,有比較厲害的功能,但是我的沒有,所以你要按照您車子的說明,使用高級技巧,我而我只有基本款。


所以您問我Jetson nano買來要怎麼教學,其實就是把基本的python,tensorflow,pytorch,openCV...還有基礎打好,至於買Jetbot,那就是一個現成的玩具車,實現人工智慧應用上的車子,如此而以..


機器學期的大概念

在DIGI+Talent上非常棒的老師課程,我把其中三個連結貼出來,還是希望大家去註冊在線上看課程(五個小時的免費課程),其中三個小時我覺得很值得先看的,但是不是叫大家從我這裡點進去看,我是給自己快速複習用 https://academy.digitalent.org.tw/course-content/



Python會用到概念

沒有學過python接觸Jetson nano怎麼辦,其實不要把這些程式碼當成洪水猛獸,把在這個Project下的所有用到的程式碼拆成像是積木的概念,然而我們的教學就是用這個方法,所以拼拼湊湊也能寫出個能用的小程式。

不過還是可以學一些東西吧,我們先來講講


再來是我們的程式撰寫與修改都是在jupyterLab上進行,所以有別於傳統黑白介面的python撰寫環境,是視窗介面,類似Colab的方式,也就是使用IPython 是一個提供互動運算的命令界面(command shell)


  • 它提供了強大功能的程式互動界面。

  • 整合了不同的編輯器並執行作業系統命令。

  • 視覺化的運算資料呈現並結合圖形化工具。

  • Python 程式專案管理。

  • 支持平行運算。

  • 重點是 Jupyter Notebook 的核心


from xxx import xx / import xx

在那之前,我們先認識package(套件)module(模組),不要再把package叫做包了,很難聽!基本上一個單一的檔案就可以當成一個module(模組)使用,通常我們會把一個目錄當成是一個package(套件),資料夾中可以有子套件(subpackage)跟模組(module)


要當成package資料夾裡,一定要有一個檔案名稱__init__.py檔案裡面就算是空的也沒關係,主要是要讓python認定它是一個package

一個模組(module)裡面可以定義class(類別)function(函數)variable(變數) (Python 的屬性概念包含非常廣泛,基本上所有「.」之後的都是屬性。),可以被匯入做使用。

基本上Python 所有東西都是物件(物件可以擁有屬性Attributes跟方法methods),所以我們白話說取得某物件的屬性就是「從一個物件中取得附屬於該物件的另一個物件」。例如ipywidgets.widgets,就是ipywidgets物件的widgets屬性

先學會有關import與from .... import ...的差別

  • import 模組:導入一個模組(相對路徑)

  • from 模組 import 函數:導入一個模組的其中一個函數(絕對路徑)


我們一次只能導入一個模組、函數或 一個類別,但是不能導入整個資料夾



例如jetcam資料夾裡有csi_camera.pyusb_camera.py兩個檔案,也就是jetcam這個套件裡有兩個模組,模組是csi_camerausb_camera



EX: from jetcam.usb_camera import USBCamera



從jetcam這個套件的usb_camera模組匯入USBCamera函數

  • jetcam.usb_camera

  • 資料夾裡有__init__.py

usb_camera.py裡有一個函數叫做USBCamera

以Jetbot專案裡的basic_motion.ipynb程式中摘要出幾段程式碼


from jetbot import Robot


#這一行是指從jetbot套(資料夾)裡匯入Robot模組(Robot.py程式)


robot = Robot()


#建立名稱叫robot的物件


robot.left(speed=0.3)

#這個Robot()類別下的left屬性

Import module

python檔案使用import語法當成模組匯入,再用as語法取一個別名,避免太過攏長,當模組匯入之後,就可以使用模組中的classfunctionvariable