iT邦幫忙

2023 iThome 鐵人賽

DAY 5
0
AI & Data

電腦眼中的人臉--論近代人類都用電腦視覺技術在人臉上做了什麼系列 第 5

[第五夜] 人臉偵測 : 傳統基於特徵的方法

  • 分享至 

  • xImage
  •  

前言

歡迎回到我們的30天人臉技術探索之旅!在昨天,我們介紹了人臉技術的基本概念,今天我們將深入研究人臉偵測技術。

人臉偵測的重要性

人臉偵測是電腦視覺中的一個關鍵任務,它的目標是自動識別圖像或視頻中的人臉並確定其位置。這項技術是許多人臉相關應用的基礎,包括人臉辨識、情感分析、人臉變換和人機交互等。

人臉偵測的目標

人臉偵測的目標非常,即

在給定的圖像中,請把人臉給圈起來!

步驟

人臉偵測的歷史可以追溯到上個世紀。早期的方法主要依賴於手工設計的特徵和傳統的機器學習算法而近期開始使用深度學習的方法。這些方法通常涉及以下步驟:

  1. 特徵提取
    在傳統的人臉偵測方法中,研究人員需要設計和提取與人臉相關的特徵。這些特徵可以是邊緣、角點、紋理等等。例如,Haar-like特徵和方向梯度直方圖(HOG)是一些常用的特徵。而近代則使用深度學習的模型自行學習抓取特徵。

  2. 分類器
    一旦特徵被提取,接下來需要一個分類器來區分人臉和非人臉區域。傳統的方法包括Adaboost、SVM等,而深度學習的框架中可能直接用一層 fully connected layer 直接預測是否為人臉。

  3. 偵測
    偵測過程涉及在圖像中滑動窗口,然後使用分類器來判斷每個窗口是否包含人臉。如果是人臉,則將其位置標記為偵測到的人臉之一。

傳統的人臉偵測抓取特徵的方法

在深度學習方法興起之前,傳統的人臉偵測方法主要依賴於手工設計的特徵和機器學習技術。這些方法包括:

  1. Haar-like 特徵:Haar-like 特徵是一種基於區域亮度差異的特徵,最早用於人臉偵測。它們可以有效地捕捉人臉的一般特徵,如眼睛和嘴巴。概念上就是事先準備像下面這樣設計過的 Haar filters
    https://ithelp.ithome.com.tw/upload/images/20230920/201205492CYUt6snWt.png
    然後像下面一區一區掃過整張圖片得到圖片每一區的 feature,
    haar-gif
    詳細計算可以參考以下:
    haar
    然後在使用分類器去根據這些 Haar-like feature 判斷圖片哪裡是人臉!

    這一篇寫的非常好,推薦有興趣的人可以打開來看看!

  2. 方向梯度直方圖(Histogram of Oriented Gradients,HOG):HOG 特徵通過計算圖像中局部區域的梯度方向來識別物體,包括人臉。它在人臉偵測中表現出色。

  3. 區域二值模式(Local Binary Patterns,LBP):LBP 特徵通過比較像素的鄰域來描述圖像紋理,可用於人臉偵測和分類。

儘管這些傳統方法在其時代表現出色,但它們具有一些顯著的缺點。首先,它們對光照、角度和尺度的變化較為敏感,這導致在不同情境下的性能不穩定。其次,這些方法通常需要大量的手工特徵工程,這對於大規模數據集和多樣性場景的應用來說是不切實際的。所以我們會著重在之後的深度學習的方法!

深度學習的崛起

近年來,深度學習方法,特別是卷積神經網絡(CNN),已經在人臉偵測領域實現了巨大的突破。這些方法可以自動學習特徵表示,從而更好地捕捉人臉的各種變化,並在各種情境下表現出色。

深度學習方法的優勢

深度學習方法的優勢在於它們的準確性和對複雜情境的適應能力。這些方法可以學習到更高層次的特徵表示,使人臉偵測更加魔術,可以處理光照變化、角度變化和多人場景。

基於特徵的臉偵測範例

再進到深度學習之前,我用一個簡單的範例來給大家體驗一下基於特徵的人臉偵測,大家可以自行準備一張含有人臉的照片,並且準備一個有 opencv 的環境就好,如果有 pythonpip 的環境之後執行以下指令即可安裝:

pip install opencv-python

那整個程式非常簡單我放在下面給大家體驗一下就好:

# 載入 opencv 的涵式庫,名稱是 cv2 不要懷疑XD
import cv2

# 載入人臉偵測器
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

# 讀取圖像
img = cv2.imread('your_image.jpg')

# 將圖像轉換為灰度
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 執行人臉偵測
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5, minSize=(30, 30))

# 在圖像上繪製人臉框
for (x, y, w, h) in faces:
    cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)

# 顯示結果圖像
cv2.imshow('Detected Faces', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

這個示例中,我們使用了OpenCV的Haar分類器來偵測人臉。它首先使用 cv2.imread來讀取圖片。然後將圖片轉換為灰度圖像以進行人臉偵測,然後使用detectMultiScale函數來找到人臉的位置。最後,它在原始幀上畫出矩形框以標識人臉的位置。

請注意,你需要在相同目錄下擁有OpenCV的Haar分類器XML文件(haarcascade_frontalface_default.xml)才能運行此示例。你可以在OpenCV的官方GitHub存儲庫中找到這些XML文件。點開連結之後,應該會看到下方畫面點紅框處即可下載:
https://ithelp.ithome.com.tw/upload/images/20230920/201205493EGil6VPT5.png

總結

人臉偵測技術在我們的生活中發揮著重要作用,從人臉辨識到自動化驗證。傳統的基於特徵的方法為人臉技術的發展提供了奠基,而深度學習方法則為其帶來了顯著的提升。儘管已經取得了巨大的進展,但人臉偵測仍然是一個活躍的研究領域,我們期待未來會有更多令人驚嘆的創新。在大家有了基本人臉偵測的概念後,明天我們會來介紹深度學習技術下的人臉辨識!

參考文獻:

  1. Viola, P., & Jones, M. (2001). Rapid object detection using a boosted cascade of simple features. Proceedings of the 2001 IEEE Computer Society Conference on Computer Vision and Pattern Recognition.
  2. Dalal, N., & Triggs, B. (2005). Histograms of oriented gradients for human detection. Proceedings of the 2005 IEEE Computer Society Conference on Computer Vision and Pattern Recognition.
  3. Face Detection with Haar Cascade. Exploring a bit older algorithm which… | by Girija Shankar Behera | Towards Data Science

上一篇
[第四夜] 深度學習基礎知識(下)
下一篇
[第六夜] 人臉偵測 : 基於深度學習的方法
系列文
電腦眼中的人臉--論近代人類都用電腦視覺技術在人臉上做了什麼30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言