SlideShare a Scribd company logo
1 of 25
Download to read offline
PyCV-time x
PyLadies
王仲昀
cloud@seabunny.tech
About me
● 王仲昀 / cloud / github id:fatcloud
● 台大電機系 / 電機所畢業
● 興趣多元,從軟到硬各種用途不明的技能練的很多
● 於中研院原分所強場雷射實驗室服役時做了人生的第一個 CV project
My first CV project
My first CV project
● 能操控兩面鏡子將雷射筆的光束導至一個固定方向
● 贏得實驗室的伙伴 + 老師刮目相看
● 後來無疾而終
● 猜想現有的產業裡應有無數能透過 CV 技術改進的環節
About PyCV-time
● 2015 年七月我揪了 PyCV-time 這個社團
○ 辦了四次 python+opencv 教學
● 後來社團的方向和我的興趣一起轉變於是有些趨於發散
○ 類神經致敬神器 (covered by Rick Liu)
○ 天社福肉(TensorFlow) 土魠魚油(tutorial)
○ 認識那條鯨魚 - docker 初探
○ [邊教邊學] GPU 藝術家幼幼班
● 2016 年二月成立了自己的公司兔豚兵團以後,社團暫時被放著長草至今
兔豚兵團
兵團成立的目的是要把一些技能太多、興趣常常改變,覺得自己
去一般公司上班會很浪費的人類集結起來,一起圍出一塊舒適的
生存空間,目前的營利方式是銷售地貌沙箱。
如果你同樣是喜歡探索科學、科技、而且不滿足於聽人講、喜歡自
己動手動腦、有時會有美妙的心得想要找人分享的人類,請不吝
告知小弟
Outline of the day
● 欣賞美妙的 OpenCV 以及 PyCV-time 的範例程式
● 看一看入門的範例程式碼
● 現學現賣參加 Shape Challenge
Play with samples
● 先安裝好 opencv
● Clone or download PyCV-time 資料夾
● PyCV-time/opencv-official-samples/2.4.9 底下有官方提供的範例
○ lktrack.py
○ mosse.py
○ deconvolution.py
● 這個範例要把相機的曝光調低才能玩: PyCV-time/projects/laser_drawing/laser_drawing.py
Get your hands dirty - webcam.py
開啟 PyCV-timeexperimentswebcamwebcam.py
Webcam.py - quick ref
Webcam.py 示範了讀取相機畫面再把該圖轉成灰階
● cap = cv2.VideoCapture(0) 宣告 cap 是連到電腦的第一台相機
● ret, frame = cap.read() 從 cap 讀取一張照片存到frame 這個變數, ret 是回傳開啟成功或失敗
● frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 把 frame 從彩色轉灰階
● cv2.imshow('Press any key to exit', frame_gray) 顯示 frame_gray 這張圖片
Get your hands dirty - find_contours.py
開啟 PyCV-timeexperimentsfind_contoursfind_contour.py
Find_contours.py - quick ref
這個範例展示了要怎麼把相機畫面中的contour 抓出來,並且做一些簡單的篩檢
● thresh1, thresh = cv2.threshold(gray, 60, 255, cv2.THRESH_BINARY)
根據亮度門檻把gray 這張圖轉換成黑白兩色
● contours, hry = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
找出畫面中所有的封閉路徑
● contours = [ctr for ctr in contours if cv2.contourArea(ctr) > 100]
只把面積超過100 的多邊形留下
● contours = [cv2.approxPolyDP(ctr, 30 , True) for ctr in contours]
把封閉路徑簡化為誤差不超過30 像素的多邊型
● contours = [ctr for ctr in contours if cv2.isContourConvex(ctr)]
選出凸多邊形
Shape challenge!!
● 設計一個程式尋找相機畫面中的某種形狀
定義自己的目標,例如平形四邊型、五邊形、毛毛的三角形 etc.
然後寫一段自己的 code 去把目標篩檢出來!
● 參考程式碼位在 PyCV-timechallangesshape-challenge
● 下載參考程式碼然後去修改 TODO 區塊的篩檢條件來達成目標
● 說明可見 https://github.com/fatcloud/PyCV-time/issues/9
下三張投影片只是將該頁的資訊貼過來
TODO
# ================== TODO ===================
# Modify these code to suit your need
contours = [ctr for ctr in contours if cv2.contourArea(ctr) > 100]
contours = [cv2.approxPolyDP(ctr, 5 , True) for ctr in contours]
contours = [ctr for ctr in contours if cv2.isContourConvex(ctr)]
# ============================================
Hints
想要改進這個範例識別多邊形的能力有非常多方法,例如:
1.可以比較被 approxPolyDP 簡化過的多邊形與原始形狀的面積比,來確認形狀沒有被過度簡化。
2.可以根據每個多邊形的尺寸(面積或週長?)代替上面的固定 值 5 作為 approxPolyDP 簡化形狀時的
容錯距離,讓程式對大小不同的多邊形提供不同的逼近錯誤容忍 值。
3.如果想偵測特定邊數的多邊形,如三角形,也可以設立條件判斷 len( ctr) == 3 來確認 ctr 這條封閉路
徑裡只有三個點。
Resource
一些用來對封閉路徑 (contour) 操作時可能派上用場的函數
● 算面積 area = cv2.contourArea(ctr)
● 算週長 perimeter = cv2.arcLength(ctr,True)
● 以多邊形逼近 approx = cv2.approxPolyDP(ctr, tolerance ,True)
● 確認一條路徑是凸多邊形 cv2.isContourConvex(ctr)
● 範例程式碼裡面的 drawContours(frame, contours, -1, (0,255,0), 3) 會把 contours 裡所有的封閉路徑畫出來,只要把
參數 -1 換成 n 就可以只畫 contours[n] 那一條路徑
● 不要忘記,兩向量間的夾角可以用內積判定,這也不需要用到 opencv 的函數就能做到
● 在 python 的 opencv binding 中,所有的向量或圖片都是以數值運算套件 Numpy 使用的 numpy array 形式儲存,如
果想要做向量加減法、內積外積等運算,可以搜尋 Numpy 的說明。
Problem ideas
新手區 高手區
Show time!
Appendix
Techtree
要了解 PyCV-time 這個 repo,除了 git pull 之外還有一條路
http://fatcloud.github.io/PyCV-time/
這個網站會把所有小範例以及其相依範例自動陳列出來
Techtree
● 學習使用 opencv api 的過程,對我而言就是一個不停看文件然後寫小程式印證認知的過程
● 做 project 的過程就像是在攀岩攻頂,而每一個小程式範例都像是岩壁上的一塊突起、一道縫隙
● 大家一起共享攻頂之路上需要用到的施力點,社群就可以一起前進,新手不會頭暈眼花,高手也可以
把心力放在突破社群技術的前緣
● 歡迎有想法 / 精力 / 技術的朋友加入改進 techtree 的行列
兔豚 / 海兔子 sea bunny
海兔子是一種擁有兔子頭與海豚身體、喜好觀察人類社
會而且掌握了高科技的海底生物,由於掌握了隱形及消
除人類記憶的技術,所以至今沒有被科學家發現。

