dlib 使用OpenCV,Python和深度學習進行人臉識別 源代碼

請直接訪問原文章 dlib 使用OpenCV,Python和深度學習進行人臉識別 源代碼 https://hotdog29.com/?p=595

在 2019年7月7日 上張貼 由 hotdog發表回覆

dlib 在今天的博客文章中,您將學習如何使用以下方法在圖像和視頻流中執行人臉識別:

OpenCV
python
深度學習
正如我們將要看到的,我們今天在這裏使用的基於深度學習的面部嵌入都是(1)高度準確 和(2)能夠實時執

使用OpenCV,Python和深度學習進行人臉識別
在本教程中,您將學習如何使用OpenCV,Python和深度學習進行面部識別。

我們將首先簡要討論基於 深度 學習的面部識別,包括“深度量學習”的概念。

我將幫助您安裝實際執行面部識別所需的庫。

最後,我們將對靜止圖像和視頻流實現面部識別。

正如我們將要發現的那樣,我們的面部識別實現將能夠實時運行。

瞭解深度學習人臉識別嵌入
那麼,深度學習+面部識別是如何工作的呢?

祕密是一種稱爲深度量學習的技術。

如果您有任何深度學習經驗,您知道我們通常會訓練網絡:

接受單個輸入圖像
並輸出該圖像的分類/標籤
但是,深度量度學習是不同的。

相反,我們嘗試輸出單個標籤(甚至是圖像中對象的座標/邊界框),而是輸出實值特徵向量。

對於dlib面部識別網絡,輸出特徵向量是128-d(即,128個實數值的列表),其用於量化面部。使用三元組訓練網絡:

圖1:通過深度量學習進行的面部識別涉及“三重訓練步驟”。三胞胎由3個獨特的面部圖像組成 – 3箇中的2個是同一個人。NN爲3個面部圖像中的每一個生成128-d矢量。對於同一個人的2個面部圖像,我們調整神經網絡權重以通過距離度量使矢量更接近。

在這裏,我們爲網絡提供三個圖像:

這些圖像中的兩個是同一個人的示例面部。
第三個圖像是來自我們數據集的隨機面,與其他兩個圖像不是同一個人。
作爲一個例子,讓我們再次考慮上面的圖1,我們提供了三個圖像:一個是Chad Smith,兩個是Will Ferrell。

通過我們的網絡量化,爲每個面構建128-d嵌入(量化)。

從那裏,一般的想法是我們將調整我們的神經網絡的權重,以便兩個Will Ferrel的128-d測量將彼此更接近並且遠離Chad Smith的測量。

我們用於人臉識別的網絡架構基於He等人的深度殘留學習圖像識別論文中的ResNet-34 ,但是層數較少,濾波器數量減少了一半。

該網絡本身由Davis King在大約300萬張圖像的數據集上進行了訓練。在野外標記面(LFW)數據集中,網絡與其他最先進的方法進行比較,準確率達到99.38%。

Davis King(dlib的創建者)和Adam Geitgey( 我們將很快使用的face_recognition模塊的作者)都寫了詳細的文章,介紹了基於學習的面部識別的深度:

深度度量學習的高質量人臉識別(戴維斯)
深度學習的現代人臉識別(Adam)
我強烈建議您閱讀上述文章,瞭解有關深度學習面部嵌入的工作原理的詳細信息。

安裝面部識別庫
爲了使用Python和OpenCV執行面部識別,我們需要安裝兩個額外的庫:

dlib
face_recognition
由Davis King維護的 dlib 庫包含我們實現的“深度量學習”,用於構建用於實際識別過程的面部嵌入。

由Adam Geitgey創建的 face_recognition 庫包含了 dlib的面部識別功能,使其更易於使用。在2018年的PyImageConf上向Adam Geitgey和Davis King 學習

我假設您已在系統上安裝了OpenCV。如果沒有,不用擔心 – 只需訪問我的OpenCV安裝教程頁面,然後按照適合您系統的指南進行操作。

