如何使用 OpenCV Python 檢測人臉並在其周圍繪製邊界框?


我們使用 Haar 級聯分類器來檢測影像中的人臉。Haar 級聯分類器是一種有效的基於機器學習的物件檢測方法。我們可以針對訓練資料訓練我們自己的 Haar 級聯,但在這裡我們使用已經訓練好的 Haar 級聯進行人臉檢測。

我們將使用 **haarcascade_frontalface_alt.xml** 作為人臉檢測的“Haar 級聯”XML 檔案。

如何下載 Haar 級聯?

您可以訪問以下 GitHub 網站地址找到不同的 Haar 級聯:

https://github.com/opencv/opencv/tree/master/data/haarcascades

要下載用於人臉檢測的 Haar 級聯,請點選 **haarcascade_frontalface_alt.xml** 檔案。以原始格式開啟它,右鍵單擊並儲存。

**注意** - 將所有 Haar 級聯 XML 檔案儲存在 **haarcascades** 資料夾中。

步驟

我們可以按照以下步驟檢測影像中的人臉並在其周圍繪製邊界框:

  • 匯入所需的庫。在以下所有示例中,所需的 Python 庫是 **OpenCV**。確保您已經安裝了它。

  • 使用 **cv2.imread()** 讀取輸入影像。指定完整的影像路徑。

  • 為進行人臉檢測,初始化 Haar 級聯分類器物件 **face_cascade = cv2.CascadeClassifier()**。傳遞 Haar 級聯 xml 檔案的完整路徑。您可以使用 Haar 級聯檔案 **haarcascade_frontalface_alt.xml** 來檢測影像中的人臉。

  • 使用 **face_cascade.detectMultiScale()** 檢測輸入影像中的人臉。它返回以 **(x,y,w,h)** 格式檢測到的人臉的座標。

  • 使用 **cv2.rectangle()** 在原始影像中繪製檢測到的人臉周圍的邊界矩形。

  • 顯示帶有繪製在人臉周圍的邊界矩形的影像。

讓我們來看一些示例,以便更好地理解。

示例

在這個 Python 程式中,我們檢測人臉並在檢測到的人臉周圍繪製邊界框。

# import required library import cv2 # read the input image img = cv2.imread('people.jpg') # convert to grayscale of each frames gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # read haacascade to detect faces in input image face_cascade = cv2.CascadeClassifier('haarcascades\haarcascade_frontalface_alt.xml') # detects faces in the input image faces = face_cascade.detectMultiScale(gray, 1.1, 2) print('Number of detected faces:', len(faces))\ # loop over all the detected faces for (x,y,w,h) in faces: # To draw a rectangle around the detected face cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,255),2) # Display an image in a window cv2.imshow('Face Detection',img) cv2.waitKey(0) cv2.destroyAllWindows()

將以下影像視為該程式的 **輸入檔案**:


輸出

執行上述 Python 程式後,它將生成以下 **輸出** 視窗:

Number of detected faces: 1

我們將得到以下 **輸出** 視窗:


人臉周圍的邊界框以黃色繪製。

示例

在這個 Python 程式中,我們檢測人臉並在輸入影像中檢測到的人臉周圍繪製邊界框。

import cv2 img = cv2.imread('window1.jpg') img1 =cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) ret,thresh = cv2.threshold(img1,170,255,0) # draw different shapes of ellipses img = cv2.ellipse(img,(368,250),(100,40),30,0,180,(0,255,255),-1) img = cv2.ellipse(img,(150,170),(86,45),-30,0,360,(0,255,0),-1) img = cv2.ellipse(img,(578,250),(60,130),0,0,340,(0,0,255),-1) # display the image with drawn ellipses cv2.imshow("Ellipses", img) cv2.waitKey(0) cv2.destroyAllWindows()

我們將使用此影像作為該程式的 **輸入檔案**:


輸出

執行上述 Python 程式後,它將生成以下 **輸出** 視窗:

Number of detected faces: 15

我們將得到以下輸出視窗:


人臉周圍的邊界框以黃色繪製。

更新於:2022年12月5日

5K+ 次瀏覽

啟動您的 職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.