自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

從零開始構(gòu)建人臉識(shí)別模型(附實(shí)例和Python代碼)

開發(fā) 后端 人臉識(shí)別
你是否意識(shí)到,每當(dāng)你上傳照片到Facebook上,平臺(tái)都會(huì)用人臉識(shí)別算法來識(shí)別圖片中的人物?目前還有一些政府在用人臉識(shí)別技術(shù)來識(shí)別和抓捕罪犯。此外,最常見的應(yīng)用就是通過自己的臉部解鎖手機(jī)。本文將介紹人臉識(shí)別的基本思路和對代碼進(jìn)行簡要分析。

01 介紹

你是否意識(shí)到,每當(dāng)你上傳照片到Facebook上,平臺(tái)都會(huì)用人臉識(shí)別算法來識(shí)別圖片中的人物?目前還有一些政府在用人臉識(shí)別技術(shù)來識(shí)別和抓捕罪犯。此外,最常見的應(yīng)用就是通過自己的臉部解鎖手機(jī)。

計(jì)算機(jī)視覺的子領(lǐng)域應(yīng)用得非常廣泛,并且全球很多商業(yè)活動(dòng)都已經(jīng)從中獲益。人臉識(shí)別模型的使用在接下來的幾年內(nèi)還會(huì)繼續(xù)增長,所以一起來了解如何從零開始構(gòu)建人臉識(shí)別模型吧!

?[[250684]]?

本文首先會(huì)介紹人臉識(shí)別模型的內(nèi)部工作原理。隨后結(jié)合一個(gè)簡單的案例,我們將通過Python進(jìn)行案例實(shí)踐。在本文的***部分,你將完成你的***個(gè)人臉識(shí)別模型!

02 理解人臉識(shí)別的工作原理

為了理解人臉識(shí)別算法工作原理,我們首先來了解一下特征向量的概念。(譯者注:此處的特征向量指機(jī)器學(xué)習(xí)的概念,不同于矩陣?yán)碚摗#?/p>

每個(gè)機(jī)器學(xué)習(xí)算法都會(huì)將數(shù)據(jù)集作為輸入,并從中學(xué)習(xí)經(jīng)驗(yàn)。算法會(huì)遍歷數(shù)據(jù)并識(shí)別數(shù)據(jù)中的模式。例如,假定我們希望識(shí)別指定圖片中人物的臉,很多物體是可以看作模式的:

  • 臉部的長度/寬度。
  • 由于圖片比例會(huì)被調(diào)整,長度和高度可能并不可靠。然而,在放縮圖片后,比例是保持不變的——臉部長度和寬度的比例不會(huì)改變。
  • 臉部膚色。
  • 臉上局部細(xì)節(jié)的寬度,如嘴,鼻子等。

顯而易見,此時(shí)存在一個(gè)模式——不同的臉有不同的維度,相似的臉有相似的維度。有挑戰(zhàn)性的是需要將特定的臉轉(zhuǎn)為數(shù)字,因?yàn)闄C(jī)器學(xué)習(xí)算法只能理解數(shù)字。表示一張臉的數(shù)字(或訓(xùn)練集中的一個(gè)元素)可以稱為特征向量。一個(gè)特征向量包括特定順序的各種數(shù)字。

舉一個(gè)簡單的例子,我們可以將一張臉映射到一個(gè)特征向量上。特征向量由不同的特征組成,如:

  • 臉的長度(cm)
  • 臉的寬度(cm)
  • 臉的平均膚色(R,G,B)
  • 唇部寬度(cm)
  • 鼻子長度(cm)

當(dāng)給定一個(gè)圖片時(shí),我們可以標(biāo)注不同的特征并將其轉(zhuǎn)化為如下的特征向量:

??

如此一來,我們的圖片現(xiàn)在被轉(zhuǎn)化為一個(gè)向量,可以表示為(23.1,15.8,255,224,189,5.2,4.4)。當(dāng)然我們還可以從圖片中衍生出無數(shù)的其他特征(如,頭發(fā)顏色,胡須,眼鏡等)。然而在這個(gè)簡單的例子中,我們只考慮這五個(gè)簡單的特征。 

