iT邦幫忙

2022 iThome 鐵人賽

DAY 30
0
自我挑戰組

數位影像處理系列 第 30

[Day 30]人臉辨識

  • 分享至 

  • xImage
  •  

最後一天了,讓我們來介紹人臉辨識吧!


人臉辨識

 人臉辨識是與人機互動中最重要的特徵,因此影像處理或電腦視覺領域中,許多專家學者持續投入研究。目前被廣泛應用的臉部偵測演算法為Viola-Jones臉部偵測
 Viola-Jones的臉部偵測技術,處理步驟如下:
 (1) Haar特徵(Haar Feartures):首先根據輸入影像先擷取Haar特徵。計算黑色與白色區域的像素間的差值。Viola-Jones臉部偵測技術是以24 * 24的影像大小為基礎。
 (2) 積分影像(Integral Image):積分影像是指計算像素總和。如下圖所示。積分影像主要是根據(x,y)的位置,取其左上角的像素總和。計算而得的積分影像可以用來加速Haar特徵運算。
https://ithelp.ithome.com.tw/upload/images/20221006/20152370SHOTjjhDFG.png

 (3) Adaboost:根據24 * 24的影像大小所擷取的Haar特徵總共有160,000多個,但僅某些特徵較有用,其他則不相關。本步驟是用來找到與臉部偵測相關的Haar特徵,稱為弱分類器(Weak Classifier)。Adaboost以線性組合的方式結合這些弱分類器,形成強分類器(Strong Classifier)

 (4) 串接(Cascading):串接是將上述的強分類器串接,目的是在希望快速移除非臉部區域並將重點放在可能的臉部區域,所建構的分類器稱為串接分類器(Cascade Classifier)

 Viola-Jones臉具偵測訓練分類器時,是以龐大的資料庫做為訓練樣本,包含5000個臉部區域(均為正面臉部)與9400個非臉部區域,臉部偵測的正確率相當高,因此成為最具代表性的臉具偵測技術。

 OpenCV提供Viola-Jones物件偵測框架演算法,稱為Haar串接分類器,不僅可以用來偵測臉部,同時也可以用來偵測臉部其他特徵等。

import numpy as np
import cv2

def face_detection(f):
   g = f.copy()
   gray = cv2.cvtColor(f, cv2.COLOR_BGR2GRAY)
   face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
   faces = face_cascade.detectMultiScale(gray, 1.1, 5)

   for (x, y, w, h) in faces:
       g = cv2.rectangle( g,(x, y), (x + w, y + h), (255, 0, 0), 2)
   
   return g


def main():
   img1 = cv2.imread("D:/Desktop/IThome/face.bmp", -1)
   img2 = face_detection(img1)
   cv2.imshow("Original", img1)
   cv2.imshow("After", img2)
   cv2.waitKey()
   cv2.destroyAllWindows()

main()

結果如下:
https://ithelp.ithome.com.tw/upload/images/20221006/20152370WeowOwSaqu.png


上一篇
[Day 29]輪廓特徵
系列文
數位影像處理30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言