2015/07/21


因為想在四軸飛行器上整合影像辨識做些好玩的事, 所以萊恩大兵動念想自學 OpenCV. 胡亂摸索一陣之後, 覺得 OpenCV + Python 的學習資源較豐富, 就往這方向投入了.

簡單記錄下萊恩大兵的學習路徑. (覺得不趕快動筆記錄下來, 再晃幾天應該就忘光光了.)


(1) 開發環境

萊恩大兵的開發環境有兩套.

一個是 (Macbook + Python 2.7 + OpenCV 2.4), 安裝與設定步驟可參考:
Install OpenCV for Python on Mac OS X
Installing OpenCV 2.4.9 on Mac OSX with Python Support
Python 2.7.10 + OpenCV 2.4.11 安裝過程




另一個是 (RPi 2 + Python 2.7 + OpenCV 2.4), 安裝與設定步驟可參考:
Install OpenCV and Python on your Raspberry Pi 2 and B+
Raspberry Pi 的基礎 - 遠端遙控 X-Window 桌面環境 (XRDP 篇)



大致是按照步驟安裝完,  (OpenCV + Python) 的環境就 ready 了.

補充一個萊恩大兵遇過的問題:

在編譯執行 OpenCV 範例時, 有時候會跳出錯誤訊息說找不到 cv.py 或 cv2.so. 這是因為沒在 Python 的 library 路徑下設定好這兩個檔案. 

cd /Library/Python/2.7/site-packages/
ln -s /usr/local/Cellar/opencv/2.4.9/lib/python2.7/site-packages/cv.py cv.py
ln -s /usr/local/Cellar/opencv/2.4.9/lib/python2.7/site-packages/cv2.so cv2.so


(2) Python

萊恩大兵從沒摸過 Python. 找來找去, 覺得是 Codecademy 的 Python 教程比較容易上手. 跟完全部的教程, 至少能是看懂 Python 語法與指令.




(3) OpenCV

萊恩大兵剛開始是看 PyImageSearch 上的 tutorial 或範例分享. 這網站還不錯, 設計的 tutorial 有情境, 有目標, 任務深度也夠.



可是看了幾天, 萊恩大兵發現, OpenCV 程式裡面, 有不少的圖學處理技巧/知識/邏輯. 若不打通這關, 未來萊恩大兵在 OpenCV 上的修為, 大概就是找範例, 然後不求甚解的套用吧.


(4) 拍.電.視.時間 Python Computer Vision Time (PyCV-Time) 研究聚會

剛好王仲昀在 Taipei Hackerspace 開了 拍.電.視.時間 Python Computer Vision Time 的 OpenCV 研究會.



有高手出來帶果然就不一樣. 能針對新手提供適當範例, 並 一步一步講解程式碼. 僅兩小時聚會的收穫, 就勝過萊恩大兵花了數週在 PyImageSearch 的亂逛亂看.

請參考
[1] Hackpad 的聚會記錄: 拍.電.視.時間 (PyCV-time)]
[2] Github 上的 OpenCV 範例程式碼: Github: PyCV-time]

將 Github: PyCV-time 複製一份到自己的電腦上, 找到 [Path]/PyCV-time-master/temporily-in-a-mess/opencv-official-samples/2.4.9/demo.py, 編譯執行後, 會有視窗選單來執行全部的範例. 





萊恩大兵跑了 edge 這個範例, 是看到自己的身體與臉有綠色的線條.. 然後..., 就不知道這個演算法有什麼用, 要怎麼用...


(5) Contours, Blur, Canny, Threshold 

跟著 PyCV-time 研究會的腳步, 第一個範例就是來找出物件的輪廓. (請參考 Github: PyCV-time 裡面的 find_contour.py)

這邊萊恩大兵還沒很仔細看程式碼, 簡單地形容一下這段影像處理的程序, 等以後對程式碼較熟悉了, 再來多寫一點程式面的東西.

- 將畫面轉成灰階
- 再做 threshold 處理 
- 然後是找出物件的輪廓 (findContour)
- 將 find contour 的結果做些條件篩選, 例如面積大小, 線條粗細, 多邊形點數等等
- 再將篩選後的結果, 例如四邊形, 畫出來 (drawContour)


話說, 萊恩大兵在學習 OpenCV 的過程中, 有個預期外的收穫~ 認識不少新單字, 例如: contour, blur, canny, threshold 等.

先這樣, 下次要儘量多寫程式面的東西.

[參考資料]
Contours - 1 : Getting Started



[萊恩大兵的其它文章]

自製大四軸