從那裏,讓我們安裝 dlib 和 face_recognition 包。

注意: 對於以下安裝,請確保您使用的是虛擬環境。我強烈推薦用於隔離項目的虛擬環境 – 這是Python的最佳實踐。如果您已經按照我的OpenCV安裝指南(並安裝了 virtualenv +virtualenvwrapper ),那麼您可以 在安裝dlib 和 face_recognition之前使用 workon命令 。

dlib 無 GPU支持安裝
如果您沒有GPU,可以按照本指南 使用pip 安裝 dlib

1
2 $ workon # optional
$ workon # optional$ pip install dlib
或者您可以從源代碼編譯

1
2
3
4
5
6
7
8
9 $ workon # optional
$ git clone https://github.com/davisking/dlib.git
$ cd dlib
$ mkdir build
$ cd build
$ cmake … -DUSE_AVX_INSTRUCTIONS=1
$ cmake --build .
$ cd …
$ python setup.py install --yes USE_AVX_INSTRUCTIONS
dlib 使用 GPU支持進行安裝(可選)
如果你這樣做有一個兼容CUDA的GPU可以安裝 dlib 與GPU的支持,使得面部識別速度更快,效率更高。

爲此,我建議 您從源代碼安裝 dlib,因爲您可以更好地控制構建

1
2
3
45
67
89
$ workon # optional
$ git clone https://github.com/davisking/dlib.git
$ cd dlib
$ mkdir build
$ cd build
$ cmake … -DDLIB_USE_CUDA=1 -DUSE_AVX_INSTRUCTIONS=1
$ cmake --build .
$ cd …
$ python setup.py install --yes USE_AVX_INSTRUCTIONS --yes DLIB_USE_CUDA
安裝face_recognition包
所述face_recognition模塊是通過一個簡單的PIP命令安裝

1
2 $ workon # optional
$ pip install face_recognition
安裝 imutils
你還需要我的便利功能包,imutils。您可以通過pip在Python虛擬環境中安裝它

1
2 $ workon # optional
$ pip install imutils
我們的人臉識別數據集

圖2:使用Python和Bing Image Search API以編程方式創建了一個示例人臉識別數據集。顯示了侏羅紀公園電影系列中的六個角色。

由於侏羅紀公園 (1993)是我有史以來最喜歡的電影,爲了紀念侏羅紀世界:墮落王國 (2018年)本週五在美國發行,我們將對電影中角色的樣本進行人臉識別。 :

艾倫·格蘭特,古生物學家(22圖像)
克萊爾·迪林,園區運營管理(53張圖片)
Ellie Sattler,古植物學家(31圖像)
伊恩馬爾科姆,數學家(41圖像)
約翰哈蒙德,商人/侏羅紀公園所有者 (36張圖片)
Owen Grady,恐龍研究員(35圖像)
使用我的如何(快速)構建深度學習圖像數據集 教程中討論的方法,在<30分鐘內構建此數據集。 鑑於此圖像數據集,我們將:

爲數據集中的每個面創建128-d嵌入
使用這些嵌入來識別圖像和視頻流中字符的面部
人臉識別項目結構
通過檢查tree 命令的輸出可以看到我們的項目結構

我們的項目有4個頂級目錄:

dataset / :包含基於各自名稱組織到子目錄中的六個字符的面部圖像。
examples / :有三個用於測試的圖像不在數據集中。
output / :您可以在此處存儲已處理的面部識別視頻。我的一個文件夾 – 來自原侏羅紀公園電影的經典“午餐場景” 。
videos / :輸入視頻應存儲在此文件夾中。此文件夾還包含“午餐場景”視頻,但尚未經過人臉識別系統。
我們在根目錄中還有 6個文件:

