OpenCV Haar 特徵人臉偵測詳細教學
OpenCV Haar 特徵人臉偵測詳細教學
一、簡介
Haar特徵分類器(Haar Cascade Classifier)是由 Paul Viola 和 Michael Jones 提出的一種快速目標檢測方法,常用於人臉偵測。OpenCV 內建多組訓練好的 Haar 分類器 XML 檔案,可直接使用。
本教學示範如何使用 OpenCV 搭配 Haar 分類器快速偵測影像中的人臉。
二、開發環境需求
- Python 3.x
- OpenCV-python(可用指令安裝:
pip install opencv-python) - imutils(方便影像縮放,安裝指令:
pip install imutils) - OpenCV 官方的 Haar 分類器 XML 檔案(本例使用
haarcascade_frontalface_default.xml)
三、程式碼完整範例
import cv2
import imutils
# 1. 載入人臉分類器 XML 檔
faceCascade = cv2.CascadeClassifier("ch03/haarcascades/haarcascade_frontalface_default.xml")
# 2. 讀取影像檔案
image = cv2.imread("ch03/images/20250115194509_0_551ff3.jpg")
# 3. 調整影像大小(寬度600像素),保持比例縮放
image = imutils.resize(image, width=600)
# 4. 將影像轉成灰階,Haar分類器需灰階影像作為輸入
gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
# 5. 偵測人臉
faces = faceCascade.detectMultiScale(
gray,
scaleFactor=1.1, # 每次影像尺寸縮小比例,越接近1越精細但越慢
minNeighbors=5, # 欲保留的鄰近矩形數量,過小會誤偵測過多
minSize=(20,20) # 偵測人臉的最小尺寸(像素)
)
# 6. 輸出偵測到的人臉數量
print(f"人臉數: {len(faces)}")
# 7. 在影像上繪出人臉方框
for (x, y, w, h) in faces:
cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
# 8. 顯示結果影像
cv2.imshow("image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
四、程式碼詳細解析
| 程式碼區塊 | 功能說明 |
|---|---|
faceCascade = cv2.CascadeClassifier(...) |
載入預先訓練好的人臉辨識模型(XML 檔) |
image = cv2.imread(...) |
讀取欲偵測的人臉影像 |
image = imutils.resize(image, width=600) |
重新調整影像寬度為600像素,維持比例縮放 |
gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY) |
將彩色影像轉為灰階影像,方便 Haar 分類器處理 |
faces = faceCascade.detectMultiScale(...) |
執行人臉偵測,回傳偵測到的臉部區域(矩形清單) |
print(f"人臉數: {len(faces)}") |
印出偵測到的人臉數量 |
for (x, y, w, h) in faces: |
迴圈繪製人臉偵測框 |
cv2.rectangle(...) |
在影像上以綠色方框框出人臉 |
cv2.imshow(...) |
顯示偵測結果影像 |
cv2.waitKey(0) |
等待按鍵,避免視窗立即關閉 |
cv2.destroyAllWindows() |
關閉所有 OpenCV 視窗 |
五、參數說明
scaleFactor=1.1:表示每次圖像縮小的比例,越接近1檢測越精細但越慢,通常設定在1.05~1.3之間。minNeighbors=5:設定一個候選矩形需要多少鄰近矩形才能被保留,數值越大誤檢率越低,但漏檢率會增加。minSize=(20,20):指定最小檢測尺寸,避免檢測到明顯太小的物件。
六、執行步驟
- 安裝相依套件:
pip install opencv-python imutils - 下載 OpenCV 的 Haar Cascade XML 檔案,可從 官方 GitHub 取得。
- 將程式碼中的路徑
"ch03/haarcascades/haarcascade_frontalface_default.xml"和圖片路徑"ch03/images/20250115194509_0_551ff3.jpg"改為你的實際路徑。 - 執行程式:
python your_script.py - 跳出視窗會顯示圖片,並用綠色框框標示出偵測到的人臉,終端機也會印出偵測到的人臉數量。
- 按任意鍵關閉視窗。
七、注意事項與優化建議
- Haar分類器在光線明亮、正面人臉效果最佳,側臉或暗處偵測較差。
- 若需更精確,可嘗試使用 OpenCV 的 DNN 模型或其他深度學習方法。
- 若需要即時偵測,可將靜態圖片改為攝影機串流,並在迴圈中持續偵測與畫框。
imutils僅用於方便縮放圖片,非必須,可使用 OpenCV 的cv2.resize替代。
希望這份教學能幫助你了解如何使用 OpenCV 的 Haar 特徵人臉偵測!如有其他問題,歡迎再問。

留言
張貼留言