為什么人臉檢測識(shí)別越來越普及了?其背后的技術(shù)是什么?
在過去的幾年里,人臉識(shí)別受到了廣泛的關(guān)注,被認(rèn)為是圖像分析領(lǐng)域最有前途的應(yīng)用之一。人臉檢測可以考慮人臉識(shí)別操作的很大一部分。根據(jù)其強(qiáng)度將計(jì)算資源集中在持有人臉的圖像部分。圖片中的人臉檢測方法很復(fù)雜,因?yàn)槿四槾嬖诳勺冃?,例如姿勢、表情、位置和方向、膚色、眼鏡或面部毛發(fā)的存在、相機(jī)增益的差異、照明條件和圖像分辨率。
物體檢測是計(jì)算機(jī)技術(shù)中的一種,它與圖像處理和計(jì)算機(jī)視覺相聯(lián)系,它與人臉、建筑物、樹木、汽車等物體的檢測實(shí)例相互作用。人臉檢測算法的主要目的是確定圖像中是否有任何人臉。
近年來,在人臉識(shí)別和人臉檢測領(lǐng)域提出了很多研究工作,以使其更加先進(jìn)和準(zhǔn)確,但是當(dāng) Viola-Jones 推出實(shí)時(shí)人臉檢測器時(shí),它在該領(lǐng)域掀起了一場革命,即能夠?qū)崟r(shí)、高精度地檢測人臉。
人臉檢測是人臉識(shí)別的第一步,也是必不可少的一步,用于檢測圖像中的人臉。它是物體檢測的一部分,可用于許多領(lǐng)域,如安防、生物識(shí)別、執(zhí)法、娛樂、人身安全等。
它用于實(shí)時(shí)檢測人臉,以對(duì)人或物體進(jìn)行監(jiān)視和跟蹤。它廣泛用于相機(jī)中,以識(shí)別 Ex-Mobile 相機(jī)和 DSLR 框架中的多個(gè)外觀。 Facebook 也在使用人臉檢測算法來檢測圖像中的人臉并進(jìn)行識(shí)別。
本文適用于在計(jì)算機(jī)視覺或 AI 領(lǐng)域的初學(xué)者,希望了解什么是人臉檢測、其類型及其工作原理來。
人臉檢測方法
Yan、Kriegman 和 Ahuja 提出了人臉檢測方法的分類。 這些方法分為四類,人臉檢測算法可以屬于兩組或更多組。 這些類別如下:
1.基于知識(shí)
基于知識(shí)的方法依賴于規(guī)則集,它基于人類知識(shí)來檢測人臉。一張臉必須有一個(gè)鼻子、眼睛和嘴巴,它們彼此之間一定的距離和位置。這些方法的一個(gè)大問題是難以建立一套合適的規(guī)則。如果規(guī)則太籠統(tǒng)或太詳細(xì),可能會(huì)有很多誤報(bào)。僅此方法是不夠的,無法在多張圖像中找到許多人臉。
2.基于特征
基于特征的方法是通過提取人臉的結(jié)構(gòu)特征來定位人臉。它首先作為分類器進(jìn)行訓(xùn)練,然后用于區(qū)分面部和非面部區(qū)域。這個(gè)想法是為了克服我們對(duì)面孔的本能知識(shí)的限制。這種方法分為幾個(gè)步驟,甚至有很多人臉的照片,他們報(bào)告的成功率為 94%。
3.模板匹配
模板匹配方法使用預(yù)定義或參數(shù)化的人臉模板,通過模板和輸入圖像之間的相關(guān)性來定位或檢測人臉。例如,人臉可以分為眼睛、面部輪廓、鼻子和嘴巴。此外,可以僅通過使用邊緣檢測方法通過邊緣構(gòu)建人臉模型。這種方法實(shí)現(xiàn)起來很簡單,但是對(duì)于人臉檢測來說是不夠的。然而,已經(jīng)提出了可變形模板來處理這些問題。
4.基于外觀
基于外觀的方法依賴于一組委托訓(xùn)練人臉圖像來找出人臉模型。 基于外觀的方法優(yōu)于其他性能方法。 一般來說,基于外觀的方法依賴于統(tǒng)計(jì)分析和機(jī)器學(xué)習(xí)的技術(shù)來尋找人臉圖像的相關(guān)特征。 這種方法也用于人臉識(shí)別的特征提取。
基于外觀的模型進(jìn)一步分為用于人臉檢測的子方法,如下所示:
- 基于特征臉
用于人臉識(shí)別的基于特征臉的算法,它是一種使用主成分分析有效地表示人臉的方法。
- 基于分布
PCA 和 Fisher 判別式等算法可用于定義表示面部模式的子空間。有一個(gè)經(jīng)過訓(xùn)練的分類器,它可以從背景圖像模式中正確識(shí)別目標(biāo)模式類的實(shí)例。
- 神經(jīng)網(wǎng)絡(luò)
神經(jīng)網(wǎng)絡(luò)已經(jīng)成功解決了許多檢測問題,如物體檢測、人臉檢測、情感檢測和人臉識(shí)別等。
- 支持向量機(jī)
支持向量機(jī)是線性分類器,可最大化決策超平面和訓(xùn)練集中示例之間的余量。首先將此分類器應(yīng)用于人臉檢測。
- Winnows 的稀疏網(wǎng)絡(luò)
他們定義了一個(gè)由兩個(gè)線性單元或目標(biāo)節(jié)點(diǎn)組成的稀疏網(wǎng)絡(luò);一個(gè)代表面部圖案,另一個(gè)代表非面部圖案。它耗時(shí)少,效率高。
- 樸素貝葉斯分類器(Naive Bayes Classifiers)
通過計(jì)算訓(xùn)練圖像上一系列模式的出現(xiàn)頻率來計(jì)算一張臉出現(xiàn)在圖片中的概率。分類器捕獲面部局部外觀和位置的聯(lián)合統(tǒng)計(jì)數(shù)據(jù)。
- 隱馬爾可夫模型(Hidden Markov Model,HMM)
模型的狀態(tài)是面部特征,通常被描述為像素條。 HMM 通常與其他方法一起使用來構(gòu)建檢測算法。

