最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
如何用python創(chuàng)建人臉識(shí)別程序

這篇文章主要講解了“如何用python創(chuàng)建人臉識(shí)別程序”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“如何用python創(chuàng)建人臉識(shí)別程序”吧!

堅(jiān)守“ 做人真誠(chéng) · 做事靠譜 · 口碑至上 · 高效敬業(yè) ”的價(jià)值觀,專業(yè)網(wǎng)站建設(shè)服務(wù)10余年為成都除甲醛小微創(chuàng)業(yè)公司專業(yè)提供成都企業(yè)網(wǎng)站定制營(yíng)銷網(wǎng)站建設(shè)商城網(wǎng)站建設(shè)手機(jī)網(wǎng)站建設(shè)小程序網(wǎng)站建設(shè)網(wǎng)站改版,從內(nèi)容策劃、視覺設(shè)計(jì)、底層架構(gòu)、網(wǎng)頁布局、功能開發(fā)迭代于一體的高端網(wǎng)站建設(shè)服務(wù)。

Facenet

在這個(gè)項(xiàng)目中,我們將使用一個(gè)名為Facenet的系統(tǒng)來為我們做人臉識(shí)別程序。

 Facenet是什么?

Facenet是由Florian Schroff、Dmitry Kalenichenko和James Philbin構(gòu)建的系統(tǒng)。他們也為此寫了一篇論文。

它直接從人臉圖像中學(xué)習(xí)圖像到歐式空間上點(diǎn)的映射,其中距離直接對(duì)應(yīng)于人臉相似度的度量。一旦創(chuàng)建了這些嵌入,就可以使用這些嵌入作為特征來完成人臉識(shí)別和驗(yàn)證等過程。

 Facenet是如何工作的?

Facenet使用卷積層直接從人臉的像素學(xué)習(xí)。該網(wǎng)絡(luò)在一個(gè)大數(shù)據(jù)集上進(jìn)行訓(xùn)練,以實(shí)現(xiàn)對(duì)光照、姿態(tài)和其他可變條件的不變性。該系統(tǒng)是在 Labelled Faces in the wild(http://vis-www.cs.umass.edu/lfw/) 數(shù)據(jù)集上訓(xùn)練的。這個(gè)數(shù)據(jù)集包含13000多張從網(wǎng)絡(luò)上收集的不同人臉的圖片,每個(gè)人臉都有一個(gè)名字(標(biāo)簽)。

Facenet從圖像中創(chuàng)建128維嵌入,并將其插入特征空間,這樣,無論成像條件如何,相同身份之間的特征距離要盡可能的小,而不同身份之間的特征距離要盡可能的大。下圖描述了模型體系結(jié)構(gòu):

如何用python創(chuàng)建人臉識(shí)別程序

模型結(jié)構(gòu):模型包含一個(gè)批處理輸入層、一個(gè)深入學(xué)習(xí)架構(gòu)和一個(gè)L2層。這就產(chǎn)生了人臉嵌入。

 三重?fù)p失

該系統(tǒng)采用一種特殊的損失函數(shù),稱為三重?fù)p失。三重?fù)p失使同一身份的圖像之間的L2距離最小,使不同特征的人臉圖像之間的L2距離最大。

該系統(tǒng)采用三重?fù)p失,更適合于人臉驗(yàn)證。使用三重?fù)p失的動(dòng)機(jī)是它鼓勵(lì)將一個(gè)身份的所有圖像投影到嵌入空間中的一個(gè)點(diǎn)上。

三重?fù)p失:學(xué)習(xí)前后 如何用python創(chuàng)建人臉識(shí)別程序

創(chuàng)作者們?cè)O(shè)計(jì)了一種高效的三重選擇機(jī)制,可以一次巧妙地選擇三幅圖像。這些圖像有以下三種類型:

  1. 錨:一個(gè)隨機(jī)的人的圖。

  2. 正圖:同一個(gè)人的另一張圖。

  3. 負(fù)圖:另一個(gè)人的圖。

測(cè)量了兩個(gè)歐幾里德距離:一個(gè)是錨和正圖之間的距離,我們稱之為A;另一個(gè)是錨和負(fù)圖之間的距離,我們稱之為B。訓(xùn)練過程旨在減少A并使B最大化,這樣相似的圖像彼此靠近,不同的圖像在嵌入空間中會(huì)隔得很遠(yuǎn)。

 開始構(gòu)建!

最精彩的部分開始了!我們可以使用Facenet為我們自己選擇的人臉創(chuàng)建嵌入,然后訓(xùn)練支持向量機(jī)(Support Vector Machine)使用這些嵌入并進(jìn)行分類。讓我們開始建立一個(gè)自定義的人臉識(shí)別程序吧!