search_bing_api .py :第1步是建立一個數據集(我已經爲你完成了這個)。要了解如何使用Bing API使用我的腳本構建數據集,請參閱此博客文章。
encode_faces .py :使用此腳本構建面部的編碼(128-d向量)。
recognize_faces_image.py :識別單個圖像面(根據編碼從數據集)。
recognize_faces_video.py :識別人臉從您的網絡攝像頭和輸出視頻的實時視頻流。
recognize_faces_video_file.py :識別人臉在駐留在磁盤上並輸出所處理的視頻到硬盤的視頻文件。我今天不會討論這個文件,因爲框架來自與視頻流文件相同的骨架。
encodings .pickle :面部識別編碼是通過 encode_faces .py從數據集生成的 ,然後序列化存儲磁盤。
在創建圖像數據集(使用 search_bing_api .py )之後,我們將運行 encode_faces .py 來構建嵌入。

從那裏,我們將運行識別腳本來實際識別面部。

使用OpenCV和深度學習對面部進行編碼

圖3:通過深度學習的面部識別和使用face_recognition 模塊方法的Python 生成每面的128-d實值數字特徵向量。

在我們識別圖像和視頻中的面部之前,我們首先需要量化訓練集中的面部。請記住,我們實際上並沒有在這裏訓練網絡 – 網絡已經過訓練,可以在大約300萬張圖像的數據集上創建128-d嵌入。

我們當然可以從頭開始訓練網絡,甚至可以微調現有模型的權重,但這很可能對許多項目來說都是過度殺傷力。此外,您需要大量圖像來從頭開始訓練網絡。

相反,使用預先訓練的網絡更容易,然後使用它爲我們的數據集中的218個面中的每一個構建128-d嵌入。

然後,在分類過程中,我們可以使用簡單的k-NN模型+ votes 來進行最終的人臉分類。其他傳統的機器學習模型也可以在這裏使用。

要構建我們的面部嵌入,請 從與此博客帖子相關聯的“下載”中打開 encode_faces .py

首先,我們需要導入所需的包。再次注意,此腳本需要安裝 imutils , face_recognition 和OpenCV。向上滾動到“ 安裝您的面部識別庫”,以確保您的庫已準備就緒。

讓我們處理在運行時使用 argparse處理的命令行參數

如果您是PyImageSearch的新手,請允許我將您的注意力轉移到上面的代碼塊,當您閱讀更多我的博客文章時,您會對此熟悉。我們使用 argparse 來解析命令行參數。在命令行中運行Python程序時,可以在不離開終端的情況下向腳本提供其他信息。 第10-17行不需要修改,因爲它們解析來自終端的輸入。如果這些行看起來不熟悉,請查看我關於命令行參數的博文。

讓我們列出參數標誌並討論它們:

– dataset :我們數據集的路徑(我們使用上週博客文章的方法#2中 描述的search_bing_api .py創建了一個數據集 )。
– encodings :我們的面部編碼被寫入該參數所指向的文件中。
– encodings :在我們對圖像中的面部進行編碼之前 ,我們首先需要檢測它們。或者兩種面部檢測方法包括 hog 或 cnn 。這兩個標誌是唯一適用於 – 檢測- 方法的標誌 。
現在我們已經定義了參數,讓我們抓住數據集中文件的路徑(以及執行兩次初始化)

第21行使用輸入數據集目錄的路徑來構建 其中包含的所有imagePath的列表 。

我們還需要在循環之前初始化兩個列表, knownEncodings 和 knownNames 。這兩個列表將包含數據集中每個人的面部編碼和相應的名稱(第24和25行)。

現在是時候開始循環我們的侏羅紀公園角色面孔了!

該循環將循環218次,對應於數據集中的218個面部圖像。我們循環到第28行的每個圖像的路徑 。

從那裏,我們將 在第32行 從imagePath中提取人物 的 名稱(因爲我們的子目錄被恰當地命名) 。

然後讓我們 在將imagePath傳遞 給 cv2的同時 加載 圖像。imread (第36行)。

OpenCV在BGR中訂購顏色通道,但 dlib 實際上需要RGB。該 face_recognition 模塊使用 dlib,所以我們開始之前,讓我們交換的色彩空間上的 37號線,命名新的圖像 RGB 。

接下來,讓我們本地化面部和計算編碼

這是腳本的有趣部分!

對於循環的每次迭代,我們將檢測一個面(或可能是多個面並假設它是圖像的多個位置中的同一個人 – 這個假設在您自己的圖像中可能或可能不成立,所以要小心這裏)。

例如,假設 rgb 包含Ellie Sattler臉部的圖片。

第41和42行實際上找到/本地化她的面部,從而產生一個面部框列表 。我們將兩個參數傳遞給face_recognition 。face_locations 方法:

rgb :我們的RGB圖像。
model : cnn 或 hog (此值包含在與 “detection_method” 鍵關聯的命令行參數字典中 )。CNN方法更準確但更慢。HOG更快但準確度更低。
然後,我們將把 Ellie Sattler臉部的邊界 框變成45行的128個數字列表 。這被稱爲將面部編碼爲矢量, face_recognition 。face_encodings 方法爲我們處理它。

從那裏我們只需要將Ellie Sattler 編碼 和 名稱附加 到適當的列表( knownEncodings 和knownNames )。

我們將繼續爲數據集中的所有218個圖像執行此操作。

除非我們可以 在另一個處理識別的腳本中使用編碼,否則編碼圖像的重點是什麼 ?

現在讓我們來處理

第56行構造了一個帶有兩個鍵的字典 – “編碼” 和 “名稱” 。

從那裏 57-59號線將名稱和編碼轉儲到磁盤上以備將來召回。

我該如何 在終端中運行 encode_faces .py腳本?

要創建面部嵌入,請打開終端並執行以下命令

1 $ python encode_faces.py --dataset dataset --encodings encodings.pickle
從輸出中可以看出,我們現在有一個名爲encodings.pickle 文件 – 此文件包含數據集中每個面的128維面嵌入。

在我的Titan X GPU上,處理整個數據集只花了一分多鐘,但如果您使用的是CPU,請 準備好等待一段時間才能完成此腳本!

在我的Macbook Pro(無GPU)上,編碼218張圖片需要 21分20秒。

如果您擁有GPU並使用GPU支持編譯dlib,您應該期望更快的速度。

識別圖像中的面孔

圖4:使用Adam Geitgey的深度學習face_recognitionPython模塊識別John Hammond的臉。

現在我們已經爲數據集中的每個圖像創建了128維面嵌入,現在我們可以使用OpenCV,Python和深度學習來識別圖像中的面部。

打開 recognize_faces_image .py (從這個博客帖子 “下載” 相關的文件和圖像數據)

此腳本在第2-5行只需要四次導入 。該 face_recognition 模塊將做繁重和OpenCV將幫助我們來加載,轉換和顯示處理後的圖像。

我們將在第8-15行解析三個命令行參數 :

– encodings :包含我們的面部編碼的pickle文件的路徑。
– image :這是正在進行面部識別的圖像。
– detection-method :你現在應該熟悉這個 – 我們要麼 根據系統的能力使用 hog 或 cnn方法。對於速度,選擇 hog 要準確,選擇 cnn 。
重要! 如果你是:

在CPU上運行面部識別代碼
或者你使用 Raspberry Pi
……你要設置 –detection-method 爲 hog, 作爲CNN臉檢測器(1)不具有GPU和(2)的樹莓派將沒有足夠的內存來運行任意的CNN緩慢。
從那裏,讓我們加載預先計算的編碼+面部名稱,然後爲輸入圖像構建128維面部編碼

第19行從磁盤加載我們的醃製編碼和麪名。我們稍後將在實際的面部識別步驟中需要這些數據。

然後,在 第22行和第23行,我們加載並將輸入圖像轉換 爲 rgb 顏色通道排序(就像我們在encode_faces .py 腳本中所做的 那樣)。

然後我們繼續檢測輸入圖像中的所有面,並 在 第29-31行計算它們的128-d 編碼(這些線也應該看起來很熟悉)。

現在是初始化 檢測到的每個面的名稱列表的好時機 – 該列表將在下一步填充。

接下來,讓我們循環遍歷面部 編碼

在 第37行,我們開始循環從輸入圖像計算的面部編碼。

然後面部識別魔法發生了!

我們嘗試 使用face_recognition. ompare_faces 將輸入圖像(編碼 )中的每個面匹配 到我們已知的編碼數據集(保存在 data[“encodings”] 中)(第40和41行)。

此函數返回True / False 值列表, 每個圖像對應一個數據集。對於我們的侏羅紀公園示例,數據集中有218個圖像,因此返回的列表將具有218個布爾值。

在內部, compare_faces 函數計算候選嵌入與數據集中所有面之間的歐幾里德距離:

如果距離低於某個公差(公差越小,我們的面部識別系統就越嚴格),那麼我們返回True ,表示面部匹配。
否則,如果距離高於容差閾值,則返回 False, 因爲面不匹配。
基本上,我們正在使用“更花哨的” k-NN模型進行分類。請務必參考compare_faces實現以獲取更多詳細信息。

該 變量將最終持有人的姓名串-現在,我們把它作爲 “未知” 的情況下有沒有“票”(42號線)。

根據我們的 匹配 列表,我們可以計算每個名稱的“投票數”( 與每個名稱相關聯的真值的數量 ),計算投票數,並選擇具有最多相應投票的人名

如果匹配中有任何 True 投票 (第45行),我們需要確定這些True 值 匹配的位置 的索引 。我們在第49行上就是這樣做的 ,我們構造了一個簡單的matchedIdx列表, 對於example_01 .png可能看起來像這樣

1

(Pdb) matchedIdxs[35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 71, 72, 73, 74, 75]
然後我們初始化一個名爲counts的字典 ,它將字符名稱作爲 鍵 票數作爲 值(第50行)。

從那裏開始,讓我們遍歷 matchesIdxs 並設置與每個名稱相關聯的值,同時根據需要遞增 計數 。該 計數 字典可能是這樣的一個高投得分爲伊恩·馬爾科姆

1 (Pdb) counts{‘ian_malcolm’: 40}
回想一下,我們在數據集中只有41張Ian圖片,因此對於其他任何人而言沒有投票的40分是非常高的。

第61行從計數中提取得票最多的名稱 ,在這種情況下,它將是 “ian_malcolm” 。

我們的循環的第二次迭代(因爲在我們的示例圖像中有兩個面)主面部編碼循環產生以下計數

1 (Pdb) counts{‘alan_grant’: 5}
這絕對是一個較小的投票得分,但仍然,字典中只有一個名字所以我們可能找到了Alan Grant。

注意: PDB Python調試器用於驗證計數 字典的值 。PDB的使用超出了本篇博文的範圍; 但是,您可以在Python文檔頁面上發現如何使用它。

如 下面的圖5 所示,Ian Malcolm和Alan Grant都已被正確識別,因此腳本的這一部分運行良好。

讓我們繼續並循環遍歷每個人的邊界框和標記名稱,並在輸出圖像上繪製它們以進行可視化

在第67行,我們開始在檢測到的面部邊界框和預測名稱上循環。要創建一個可迭代對象,以便我們可以輕鬆遍歷值,我們調用zip(框,名稱),從而生成元組,我們可以從中提取框座標和名稱。我們使用框座標在第69行上繪製一個綠色矩形。我們還使用座標來計算我們應該在哪裏繪製人名的文本(第70行),然後在圖像上實際放置名稱文本(第71和72行) )。如果面部邊界框位於圖像的最頂部,我們需要將文本移動到框頂部下方(在第70行處理),否則文本將被截斷。然後我們繼續顯示圖像,直到按下一個鍵(第75和76行)。你應該如何運行面部識別Python腳本?使用您的終端,首先使用workon命令確保您在各自的Python正確的虛擬環境中(當然,如果您使用的是虛擬環境)。然後運行腳本,同時至少提供兩個命令行參數。如果您選擇使用HoG方法,請務必同時傳遞–detection-method hog(否則它將默認爲深度學習檢測器)。

