Jetson Nano 開發板可以開機後,下一步當然就是接Webcam來照相及錄影!
前言
買了邊緣運算開發板後,開機的下一步通常都是連接鏡頭模組,讓這個裝置可以拍照或錄影。Jetson Nano除了可以使用像是Pi camera這種MIPI CSI-2的鏡頭之外,也可以使用手邊比較容易有的USB Webcam。
本篇要介紹如何在Jetson Nano上使用Webcam及OpenCV套件進行拍照、錄影、縮時攝影,還有做一些有趣的特效,使用的程式語言為Python。
還沒有成功開機的人可以參考製作開機SD卡及基礎設定教學: << NVIDIA Jetson Nano 實際使用難不難?從入手到安裝系統、開機與遠端連線 >>
將Jetson Nano開機後,開始來玩Webcam的各種功能吧!
本文大綱
- 事前準備 – 安裝OepnCV
- Let me take a selfie – 拍照
- 理工文青風 – 縮時攝影
- 尋找Green flash的天文迷 – 錄影存檔
- 互動藝術裝置 – 影像串流搭配特效
| 作者/攝影 | 蔡雨錡 |
| 時間 | 2小時 |
| 難度 | ★★☆☆☆ |
| 材料表 |
|
事前準備 – 安裝OpenCV
點選Jetson Nano畫面的右上角圖示,搜尋「terminal」。點擊並開啟終端機(terminal)後輸入以下指令。