你可以看看這個(gè)項(xiàng)目的Github存儲(chǔ)庫,因?yàn)樗艘粋€(gè)自定義數(shù)據(jù)集和用于在視頻中檢測(cè)人臉的腳本。

 先決條件

在開始之前,請(qǐng)確保你的系統(tǒng)上安裝了以下庫:

  1. tensorflow==1.7

  2. scipy

  3. scikit-learn

  4. opencv-python

  5. h6py

  6. matplotlib

  7. Pillow

  8. requests

  9. psutil

 下載數(shù)據(jù)

在這個(gè)項(xiàng)目中,我們將創(chuàng)建一個(gè)人臉識(shí)別程序,將能夠識(shí)別90年代情景喜劇《老友記》的核心人物。如果你想識(shí)別一組不同的人臉,那么就用你的圖像來代替。只需確保遵循類似的目錄結(jié)構(gòu)——為要識(shí)別的每個(gè)身份創(chuàng)建一個(gè)文件夾,并將這些文件夾存儲(chǔ)在名為“raw”的文件夾中。

數(shù)據(jù)集目錄:注意每個(gè)角色如何擁有自己對(duì)應(yīng)的文件夾

如何用python創(chuàng)建人臉識(shí)別程序

在每個(gè)文件夾里放上人物的照片。請(qǐng)注意,每張圖片只有一張清晰可見的臉。盡管只需要很少的圖像,我還是為每個(gè)角色添加了20個(gè)圖像。每個(gè)文件夾都有相同數(shù)量的圖片。你可以從這里下載我創(chuàng)建的《老友記》的數(shù)據(jù)集。順便說一下,這是“Chandler”文件夾的樣子:

 下載Facenet

現(xiàn)在已經(jīng)結(jié)束收集數(shù)據(jù)了。請(qǐng)繼續(xù)下載Facenet repo。下載并提取它,并將“Dataset”文件夾放入其中。

 對(duì)齊

該模型的一個(gè)問題是它可能會(huì)漏掉一些人臉標(biāo)志,為了解決這個(gè)問題,我們必須將數(shù)據(jù)集中的所有圖像對(duì)齊,使眼睛和嘴唇在所有圖片中顯示在同一位置。我們將使用M.T.C.N.N.(多任務(wù)C.N.N.)來執(zhí)行相同的操作,并將所有對(duì)齊的圖像存儲(chǔ)在名為processed的文件夾中。

打開終端/命令提示符并導(dǎo)航到Facenet目錄。然后運(yùn)行align_dataset_mtcn.py以及以下參數(shù)。

python src/align_dataset_mtcnn.py \
./Dataset/Friends/raw \
./Dataset/Friends/processed \
--image_size 160 \
--margin 32 \
--random_order \ 
--gpu_memory_fraction 0.25

運(yùn)行此命令將對(duì)齊所有圖像并將其存儲(chǔ)在各自的文件夾中,然后將所有內(nèi)容存儲(chǔ)在“processed”文件夾中。下圖將向你介紹對(duì)齊的工作原理:

所有圖像都被裁剪并與標(biāo)準(zhǔn)的160x160像素圖像對(duì)齊。

 獲得預(yù)先訓(xùn)練的模型

現(xiàn)在,為了在你自己的圖像上訓(xùn)練模型,你需要下載預(yù)先訓(xùn)練的模型。

在Facenet根目錄中創(chuàng)建一個(gè)名為“Models”的文件夾。下載完成后,將zip文件的內(nèi)容解壓縮到名為“facenet”的目錄中,并將此文件夾放在“Models”文件夾中。

如何用python創(chuàng)建人臉識(shí)別程序

這個(gè)模型是在LFW數(shù)據(jù)集上訓(xùn)練的,因此所有的人臉嵌入都存儲(chǔ)在這些文件中。這使我們有機(jī)會(huì)凍結(jié)圖像,并在我們自己的圖像上訓(xùn)練它。這樣做會(huì)將我們提供的所有人臉嵌入到維度空間中。

 用我們的數(shù)據(jù)訓(xùn)練模型

我們都準(zhǔn)備好了!我們有一個(gè)預(yù)先訓(xùn)練好的模型,我們的自定義數(shù)據(jù)集已經(jīng)對(duì)齊并準(zhǔn)備好了?,F(xiàn)在,是時(shí)候訓(xùn)練模型了!

python src/classifier.py TRAIN \
./Dataset/Friends/processed \
./Models/facenet/20180402-114759.pb \
./Models/Friends/Friends.pkl \
--batch_size 1000

執(zhí)行上述命令將加載預(yù)先訓(xùn)練的模型并啟動(dòng)訓(xùn)練過程。訓(xùn)練結(jié)束后,新圖像的嵌入將導(dǎo)出到/Models/Friends/中。