自製大四軸, 實作分享@華山文創園區
自製大四軸, (1) 零組件篇, 遙控器 (Drone, Quadcopter, Futaba, Maker, Arduino, Animatronic Eye)
自製大四軸, (2) 零組件篇, 飛控板 (Drone, Quadcopter, MultiWii, Arduino, Futaba, Maker)
自製大四軸, (3) 零組件篇, 自行雷切木質機架 (Drone, Quadcopter, Maker, Laser Cut)
自製大四軸, (4) 零組件篇, 馬達與電變調整 (Drone, Quadcopter, Maker, Electric Speed Control, Motor)
自製大四軸, (5) 組裝篇, 四軸飛行器成形 (Drone, Quadcopter, MultiWii, Arduino, Maker, Electric Speed Control, Motor)
自製大四軸, (6) 調整篇, 飛行前兩三事 (Drone, Quadcopter, Maker, Futaba, Arduino, MultiWii)
自製大四軸, (7) 充電篇, iMax B6 充電器操作記要 (Charger, Battery)
自製大四軸, (8) 問題篇, 機架損壞維修 (Drone, Quadcopter, Laser Cut)
自製大四軸, (9) 改良篇, 方便拆卸的木質機架 (Drone, Quadcopter, Maker, Laser Cut)
自製大四軸, (10) 外飛篇, 新手的青蛙跳與遛狗 (Drone, Quadcopter, Maker, MultiWii)

自動報球速的棒球



CC2540 Bluetooth Low Energy
筆記, CC2540 Bluetooth Low Energy, (1) 開發環境 架設 (Bluetooth, CC2540)
筆記, CC2540 Bluetooth Low Energy, (2) 跑第一個範例程式 (Bluetooth, CC2540)
筆記, CC2540 Bluetooth Low Energy, (3) SimpleBLEPeripheral 簡單介紹 (Bluetooth, CC2540)
筆記, CC2540 Bluetooth Low Energy, (4) 在智慧手機上執行範例程式 (Bluetooth, CC2540)
筆記, CC2540 Bluetooth Low Energy, (5) 偵測與發送 iBeacon 訊號 (Bluetooth, CC2540, iBeacon)
實作, iBeacon 發訊器 x 防丟器 (Bluetooth, CC2540, iBeacon)
實作, iBeacon 尋寶遊戲 (Bluetooth, CC2540, iBeacon, iOS app)
實作, BLE + iOS app, 遙控燈泡君 (Bluetooth, CC2540, iOS app)
做實驗, 用 iBeacon 做自動控制的可行性 (Bluetooth, iBeacon, CC2540, Automation, URL Scheme, iOS app)

藍色小鋪一起來做

藍色小鋪一起來做, (1) 用 beacon 控制開關的枱燈
藍色小鋪一起來做, (2) 講解 BLE CC2540 UART 通訊範例程式 (Bluetooth, CC2540, UART)
藍色小鋪一起來做, (3) 藍牙枱燈專案實作 (上) (Bluetooth, CC2540)
藍色小鋪一起來做, (4) 藍牙枱燈專案實作 (下) (Bluetooth, CC2540)
藍色小鋪一起來做, (5) iBeacon scanner 專案示範與解說 (Bluetooth, CC2540, iBeacon)
藍色小鋪一起來做, (6) 完成, 用 iBeacon 控制開關的枱燈 (Bluetooth, CC2540, iBeacon)
藍色小鋪, 初嚐樹莓派 (Raspberry Pi)
藍色小鋪, iBeacon 應用, 自動記錄到訪時間 (iBeacon, Geohopper, Zapier)
藍色小鋪, 菲力普的 Docker 應用分享 (Docker)
藍色小鋪, PTT地震文團隊分享三連發, (1) Maker 的 IOT 遊樂場 (PTT, Hackathon, Python, Xively, Internet of Things)
藍色小鋪, PTT地震文團隊分享三連發, (2) mbed 新手分享 (mbed, MPU6050, Hackathon, Internet of Things)
藍色小鋪, 空中提升軌道車, 作品進化分享 (Pneumatic Tube System, Force of Friction, Mini 4 WD)
藍色小鋪, 數字管時鐘, 作品進化分享 (Nixie Tube, VFD)

小惡魔 無線溫度感測器

108 大眼仔
Plot Clock

體驗, 原住民互動故事書@宜蘭大同鄉泰雅生活館
體驗, 蛋生音互動裝置@兒童美術館 (Arduino, 3D Printing, HC-SR04, Interactive)



實作, 電容感應音樂樹

0 意見:

張貼留言