More Related Content

Viewers also liked

IHaskell 快速入門
IHaskell 快速入門IHaskell 快速入門
IHaskell 快速入門Carl Su
 
CKAN 技術介紹 (基礎篇)
CKAN 技術介紹 (基礎篇)CKAN 技術介紹 (基礎篇)
CKAN 技術介紹 (基礎篇)Chengjen Lee
 
MakerBoard: MT7688 Emulator
MakerBoard: MT7688 EmulatorMakerBoard: MT7688 Emulator
MakerBoard: MT7688 EmulatorFred Chien
 
MOPCON 2015 - 軟體、測試、程式設計家
MOPCON 2015 - 軟體、測試、程式設計家MOPCON 2015 - 軟體、測試、程式設計家
MOPCON 2015 - 軟體、測試、程式設計家家弘 周
 
智慧行動App跨國推廣經驗談 by 天橋科技
智慧行動App跨國推廣經驗談 by 天橋科技智慧行動App跨國推廣經驗談 by 天橋科技
智慧行動App跨國推廣經驗談 by 天橋科技Amos Lee
 
Docker home ted
Docker home tedDocker home ted
Docker home tedLayne Peng
 
開發人員不可不知的 Windows Container 容器技術預覽
開發人員不可不知的 Windows Container 容器技術預覽開發人員不可不知的 Windows Container 容器技術預覽
開發人員不可不知的 Windows Container 容器技術預覽Will Huang
 