我們去吧!

要使用OpenCV和Python識別面部,請打開終端並執行我們的腳本

1
$ python recognize_faces_image.py --encodings encodings.pickle \ --image examples/example_01.png

Figure 5: Alan Grant and Ian Malcom’s faces are recognized using our Python + OpenCV + deep learning method.

第二個例子

12 $ python recognize_faces_image.py --encodings encodings.pickle \ --image examples/example_03.png

Figure 6: Face recognition with OpenCV and Python.

識別視頻中的面孔

圖7:通過Python,OpenCV和深度學習在視頻中進行面部識別。

既然我們已經對圖像應用了人臉識別,那麼我們也可以對視頻進行人臉識別(實時)。

重要性能注意: 如果您正在使用GPU,則只能實時使用CNN人臉識別器(您可以將其與CPU一起使用,但期望小於0.5 FPS,這會導致視頻不穩定)。或者(您使用的是CPU),您應該使用HoG方法(甚至是未來博客文章中介紹的OpenCV Haar級聯)並期望足夠的速度。

下面的腳本與以前 recognize_faces_image.py 腳本 有許多相似之處 。因此,我將輕鬆略過已經涵蓋的內容,只需查看視頻組件,以便了解正在發生的事情

我們在第2-8行導入包,然後繼續解析第11-20行的命令行參數。

