人臉檢測 (Face Detection) 通常是人臉辨識流程的前置處理。這裡我們利用 Haar 特徵 來進行實作。

opencv1

在訓練過程中,該演算法使用 AdaBoost,即利用多個「弱分類器」級聯 (Cascade) 來判別。每一步都會提取一個特徵值來判斷是否為人臉:

  • 如果判斷為「是」,則進入下一個層級的強分類器。
  • 如果判斷為「否」,則直接排除該區域。

廣義來看,這就像是讓所有弱分類器進行投票,並根據各自的準確率加權集成。其組成的分類器架構稱為 Cascade,形式上類似於簡單的多層決策樹。

實際應用與調整

在實際使用中,Haar Cascade 的挑戰主要在於參數的調優,尤其是 scaleFactorminNeighbors

  • scaleFactor:控制影像縮放的比例。數值調大時,檢測的層數會變少,速度快但容易漏掉較小的目標。
  • minNeighbors:決定一個目標區域被聲明為「人臉」前,周圍必須也被檢測到的人臉鄰居數量。

由於不同圖片的解析度與場景差異,往往需要手動調整參數才能達到最佳效果,這在自動化處理上較為困難。未來我會嘗試使用深度學習等更強健的方式。

參考來源:Face Recognition with Python

下圖是檢測人臉與眼睛的結果,圖片來源為 USA Volleyball National Team 合照:

opencv2

My Github