Wot2015 微博平台护城河-构建高效的防御体系-王关胜
Wot2015 微博平台护城河-构建高效的防御体系-王关胜Wot2015 微博平台护城河-构建高效的防御体系-王关胜
Wot2015 微博平台护城河-构建高效的防御体系-王关胜Weibo Corporation
 
Organizing open stack-meetup-in-china
Organizing open stack-meetup-in-chinaOrganizing open stack-meetup-in-china
Organizing open stack-meetup-in-chinaGuangya Liu
 
基于Python构建可扩展的自动化运维平台
基于Python构建可扩展的自动化运维平台基于Python构建可扩展的自动化运维平台
基于Python构建可扩展的自动化运维平台liuts
 
三分鐘讓你輕鬆開發 iBeacon
三分鐘讓你輕鬆開發 iBeacon三分鐘讓你輕鬆開發 iBeacon
三分鐘讓你輕鬆開發 iBeaconArtribr
 
Docker初识
Docker初识Docker初识
Docker初识hubugui
 
快速上手 Windows Containers 容器技術 (Docker Taipei)
快速上手 Windows Containers 容器技術 (Docker Taipei)快速上手 Windows Containers 容器技術 (Docker Taipei)
快速上手 Windows Containers 容器技術 (Docker Taipei)Will Huang
 
Docker 初探,實驗室中的運貨鯨
Docker 初探,實驗室中的運貨鯨Docker 初探,實驗室中的運貨鯨
Docker 初探,實驗室中的運貨鯨Ruoshi Ling
 
Sublime text 極速應用教學
Sublime text 極速應用教學Sublime text 極速應用教學
Sublime text 極速應用教學Amos Lee
 
Android Studio NDK(JNI) + OpenCV 完整教學
Android Studio NDK(JNI) + OpenCV 完整教學Android Studio NDK(JNI) + OpenCV 完整教學
Android Studio NDK(JNI) + OpenCV 完整教學Wei-Xiang Wang
 
深入淺出C語言
深入淺出C語言深入淺出C語言
深入淺出C語言Simen Li
 
提到 DevOps 到底在談些什麼玩意兒?
提到 DevOps 到底在談些什麼玩意兒?提到 DevOps 到底在談些什麼玩意兒?
提到 DevOps 到底在談些什麼玩意兒?Chen Cheng-Wei
 

Viewers also liked (20)

IHaskell 快速入門
IHaskell 快速入門IHaskell 快速入門
IHaskell 快速入門
 
CKAN 技術介紹 (基礎篇)
CKAN 技術介紹 (基礎篇)CKAN 技術介紹 (基礎篇)
CKAN 技術介紹 (基礎篇)
 
人臉偵測
人臉偵測人臉偵測
人臉偵測
 
MakerBoard: MT7688 Emulator
MakerBoard: MT7688 EmulatorMakerBoard: MT7688 Emulator
MakerBoard: MT7688 Emulator
 
MOPCON 2015 - 軟體、測試、程式設計家
MOPCON 2015 - 軟體、測試、程式設計家MOPCON 2015 - 軟體、測試、程式設計家
MOPCON 2015 - 軟體、測試、程式設計家
 
智慧行動App跨國推廣經驗談 by 天橋科技
智慧行動App跨國推廣經驗談 by 天橋科技智慧行動App跨國推廣經驗談 by 天橋科技
智慧行動App跨國推廣經驗談 by 天橋科技
 
Docker home ted
Docker home tedDocker home ted
Docker home ted
 
開發人員不可不知的 Windows Container 容器技術預覽
開發人員不可不知的 Windows Container 容器技術預覽開發人員不可不知的 Windows Container 容器技術預覽
開發人員不可不知的 Windows Container 容器技術預覽
 
Wot2015 微博平台护城河-构建高效的防御体系-王关胜
Wot2015 微博平台护城河-构建高效的防御体系-王关胜Wot2015 微博平台护城河-构建高效的防御体系-王关胜
Wot2015 微博平台护城河-构建高效的防御体系-王关胜
 
Organizing open stack-meetup-in-china
Organizing open stack-meetup-in-chinaOrganizing open stack-meetup-in-china
Organizing open stack-meetup-in-china
 