- 信息理論方法(Information Theoretical Approach)
馬爾可夫隨機(jī)場 (MRF) 可用于面部圖案和相關(guān)特征。 馬爾可夫過程使用 Kullback-Leibler 散度最大化類之間的區(qū)分。 因此該方法可用于人臉檢測。
- 歸納學(xué)習(xí)(Inductive Learning)
這種方法已被用于檢測人臉。 Quinlan 的 C4.5 或 Mitchell 的 FIND-S 等算法用于此目的。
人臉檢測的工作原理
檢測人臉的技術(shù)有很多,借助這些技術(shù),我們可以更準(zhǔn)確地識(shí)別人臉。 這些技術(shù)具有幾乎相同的人臉檢測程序,例如 OpenCV、神經(jīng)網(wǎng)絡(luò)、Matlab 等。人臉檢測的工作原理是檢測圖像中的多個(gè)人臉。 這里我們使用 OpenCV 進(jìn)行人臉檢測,并且有一些人臉檢測操作的步驟,如下所示:
1)首先,通過提供圖像的位置來導(dǎo)入圖像。 然后將圖片從RGB轉(zhuǎn)換為灰度,因?yàn)樵诨叶戎泻苋菀讬z測人臉。
2)之后,使用圖像處理,其中根據(jù)需要對(duì)圖像進(jìn)行調(diào)整大小、裁剪、模糊和銳化。
3)下一步是圖像分割,用于輪廓檢測或分割單個(gè)圖像中的多個(gè)對(duì)象,以便分類器可以快速檢測到圖片中的對(duì)象和人臉。
4)下一步是使用 Haar-Like 特征算法,該算法由 Voila 和 Jones 提出用于人臉檢測。該算法用于查找?guī)驁D像中人臉的位置。所有的人臉都具有人臉的一些普遍特性,例如眼睛區(qū)域比其相鄰像素更暗,鼻子區(qū)域比眼睛區(qū)域更亮。
haar-like算法也用于對(duì)圖像中的物體進(jìn)行特征選擇或特征提取,借助邊緣檢測、線檢測、中心檢測來檢測圖片中的眼睛、鼻子、嘴巴等。 它用于選擇圖像中的基本特征并提取這些特征進(jìn)行人臉檢測。

