總網頁瀏覽量

星期三, 6月 13, 2018

程式設計 Python OpenCV 影像辨識 PART1

程式設計這堂課

在期末安排了兩堂影像辨識的課,相當精彩以下做一些分享:
本堂課採用的是OpenCV 
https://opencv.org/
因為OpenCV本身從2000年至今,所以資料庫算是比較完整的。其他像是TenserFlow也是不錯的選擇,但以初學者來說可以先學OpenCV。



進入網站>Releases>最新的Win Pack(當然如果是Mac 就是iOS Pack)
下載完後解壓縮,之後要把需要用到的放進Python的folder

註:在這之前,可以先去網路上下載一個人臉的圖片為"123.jpg"放在Python資料夾裡,這樣才能叫出來。

opencv\sources\data\haarcascades
裡面有一個haarcascade_frontalface_default把它放進Python資料夾裡

因為初次下載,所以要先安裝套件
打開cmd,先進到Python資料夾
cd C:\...\AppData\Local\Programs\Python\Python36-32
成功之後用pip安裝套件
python -m pip install opencv-python
會出現Successfully installed numpy-1.14.5 opencv-python-3.4.1.15

靜態人臉辨識

進入Python IDLE打程式碼
>>> import cv2
>>>#匯入OpenCV套件
>>> image_path = '123.jpg'
>>> #要辨識的圖檔存成image_path
>>> casc_path = 'haarcascade_frontalface_default.xml'
>>> #將辨識庫放在casc_path
>>> face_cascade = cv2.CascadeClassifier(casc_path)
>>> #用cv2啟用CascadeClassifier,且導入casc_path,放在face_cascade
>>> image = cv2.imread(image_path)
>>> #用cv2啟用imread讀取image_path,放在image
>>> gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
>>> #用cv2啟用cvtColor把影像變成灰色,放在gray(單純化)
>>> #第一個參數是所欲辨識的圖檔,第二參數COLOR_BGR2GRAY屬於彩色轉灰色空間轉換
>>> faces = face_cascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=5, minSize=(30, 30))
>>> #scaleFactor是要求多精細、minNeighbors就是像是判斷要偵測幾次才確定他是人、minSize就是偵測的放大鏡(目前是30*30pixel)
>>> #detectMultiScale內,第一個參數是灰階圖片來源,第二個參數是掃描精緻度
>>> #這幾個步驟是在精簡圖片的矩陣
>>> for (x, y, w, h) in faces:
cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
#用cv2啟用rectangle來繪製辨識框(要用最原始的圖片,也就是image)
#圖片來源image,第一個參數xy座標,第二個向右向下,最後是顏色(綠色)
>>> cv2.imshow("face detected!", image)
>>> cv2.imwrite("theface.jpg", image)
True

我的圖片是在https://www.sneakingduck.com/blog/2012/09/10/frames-for-oval-faces/上的(好像有點切到下巴0.0)
目前這個進度叫做"人臉偵測",而不是"人臉辨識"。真正人臉辨識視需要進行Machine Learning的。
有一個趣味的是可以在辨識框上加上自訂的歲數,可以用cv2達成
>>> import random
>>> for (x, y, w, h) in faces:
cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.putText(image, str(random.randrange(15, 20)), (x, y), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2)

有一個很小的16!!!

下一堂課會是視訊動態的擷取!關鍵在於detectMultiScale那裡~

沒有留言:

張貼留言

Related Posts Plugin for WordPress, Blogger...