為什麼要辨識一張照片有幾張臉?這個應用我們在下一篇文章會再加以說明。本篇文章先教大家,如何透過我們在前一篇文章中安裝好的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秒鐘的時間就結束視窗,如下圖所示:
大家可以很清楚地看到,上圖中很順利地找出3張臉。我們用另外一個圖檔試試:
9個人出現10張臉,呃,這個是怎麼回事呢?!所以,這表示還是有改進的空間啦!
(7880)
看不到圖!
請問一下當我執行
faces = faceCascade.detectMultiScale(
gray,
scaleFactor=1.1,
minNeighbors=5,
minSize=(30,30),
flags = cv2.CASCADE_SCALE_IMAGE
)
會出現
Traceback (most recent call last):
File “”, line 6, in
flags = cv2.CASCADE_SCALE_IMAGE
cv2.error: C:\projects\opencv-python\opencv\modules\objdetect\src\cascadedetect.cpp:1698: error: (-215) !empty() in function cv::CascadeClassifier::detectMultiScale
我需要怎麼排除?