現(xiàn)在,一旦我們將每個(gè)圖片解碼為特征向量,問題就變得更簡單。明顯地,當(dāng)我們使用同一個(gè)人的兩張面部圖片時(shí),提取的特征向量會(huì)非常相似。換言之,兩個(gè)特征向量的“距離”就變得非常小。

此時(shí)機(jī)器學(xué)習(xí)可以幫我們完成兩件事:

  • 提取特征向量。由于特征過多,手動(dòng)列出所有特征是非常困難的。一個(gè)機(jī)器學(xué)習(xí)算法可以自動(dòng)標(biāo)注很多特征。例如,一個(gè)復(fù)雜的特征可能是:鼻子長度和前額寬度的比例。手動(dòng)列出所有的這些衍生特征是非常困難的。
  • 匹配算法:一旦得到特征向量,機(jī)器學(xué)習(xí)算法需要將新圖片和語料庫中的特征向量進(jìn)行匹配。

既然我們對人臉識(shí)別如何工作有了基本的理解,讓我們運(yùn)用一些廣泛使用的Python庫來搭建自己的人臉識(shí)別算法。

03 案例學(xué)習(xí)

首先給定一些人物臉部的圖片——可能是一些名人,如Mark Zuckerberg, Warren Buffett, Bill Gates, Shah Rukh Khan等,并把這些人臉看作我們的語料庫?,F(xiàn)在,我們給定一些其他名人的新圖片(“新人物”),并判斷這些“新人物”是否在語料庫中。

以下是語料庫中的圖片:

如圖所示,我們所列舉的名人有Barack Obama, Bill Gates, Jeff Bezos, Mark Zuckerberg, Ray Dalio 和Shah Rukh Khan。

現(xiàn)在,假定“新人物”如下:

?[[250685]]?

▲注:以上所有圖片均來自Google圖片

顯而易見,這是Shah Rukh Khan。然而對電腦來說,這個(gè)任務(wù)很有挑戰(zhàn)性。因?yàn)閷τ谖覀儊碚f,我們可以輕易地將圖片的多種特征結(jié)合來判斷這是哪個(gè)人物。然而對電腦而言,學(xué)習(xí)如何識(shí)別人臉是非常不直觀的。

有一個(gè)神奇但是簡單的python庫封裝了以上提及的內(nèi)容——可以根據(jù)臉部特征生成特征向量并且知道如何區(qū)分不同的臉。這個(gè)python庫叫做face_recognition。它應(yīng)用了dlib——一個(gè)現(xiàn)代C++工具包,其中包含了一些機(jī)器學(xué)習(xí)算法來幫助完成復(fù)雜的基于C++的應(yīng)用。

Python中的face_recognition庫可以完成大量的任務(wù):

  • 發(fā)現(xiàn)給定圖片中所有的臉。
  • 發(fā)現(xiàn)并處理圖片中的臉部特征。
  • 識(shí)別圖片中的臉。
  • 實(shí)時(shí)的人臉識(shí)別。

接下來,我們將探討其中的第三種任務(wù)——識(shí)別圖片中的臉。

你可以在github的如下鏈接中獲取face_recognition庫的源代碼。

鏈接:

??https://github.com/ageitgey/face_recognition??

事實(shí)上,這里有一些如何安裝face_recognition庫的指導(dǎo)。

鏈接:

??https://github.com/ageitgey/face_recognition#installation-options??

在你安裝face_recognition之前,還需要安裝dlib包。你可以從如下鏈接中找到安裝dlib的指導(dǎo)。

鏈接:

??https://gist.github.com/ageitgey/629d75c1baac34dfa5ca2a1928a7aeaf ??

04 Python應(yīng)用

這部分包括使用face_recognition庫搭建簡單人臉識(shí)別系統(tǒng)的代碼。這是一個(gè)應(yīng)用操作的部分,我們將在下一部分解讀代碼來理解更多細(xì)節(jié)。 