基于Python构建可扩展的自动化运维平台
基于Python构建可扩展的自动化运维平台基于Python构建可扩展的自动化运维平台
基于Python构建可扩展的自动化运维平台
 
三分鐘讓你輕鬆開發 iBeacon
三分鐘讓你輕鬆開發 iBeacon三分鐘讓你輕鬆開發 iBeacon
三分鐘讓你輕鬆開發 iBeacon
 
Docker初识
Docker初识Docker初识
Docker初识
 
快速上手 Windows Containers 容器技術 (Docker Taipei)
快速上手 Windows Containers 容器技術 (Docker Taipei)快速上手 Windows Containers 容器技術 (Docker Taipei)
快速上手 Windows Containers 容器技術 (Docker Taipei)
 
Docker應用
Docker應用Docker應用
Docker應用
 
Docker 初探,實驗室中的運貨鯨
Docker 初探,實驗室中的運貨鯨Docker 初探,實驗室中的運貨鯨
Docker 初探,實驗室中的運貨鯨
 
Sublime text 極速應用教學
Sublime text 極速應用教學Sublime text 極速應用教學
Sublime text 極速應用教學
 
Android Studio NDK(JNI) + OpenCV 完整教學
Android Studio NDK(JNI) + OpenCV 完整教學Android Studio NDK(JNI) + OpenCV 完整教學
Android Studio NDK(JNI) + OpenCV 完整教學
 
深入淺出C語言
深入淺出C語言深入淺出C語言
深入淺出C語言
 
提到 DevOps 到底在談些什麼玩意兒?
提到 DevOps 到底在談些什麼玩意兒?提到 DevOps 到底在談些什麼玩意兒?
提到 DevOps 到底在談些什麼玩意兒?
 

Similar to Py cv time x pyladies

成大心理系-Prototyping方法
成大心理系-Prototyping方法成大心理系-Prototyping方法
成大心理系-Prototyping方法Souyi Yang
 
高雄和春資工系-Axure RP基礎課程
高雄和春資工系-Axure RP基礎課程高雄和春資工系-Axure RP基礎課程
高雄和春資工系-Axure RP基礎課程Souyi Yang
 
HPX台南讀書會-Axure RP基礎課程
HPX台南讀書會-Axure RP基礎課程HPX台南讀書會-Axure RP基礎課程
HPX台南讀書會-Axure RP基礎課程Souyi Yang
 
极速 Angular 开发:效能调校技巧 (ngChina 2019)
极速 Angular 开发:效能调校技巧 (ngChina 2019)极速 Angular 开发:效能调校技巧 (ngChina 2019)
极速 Angular 开发:效能调校技巧 (ngChina 2019)Will Huang
 
OpenSCAD Workshop
OpenSCAD WorkshopOpenSCAD Workshop
OpenSCAD WorkshopJustin Lin
 
Project GATE 的敏捷實踐之路
Project GATE 的敏捷實踐之路Project GATE 的敏捷實踐之路
Project GATE 的敏捷實踐之路AgileCommunity
 
Agile tour 2014 - Coding Dojo with C# and TDD
Agile tour 2014 - Coding Dojo with C# and TDDAgile tour 2014 - Coding Dojo with C# and TDD
Agile tour 2014 - Coding Dojo with C# and TDDAgileCommunity
 
Agile tour Taipei 2014 - coding dojo with CSharp and TDD
Agile tour Taipei 2014 - coding dojo with CSharp and TDDAgile tour Taipei 2014 - coding dojo with CSharp and TDD
Agile tour Taipei 2014 - coding dojo with CSharp and TDDJoey Chen
 
利用Javascript 與 html5開發線上遊戲_0基本概念
利用Javascript 與 html5開發線上遊戲_0基本概念利用Javascript 與 html5開發線上遊戲_0基本概念
利用Javascript 與 html5開發線上遊戲_0基本概念azole Lai
 
2013/05/19 Sketching with code@JSDC2013
2013/05/19 Sketching with code@JSDC20132013/05/19 Sketching with code@JSDC2013
2013/05/19 Sketching with code@JSDC2013Justin Lee
 
