中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

如何構建自定義人臉識別數(shù)據(jù)集

2018-06-28    來源:raincent

容器云強勢上線!快速搭建集群,上萬Linux鏡像隨意使用
本文介紹了構建自定義人臉識別數(shù)據(jù)集的三種方法:使用 OpenCV 和 webcam 工具收集人臉圖像數(shù)據(jù);以編程的方式下載人臉圖像;手動收集人臉圖像。

在接下來的幾篇博文中,作者將帶領大家訓練一個「計算機視覺+深度學習」的模型來執(zhí)行人臉識別任務。但是,要想訓練出能夠識別圖像或視頻流中人臉的模型,我們首先得收集人臉圖像的數(shù)據(jù)集。

如果你使用的是「Labeled Faces in the Wild」(LFW)這樣預先準備好的數(shù)據(jù)集,那么你可以不用進行這項困難的工作了。你可以使用我們下一篇博文中的方法創(chuàng)建自己的人臉識別應用。

然而,對于大多數(shù)人來說,我們希望識別出的人臉往往不包含在任何現(xiàn)有數(shù)據(jù)集中,例如:我們自己的、朋友的、家人或者同事的人臉圖像。

為了完成這個任務,我們需要收集我們想要識別的人臉樣本,并且以某種方式量化它們。

這個過程通常被稱為「人臉識別注冊」(facial recognition enrollment)。我們稱之為「注冊」是因為在這個過程中,我們會將用戶注冊、登記為我們的數(shù)據(jù)集和應用中的一個真人樣本。

本文將介紹注冊過程的第一步:創(chuàng)建自定義人臉識別數(shù)據(jù)集。

如何創(chuàng)建自定義人臉識別數(shù)據(jù)集

本教程中,我們將介紹 3 種創(chuàng)建自定義人臉識別數(shù)據(jù)集的方法。第一種方法使用 OpenCV 和 webcam 工具完成兩個任務:(1)在視頻中檢測出人臉;(2)將人臉圖像或視頻幀的樣本保存到磁盤上。

第二種方法將討論如何以編程的方式下載人臉圖像。

最后,我們將討論如何手動收集人臉圖像,以及這種方法何時是適用的。

讓我們開始構建人臉識別數(shù)據(jù)集吧!

方法 1:通過 OpenCV 和 webcam 進行人臉注冊

 

 

圖 1:通過使用 OpenCV 和 webcam,我們可以檢測出視頻流中的人臉,并且將樣本存儲到磁盤上。這個過程可用于創(chuàng)建一個本地人臉識別數(shù)據(jù)集。

這種方法適用于以下情況:

1. 你要創(chuàng)建一個」能現(xiàn)場使用的」人臉識別系統(tǒng);

2. 你需要擁有接觸特定人的物理途徑,以收集他們的人臉圖像數(shù)據(jù)。

這樣的系統(tǒng)尤其適用于公司、學;蛘咂渌藗兠刻煊H自出現(xiàn)在現(xiàn)場的組織。

為了收集這些人的人臉圖像樣本,我們可能需要將他們置于一個特殊的房間中,房間中事先安裝好了視頻攝影機,用于:(1)檢測視頻流中人臉的 (x, y) 坐標;(2)將包含用戶人臉的視頻幀寫入磁盤。我們可能甚至需要好幾天或者幾周的時間執(zhí)行上述操作,以收集下列幾種情況下的人臉樣本:

不同的光照條件
一天中不同的時間
不同的情緒和情感狀態(tài)

通過收集不同情況下的人臉樣本,我們可以創(chuàng)建一個更加多樣化、更具代表性的特定用戶人臉圖像數(shù)據(jù)集。

接下來,我們使用一個簡單的 Python 腳本構建自定義人臉識別數(shù)據(jù)集。這個 Python 腳本可以完成以下任務:

1. 連接到我們的 webcam;
2. 檢測人臉;
3. 將包含人臉的視頻幀寫入磁盤。

想要獲取本文中使用的代碼,請滾動到本文的「Downloads」部分。

準備好之后,請打開 build_face_dataset.py 文件,然后我們來一步一步解讀這份代碼:

 

 

