新聞中心
這篇文章主要講解了“Python怎么構(gòu)建人臉識(shí)別模型”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Python怎么構(gòu)建人臉識(shí)別模型”吧!
創(chuàng)新互聯(lián)主要為客戶提供服務(wù)項(xiàng)目涵蓋了網(wǎng)頁(yè)視覺(jué)設(shè)計(jì)、VI標(biāo)志設(shè)計(jì)、全網(wǎng)營(yíng)銷推廣、網(wǎng)站程序開(kāi)發(fā)、HTML5響應(yīng)式重慶網(wǎng)站建設(shè)、手機(jī)網(wǎng)站制作設(shè)計(jì)、微商城、網(wǎng)站托管及網(wǎng)頁(yè)維護(hù)、WEB系統(tǒng)開(kāi)發(fā)、域名注冊(cè)、國(guó)內(nèi)外服務(wù)器租用、視頻、平面設(shè)計(jì)、SEO優(yōu)化排名。設(shè)計(jì)、前端、后端三個(gè)建站步驟的完善服務(wù)體系。一人跟蹤測(cè)試的建站服務(wù)標(biāo)準(zhǔn)。已經(jīng)為成都PE包裝袋行業(yè)客戶提供了網(wǎng)站維護(hù)服務(wù)。
01 介紹
你是否意識(shí)到,每當(dāng)你上傳照片到Facebook上,平臺(tái)都會(huì)用人臉識(shí)別算法來(lái)識(shí)別圖片中的人物?目前還有一些政府在用人臉識(shí)別技術(shù)來(lái)識(shí)別和抓捕罪犯。此外,最常見(jiàn)的應(yīng)用就是通過(guò)自己的臉部解鎖手機(jī)。
計(jì)算機(jī)視覺(jué)的子領(lǐng)域應(yīng)用得非常廣泛,并且全球很多商業(yè)活動(dòng)都已經(jīng)從中獲益。人臉識(shí)別模型的使用在接下來(lái)的幾年內(nèi)還會(huì)繼續(xù)增長(zhǎng),所以一起來(lái)了解如何從零開(kāi)始構(gòu)建人臉識(shí)別模型吧!
本文首先會(huì)介紹人臉識(shí)別模型的內(nèi)部工作原理。隨后結(jié)合一個(gè)簡(jiǎn)單的案例,我們將通過(guò)Python進(jìn)行案例實(shí)踐。在本文的***部分,你將完成你的***個(gè)人臉識(shí)別模型!
02 理解人臉識(shí)別的工作原理
為了理解人臉識(shí)別算法工作原理,我們首先來(lái)了解一下特征向量的概念。(譯者注:此處的特征向量指機(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í)別指定圖片中人物的臉,很多物體是可以看作模式的:
臉部的長(zhǎng)度/寬度。
由于圖片比例會(huì)被調(diào)整,長(zhǎng)度和高度可能并不可靠。然而,在放縮圖片后,比例是保持不變的——臉部長(zhǎng)度和寬度的比例不會(huì)改變。
臉部膚色。
臉上局部細(xì)節(jié)的寬度,如嘴,鼻子等。
顯而易見(jiàn),此時(shí)存在一個(gè)模式——不同的臉有不同的維度,相似的臉有相似的維度。有挑戰(zhàn)性的是需要將特定的臉轉(zhuǎn)為數(shù)字,因?yàn)闄C(jī)器學(xué)習(xí)算法只能理解數(shù)字。表示一張臉的數(shù)字(或訓(xùn)練集中的一個(gè)元素)可以稱為特征向量。一個(gè)特征向量包括特定順序的各種數(shù)字。
舉一個(gè)簡(jiǎn)單的例子,我們可以將一張臉映射到一個(gè)特征向量上。特征向量由不同的特征組成,如:
臉的長(zhǎng)度(cm)
臉的寬度(cm)
臉的平均膚色(R,G,B)
唇部寬度(cm)
鼻子長(zhǎng)度(cm)
當(dāng)給定一個(gè)圖片時(shí),我們可以標(biāo)注不同的特征并將其轉(zhuǎn)化為如下的特征向量:
如此一來(lái),我們的圖片現(xiàn)在被轉(zhuǎn)化為一個(gè)向量,可以表示為(23.1,15.8,255,224,189,5.2,4.4)。當(dāng)然我們還可以從圖片中衍生出無(wú)數(shù)的其他特征(如,頭發(fā)顏色,胡須,眼鏡等)。然而在這個(gè)簡(jiǎn)單的例子中,我們只考慮這五個(gè)簡(jiǎn)單的特征。
現(xiàn)在,一旦我們將每個(gè)圖片解碼為特征向量,問(wèn)題就變得更簡(jiǎn)單。明顯地,當(dāng)我們使用同一個(gè)人的兩張面部圖片時(shí),提取的特征向量會(huì)非常相似。換言之,兩個(gè)特征向量的“距離”就變得非常小。
此時(shí)機(jī)器學(xué)習(xí)可以幫我們完成兩件事:
提取特征向量。由于特征過(guò)多,手動(dòng)列出所有特征是非常困難的。一個(gè)機(jī)器學(xué)習(xí)算法可以自動(dòng)標(biāo)注很多特征。例如,一個(gè)復(fù)雜的特征可能是:鼻子長(zhǎng)度和前額寬度的比例。手動(dòng)列出所有的這些衍生特征是非常困難的。
匹配算法:一旦得到特征向量,機(jī)器學(xué)習(xí)算法需要將新圖片和語(yǔ)料庫(kù)中的特征向量進(jìn)行匹配。
既然我們對(duì)人臉識(shí)別如何工作有了基本的理解,讓我們運(yùn)用一些廣泛使用的Python庫(kù)來(lái)搭建自己的人臉識(shí)別算法。
03 案例學(xué)習(xí)
首先給定一些人物臉部的圖片——可能是一些名人,如Mark Zuckerberg, Warren Buffett, Bill Gates, Shah Rukh Khan等,并把這些人臉看作我們的語(yǔ)料庫(kù)。現(xiàn)在,我們給定一些其他名人的新圖片(“新人物”),并判斷這些“新人物”是否在語(yǔ)料庫(kù)中。
以下是語(yǔ)料庫(kù)中的圖片:
如圖所示,我們所列舉的名人有Barack Obama, Bill Gates, Jeff Bezos, Mark Zuckerberg, Ray Dalio 和Shah Rukh Khan。
現(xiàn)在,假定“新人物”如下:
▲注:以上所有圖片均來(lái)自Google圖片
顯而易見(jiàn),這是Shah Rukh Khan。然而對(duì)電腦來(lái)說(shuō),這個(gè)任務(wù)很有挑戰(zhàn)性。因?yàn)閷?duì)于我們來(lái)說(shuō),我們可以輕易地將圖片的多種特征結(jié)合來(lái)判斷這是哪個(gè)人物。然而對(duì)電腦而言,學(xué)習(xí)如何識(shí)別人臉是非常不直觀的。
有一個(gè)神奇但是簡(jiǎn)單的python庫(kù)封裝了以上提及的內(nèi)容——可以根據(jù)臉部特征生成特征向量并且知道如何區(qū)分不同的臉。這個(gè)python庫(kù)叫做face_recognition。它應(yīng)用了dlib——一個(gè)現(xiàn)代C++工具包,其中包含了一些機(jī)器學(xué)習(xí)算法來(lái)幫助完成復(fù)雜的基于C++的應(yīng)用。
Python中的face_recognition庫(kù)可以完成大量的任務(wù):
發(fā)現(xiàn)給定圖片中所有的臉。
發(fā)現(xiàn)并處理圖片中的臉部特征。
識(shí)別圖片中的臉。
實(shí)時(shí)的人臉識(shí)別。
接下來(lái),我們將探討其中的第三種任務(wù)——識(shí)別圖片中的臉。
你可以在github的如下鏈接中獲取face_recognition庫(kù)的源代碼。
04 Python應(yīng)用
這部分包括使用face_recognition庫(kù)搭建簡(jiǎn)單人臉識(shí)別系統(tǒng)的代碼。這是一個(gè)應(yīng)用操作的部分,我們將在下一部分解讀代碼來(lái)理解更多細(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/ – 語(yǔ)料庫(kù)。
如果你按照前文創(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
顯而易見(jiàn),新名人是Shah Rukh Khan 并且我們的人臉識(shí)別系統(tǒng)可以識(shí)別!
05 理解Python代碼
現(xiàn)在讓我們解讀代碼來(lái),并理解其工作原理:
# import the libraries import os import face_recognition
以上是引入操作。我們將通過(guò)已經(jīng)建好的os庫(kù)來(lái)讀入語(yǔ)料庫(kù)中的所有圖片,并且通過(guò)face_recognition來(lái)完成算法部分。
# make a list of all the available images images = os.listdir('images')
這個(gè)簡(jiǎn)單的代碼將幫助我們識(shí)別語(yǔ)料庫(kù)中所有圖片的路徑。一旦執(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]
剩余的代碼相對(duì)簡(jiǎn)單:
# 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í),我們:
對(duì)每個(gè)圖像進(jìn)行循環(huán)操作。
將圖像解析為特征向量。
比較語(yǔ)料庫(kù)中已經(jīng)加載的圖片和被識(shí)別的新人物圖片。
如果兩者匹配,我們就顯示出來(lái)。如果不匹配,我們也要顯示結(jié)果。
如上所示,結(jié)果顯示這個(gè)簡(jiǎn)單的人臉識(shí)別算法進(jìn)行得很順利。讓我們嘗試將my_image替換為另一個(gè)圖片:
當(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)沒(méi)有將馬云識(shí)別為以上的任何一個(gè)名人。這意味著我們的算法在以下方面都表現(xiàn)得很好:
正確地識(shí)別那些在語(yǔ)料庫(kù)中存儲(chǔ)的人。
對(duì)語(yǔ)料庫(kù)中不存在的人物進(jìn)行標(biāo)注。
06 人臉識(shí)別算法的應(yīng)用
人臉識(shí)別是一個(gè)成熟的研究方向,已被廣泛地應(yīng)用在工業(yè)界和學(xué)術(shù)界。例如,一個(gè)罪犯在中國(guó)被捕可能就得益于人臉識(shí)別系統(tǒng):系統(tǒng)識(shí)別了他的臉并發(fā)出警報(bào)。由此可見(jiàn),面部識(shí)別可以用來(lái)減少犯罪。還有許多其他有趣的人臉識(shí)別案例:
面部身份驗(yàn)證:Apple在iPhones中引入了Face ID以用于面部身份驗(yàn)證。一些銀行也嘗試使用面部身份驗(yàn)證來(lái)解鎖。
用戶服務(wù):馬來(lái)西亞的一些銀行安裝了新的人臉識(shí)別系統(tǒng),用于識(shí)別有價(jià)值的銀行客戶,以便銀行為其提供個(gè)人服務(wù)。進(jìn)而銀行可以通過(guò)維持這類用戶并提升用戶滿意度來(lái)獲取更多收益。
保險(xiǎn)行業(yè):很多保險(xiǎn)公司正在通過(guò)運(yùn)用人臉識(shí)別系統(tǒng)來(lái)匹配人的臉和ID提供的照片,使賠付過(guò)程變得更簡(jiǎn)單。
感謝各位的閱讀,以上就是“Python怎么構(gòu)建人臉識(shí)別模型”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Python怎么構(gòu)建人臉識(shí)別模型這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
本文題目:Python怎么構(gòu)建人臉識(shí)別模型
標(biāo)題來(lái)源:http://ef60e0e.cn/article/gdcsdd.html