簡報規劃與技巧
簡報規劃與技巧簡報規劃與技巧
簡報規劃與技巧基欽 劉
 
在生命轉彎的地方 - 從軟體開發職涯,探索人生
在生命轉彎的地方 - 從軟體開發職涯,探索人生在生命轉彎的地方 - 從軟體開發職涯,探索人生
在生命轉彎的地方 - 從軟體開發職涯,探索人生Rick Hwang
 
Angular從入門到實戰(二)
Angular從入門到實戰(二)Angular從入門到實戰(二)
Angular從入門到實戰(二)志龍 陳
 

Similar to Py cv time x pyladies (20)

成大心理系-Prototyping方法
成大心理系-Prototyping方法成大心理系-Prototyping方法
成大心理系-Prototyping方法
 
高雄和春資工系-Axure RP基礎課程
高雄和春資工系-Axure RP基礎課程高雄和春資工系-Axure RP基礎課程
高雄和春資工系-Axure RP基礎課程
 
GDSC NYCU下學期社員大會
GDSC NYCU下學期社員大會GDSC NYCU下學期社員大會
GDSC NYCU下學期社員大會
 
HPX_HP25_專案管理:如何言之有物
HPX_HP25_專案管理:如何言之有物HPX_HP25_專案管理:如何言之有物
HPX_HP25_專案管理:如何言之有物
 
HPX台南讀書會-Axure RP基礎課程
HPX台南讀書會-Axure RP基礎課程HPX台南讀書會-Axure RP基礎課程
HPX台南讀書會-Axure RP基礎課程
 
极速 Angular 开发:效能调校技巧 (ngChina 2019)
极速 Angular 开发:效能调校技巧 (ngChina 2019)极速 Angular 开发:效能调校技巧 (ngChina 2019)
极速 Angular 开发:效能调校技巧 (ngChina 2019)
 
OpenSCAD Workshop
OpenSCAD WorkshopOpenSCAD Workshop
OpenSCAD Workshop
 
Project GATE 的敏捷實踐之路
Project GATE 的敏捷實踐之路Project GATE 的敏捷實踐之路
Project GATE 的敏捷實踐之路
 
My DevOps Tour 2.3
My DevOps Tour 2.3My DevOps Tour 2.3
My DevOps Tour 2.3
 
Agile tour 2014 - Coding Dojo with C# and TDD
Agile tour 2014 - Coding Dojo with C# and TDDAgile tour 2014 - Coding Dojo with C# and TDD
Agile tour 2014 - Coding Dojo with C# and TDD
 
Agile tour Taipei 2014 - coding dojo with CSharp and TDD
Agile tour Taipei 2014 - coding dojo with CSharp and TDDAgile tour Taipei 2014 - coding dojo with CSharp and TDD
Agile tour Taipei 2014 - coding dojo with CSharp and TDD
 
利用Javascript 與 html5開發線上遊戲_0基本概念
利用Javascript 與 html5開發線上遊戲_0基本概念利用Javascript 與 html5開發線上遊戲_0基本概念
利用Javascript 與 html5開發線上遊戲_0基本概念
 
getPDF.aspx
getPDF.aspxgetPDF.aspx
getPDF.aspx
 
getPDF.aspx
getPDF.aspxgetPDF.aspx
getPDF.aspx
 
0918 產品經理先修班
0918 產品經理先修班0918 產品經理先修班
0918 產品經理先修班
 
2013/05/19 Sketching with code@JSDC2013
2013/05/19 Sketching with code@JSDC20132013/05/19 Sketching with code@JSDC2013
2013/05/19 Sketching with code@JSDC2013
 
Taiwanese Experience in IT
Taiwanese Experience in ITTaiwanese Experience in IT
Taiwanese Experience in IT
 
簡報規劃與技巧
簡報規劃與技巧簡報規劃與技巧
簡報規劃與技巧
 
在生命轉彎的地方 - 從軟體開發職涯,探索人生
在生命轉彎的地方 - 從軟體開發職涯,探索人生在生命轉彎的地方 - 從軟體開發職涯,探索人生
在生命轉彎的地方 - 從軟體開發職涯,探索人生
 
Angular從入門到實戰(二)
Angular從入門到實戰(二)Angular從入門到實戰(二)
Angular從入門到實戰(二)
 

Py cv time x pyladies