我們有四個命令行參數,其中兩個你應該從上面識別(–encodings和–detection-method)。 另外兩個 參數 是:

–output:輸出視頻的路徑。
–display:一個標誌,指示腳本將幀顯示在屏幕上。 值1顯示,值0不顯示輸出幀到我們的屏幕。
從那裏我們將加載我們的編碼並啓動我們的VideoStream:

要訪問我們的相機,我們正在使用imutils的VideoStream類。 第29行啓動流。 如果系統上有多個攝像頭(例如內置網絡攝像頭和外部USB攝像頭),則可以將src = 0更改爲src = 1,依此類推。

我們可以選擇將處理後的視頻幀寫入磁盤,因此我們將writer初始化 爲 None (第30行)。睡眠2秒鐘可使我們的相機預熱(第31行)。

從那裏我們將開始一個 while 循環並開始抓取並處理幀

我們的循環從第34行開始,我們採取的第一步是從視頻流中獲取一個幀(第36行)。

上述代碼塊中的剩餘行40-50幾乎與前一個腳本中的行相同,只是這是視頻幀而不是靜態圖像。基本上我們讀取 幀 ,預處理,然後檢測面邊界 框 +計算 每個邊界框的編碼。

接下來,讓我們循環遍歷 與我們剛剛找到的面部相關的面部 編碼

在這個代碼塊中,我們遍歷每個 編碼 並嘗試匹配面部。如果找到匹配項,我們會計算數據集中每個名稱的投票數。然後,我們提取最高投票數,這是與面部相關聯的名稱。這些行 與我們前面提到的腳本相同,所以讓我們繼續。

在下一個塊中,我們在已識別的面上循環,然後圍繞面部繪製一個框,並在面部上方繪製人物的顯示名稱

這些行也是相同的,所以讓我們關注視頻相關代碼。

或者,我們將把幀寫入磁盤,讓我們看看如何使用OpenCV將視頻寫入磁盤:

假設我們在命令行參數中提供了輸出文件路徑,並且我們尚未初始化視頻編寫器(第99行),讓我們繼續並初始化它。

在第100行,我們初始化VideoWriter_fourcc。 FourCC是一個4字符的代碼,在我們的例子中,我們將使用“MJPG”4字符代碼。