先更新apt套件清單並升級既有套件,並安裝nano文字編輯器。
[pastacode lang=”python” manual=”sudo%20apt-get%20update%0Asudo%20apt-get%20upgrade%20-y%0Asudo%20apt-get%20install%20build-essential%20nano” message=”” highlight=”” provider=”manual”/]再安裝OpenCV
[pastacode lang=”python” manual=”sudo%20apt-get%20install%20python3-opencv” message=”” highlight=”” provider=”manual”/]測試OpenCV是否成功安裝,在terminal中輸入以下指令
[pastacode lang=”python” manual=”python%20-c%20%22import%20cv2%3B%20print(cv2.__version__)%22″ message=”” highlight=”” provider=”manual”/]如果順利顯示OpenCV版本就代表安裝成功!
Let me take a selfie – 拍照
在terminal中下指令:
[pastacode lang=”python” manual=”ls%20-ltrh%20%2Fdev%2Fvideo*” message=”” highlight=”” provider=”manual”/]可以找到USB Webcam編號(本範例中為video0,代表編號為0),填入OpenCV的VideoCapture()指令中,就能順利使用Webcam囉!
在terminal中執行,建立一個新的python檔案,本範例使用nano文字編輯器,你也可以使用你喜歡的任意程式編輯器,例如vim、jupyter lab等等。
[pastacode lang=”python” manual=”nano%20LetMeTakeASelfie.py” message=”” highlight=”” provider=”manual”/]輸入以下的程式:
[pastacode lang=”python” manual=”%23%20%E5%8C%AF%E5%85%A5%E5%87%BD%E5%BC%8F%E5%BA%AB%0Aimport%20cv2%0A%23%20%E8%A8%AD%E5%AE%9A%E5%BE%9E%E5%93%AA%E9%A1%86%E9%8F%A1%E9%A0%AD%E8%AE%80%E5%8F%96%E5%BD%B1%E5%83%8F%EF%BC%8C%E6%9C%AC%E7%AF%84%E4%BE%8B%E4%B8%AD%E7%82%BAvideo0%0Awebcam%20%3D%20cv2.VideoCapture(0)%0A%23%20%E8%AE%80%E5%8F%96%E5%BD%B1%E5%83%8F%0Areturn_value%2C%20image%20%3D%20webcam.read()%0A%23%20%E5%84%B2%E5%AD%98%E5%90%8D%E7%82%BAMe.png%E7%9A%84%E7%85%A7%E7%89%87%0Acv2.imwrite(%22Me.png%22%2C%20image)%0A%23%20%E5%88%AA%E9%99%A4webcam%EF%BC%8C%E9%A4%8A%E6%88%90%E4%B8%8D%E4%BD%94%E7%94%A8%E8%B3%87%E6%BA%90%E7%9A%84%E5%A5%BD%E7%BF%92%E6%85%A3%0Adel(webcam)” message=”” highlight=”” provider=”manual”/]按「Ctrl+O」、「Enter」存檔之後,按「Ctrl+X」退出。
在terminal中輸入以下指令
[pastacode lang=”python” manual=”python3%20%20LetMeTakeASelfie.py” message=”” highlight=”” provider=”manual”/]將鏡頭對準自己並微笑,然後按下Enter鍵。
將將將將,你就有一張名為Me.png的自拍照啦!
你也可以拍其他喜愛的人物跟景色。開心拍照之餘,建議幫照片取名稱時可以加上日期/時間/用途/地點等重要資訊,能增加可讀性。
開啟新程式檔案、儲存檔案以及執行程式檔案這三步驟,在本篇後面都不會再重複描述,可以使用程式用途替程式命名。
理工文青風 – 縮時攝影
變化多端的天空,今天是什麼樣貌呢?用Jetson Nano搭配羅技C270來做縮時攝影吧!縮時攝影其實就是把固定時間間隔拍的照片全部串聯在一起做成影片。會使用for迴圈來控制拍照的張數、以及time套件來控制縮時攝影拍照的時間間隔。
在縮時攝影開始前,可以先用拍照程式確認照片的構圖、取景是不是自己想要的。
[pastacode lang=”python” manual=”%23%20%E5%8C%AF%E5%85%A5%E5%87%BD%E5%BC%8F%E5%BA%AB%0Aimport%20os%0Aimport%20cv2%0Aimport%20time%0A%0A%23%20%E8%A8%AD%E5%AE%9A%E7%85%A7%E7%89%87%E5%84%B2%E5%AD%98%E8%B3%87%E6%96%99%E5%A4%BE%E8%B7%AF%E5%BE%91%0Apath%20%3D%20%22pics%22%0A%0A%23%20%E5%A6%82%E6%9E%9C%E7%85%A7%E7%89%87%E8%B7%AF%E5%BE%91%E4%B8%8D%E5%AD%98%E5%9C%A8%EF%BC%8C%E5%B0%B1%E5%BB%BA%E7%AB%8B%E9%80%99%E5%80%8B%E8%B3%87%E6%96%99%E5%A4%BE%0Aif%20not%20os.path.isdir(path)%3A%0A%20%20%20%20os.mkdir(path)%0A%0A%23%20%E8%A8%AD%E5%AE%9A%E5%BE%9E%E5%93%AA%E9%A1%86%E9%8F%A1%E9%A0%AD%E8%AE%80%E5%8F%96%E5%BD%B1%E5%83%8F%EF%BC%8C%E6%9C%AC%E7%AF%84%E4%BE%8B%E4%B8%AD%E7%82%BAvideo0%0Awebcam%20%3D%20cv2.VideoCapture(0)%0A%0A%23%20%E7%AF%84%E4%BE%8B%E4%B8%AD%E7%82%BA%E6%B1%82%E6%B8%AC%E8%A9%A6%E5%9F%B7%E8%A1%8C%EF%BC%8C%E8%A8%AD%E5%AE%9A%E6%8B%8D5%E5%BC%B5%E7%85%A7%E7%89%87%EF%BC%8C%E6%AF%8F%E5%85%A9%E7%A7%92%E6%8B%8D%E4%B8%80%E5%BC%B5%E7%85%A7%E7%89%87%0A%23%20%E4%B9%9F%E5%8F%AF%E4%BB%A5%E8%A8%AD%E5%AE%9A%E5%9F%B7%E8%A1%8C24%E5%B0%8F%E6%99%82(86400s)%20-%20%E6%8B%8D8640%E5%BC%B5%E7%85%A7%E7%89%87%EF%BC%8C%E6%AF%8F%E5%8D%81%E7%A7%92%E6%8B%8D%E4%B8%80%E5%BC%B5%E7%85%A7%E7%89%87%EF%BC%8C%E4%BB%A5%E6%AD%A4%E9%A1%9E%E6%8E%A8%0Afor%20i%20in%20range(5)%3A%0A%20%20%20%20%23%20%E4%BD%BF%E7%94%A8try%2Fexcept%E9%98%B2%E5%91%86%0A%20%20%20%20try%3A%0A%20%20%20%20%20%20%20%20%23%20%E4%BD%BF%E7%94%A8%E6%97%A5%E6%9C%9F%E4%BB%A5%E5%8F%8A%E6%99%82%E9%96%93%E6%9B%BF%E6%AF%8F%E5%BC%B5%E7%85%A7%E7%89%87%E5%91%BD%E5%90%8D%0A%20%20%20%20%20%20%20%20date%3Dtime.strftime(%22%25Y-%25m-%25d_%25H-%25M-%25S%22)%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%23%20%E5%BE%9E%E6%94%9D%E5%BD%B1%E6%A9%9F%E6%93%B7%E5%8F%96%E5%BD%B1%E5%83%8F%0A%20%20%20%20%20%20%20%20return_value%2C%20image%20%3D%20webcam.read()%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%23%20%E5%84%B2%E5%AD%98%E5%88%B0%E7%89%B9%E5%AE%9A%E8%B3%87%E6%96%99%E5%A4%BE%E4%B8%AD%EF%BC%8C%E9%81%BF%E5%85%8D%E6%94%BE%E5%9C%A8%E5%90%8C%E8%B3%87%E6%96%99%E5%A4%BE%E4%B8%8B%E9%80%A0%E6%88%90%E9%9B%9C%E4%BA%82%0A%20%20%20%20%20%20%20%20cv2.imwrite(%22pics%2F%22%2Bdate%2B%22.png%22%2C%20image)%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%23%20%E7%AD%89%E5%BE%85%E5%85%A9%E7%A7%92%0A%20%20%20%20%20%20%20%20time.sleep(2)%0A%20%20%20%20except%3A%0A%20%20%20%20%20%20%20%20%23%20%E5%A6%82%E6%9E%9C%E7%84%A1%E6%B3%95%E6%8B%8D%E7%85%A7%E5%89%87%E5%8D%B0%E5%87%BA%E8%AD%A6%E5%91%8A%E6%96%87%E5%AD%97%EF%BC%8C%E5%8F%AF%E4%BB%A5%E8%87%AA%E5%B7%B1%E8%A8%AD%E5%AE%9A%E5%85%A7%E5%AE%B9%0A%20%20%20%20%20%20%20%20print(%22Cannot%20take%20pictures!%22)%0A%23%20%E5%88%AA%E9%99%A4webcam%EF%BC%8C%E9%A4%8A%E6%88%90%E4%B8%8D%E4%BD%94%E7%94%A8%E8%B3%87%E6%BA%90%E7%9A%84%E5%A5%BD%E7%BF%92%E6%85%A3%0Adel(webcam)” message=”” highlight=”” provider=”manual”/]也可以修改時間總長度、拍的照片張數、拍照間隔時間。存了許多照片後,我們可以使用以下的程式碼將這些照片製作成影片。
[pastacode lang=”python” manual=”%23%20%E5%8C%AF%E5%85%A5%E5%87%BD%E5%BC%8F%E5%BA%AB%0Aimport%20os%0Aimport%20cv2%0A%20%0A%23%20%E7%94%A8%E6%96%BC%E5%84%B2%E5%AD%98%E5%9C%96%E6%AA%94%E4%BD%8D%E7%BD%AE%E7%9A%84%E6%B8%85%E5%96%AE%0Aimagefile_list%20%3D%20%5B%5D%0Aimg_array%20%3D%20%5B%5D%0A%0A%23%20%E8%A8%AD%E5%AE%9A%E7%85%A7%E7%89%87%E5%84%B2%E5%AD%98%E8%B3%87%E6%96%99%E5%A4%BE%E8%B7%AF%E5%BE%91%0Apath%20%3D%20%22pics%22%0A%0A%23%20%E6%90%9C%E9%9B%86%E5%9C%96%E6%AA%94%E4%BD%8D%E7%BD%AE%E6%B8%85%E5%96%AE%0Afor%20r%2Cd%2Cf%20in%20os.walk(path)%3A%0A%20%20%20%20for%20file%20in%20f%3A%0A%20%20%20%20%20%20%20%20imagefile_list.append(os.path.join(r%2Cfile))%0A%0A%23%20%E6%8C%89%E5%9C%96%E6%AA%94%E5%90%8D%E7%A8%B1%E6%8E%92%E5%88%97%E9%A0%86%E5%BA%8F%0Asorted_imagefile_list%3Dsorted(imagefile_list)%0A%0A%23%20%E5%B0%87%E5%9C%96%E6%AA%94%E6%8C%89%E6%B8%85%E5%96%AE%E9%A0%86%E5%BA%8F%E8%AE%80%E5%87%BA%E4%B8%A6%E5%8A%A0%E5%88%B0%0Afor%20filename%20in%20sorted_imagefile_list%3A%0A%20%20%20%20%23%E8%AE%80%E5%9C%96%0A%20%20%20%20img%20%3D%20cv2.imread(filename)%0A%20%20%20%20height%2C%20width%2C%20layers%20%3D%20img.shape%0A%20%20%20%20size%20%3D%20(width%2Cheight)%0A%20%20%20%20img_array.append(img)%0A%20%0A%23%20%E5%AE%9A%E7%BE%A9%E8%A6%81%E8%BC%B8%E5%87%BA%E7%9A%84%E5%BD%B1%E7%89%87%E5%90%8D%E7%A8%B1%E7%82%BATimeLapse.mp4%EF%BC%8Cfps%E7%82%BA10%EF%BC%8C%E9%95%B7%E5%AF%AC%E5%A4%A7%E5%B0%8F%E6%8C%89%E7%85%A7%E5%8E%9F%E5%9C%96%E7%89%87%E6%AF%94%E4%BE%8B%0Aout%20%3D%20cv2.VideoWriter(%22TimeLapse.mp4%22%2Ccv2.VideoWriter_fourcc(*’DIVX’)%2C%2010%2C%20size)%0A%20%0A%23%20%E5%AF%AB%E5%85%A5%E6%96%B0%E5%BD%B1%E7%89%87%0Afor%20i%20in%20range(len(img_array))%3A%0A%20%20%20%20out.write(img_array%5Bi%5D)%0Aout.release()” message=”” highlight=”” provider=”manual”/]程式跑完了之後,縮時影片TimeLapse.mp4就完成啦!
尋找Green flash的天文迷 – 錄影存檔
有些美好的景色有如曇花一現,稍縱即逝。如果想要尋找夕陽西沉時,僅有在天氣晴朗、太陽接近地平線的那瞬間的Green flash。除了每天癡情的等待,也可以使用Jetson Nano錄影存檔,幫你記錄每一時刻,絕對不會錯過綠閃的那一剎那。與架設腳架及攝影機相比也有另一番浪漫,而且成本較低且不容易被偷。
錄影片的程式如下,按下Q鍵即可結束錄影,也可以改成用time.sleep(秒數)來控制影片長度:
[pastacode lang=”python” manual=”%23%20%E5%8C%AF%E5%85%A5%E5%87%BD%E5%BC%8F%E5%BA%AB%0Aimport%20cv2%0A%0A%23%20%E8%A8%AD%E5%AE%9A%E5%BE%9E%E5%93%AA%E9%A1%86%E9%8F%A1%E9%A0%AD%E8%AE%80%E5%8F%96%E5%BD%B1%E5%83%8F%EF%BC%8C%E6%9C%AC%E7%AF%84%E4%BE%8B%E4%B8%AD%E7%82%BAvideo0%0Awebcam%20%3D%20cv2.VideoCapture(0)%0A%0A%23%20%E8%A8%AD%E5%AE%9A%E6%93%B7%E5%8F%96%E5%BD%B1%E5%83%8F%E7%9A%84%E5%B0%BA%E5%AF%B8%E5%A4%A7%E5%B0%8F%0Awebcam.set(cv2.CAP_PROP_FRAME_WIDTH%2C%20640)%0Awebcam.set(cv2.CAP_PROP_FRAME_HEIGHT%2C%20480)%0A%0A%23%20%E4%BD%BF%E7%94%A8%20XVID%20%E7%B7%A8%E7%A2%BC%0Afourcc%20%3D%20cv2.VideoWriter_fourcc(*’XVID’)%0A%0A%23%20%E5%BB%BA%E7%AB%8B%20VideoWriter%20%E7%89%A9%E4%BB%B6%EF%BC%8C%E8%BC%B8%E5%87%BA%E5%BD%B1%E7%89%87%E8%87%B3%20Video.mp4%0A%23%20FPS%20%E5%80%BC%E7%82%BA%2020.0%EF%BC%8C%E8%A7%A3%E6%9E%90%E5%BA%A6%E7%82%BA%20640×480%0Aout%20%3D%20cv2.VideoWriter(%22Video.mp4%22%2C%20fourcc%2C%2020.0%2C%20(640%2C%20480))%0A%0Awhile(webcam.isOpened())%3A%0A%20%20%20%20return_value%2C%20frame%20%3D%20webcam.read()%0A%20%20%20%20if%20return_value%20%3D%3D%20True%3A%0A%20%20%20%20%20%20%20%20%23%20%E5%AF%AB%E5%85%A5%E5%BD%B1%E6%A0%BC%0A%20%20%20%20%20%20%20%20out.write(frame)%0A%20%20%20%20%20%20%20%20%23%20%E9%A1%AF%E7%A4%BA%E5%BD%B1%E5%83%8F%0A%20%20%20%20%20%20%20%20cv2.imshow(‘frame’%2Cframe)%0A%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20break%0A%20%20%20%20%23%20%E6%8C%89%E4%B8%8B%20q%20%E9%8D%B5%E8%B7%B3%E5%87%BA%E8%BF%B4%E5%9C%88%E7%B5%90%E6%9D%9F%E9%8C%84%E5%BD%B1%0A%20%20%20%20if%20cv2.waitKey(1)%20%26%200xFF%20%3D%3D%20ord(‘q’)%3A%0A%20%20%20%20%20%20%20%20break%0A%0A%23%20%E9%87%8B%E6%94%BE%E6%89%80%E6%9C%89%E8%B3%87%E6%BA%90%0Awebcam.release()%0Aout.release()%0Acv2.destroyAllWindows()” message=”” highlight=”” provider=”manual”/]接下來你只需要架設好Jetson Nano套組,就可以在你想要的時間錄下影片了!
互動藝術裝置 – 影像串流搭配特效
辦活動或是展覽時,有時會需要有跟來賓或是路過民眾有互動的大型裝置藝術單單使用Jetson Nano搭配攝影鏡頭及大螢幕,就可以做很多有趣的互動題目。
在搭配特效之前,要先讓Jetson Nano可以做到即時顯示影像串流。光是可以做到影像串流,就可以製作常見的魔鏡效果,讓異地的人可以透過面前的魔鏡看到另一片魔鏡中的他/她。
影像串流程式如下:
[pastacode lang=”python” manual=”%23%20%E5%8C%AF%E5%85%A5%E5%87%BD%E5%BC%8F%E5%BA%AB%0Aimport%20numpy%20as%20np%0Aimport%20cv2%0A%0A%23%20%E9%81%B8%E6%93%87%E6%94%9D%E5%BD%B1%E6%A9%9Fvideo0%0Awebcam%20%3D%20cv2.VideoCapture(0)%0A%0Awhile(True)%3A%0A%20%20%20%20%23%20%E5%BE%9E%E6%94%9D%E5%BD%B1%E6%A9%9F%E6%93%B7%E5%8F%96%E5%BD%B1%E5%83%8F%0A%20%20%20%20return_value%2C%20frame%20%3D%20webcam.read()%0A%0A%20%20%20%20%23%23%23%23%E7%89%B9%E6%95%88%E6%94%BE%E9%80%99%E8%A3%A1%23%23%23%23%0A%20%20%20%20%0A%20%20%20%20%23%20%E9%A1%AF%E7%A4%BA%E5%BD%B1%E5%83%8F%0A%20%20%20%20cv2.imshow(%22frame%22%2C%20frame)%0A%0A%20%20%20%20%23%20%E6%8C%89%E4%B8%8B%20q%20%E9%8D%B5%E8%B7%B3%E5%87%BA%E8%BF%B4%E5%9C%88%0A%20%20%20%20if%20cv2.waitKey(1)%20%26%200xFF%20%3D%3D%20ord(‘q’)%3A%0A%20%20%20%20%20%20%20%20break%0A%0A%23%20%E9%87%8B%E6%94%BE%E6%94%9D%E5%BD%B1%E6%A9%9F%0Awebcam.release()%0A%0A%23%20%E9%97%9C%E9%96%89%E6%89%80%E6%9C%89%20OpenCV%20%E8%A6%96%E7%AA%97%0Acv2.destroyAllWindows()” message=”” highlight=”” provider=”manual”/]以下的不同特效程式碼取代 ####特效放這裡#### 後,會有不一樣的效果唷!
變色效果特效:
[pastacode lang=”python” manual=”frame%20%3D%20cv2.cvtColor(frame%2Ccv2.COLOR_BGR2RGB)” message=”” highlight=”” provider=”manual”/]圖片模糊化:
[pastacode lang=”python” manual=”frame%20%20%3D%20cv2.blur(frame%20%2C%20(11%2C%2011))” message=”” highlight=”” provider=”manual”/]圖片銳利化:
[pastacode lang=”python” manual=”kernel%20%3D%20np.array(%5B%5B0%2C%20-1%2C%200%5D%2C%20%5B-1%2C%205%2C%20-1%5D%2C%20%5B0%2C%20-1%2C%200%5D%5D%2C%20np.float32)%0Aframe%20%3D%20cv2.filter2D(frame%2C%20-1%2C%20kernel%3Dkernel)” message=”” highlight=”” provider=”manual”/]可以搭配特效後,除了拍貼機、自動化妝、服裝搭配、場景切換等效果,還可以搭配人臉辨識、人體骨架辨識、距離深度辨識,製作各式各樣的遊戲。
對其他攝影鏡頭相關的教學有興趣想了解或是有不錯的作品想分享,歡迎在下面留言讓我們知道~