在 2-7 行中,我們導入了所需程序包。尤其是我們所需要的 Opencv 和 imutils 包。安裝 Opencv 的方法請參考我提供的這篇安裝指南(https://www.pyimagesearch.com/opencv-tutorials-resources-guides/)。而 imutils 包則可以很容易地通過 pip 工具進行安裝或升級:

$ pip install --upgrade imutils

如果你使用的是 Python 虛擬環(huán)境,請不要忘記使用 workon 命令!

環(huán)境安裝好之后,我們接下來將討論兩個需要用到的命令行參數(shù):

 

 

命令行參數(shù)會在運行時被一個名為 argparse 的程序包(這個程序包會在安裝 Python 環(huán)境時被自動安裝)解析。如果你對于 argparse 和命令行參數(shù)不太熟悉,我強烈推薦你迅速瀏覽這篇博文(https://www.pyimagesearch.com/2018/03/12/python-argparse-command-line-arguments/)。

我們有兩個需要用到的命令行參數(shù):

--cascade:哈爾級聯(lián)(Haar cascade)文件在磁盤上的路徑。

--output:輸出文件夾的路徑。人臉圖像會被存儲在這個文件夾中,因此我推薦你用人臉主人的名字來命名這個文件夾。例如,如果你收集的是「John Smith」的人臉圖像,你可以將所有的圖片存放在 dataset/john_smith 文件夾中。

下面,我們將加載人臉的哈爾級聯(lián)文件并且初始化視頻流:

 

 

在第 18 行中,我們加載了 OpenCV 的哈爾級聯(lián) detector。這個 detector 會在接下來的逐幀循環(huán)中完成繁重的任務。

我們在第 24 行初始化并開始我們的視頻流。

注意:如果你使用的是樹莓派,請注釋掉第 24 行,并且取消第 25 行的注釋。

為了讓攝像頭預熱,我們簡單地將程序暫停 2 秒(第 26 行)。

我們還初始化了一個計數(shù)器 total,用于表示在磁盤上存儲的人臉圖像數(shù)量(第 27 行)。

現(xiàn)在讓我們在視頻流上進行逐幀循環(huán):

 

 

在第 30 行中,我們開始循環(huán)(按下「q」鍵則退出循環(huán))。

從這一行起,我們獲取了一個視頻幀 frame,創(chuàng)建了該幀的一個副本,并且改變了圖像的尺寸(第 34-36 行)。

現(xiàn)在,是時候執(zhí)行人臉檢測了!

我們可以使用 detectMultiScale 方法檢測視頻幀 frame 中的人臉。該函數(shù)需要用到下列參數(shù):

image:一個灰度圖;
scaleFactor:指定在每個尺度上,圖像縮小多少;
minNeighbor:為了保證檢測的有效性,該參數(shù)指定每一個候選矩形邊界框需要有多少相鄰的檢測點;

minSize:可能的最小圖片尺寸。
不幸的是,有時我們需要對這種方法進行調優(yōu),以消除誤判或者檢測出一張完整的人臉,但是對于「近距離」拍攝的人臉圖像的檢測來說,這些參數(shù)是一個很好的起點。

話雖如此,你是否也在尋找一種更加先進、更加可靠的方法呢?在之前的博文中(https://www.pyimagesearch.com/2018/02/26/face-detection-with-opencv-and-deep-learning/),我用 OpenCV 和深度學習實現(xiàn)了人臉檢測。你可以通過文章中使用了預訓練模型的深度學習方法很容易地更新本文中的腳本。該方法的好處是,不用調參并且訓練十分快。

這種人臉識別方法的結果是一個 rects(矩形邊界框)列表。在第 44、45 行中,我們在 rects 上進行循環(huán),并且在幀上畫出矩形邊框,以方便展示。

最后一步,我們將在循環(huán)中進行兩個工作:(1)在屏幕上展示視頻幀;(2)處理按鍵響應。具體代碼如下:

 

 

在第 48 行中,我們在屏幕上展示了視頻幀,接下來在第 49 行中獲取了鍵入值。

根據(jù)按下的是「k」還是「q」,我們會:

如果按下「k」鍵,我們將保留視頻幀并將它存儲到磁盤上(第 53-56 行),并且增加表示獲取到的總幀數(shù)的計數(shù)器 total(第 58 行)。我們需要在想保留的每一幀處按下「k」鍵。我建議保留不同角度、不同的幀區(qū)域、戴/不戴眼鏡等不同情況下拍攝的人臉圖像。

如果按下「q」鍵,則退出循環(huán),準備退出腳本(quit)。

如果沒有按下任何鍵,我們就回到循環(huán)的開頭,從視頻流中獲取一幀。

最終我們將在終端上打印出最終存儲的圖像數(shù)量,并進行清理:

 

 

現(xiàn)在讓我們運行腳本,收集人臉圖像吧!

請確保你已經(jīng)從本文的「Downloads」部分下載了代碼和哈爾級聯(lián)。

在你的終端設備中執(zhí)行下列命令:

$ python build_face_dataset.py --cascade haarcascade_frontalface_default.xml \
--output dataset/adrian
[INFO] starting video stream...
[INFO] 6 face images stored
[INFO] cleaning up...

 

 

在運行完腳本之后,我們發(fā)現(xiàn)有 6 張圖像被存儲到了 dataset 文件夾的 adrian 子文件夾中:

$ ls dataset/adrian
00000.png 00002.png 00004.png
00001.png 00003.png 00005.png

我建議將人臉圖像樣本存在以圖像所屬人的名字命名的子文件夾中。

通過這種方式可以強化你的自定義人臉識別數(shù)據(jù)集的組織結構。

方法 2:通過編程下載人臉圖像

 

 

圖 2:另一種構建人臉識別數(shù)據(jù)集的方法(如果此人是公眾人物,或者在網(wǎng)絡上出現(xiàn)過),是通過一個腳本在谷歌上進行圖像搜索,或者使用一個利用了 Bing 圖像搜索 API 的 Python 腳本。

如果你不能在現(xiàn)場拍攝一個人的圖像,或者他們是在網(wǎng)絡上存在感很強的公眾人物(在某種程度上),你可以通過各種平臺上的 API 以編程的方式下載他們的人臉圖像樣本。選擇哪種 API 很大程度上取決于你想要收集的是誰的人臉圖像。

例如,如果一個人一直在 Twitter 或 Instagram 上發(fā)帖,你可能想要用其中一種(或者其他的)社交網(wǎng)絡 API 獲取人臉圖像。

另一種選擇是,使用像谷歌或 Bing 這樣的搜索引擎:

使用這篇文章中的方法(https://www.pyimagesearch.com/2017/12/04/how-to-create-a-deep-learning-dataset-using-google-images/),你可以使用谷歌圖像「Google Images」手動+編程地為給定的查詢下載示例圖像。

在我看來,一個更好的選擇可能是,使用 Bing 的圖像搜索 API,它是完全自動化的且不需要手動干預。我在這篇文章中實現(xiàn)了這個全自動化方法(https://www.pyimagesearch.com/2018/04/09/how-to-quickly-build-a-deep-learning-image-dataset/)。

使用后一種方法,我可以從《侏羅紀公園》和《侏羅紀世界》中下載 218 張人臉圖像。

通過 Bing 圖像搜索 API 下載 Owen Grady 的人臉圖像的命令示例如下:

$ mkdir dataset/owen_grady
$ python search_bing_api.py --query "owen grady" --output dataset/owen_grady

現(xiàn)在讓我們來看整個數(shù)據(jù)集(刪除不包含該人物人臉的圖像后):

 

 

在短短 20 多分鐘內(包括刪除誤判樣本的時間),我就能收集到《侏羅紀公園》/《侏羅紀世界》的自定義人臉數(shù)據(jù)集:

 

 

圖 3:通過 Python 和 Bing 圖像搜索 API 以編程的方式創(chuàng)建出的人臉識別數(shù)據(jù)集示例。圖中是《侏羅紀公園》系列電影中的六個人物。

方法 3:手動收集人臉圖像

 

 

圖 4:手動下載人臉圖像是最不可取的選項,但你不該忘記它。當一個人并不經(jīng)常在網(wǎng)絡上出現(xiàn),或者圖像沒有標簽時,你可以使用這種方法。

最后一種創(chuàng)建自定義人臉識別數(shù)據(jù)集的方法也是最不可取的一種,是手動尋找并存儲人臉圖像樣本。

這種方法顯然是最乏味的,且需要耗費最多的人工工作時間——通常我們更喜歡「自動化」的解決方案,但是在某些情況下,你不得不付諸人工。

使用此方法,你需要手動檢查:

搜索引擎的搜索結果(例如,谷歌和 Bing)
社交網(wǎng)絡資料(Facebook、Twitter、Instagram、SnapChat 等)
圖片分享服務(Google Photos、Flickr 等)
然后手動將這些圖像存儲到磁盤上。

在這些場景下,用戶通常具備某種類型的公開資料,但是比以編程的方式用爬蟲爬到的圖像要少得多。

PyImageSearch Gurus(免費)示范課程

 

 

圖 5:在 PyImageSearch Gurus 課程(https://www.pyimagesearch.com/pyimagesearch-gurus/)中,你將學會構建人臉識別安防系統(tǒng)。當一個未經(jīng)授權的入侵者坐在你的桌前時,它會通過文本消息(包含圖像)提醒你。

總結

本文介紹了三種為人臉識別任務創(chuàng)建自定義人臉數(shù)據(jù)集的方法。

你具體會選擇哪種方法完全取決于你自己的人臉識別應用。

如果你正在構建一個「現(xiàn)場」的人臉識別系統(tǒng),例如用于教室、公司或其他組織的人臉識別系統(tǒng),你可能會讓用戶進入專門用于收集示例人臉圖像的房間,然后在那里繼續(xù)從視頻流中捕獲人臉圖像 (方法 1)。

另一方面,如果你正在構建一個包含公眾人物、名人、運動員等的人臉識別系統(tǒng),那么在網(wǎng)上可能有他們足夠多的人臉圖像樣本。在這種情況下,你可以利用現(xiàn)有的 API 以編程方式下載人臉圖像樣本 (方法 2)。

最后,如果你試圖識別的面孔在網(wǎng)上沒有公開的個人資料(或者個人資料非常有限),你可能需要手動收集和管理人臉數(shù)據(jù)集 (方法 3)。這顯然是最人工、最繁瑣的方法,但在某些情況下,如果你想識別某些面孔,可能需要使用這種方法。

原文鏈接:https://www.pyimagesearch.com/2018/06/11/how-to-build-a-custom-face-recognition-dataset/

標簽: Google 代碼 谷歌 腳本 搜索 搜索引擎 網(wǎng)絡

版權申明:本站文章部分自網(wǎng)絡,如有侵權,請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉載文章言論不代表本站觀點!
本站所提供的圖片等素材,版權歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:數(shù)據(jù)科學20個最好的Python庫

下一篇:將會改變人們對大數(shù)據(jù)增長看法的10個圖表