# import the libraries
import os
import face_recognition
# make a list of all the available images
images = os.listdir('images')
# load your image
image_to_be_matched = face_recognition.load_image_file('my_image.jpg')
# encoded the loaded image into a feature vector
image_to_be_matched_encoded = face_recognition.face_encodings(
image_to_be_matched)[0]
# iterate over each image
for image in images:
# load the image
current_image = face_recognition.load_image_file("images/" + image)
# encode the loaded image into a feature vector
current_image_encoded = face_recognition.face_encodings(current_image)[0]
# match your image with the image and check if it matches
result = face_recognition.compare_faces(
[image_to_be_matched_encoded], current_image_encoded)
# check if it was a match
if result[0] == True:
print "Matched: " + image
else:
print "Not matched: " + image

文件結(jié)構(gòu)如下:

facialrecognition:

  • fr.py
  • my_image.jpg
  • images/
  • barack_obama.jpg
  • bill_gates.jpg
  • jeff_bezos.jpg
  • mark_zuckerberg.jpg
  • ray_dalio.jpg
  • shah_rukh_khan.jpg
  • warren_buffett.jpg

我們的根目錄,facialrecognition包括:

  • fr.py的形式的人臉識(shí)別代碼。
  • my_image.jpg – 即將被識(shí)別的圖片(“新人物”)。
  • images/ – 語料庫。

如果你按照前文創(chuàng)建文件結(jié)構(gòu)并執(zhí)行代碼,如下是你能得到的結(jié)果: 

Matched: shah_rukh_khan.jpg
Not matched: warren_buffett.jpg
Not matched: barack_obama.jpg
Not matched: ray_dalio.jpg
Not matched: bill_gates.jpg
Not matched: jeff_bezos.jpg
Not matched: mark_zuckerberg.jpg

顯而易見,新名人是Shah Rukh Khan 并且我們的人臉識(shí)別系統(tǒng)可以識(shí)別!

05 理解Python代碼

現(xiàn)在讓我們解讀代碼來,并理解其工作原理: 

# import the libraries
import os
import face_recognition

以上是引入操作。我們將通過已經(jīng)建好的os庫來讀入語料庫中的所有圖片,并且通過face_recognition來完成算法部分。 

# make a list of all the available images
images = os.listdir('images')

這個(gè)簡單的代碼將幫助我們識(shí)別語料庫中所有圖片的路徑。一旦執(zhí)行這些代碼,我們可以得到: 

images = ['shah_rukh_khan.jpg', 'warren_buffett.jpg', 'barack_obama.jpg', 'ray_dalio.jpg', 'bill_gates.jpg', 'jeff_bezos.jpg', 'mark_zuckerberg.jpg']

現(xiàn)在,以下代碼將加載新人物的圖片: 

# load your image
image_to_be_matched = face_recognition.load_image_file('my_image.jpg')

為了保證算法可以解析圖片,我們將人物臉部圖片轉(zhuǎn)化為特征向量: 

# encoded the loaded image into a feature vector
image_to_be_matched_encoded = face_recognition.face_encodings(
image_to_be_matched)[0]

剩余的代碼相對簡單: 

# iterate over each image
for image in images:
# load the image
current_image = face_recognition.load_image_file("images/" + image)
# encode the loaded image into a feature vector
current_image_encoded = face_recognition.face_encodings(current_image)[0]
# match your image with the image and check if it matches
result = face_recognition.compare_faces(
[image_to_be_matched_encoded], current_image_encoded)
# check if it was a match
if result[0] == True:
print "Matched: " + image
else:
print "Not matched: " + image

此時(shí),我們:

  • 對每個(gè)圖像進(jìn)行循環(huán)操作。
  • 將圖像解析為特征向量。
  • 比較語料庫中已經(jīng)加載的圖片和被識(shí)別的新人物圖片。
  • 如果兩者匹配,我們就顯示出來。如果不匹配,我們也要顯示結(jié)果。

如上所示,結(jié)果顯示這個(gè)簡單的人臉識(shí)別算法進(jìn)行得很順利。讓我們嘗試將my_image替換為另一個(gè)圖片:

?[[250686]]?

當(dāng)你再次運(yùn)行這個(gè)算法,將會(huì)看到如下結(jié)果: 