從那裏,我們將該對象與我們的輸出文件路徑,每秒幀數目標和幀尺寸(第101和102行)一起傳遞到VideoWriter中。

最後,如果編寫器存在,我們可以繼續將幀寫入磁盤(第106-107行)。

讓我們來處理是否應該在屏幕上顯示人臉識別視頻幀

如果我們的顯示命令行參數已設置,我們繼續顯示框架(第112行)並檢查是否已按下退出鍵(“q”)(第113-116行),此時我們將突破 循環(第117行)。

最後,讓我們履行我們的內務管理職責

在 第120-125行中,我們清理並釋放顯示器,視頻流和視頻編寫器。

你準備好看腳本了嗎?

要演示使用OpenCV和Python實時進行人臉識別,請打開終端並執行以下命令

123 $ python recognize_faces_video.py --encodings encodings.pickle \ --output output/webcam_face_recognition_output.avi --display
視頻文件中的人臉識
此文件與我們剛剛爲網絡攝像頭查看的文件基本相同,但它會採用輸入視頻文件並生成輸出視頻文件(如果您願意)。

我將人臉識別代碼應用於最初的侏羅紀公園電影中的流行“午餐場景”,演員坐在桌子旁,分享他們對公園的關注

123 $ python recognize_faces_video_file.py –encodings encodings.pickle \ –input videos/lunch_scene.mp4 –output output/lunch_scene_output.avi \ –display
注意: 回想一下,我們的模型是由原始演員的四名成員訓練的:Alan Grant,Ellie Sattler,Ian Malcolm和John Hammond。該模型 沒有接受Donald Gennaro(律師)的培訓,這就是爲什麼他的臉被標記爲“未知”。這種行爲是設計(不是偶然),以表明我們的面部識別系統可以識別它所訓練的面部,同時留下它無法識別爲“未知”的面部。

在下面的視頻中,我將侏羅紀公園和侏羅紀世界剪輯的“精彩卷軸”放在一起,主要來自預告片:

我們可以看到,我們可以看到,我們的人臉識別和OpenCV代碼運行良好!

我可以在Raspberry Pi上使用這個面部識別器代碼嗎?
可以。但是有一些限制:

Raspberry Pi沒有足夠的內存來使用更準確的基於CNN的人臉檢測器……
……所以我們僅限於HOG
除了HOG在Pi上用於實時人臉檢測的速度太慢……
…所以我們需要利用OpenCV的Haar級聯
一旦你運行它,你只能期望1-2 FPS,甚至達到FPS的水平需要一些技巧。

好消息是我將在下週回來討論如何在Raspberry Pi上運行我的人臉識別器,敬請期待!

摘要
在本教程中,您學習瞭如何使用OpenCV,Python和深度學習進行人臉識別。

此外,我們使用了Davis King的 dlib庫 和Adam Geitgey的face_recognition模塊 ,該模塊包含了dlib的深度度量學習,使面部識別更容易實現。

我們發現,我們的面部識別實現是:

準確
能夠使用GPU實時執行
我希望你喜歡今天關於人臉識別的博客文章!

安裝OpenCV。可以參考我的教程 pip 安裝 opencv

代碼下載
請看 這篇文章 https://hotdog29.com/?p=620

我希望你喜歡今天關於OpenCV人臉識別的教程!

文章轉自 Adrian Rosebrock ,OpenCV Face Recognition,PyImageSearch,https://www.pyimagesearch.com/2018/09/24/opencv-face-recognition/,2009年7月6日訪問

相關文章
代碼下載
OpenCV 人臉識別 源代碼
文本檢測 OpenCV EAST文本檢測器 源代碼
YOLO 對象檢測 OpenCV 源代碼
OpenCV教程 ,資源和指南
張貼在技術博客、opencv標籤:opencv、人臉識別、深度學習、dlib、python編輯

請直接訪問原文章 dlib 使用OpenCV,Python和深度學習進行人臉識別 源代碼 https://hotdog29.com/?p=595

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章