我的實作環境
- 作業系統: Ubuntu 17.04
- OpenCV 函式庫版本:
Version 3.3
- 程式語言: C++
在作業系統方面請不用擔心,因為 OpenCV 是一個跨平台的電腦視覺函式庫
臉部偵測 - Face Detection
來寫一個簡單的臉部偵測(Face Detection)
程式,使其將一張照片的人臉以及人眼圈出。
先建立檔案
先依序建立以下幾個檔案:
1 | mkdir FaceID |
此時 FaceID 資料夾內應該要有以下檔案
下載人臉以及人眼分類器
取得 Eyes Classifier
1 | wget https://raw.githubusercontent.com/a1996850622/FaceDetection/master/Source/haarcascade_eye_tree_eyeglasses.xml |
取得 Face Classifier
1 | wget https://raw.githubusercontent.com/a1996850622/FaceDetection/master/Source/haarcascade_frontalface_default.xml |
接著將取得的兩個 XML 檔放進 Source 資料夾
中
XML 是可自行定義各標籤名稱的標記式語言,透過透過標記式語言,電腦之間便可以傳輸各種資訊。所以當我們 Load 上面兩個 XML 進程式之後,便可以使用他們的演算法來找出人臉及眼睛。
開始撰寫臉部偵測
1 | /** FaceDetection.cpp **/ |
解釋臉部偵測程式
其實過程很簡單,大致是以下幾個步驟:
- 將人臉及人眼分類器演算法的 XML 檔 Load 進來 (程式第28~32行)
- 使用
cvtColor()
將影像轉成灰階(GaryScale)
,目的是減少運算量 (程式第66行) - 使用
resize()
更改影像大小比率,視情況而定,在這裡我們先不使用 (程式第70行) - 使用
equalizeHist()
將影像做直方圖等化,以增強對比度 (程式第74行) - 運用 XML 內的分類演算法來偵測出人臉和人眼 (程式第78行和91行)
- 分別圈出人臉以及人眼 (程式第80~101行)
- 完成臉部偵測