5)下一步是給出x、y、w、h的坐標(biāo),這在圖片中形成一個(gè)矩形框來顯示人臉的位置,或者我們可以說是顯示圖像中的感興趣區(qū)域。之后,它可以在檢測到人臉的感興趣區(qū)域中制作一個(gè)矩形框。 還有許多其他檢測技術(shù)一起用于檢測,例如微笑檢測、眼睛檢測、眨眼檢測等。
如何實(shí)時(shí)運(yùn)行人臉檢測器(基于網(wǎng)絡(luò)攝像頭)
運(yùn)行代碼的要求 - Python、OpenCV、網(wǎng)絡(luò)攝像頭、Numpy。
- #import libraries
- import cv2
- import numpy as np
- #import classifier for face and eye detection
- face_classifier = cv2.CascadeClassifier(‘Haarcascades/haarcascade_frontalface_default.xml’)
- # Import Classifier for Face and Eye Detection
- face_classifier = cv2.CascadeClassifier(‘Haarcascades/haarcascade_frontalface_default.xml’)
- eye_classifier = cv2.CascadeClassifier (‘Haarcascades/haarcascade_eye.xml’)
- def face_detector (img, size=0.5):
- # Convert Image to Grayscale
- gray = cv2.cvtColor (img, cv2.COLOR_BGR2GRAY)
- faces = face_classifier.detectMultiScale (gray, 1.3, 5)
- If faces is ():
- return img
- # Given coordinates to detect face and eyes location from ROI
- for (x, y, w, h) in faces
- x = x — 100
- w = w + 100
- y = y — 100
- h = h + 100
- cv2.rectangle (img, (x, y), (x+w, y+h), (255, 0, 0), 2)
- roi_gray = gray[y: y+h, x: x+w]
- roi_color = img[y: y+h, x: x+w]
- eyes = eye_classifier.detectMultiScale (roi_gray)
- for (ex, ey, ew, eh) in eyes:
- cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,0,255),2)
- roi_color = cv2.flip (roi_color, 1)
- return roi_color
- # Webcam setup for Face Detection
- cap = cv2.VideoCapture (0)
- while True:
- ret, frame = cap.read ()
- cv2.imshow (‘Our Face Extractor’, face_detector (frame))
- if cv2.waitKey (1) == 13: #13 is the Enter Key
- break
- # When everything done, release the capture
- cap.release ()
- cv2.destroyAllWindows ()
人臉檢測可用于生物特征識(shí)別,通常做為人臉識(shí)別系統(tǒng)的一部分。人臉檢測也可以用于視頻監(jiān)控、人機(jī)交互和圖像數(shù)據(jù)庫管理。一些最新的數(shù)碼相機(jī)使用人臉檢測來自動(dòng)對(duì)焦。
人臉識(shí)別技術(shù)是人工智能領(lǐng)域的關(guān)鍵技術(shù),在智能視頻監(jiān)控場景具有十分廣泛的應(yīng)用前景。
在安防監(jiān)控中,人臉識(shí)別也意義重大,比如公眾場所(地鐵站、車站、街道、酒店等)的安防布控、公安部追捕嫌疑犯等。基于公眾場所的安防監(jiān)控?cái)z像頭,通過抓拍人臉并將結(jié)果上傳公安部網(wǎng)絡(luò),與嫌疑犯人臉進(jìn)行比對(duì),協(xié)助公安人員的執(zhí)法工作。TSINGSEE青犀視頻也將以AI智能檢測與識(shí)別技術(shù)為核心,持續(xù)研發(fā)多場景下的智能業(yè)務(wù)系統(tǒng)及平臺(tái),向AI領(lǐng)域深耕,比如EasyCVR,具有AI人臉檢測、人臉識(shí)別、車牌識(shí)別、語音對(duì)講、云臺(tái)控制、聲光告警、監(jiān)控視頻分析與數(shù)據(jù)匯總的能力,已經(jīng)落地多個(gè)項(xiàng)目,如景區(qū)的行人檢測、客流分析等場景中。