基于Python+Keras+OpenCV實現(xiàn)實時人臉活體檢測
你在互聯(lián)網(wǎng)上找到的大多數(shù)人臉識別算法和研究論文都會遭受照片攻擊。這些方法在檢測和識別來自網(wǎng)絡(luò)攝像頭的圖像、視頻和視頻流中的人臉方面是非常有效,但是他們無法區(qū)分現(xiàn)實生活中的面孔和照片上的面孔。這種無法區(qū)別現(xiàn)實人臉的現(xiàn)象是由于這些算法是在二維幀上工作的,F(xiàn)在讓我們?nèi)ピ囅胍幌,我們實現(xiàn)一個人臉識別系統(tǒng),該系統(tǒng)可以很好地區(qū)分已知面孔和未知面孔,以便只有授權(quán)人員才能訪問,盡管如此,一個心懷不軌的人只要出示授權(quán)人的照片也能訪問。至此一個3D人臉的識別系統(tǒng),類似于蘋果的FaceID,應(yīng)運而生了,但如果我們沒有3D探測器該怎么辦呢?
本文的目標(biāo)是實現(xiàn)一種基于眨眼檢測的人臉活體檢測算法,以抵抗照片攻擊。該算法通過網(wǎng)絡(luò)攝像頭實時工作,通過檢測眨眼來區(qū)分現(xiàn)實生活中的面孔和照片上的面孔。通俗地說,程序運行如下:在網(wǎng)絡(luò)攝像頭生成的每個幀中檢測人臉。對于每個檢測到的臉,檢測眼睛。對于每個檢測到的眼睛,檢測眼睛是否睜開或關(guān)閉。如果在某個時候檢測到眼睛是睜開的,然后是閉著的,然后是睜開的,我們就斷定此人已經(jīng)眨了眼睛,并且程序顯示他的名字(如果是人臉識別開門器,我們將授權(quán)此人進(jìn)入)。對于人臉的檢測和識別,你需要安裝face_recognition庫,它提供了非常有用的深度學(xué)習(xí)方法來查找和識別圖像中的人臉,特別是,face_locations、face_encodings和compare_faces函數(shù)是最有用的3個函數(shù)。人臉定位方法可以用兩種方法來檢測人臉:方向梯度直方圖(HoG)和卷積神經(jīng)網(wǎng)絡(luò)(CNN),由于時間限制,選擇了HoG方法。face_encodings函數(shù)是一個預(yù)先訓(xùn)練的卷積神經(jīng)網(wǎng)絡(luò),能夠?qū)D像編碼成128哥元素的一維特征向量,這個嵌入向量包含足夠的特征信息來區(qū)分兩個不同的人,最后,compare_faces計算兩個嵌入向量之間的距離。它將允許算法識別從攝像頭幀中提取的人臉,并將其嵌入向量與我們數(shù)據(jù)集中所有編碼的人臉進(jìn)行比較,距離最近的向量對應(yīng)于同一個人。1. 已知人臉數(shù)據(jù)集編碼在我的例子中,算法能夠識別我和奧巴馬,我為每個人挑選了大約10張照片。下面是處理和編碼已知人臉數(shù)據(jù)庫的代碼。def process_and_encode(images):
known_encodings = [] known_names = [] print("[LOG] Encoding dataset ...")
for image_path in tqdm(images): # 加載圖片 image = cv2.imread(image_path) # 將其從BGR轉(zhuǎn)換為RGB image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
# 檢測圖像中的臉并獲取其位置(方框坐標(biāo)) boxes = face_recognition.face_locations(image, model='hog')
# 將人臉編碼為128維嵌入向量 encoding = face_recognition.face_encodings(image, boxes)
# 人物名稱是圖像來源文件夾的名稱 name = image_path.split(os.path.sep)[-2]
if len(encoding) > 0 : known_encodings.a(chǎn)ppend(encoding[0]) known_names.a(chǎn)ppend(name)
return {"encodings": known_encodings, "names": known_names}現(xiàn)在我們知道了每個想識別的人的編碼,我們可以嘗試通過網(wǎng)絡(luò)攝像頭識別人臉,然而,在轉(zhuǎn)到這一部分之前,我們需要區(qū)分一張人臉照片和一張活人的臉。2.人臉活體檢測我們的目標(biāo)是在某個點上檢測出一個睜閉的睜眼模式。我訓(xùn)練了一個卷積神經(jīng)網(wǎng)絡(luò)來分類眼睛是閉著的還是睜著的,所選擇的模型是LeNet-5,它已經(jīng)在Closed Eyes In The Wild (CEW)數(shù)據(jù)集上進(jìn)行了訓(xùn)練,它由大約4800張24x24大小的眼睛圖像組成。Closed Eyes In The Wild (CEW)數(shù)據(jù)集地址:http://parnec.nuaa.edu.cn/xtan/data/ClosedEyeDatabases.htmlfrom keras.models
import Sequentialfrom keras.layers import Conv2Dfrom keras.layers import AveragePooling2Dfrom keras.layers import Flattenfrom keras.layers import Densefrom keras.preprocessing.image
import ImageDataGenerator
IMG_SIZE = 24def train(train_generator, val_generator): STEP_SIZE_TRAIN=train_generator.n//train_generator.batch_size STEP_SIZE_VALID=val_generator.n//val_generator.batch_size
model = Sequential()
model.a(chǎn)dd(Conv2D(filters=6, kernel_size=(3, 3), activation='relu', input_shape=(IMG_SIZE,IMG_SIZE,1))) model.a(chǎn)dd(AveragePooling2D())
model.a(chǎn)dd(Conv2D(filters=16, kernel_size=(3, 3), activation='relu')) model.a(chǎn)dd(AveragePooling2D())
model.a(chǎn)dd(Flatten())
model.a(chǎn)dd(Dense(units=120, activation='relu'))
model.a(chǎn)dd(Dense(units=84, activation='relu'))
model.a(chǎn)dd(Dense(units=1, activation = 'sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
print('[LOG] Training CNN')
model.fit_generator(generator=train_generator,steps_per_epoch=STEP_SIZE_TRAIN,validation_data=val_generator,validation_steps=STEP_SIZE_VALID, epochs=20 ) return model在評估模型時,我達(dá)到了94%的準(zhǔn)確率。每次我們檢測到一只眼睛,我們就用我們的模型來預(yù)測它的狀態(tài),并跟蹤每個人的眼睛狀態(tài),因此,檢測眨眼變得非常容易,它試圖在眼睛狀態(tài)歷史中找到一個閉眼-睜眼-閉眼的過程。
請輸入評論內(nèi)容...
請輸入評論/評論長度6~500個字
最新活動更多
-
即日-10.29立即報名>> 2024德州儀器嵌入式技術(shù)創(chuàng)新發(fā)展研討會
-
10月31日立即下載>> 【限時免費下載】TE暖通空調(diào)系統(tǒng)高效可靠的組件解決方案
-
即日-11.13立即報名>>> 【在線會議】多物理場仿真助跑新能源汽車
-
11月14日立即報名>> 2024工程師系列—工業(yè)電子技術(shù)在線會議
-
12月19日立即報名>> 【線下會議】OFweek 2024(第九屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會
-
即日-12.26火熱報名中>> OFweek2024中國智造CIO在線峰會
推薦專題
- 1 Intel宣布40年來最重大轉(zhuǎn)型:年底前裁員15000人、拋掉2/3房產(chǎn)
- 2 因美封殺TikTok,字節(jié)股價骨折!估值僅Meta1/5
- 3 宏山激光重磅發(fā)布行業(yè)解決方案,助力智能制造產(chǎn)業(yè)新飛躍
- 4 國產(chǎn)AI芯片公司破產(chǎn)!白菜價拍賣
- 5 具身智能火了,但規(guī)模落地還需時間
- 6 國產(chǎn)英偉達(dá)們,抓緊沖刺A股
- 7 三次錯失風(fēng)口!OpenAI前員工殺回AI編程賽道,老東家捧金相助
- 8 英特爾賦能智慧醫(yī)療,共創(chuàng)數(shù)字化未來
- 9 英偉達(dá)的麻煩在后頭?
- 10 將“網(wǎng)紅”變成“商品”,AI“爆改”實力拉滿
- 高級軟件工程師 廣東省/深圳市
- 自動化高級工程師 廣東省/深圳市
- 光器件研發(fā)工程師 福建省/福州市
- 銷售總監(jiān)(光器件) 北京市/海淀區(qū)
- 激光器高級銷售經(jīng)理 上海市/虹口區(qū)
- 光器件物理工程師 北京市/海淀區(qū)
- 激光研發(fā)工程師 北京市/昌平區(qū)
- 技術(shù)專家 廣東省/江門市
- 封裝工程師 北京市/海淀區(qū)
- 結(jié)構(gòu)工程師 廣東省/深圳市