Not matched: shah_rukh_khan.jpg
Not matched: warren_buffett.jpg
Not matched: barack_obama.jpg
Not matched: ray_dalio.jpg
Not matched: bill_gates.jpg
Not matched: jeff_bezos.jpg
Not matched: mark_zuckerberg.jpg

很明顯,系統(tǒng)沒有將馬云識(shí)別為以上的任何一個(gè)名人。這意味著我們的算法在以下方面都表現(xiàn)得很好:

  • 正確地識(shí)別那些在語料庫中存儲(chǔ)的人。
  • 對語料庫中不存在的人物進(jìn)行標(biāo)注。

06 人臉識(shí)別算法的應(yīng)用

人臉識(shí)別是一個(gè)成熟的研究方向,已被廣泛地應(yīng)用在工業(yè)界和學(xué)術(shù)界。例如,一個(gè)罪犯在中國被捕可能就得益于人臉識(shí)別系統(tǒng):系統(tǒng)識(shí)別了他的臉并發(fā)出警報(bào)。由此可見,面部識(shí)別可以用來減少犯罪。還有許多其他有趣的人臉識(shí)別案例:

  • 面部身份驗(yàn)證:Apple在iPhones中引入了Face ID以用于面部身份驗(yàn)證。一些銀行也嘗試使用面部身份驗(yàn)證來解鎖。
  • 用戶服務(wù):馬來西亞的一些銀行安裝了新的人臉識(shí)別系統(tǒng),用于識(shí)別有價(jià)值的銀行客戶,以便銀行為其提供個(gè)人服務(wù)。進(jìn)而銀行可以通過維持這類用戶并提升用戶滿意度來獲取更多收益。
  • 保險(xiǎn)行業(yè):很多保險(xiǎn)公司正在通過運(yùn)用人臉識(shí)別系統(tǒng)來匹配人的臉和ID提供的照片,使賠付過程變得更簡單。

07 尾記

綜上所述,人臉識(shí)別是一個(gè)有趣的問題并且有很多強(qiáng)大的案例。這些應(yīng)用可以有效地從各個(gè)方面為社會(huì)服務(wù)。盡管將這些技術(shù)商業(yè)化可能會(huì)帶來倫理風(fēng)險(xiǎn),但我們會(huì)把這個(gè)問題留到下次討論。

希望你能從本文中有所收獲。

原文標(biāo)題:

Simple Introduction to Facial Recognition (with Python codes)

原文鏈接:

??https://www.analyticsvidhya.com/blog/2018/08/a-simple-introduction-to-facial-recognition-with-python-codes/??

關(guān)于譯者:王雨桐,統(tǒng)計(jì)學(xué)在讀,數(shù)據(jù)科學(xué)碩士預(yù)備,跑步不停,彈琴不止。夢想把數(shù)據(jù)可視化當(dāng)作藝術(shù),目前日常是摸著下巴看機(jī)器學(xué)習(xí)。 

責(zé)任編輯:龐桂玉 來源: 大數(shù)據(jù)
相關(guān)推薦

2024-07-31 08:14:17

2024-03-01 19:53:37

PyBuilderPython開發(fā)

2024-05-17 17:29:00

CurdlingPython開發(fā)

2017-02-10 09:30:33

數(shù)據(jù)化運(yùn)營流量

2010-02-22 09:39:52

HTML 5Web

2017-03-14 14:04:24

Python機(jī)器學(xué)習(xí)

2025-01-09 11:14:13

2024-02-23 09:00:00

編程語言編譯器工具

2022-03-30 08:24:25

操作系統(tǒng)內(nèi)核開源軟件

2025-01-26 16:57:02

2020-07-02 15:32:23

Kubernetes容器架構(gòu)

2024-12-06 17:02:26

2023-11-09 23:45:01

Pytorch目標(biāo)檢測

2015-11-17 16:11:07

Code Review

2018-04-18 07:01:59

Docker容器虛擬機(jī)

2019-01-18 12:39:45

云計(jì)算PaaS公有云

2023-11-22 12:59:07

2025-02-17 07:20:00

Flutter 3Flutter開發(fā)

2024-05-15 14:29:45

2018-05-28 13:12:49

深度學(xué)習(xí)Python神經(jīng)網(wǎng)絡(luò)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)