為什麼要辨識一張照片有幾張臉?這個應用我們在下一篇文章會再加以說明。本篇文章先教大家,如何透過我們在前一篇文章中安裝好的OpenCV模組,用短短的幾行Python程式,實作出一個可以辨識並標記出照片檔案中人臉的位置。其實這是一個簡單的OpenCV範例程式,原始程式在【這裡】。我們在這裡加以改寫,讓我們在Mac的終端機中可以簡單地執行。但是,有了這個程式之後,我們就可以把它運用在後續我們要做的圖檔分類中。

但是在執行之前,要確定你的系統是否已經安裝了Python的OpenCV模組,同時也在同一個目錄中要準備好想要辨識的圖形檔案,如果你沒有特別指定,就是test.jpg,如果你不是使用test.jpg(例如test2.jpg),則必須在程式後面加上要被辨識的圖形檔名稱。同時,還必須到前一篇文章安裝OpenCV的原始檔案中找到data的資料夾下,然後把haarcascade_frontalface_default.xml這個檔案取出來,放在和本程式同樣的目錄下才行。

程式如下:

# Program Name: facedetect.py
# Author: skynet
# Date: 2015/9
#
import cv2 
import sys 

image_file = "test.jpg"
args = sys.argv
if len(args)>=2:
    image_file = args[1]

casc_path = "haarcascade_frontalface_default.xml"

faceCascade = cv2.CascadeClassifier(casc_path)
image = cv2.imread(image_file)

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

faces = faceCascade.detectMultiScale(
    gray,
    scaleFactor=1.1,
    minNeighbors=5,
    minSize=(30,30),
    flags = cv2.CASCADE_SCALE_IMAGE
)
print "Found {0} faces!".format(len(faces))
for (x,y,w,h) in faces:
    cv2.rectangle(image,(x,y),(x+w, y+h),(128,255,0),2)
cv2.imshow("found", image)
cv2.waitKey(5000)

你可以直接執行 python facedetect.py,這個程式就會把同一個目錄下的test.jpg檔案取出,然後標識出它所辨識出來的臉的位置,並告訴我們有幾張臉,然後等待大約5秒鐘的時間就結束視窗,如下圖所示:

cap 2015-09-30 下午8.25.30

大家可以很清楚地看到,上圖中很順利地找出3張臉。我們用另外一個圖檔試試:

cap 2015-09-30 下午8.25.48

9個人出現10張臉,呃,這個是怎麼回事呢?!所以,這表示還是有改進的空間啦!

(3314)

%d 位部落客按了讚: