摘要:實(shí)現(xiàn)實(shí)時(shí)人臉識(shí)別本文記錄了在學(xué)習(xí)深度學(xué)習(xí)過程中,使用,開發(fā)環(huán)境為,實(shí)現(xiàn)局域網(wǎng)連接手機(jī)攝像頭,對(duì)目標(biāo)人員進(jìn)行實(shí)時(shí)人臉識(shí)別,效果并非特別好,會(huì)繼續(xù)改進(jìn)這里是項(xiàng)目地址項(xiàng)目中用到的大文件地址如果各位老爺看完覺得對(duì)你有幫助的話,請(qǐng)給個(gè)小星星,當(dāng)前時(shí)間
opencv+mtcnn+facenet+python+tensorflow 實(shí)現(xiàn)實(shí)時(shí)人臉識(shí)別
Abstract:本文記錄了在學(xué)習(xí)深度學(xué)習(xí)過程中,使用opencv+mtcnn+facenet+python+tensorflow,開發(fā)環(huán)境為ubuntu18.04,實(shí)現(xiàn)局域網(wǎng)連接手機(jī)攝像頭,對(duì)目標(biāo)人員進(jìn)行實(shí)時(shí)人臉識(shí)別,效果并非特別好,會(huì)繼續(xù)改進(jìn)
這里是
項(xiàng)目地址
項(xiàng)目中用到的大文件地址
如果各位老爺看完覺得對(duì)你有幫助的話,請(qǐng)給個(gè)小星星,3q
Instruction當(dāng)前時(shí)間距facenet論文發(fā)布已有三年,網(wǎng)上對(duì)于facenet的解讀也有許多,但卻也找不到什么能修修改改就能用的代碼,所以本文就此而生,將會(huì)系統(tǒng)的介紹在CNN在圖像識(shí)別方向-人臉識(shí)別,我會(huì)把我遇到的一切問題以及見解都陸續(xù)的補(bǔ)充在本文中,并會(huì)附上項(xiàng)目地址,保證各位官人看的開心。
所用工具簡介opencv很有名了,在本次項(xiàng)目中用到的當(dāng)然是它的強(qiáng)大的圖片處理能力了,大概就是讀取、寫入、連接手機(jī)攝像頭一些了
mtcnn是一個(gè)用來檢測(cè)圖片中人臉位置(人臉檢測(cè))的深度學(xué)習(xí)模型,其使用了三個(gè)卷積網(wǎng)絡(luò)實(shí)現(xiàn)了對(duì)圖像中人臉的檢測(cè),在文章后面再具體的介紹其實(shí)現(xiàn)的細(xì)節(jié)
facenet是谷歌的一篇很有名的論文和開源項(xiàng)目,其實(shí)現(xiàn)了將輸入的人像最終轉(zhuǎn)換為shape為1*128的向量,然后通過計(jì)算不同照片之間的歐幾里得距離來判斷他們的相似度,當(dāng)然其中還包含許多技巧以及創(chuàng)新的想法,最終的在lfw(一個(gè)很有名的人臉數(shù)據(jù)庫)準(zhǔn)確率達(dá)到99%+++,在文章的后面我會(huì)盡可能的解讀其論文和代碼中的有意思的想法
tensorflow應(yīng)該很熟悉了(不然你是怎么搜到我的這篇文章的?) 學(xué)習(xí)深度學(xué)習(xí)的應(yīng)該都知道存在各種各樣的方便于搭建網(wǎng)絡(luò)的框架,tensorflow就是其中很有名的一個(gè),由google開源,功能強(qiáng)大
正式開始前的一些廢話,防止看官老爺在后面麋鹿~你肯定已經(jīng)或多或許對(duì)機(jī)器學(xué)習(xí)或者是深度學(xué)習(xí)有些了解,所以你應(yīng)該知道整個(gè)項(xiàng)目的過程無非就是
使用現(xiàn)有的幾大框架搭建網(wǎng)絡(luò)(當(dāng)然不排除是使用matlab自己手動(dòng)實(shí)現(xiàn))
喂數(shù)據(jù)并且調(diào)參,最終得到心儀的模型
保存模型,部署模型使用
因?yàn)楝F(xiàn)在我還處于菜鳥階段,有幸搭建過的幾個(gè)網(wǎng)絡(luò)無非是吳恩達(dá)老師課程中的幾個(gè)淺層網(wǎng)絡(luò),實(shí)現(xiàn)了一些非主流功能,還有的就是google官方的一些教學(xué)例子,總之都是些幫助鞏固知識(shí),但是沒什么luan用的,如果想要作出比較吊的東西還是需要使用大公司和大神開源的一些模型,“嫁接”過來,改改,又不能不能用......真香
github上開源的一些項(xiàng)目以及一些大公司開源的項(xiàng)目,其項(xiàng)目文件一般包含 網(wǎng)絡(luò)的搭建 網(wǎng)絡(luò)的測(cè)試等文件,其訓(xùn)練好的模型往往比較大,需要另到他出下載,當(dāng)我們有了一個(gè)項(xiàng)目的想法以后,并確定了要用哪些項(xiàng)目時(shí)候,切記幾件事,不然后面會(huì)很影響效率
對(duì)模型的實(shí)現(xiàn)原理有一定的了解
對(duì)其輸入輸出的數(shù)據(jù)格式有很完善的了解
自己要有自己的思考,不然全是單純的接受會(huì)讓你喪失了對(duì)整個(gè)項(xiàng)目全貌的認(rèn)識(shí),如果這樣,接下來就是痛苦時(shí)間了(想想初高中古詩、文言文、散文、詩歌為啥那么熬人,現(xiàn)在偶爾看到的時(shí)候,都是woc,這文章寫的牛逼,可是為啥當(dāng)時(shí)我咋那么痛苦呢?),這都是被動(dòng)接受,在學(xué)習(xí)之前不愿意全局掌控的過,如果有看過這篇文章,后來沒有這樣做遇到頭疼問題的同志,問你個(gè)問題,知道大鵝仲么叫咩?GAI?。?!
ok,廢話說完,開工
opencv連接手機(jī)攝像頭,并通過其一些小函數(shù),對(duì)圖片進(jìn)行一些簡單的處理,手機(jī)上要下載一個(gè)appip攝像頭
import cv2 video="http://admin:admin@192.168.0.107:8081/" #此處@后的ipv4 地址需要修改為自己的地址 # 參數(shù)為0表示打開內(nèi)置攝像頭,參數(shù)是視頻文件路徑則打開視頻 capture =cv2.VideoCapture(video) # 建個(gè)窗口并命名 cv2.namedWindow("camera",1) # 用于循環(huán)顯示圖片,達(dá)到顯示視頻的效果 while True: ret, frame = capture.read() # 在frame上顯示test字符 image1=cv2.putText(frame,"test", (50,100), cv2.FONT_HERSHEY_COMPLEX_SMALL, 2, (255, 0 ,0), thickness = 2, lineType = 2) cv2.imshow("camera",frame) # 不加waitkey() 則會(huì)圖片顯示后窗口直接關(guān)掉 key = cv2.waitKey(3) if key == 27: #esc鍵退出 print("esc break...") break if key == ord(" "): # 保存一張圖像 num = num+1 filename = "frames_%s.jpg" % num cv2.imwrite(filename,frame)mtcnn
github上的facenet工程在實(shí)現(xiàn)facent的時(shí)候,為了便于測(cè)試,mtcnn也一放在了工程文件中,在工程中的位置是align/detect_face.py ,它的參數(shù)模型也保存在align文件夾下,分別是det1.npy,det2.npy,det3.npy,它的用法便是先將網(wǎng)絡(luò)搭建出來,定位input中的人臉的位置,然后返回自己設(shè)置的固定大小的臉部crop,然后再將其輸入facenet就ok了(作用就是人臉檢測(cè)+定位+對(duì)齊,因?yàn)槲覀兪滓康氖亲尮こ棠芘芷饋?,并且?duì)其有一個(gè)大體的認(rèn)識(shí),這才方便后面的學(xué)習(xí),具體的實(shí)現(xiàn)原理和代碼解讀,以及物體的檢測(cè)發(fā)展歷史,目前的發(fā)展方向,各種檢測(cè)的算法,我會(huì)在文章的后面細(xì)說)
facenetfacenet.py直接放在主目錄下了,其主實(shí)現(xiàn)的功能是搭建網(wǎng)絡(luò),然后從模型中加載參數(shù),接收固定大小的剪裁好的人臉照片,最終經(jīng)過embeding層輸出1*128的臉部特征向量,計(jì)算不同臉部照片的相似度時(shí)候直接計(jì)算向量的歐式距離就ok了,同一個(gè)人的照片,它們的差值比較小,不同的人差值會(huì)比較大,其中facenet最后使用的是triplet loss方法來微調(diào)embeding(具體的論文算法,網(wǎng)絡(luò)搭建,各種算法,以及代碼解讀我都放在文章的最后再說)
工程文件說明(readme)### 目錄結(jié)構(gòu)
20170512-110547文件夾是facent的模型,官方存放在google網(wǎng)盤上了(而且現(xiàn)在出來2018的預(yù)訓(xùn)練模型了),不方便下載的我一會(huì)兒會(huì)把用到的大文件打包放在堅(jiān)果云上
align文件中包含三個(gè)mtcnn要用到的模型,以及搭建mtcnn網(wǎng)絡(luò)的文件 detect_face.py,這里面的東西在facenet的項(xiàng)目中的都可以找到
models中存放的是訓(xùn)練好的knn模型,用于測(cè)試使用的簡單模型,一會(huì)兒展示的效果也是由其完成
train_dir 顧名思義,就不解釋了
facenet.py就是一直在談的東西,其中包含了如何搭建facenet網(wǎng)絡(luò),以及計(jì)算的內(nèi)容
test.py train_knn.py temp_test.py imageconvert.py這幾個(gè)文件分別人臉識(shí)別測(cè)試 、 訓(xùn)練knn模型 、 遇到問題是精簡代碼調(diào)試使用 、 圖像批量轉(zhuǎn)化 用于準(zhǔn)備數(shù)據(jù)集 其他的沒有談及的文件都沒有使用到,應(yīng)該是以前測(cè)試時(shí)候忘記刪除的
運(yùn)行效果這是使用手機(jī)攝像頭拍攝ipad從網(wǎng)上隨便搜來的合照進(jìn)行測(cè)試(也許也不是隨便搜的...),能夠準(zhǔn)確將人臉框出,并進(jìn)行識(shí)別,因?yàn)槲沂褂玫氖莐nn訓(xùn)練的,而這幾個(gè)人是未經(jīng)過特殊訓(xùn)練的,所以將其歸結(jié)為未知人群,再接下來一段時(shí)間會(huì)對(duì)其進(jìn)行改進(jìn),最終效果應(yīng)該是可以實(shí)現(xiàn)單張圖片數(shù)據(jù)庫比對(duì),這樣就不用對(duì)需要識(shí)別的目標(biāo)每一個(gè)都訓(xùn)練一遍了,這也是人臉識(shí)別要達(dá)到的效果,上面所說的triplet loss就是一種很好的方法
因?yàn)榉块g光線比較暗,用手機(jī)攝像頭拍攝以前的自拍,識(shí)別成功
運(yùn)行環(huán)境和運(yùn)行說明推薦使用Anaconda配置tensorflow環(huán)境(因?yàn)楸卷?xiàng)目就是基于tensorflow框架的),是cpu版本(等新卡,其實(shí)就是窮...)網(wǎng)上教程很多,也很簡單,本環(huán)境的python版本是3.6的,如果你的是2.7的話,那就要改很多東西了(跟著報(bào)錯(cuò)改就ok),但何不如再安裝個(gè)3.6的呢,在anaconda下真的是超級(jí)方便
編輯器用的是vscode,從windows轉(zhuǎn)來,習(xí)慣使用vscode,真的很好用,在安裝anaconda的時(shí)候會(huì)提示你是否裝個(gè)vscode的,當(dāng)然使用其他的也很好
一些依賴庫當(dāng)然是必備的,提示少啥裝啥吧,我也忘了,反正那些基本的是要裝的,比如numpy maplotlib jupyter scikit-image librosa kersa 這些,安裝也很簡單,在anaconda里安裝 使用conda命令 或者如果你的linux的默認(rèn)python就是anaconda里的,直接使用pip安裝就好了
本項(xiàng)目里的幾個(gè)運(yùn)行的代碼,我都寫好了參數(shù),直接運(yùn)行即可(當(dāng)然制定文件要在指定位置) 運(yùn)行順序是
準(zhǔn)備好自己的訓(xùn)練集 幾十張自己照片即可(尺寸要小一點(diǎn)的,最好500*500以下,不然速度慢,精度低),放到train_dir/pic_me 文件夾下面,把我打包文件里的pic_others文件夾中的放到指定train_dir/pic_others下面(這部分?jǐn)?shù)據(jù)也可以自己準(zhǔn)備,我的數(shù)據(jù)是來自lfw中的前幾百張圖片)
運(yùn)行train_knn.py 得到自己的knn模型
運(yùn)行test.py (記得要把手機(jī)上的ip攝像頭app打開,點(diǎn)擊下面打開IP攝像頭服務(wù)器 ,并檢查下顯示的局域網(wǎng)ip和test.py 中的是否相同,如不相同,改一下)
啟動(dòng)的時(shí)候會(huì)比較慢,30s到一分鐘左右,取決于電腦性能
至此你應(yīng)該已經(jīng)成功跑起來這個(gè)項(xiàng)目了,在此感謝開源的偉大,讓我們能感受到這些神奇的算法
閱讀代碼和重構(gòu)項(xiàng)目建議好學(xué)的各位爺肯定是要將代碼好好看一通的,因?yàn)槲乙彩遣穗u,看到拙劣之處,請(qǐng)會(huì)心一笑...
代碼思路
使用mtcnn截取視頻幀中人像的人臉,并拉伸為固定大小(這里為160*160,由使用的facenet網(wǎng)絡(luò)所受限)
將上一步驟得到的人臉輸入facenet,得到embedding層的輸出,一個(gè)人像對(duì)應(yīng)一個(gè)1*128數(shù)據(jù),然后將其輸入knn網(wǎng)絡(luò),得到預(yù)測(cè)結(jié)果
學(xué)習(xí)思路
一定一定要搞清楚其中的數(shù)據(jù)流是以什么樣的格式和形式在傳遞,其中大多數(shù)使用的都是numpy.ndarray數(shù)據(jù)類型,此外便要掌握一些基本的此類數(shù)據(jù)類型的格式轉(zhuǎn)換函數(shù),并熟記,很常用的,還有就是和list 的轉(zhuǎn)換
掌握一點(diǎn)點(diǎn)opcv的讀寫函數(shù)
掌握一些對(duì)文件操作的函數(shù)
至此,你應(yīng)該已經(jīng)很容易的就能夠吃透本項(xiàng)目的內(nèi)容了,讀完下面的論文和各種算法的衍生,相信你一定對(duì)計(jì)算機(jī)視覺會(huì)有更加深刻的認(rèn)識(shí),并且會(huì)覺得豁然開朗~
接下來的暑假時(shí)間我要去玩玩其他的方向了,比如NLP啥的,好像很火,找工作簡歷里還是有幾個(gè)項(xiàng)目好,之前說好的解讀,我會(huì)在晚上打完游戲的時(shí)候?qū)?,畢竟一天沉淀的時(shí)間,我保證肯定會(huì)寫的,各位爺,白了個(gè)白
mtcnn關(guān)于物體檢測(cè)的牛逼好文 基于深度學(xué)習(xí)的目標(biāo)檢測(cè)
Selective Search中如何選擇初始時(shí)Bounding Box區(qū)域合并原理
Bounding Box如何調(diào)整邊框回歸(Bounding Box Regression)詳解
圖文并茂詳細(xì)介紹的目標(biāo)檢測(cè)重大發(fā)展的paper原理基于深度學(xué)習(xí)的目標(biāo)檢測(cè)技術(shù)演進(jìn)
facenet如何應(yīng)用MTCNN和FaceNet模型實(shí)現(xiàn)人臉檢測(cè)及識(shí)別
FaceNet: A Unified Embedding for Face Recognition and Clustering
facenet項(xiàng)目地址
參考文章
知乎.狗頭山人七
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/42152.html
摘要:實(shí)現(xiàn)實(shí)時(shí)人臉識(shí)別更新新增測(cè)試方法直接使用特征進(jìn)行計(jì)算對(duì)比此次更新主要想法上一個(gè)版本是使用對(duì)準(zhǔn)備好的若干張照片進(jìn)行訓(xùn)練,首先準(zhǔn)確率不是很高還沒細(xì)究問題,猜測(cè)原因是自己準(zhǔn)備的圖片問題,以及實(shí)時(shí)采集實(shí)時(shí)的環(huán)境影響,但最主要的原因還是對(duì)每個(gè)目標(biāo)對(duì)象 opencv+mtcnn+facenet+python+tensorflow 實(shí)現(xiàn)實(shí)時(shí)人臉識(shí)別(2018.9.26更新) 新增測(cè)試方法直接使用em...
摘要:本文基于環(huán)境,采用為基礎(chǔ)來構(gòu)建實(shí)時(shí)人臉檢測(cè)與識(shí)別系統(tǒng),探索人臉識(shí)別系統(tǒng)在現(xiàn)實(shí)應(yīng)用中的難點(diǎn)。對(duì)于人臉檢測(cè)方法,效果好于的方法,但是檢測(cè)力度也難以達(dá)到現(xiàn)場(chǎng)應(yīng)用標(biāo)準(zhǔn)。本文中,我們采用了基于深度學(xué)習(xí)方法的人臉檢測(cè)系統(tǒng)。 git地址:https://github.com/chenlinzho... 本文主要介紹了系統(tǒng)涉及的人臉檢測(cè)與識(shí)別的詳細(xì)方法,該系統(tǒng)基于python2.7.10/opencv...
摘要:本文基于環(huán)境,采用為基礎(chǔ)來構(gòu)建實(shí)時(shí)人臉檢測(cè)與識(shí)別系統(tǒng),探索人臉識(shí)別系統(tǒng)在現(xiàn)實(shí)應(yīng)用中的難點(diǎn)。對(duì)于人臉檢測(cè)方法,效果好于的方法,但是檢測(cè)力度也難以達(dá)到現(xiàn)場(chǎng)應(yīng)用標(biāo)準(zhǔn)。本文中,我們采用了基于深度學(xué)習(xí)方法的人臉檢測(cè)系統(tǒng)。 git地址:https://github.com/chenlinzho... 本文主要介紹了系統(tǒng)涉及的人臉檢測(cè)與識(shí)別的詳細(xì)方法,該系統(tǒng)基于python2.7.10/opencv...
摘要:萬萬沒想到,在圣誕節(jié)前夕,女神居然答應(yīng)了在下的約會(huì)請(qǐng)求。想在下正如在座的一些看官一樣,雖玉樹臨風(fēng)風(fēng)流倜儻,卻總因猜不透女孩的心思,一不留神就落得個(gè)母胎單身。在內(nèi)部將張量表示為基本數(shù)據(jù)類型的維數(shù)組。 showImg(https://segmentfault.com/img/remote/1460000017498745); 本文將結(jié)合移動(dòng)設(shè)備攝像能力與 TensorFlow.js,在瀏覽...
閱讀 2833·2021-11-25 09:43
閱讀 2476·2021-10-09 09:44
閱讀 2801·2021-09-22 15:49
閱讀 2567·2021-09-01 11:43
閱讀 2541·2019-08-30 14:16
閱讀 465·2019-08-29 17:24
閱讀 3020·2019-08-29 14:00
閱讀 1384·2019-08-29 13:05