由于我們使用的是預(yù)先訓(xùn)練的模型和相對(duì)較少的圖像數(shù)量,因此訓(xùn)練過程很快就結(jié)束了。

 在視頻源上測(cè)試我們的模型

為了測(cè)試我們的模型,我使用的是來自《老友記》的視頻。你可以用自己的視頻來代替,甚至可以用攝像頭。在本節(jié)中,我們將編寫腳本,以便于在視頻源中進(jìn)行人臉識(shí)別。

導(dǎo)航到“src”文件夾并創(chuàng)建一個(gè)新的python腳本。我給它起名 faceRec.py。

接下來,我們導(dǎo)入所有必需的庫。

此腳本只接受一個(gè)參數(shù),即視頻文件的路徑。如果沒有提到路徑,那么我們將通過網(wǎng)絡(luò)攝像頭傳輸視頻。因此,參數(shù)的默認(rèn)值為0。

我們將初始化一些變量。請(qǐng)確保根據(jù)文件夾結(jié)構(gòu)更改路徑。

加載自定義分類器。

設(shè)置Tensorflow圖,然后加載Facenet模型。使用GPU將加快檢測(cè)和識(shí)別過程。

設(shè)置輸入和輸出張量。

pnet、rnet和onet是M.T.C.N.N.的組成部分,將用于檢測(cè)和對(duì)齊人臉。

接下來,我們將創(chuàng)建一個(gè)集合和一個(gè)來跟蹤檢測(cè)到的每個(gè)角色的集合。

設(shè)置視頻捕獲對(duì)象。

因此,如果在運(yùn)行程序時(shí)未將VIDEO_PATH作為參數(shù)傳遞,則它將假定默認(rèn)值為0。如果發(fā)生這種情況,視頻捕獲對(duì)象將從網(wǎng)絡(luò)攝像機(jī)流式傳輸視頻。

然后逐幀捕獲視頻,并且由檢測(cè)人臉模塊在這些幀中檢測(cè)人臉。找到的人臉數(shù)存儲(chǔ)在faces\u found變量中。

如果找到人臉,那么我們將迭代每個(gè)人臉并將邊界框的坐標(biāo)保存在變量bb中。

然后提取、裁剪、縮放、重塑這些人臉并輸入字典。

我們將使用該模型來預(yù)測(cè)人臉的身份。我們提取最佳類概率或置信度。這是衡量我們的模型是如何確定預(yù)測(cè)的身份屬于給定的臉。

最后,我們將在人臉周圍畫一個(gè)邊界框,并在邊界框旁邊寫下預(yù)測(cè)的身份和置信度。如果置信度低于某個(gè)閾值,我們將把名字填為未知。

一定要放一個(gè)except語句。這將確保成功忽略拋出的任何錯(cuò)誤。確保放置except語句。這樣做有助于我們忽略錯(cuò)誤。

except: pass

顯示視頻并在過程結(jié)束后關(guān)閉視頻顯示窗口。因?yàn)槊恳粠家?jīng)過大量的處理,所以視頻回放可能會(huì)很慢。

恭喜你,你的耐心得到了回報(bào)!我們已經(jīng)完成了腳本,準(zhǔn)備好了!快速啟動(dòng)并執(zhí)行以下命令以啟動(dòng)人臉識(shí)別程序。請(qǐng)確保將要測(cè)試的視頻的路徑作為參數(shù)傳遞,或?qū)⑵淞艨找詮木W(wǎng)絡(luò)攝像機(jī)流式傳輸視頻。

python src/faceRec.py --path ./Dataset/Friends/friends.mp

好吧,這個(gè)系統(tǒng)還不完善,還有一些缺點(diǎn)。

 缺點(diǎn)
  1. 系統(tǒng)總是試圖將每個(gè)人臉都匹配到一個(gè)給定的身份中。如果屏幕上出現(xiàn)新人臉,系統(tǒng)將為其分配一個(gè)或另一個(gè)身份。這個(gè)問題可以通過仔細(xì)選擇一個(gè)閾值來解決。

  2. 身份的混淆。在上面的gif中,你可以觀察到Joey和Chandler之間的預(yù)測(cè)有時(shí)是如何波動(dòng)的。而且,置信度得分也很低。使用更多圖像訓(xùn)練模型將解決此問題。

  3. 無法在一定距離識(shí)別人臉(如果距離很遠(yuǎn)使得人臉看起來很?。?/p>

感謝各位的閱讀,以上就是“如何用python創(chuàng)建人臉識(shí)別程序”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)如何用python創(chuàng)建人臉識(shí)別程序這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!


新聞標(biāo)題:如何用python創(chuàng)建人臉識(shí)別程序
標(biāo)題路徑:http://fisionsoft.com.cn/article/ijdjgd.html