AI新时代-大神教你使用python+Opencv完成人脸解锁(附源码)
摘要:?好吧,伙計(jì)們,我回來(lái)了。說(shuō)我拖更不寫(xiě)文章的可以過(guò)來(lái)用你的小拳拳狠命地捶我胸口.... 那么今天我們來(lái)講關(guān)于使用python+opencv+face++來(lái)實(shí)現(xiàn)人臉驗(yàn)證及人臉解鎖。代碼量同樣不多,你可以將這些代碼運(yùn)用在其它一些智能領(lǐng)域,如智能家居,進(jìn)門(mén)的時(shí)候判斷你是誰(shuí),也可以加入機(jī)器學(xué)習(xí)判斷來(lái)的人是客人還是熟人。
好吧,伙計(jì)們,我回來(lái)了。說(shuō)我拖更不寫(xiě)文章的可以過(guò)來(lái)用你的小拳拳狠命地捶我胸口....
那么今天我們來(lái)講關(guān)于使用python+opencv+face++來(lái)實(shí)現(xiàn)人臉驗(yàn)證及人臉解鎖。代碼量同樣不多,你可以將這些代碼運(yùn)用在其它一些智能領(lǐng)域,如智能家居,進(jìn)門(mén)的時(shí)候判斷你是誰(shuí),也可以加入機(jī)器學(xué)習(xí)判斷來(lái)的人是客人還是熟人。在講之前我們會(huì)先適當(dāng)?shù)耐負(fù)湟幌玛P(guān)于人臉識(shí)別的知識(shí)點(diǎn)。OK廢話少說(shuō)下面開(kāi)始正是話題。
解鎖原理:
原理呢,其實(shí)很簡(jiǎn)單,沒(méi)有那么復(fù)雜難懂(當(dāng)然除了官方語(yǔ)言之外)。我們先來(lái)通俗的說(shuō)一下利用Face++實(shí)現(xiàn)人臉匹配的原理。給大家推薦一個(gè)學(xué)習(xí)交流的地方:719+139+688,現(xiàn)在你打開(kāi)了攝像頭,然后恰好你按下了抓取。抓取之后,你的臉部圖片會(huì)上傳到遠(yuǎn)程服務(wù)器,然后服務(wù)端會(huì)提取你的面部情況生成一個(gè)唯一的指紋(標(biāo)識(shí)碼),這個(gè)指紋在Face++里面叫做face_token這個(gè)我們后面會(huì)繼續(xù)講到,這個(gè)指紋就代表你目前的身份。
上傳完經(jīng)過(guò)服務(wù)端分析收錄之后,服務(wù)端會(huì)通過(guò)json發(fā)送給你一個(gè)數(shù)據(jù)包,這個(gè)數(shù)據(jù)包里面有你面部全部特征。
當(dāng)你拿到服務(wù)端返回過(guò)來(lái)的json之后,將face_token提取出來(lái)(這很重要,face_token相當(dāng)于一把鑰匙)然后你把拿到的face_token放到python的if里面去判斷如果face_token相符就驗(yàn)證成功,如果不相符那么解鎖失敗。
環(huán)境拓?fù)?#xff1a;
操作系統(tǒng):windows7
Python版本:python2.7
OpenCV版本:2.x
Face++接口
實(shí)現(xiàn)方案:
1.上傳面孔(這個(gè)上篇文章我們已經(jīng)實(shí)現(xiàn)攝像頭抓取,這篇文章我們不做啰嗦,直接用一張面部圖片代替)上傳后json會(huì)返回面部指紋(face_token)
2.創(chuàng)建人臉集合,并將步驟1返回的face_token加入到集合中去
3.通過(guò)python的if判斷是否收錄當(dāng)前面孔
代碼部分:
1.獲取面孔face_token:
這里重點(diǎn)說(shuō)一下request里面的內(nèi)容:
api規(guī)定是要post提交,所以這里用了request.post()
傳輸?shù)膬?nèi)容為請(qǐng)求的URL,圖片路徑(必填!可以是本地絕對(duì)路徑,也可以是網(wǎng)絡(luò)圖片分別為image_file、image_url)data數(shù)據(jù)也就是payload里面的參數(shù):
apikey/apisecret必填 沒(méi)有的自行申請(qǐng)
return_attributes選填 里面有返回的數(shù)據(jù) 有年齡性別等等
return_landmark選填 是否檢測(cè)返回人臉關(guān)鍵點(diǎn)0為不返回1為檢測(cè)83個(gè)關(guān)鍵點(diǎn)2為檢測(cè)106個(gè)關(guān)鍵點(diǎn)
運(yùn)行效果:
我們隨便找一張照片(對(duì)像素有要求的 切記 不然有的可能報(bào)錯(cuò))
我們可以看到這個(gè)返回的json包里有很多的值,我們這里最重要的就是拿到這張臉的face_toen,然后保存起來(lái),收錄到服務(wù)端的時(shí)候需要。
注:這里可能有些朋友在網(wǎng)上隨便找的照片可能報(bào)錯(cuò),這很可能是圖片像素的問(wèn)題,盡量找高清的,運(yùn)行后,人臉部分會(huì)被綠框標(biāo)識(shí)。
2.創(chuàng)建人臉集合,并加入face_token
face_tokens里面填的就是剛才奧巴馬圖片返回的face_token,不要填錯(cuò)哦~
面部集合的名字也要記住,待會(huì)查詢的時(shí)候也會(huì)用到的。
將上一部分獲取到的face_token加入到一個(gè)新建的人臉集合中。
下次人臉對(duì)比將直接跟服務(wù)端收錄的做指紋對(duì)比。這里再簡(jiǎn)單的點(diǎn)一下payload里面的幾個(gè)參數(shù):
display_name:人臉集合的名字
outer_id:FaceSet全局自定義標(biāo)識(shí)
force_merge:
0:不將 face_tokens 加入已存在的 FaceSet 中,直接返回 FACESET_EXIST 錯(cuò)誤
1:將 face_tokens 加入已存在的 FaceSet 中
face_tokens:傳入的人臉標(biāo)識(shí)
運(yùn)行效果:
運(yùn)行完畢后,會(huì)返回一個(gè)faceset_token,這個(gè)地方我們要記錄下來(lái),因?yàn)槲覀円呀?jīng)把我們的奧巴馬的facetoken上傳到服務(wù)端的我們創(chuàng)建的集合里了,這個(gè)faceset token就是我們的面部集合id 或者說(shuō)是一個(gè)相冊(cè)都可以。
3.判斷是否為管理員:
我們將奧巴馬的面部值(face token)放入python的if里面,將要去查詢的面部集合(相冊(cè))設(shè)置為我們前面獲取的faceset tokens,然后我們隨便照一張照片匹配一下。
筆記本攝像頭太low,很難識(shí)別,湊合看下效果吧,直接識(shí)別人臉還行。
完成~
當(dāng)然,按理說(shuō)到現(xiàn)在應(yīng)該開(kāi)始有噴子來(lái)噴,用圖片解鎖不安全了吧,沒(méi)關(guān)系,如果你想做的更高級(jí),完全可以加上一些搖頭 眨眼等等亂七八糟的驗(yàn)證,安全性是可以做到的。
作者:雁橫
原文鏈接
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的AI新时代-大神教你使用python+Opencv完成人脸解锁(附源码)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 图解集成学习中的梯度提升思想
- 下一篇: 没错!Python程序员正在消失,HR: