如何利用python進行精準人臉識別?

lxvvx


Python針對人臉識別,基於專門有一個第三方模塊—face recognition,可以輕鬆識別人臉並標註出來,下面我簡單介紹一下這個模塊的安裝和使用,感興趣的朋友可以嘗試一下:

01

安裝模塊

這裡主要用到dlib,face recognition model,face recognition這個3模塊,其中前2個模塊是模型構建和訓練的基礎,後一個模塊建立在這2個模塊的基礎上,安裝的話,直接在cmd窗口輸入命令“pip install dlib face_recognition_models face_recognition”就行,如下,如果安裝失敗,可以選擇編譯好的whl文件:

02

人臉識別

安裝完成後,我們就可以直接編碼來實現人臉識別了,基本思想先加載圖片,然後定位人臉,最後再標註出來,測試代碼如下,非常簡單,這裡需要注意,程序在處理圖片的過程中可能會出現失真情況:

點擊運行程序,截圖如下,已經成功標註出人臉,準確率還是非常不錯的:

03

其他操作

當然,除了基本的人臉識別外,face recognition模塊還可以準確標註出嘴唇、眉毛、眼睛等常見部位,因此可以對這些部位進行一下特別“刻畫”,測試代碼如下,非常簡單,依次循環遍歷上色即可:

程序運行截圖如下,整體效果還是非常不錯的,哈哈:

至此,我們就完成了利用face recognition模塊進行人臉識別。總的來說,整個過程非常簡單,只要你有一定的Python基礎,熟悉一下上面的代碼和示例,很快就能掌握的,當然,你也可以使用opencv,可能更簡單,網上也有相關教程和資料,介紹的非常詳細,感興趣的話,可以搜一下,希望以上分享的內容能對你有所幫助吧,也歡迎大家評論、留言進行補充。


小小猿愛嘻嘻


什麼是人臉檢測?

人臉檢測是計算機技術在數字圖像中識別人臉的能力。人臉檢測應用程序採用的算法專注於在可能包含風景,物體等的較大圖像中檢測人臉。

為了工作,面部檢測應用程序使用機器學習算法來檢測任何大小的圖像中的人臉。較大的圖像可能包含許多不面對的物體,例如風景,物體,動物,建築物和人的其他部位(例如,腿,肩膀和手臂)。

面部檢測/識別技術以前僅與安全部門相關聯,但如今已積極擴展到其他行業,包括零售,營銷,醫療保健等。

人臉檢測如何工作?

儘管該過程有些複雜,但是人臉檢測算法通常始於搜索人眼。眼睛構成了所謂的山谷區域,是最容易發現的特徵之一。一旦檢測到眼睛,該算法便可以嘗試檢測面部區域,包括眉毛,嘴巴,鼻子,鼻孔和虹膜。一旦算法推測出已檢測到臉部區域,就可以應用其他測試來驗證它是否實際上已檢測到臉部。

OpenCV

OpenCV(開源計算機視覺庫),它是圖像和視頻處理庫,具有C ++,C,Python和Java的綁定。OpenCV用於各種圖像和視頻分析,例如面部識別和檢測,車牌讀取,照片編輯,高級機器人視覺,光學字符識別等。

OpenCV具有三個內置的人臉識別器,並且由於其清晰的編碼,您只需更改一行代碼即可使用其中任何一個。以下是這些面部識別器及其OpenCV調用的名稱:

  • EigenFaces — cv2.face.createEigenFaceRecognizer()

  • FisherFaces — cv2.face.createFisherFaceRecognizer()

  • Local Binary Patterns Histograms (LBPH) — cv2.face.createLBPHFaceRecognizer()

那我們現在來開始輸入圖像:

步驟1:導入numpy,matplotlib,open-cv和glob

步驟2:使用glob循環遍歷當前工作目錄中存在的每個.jpg文件,並將它們存儲在列表“ txtfiles”中。

步驟3:使用cv2.imread()讀取每個

.jpg

文件。函數

cv2.imread()

需要兩個參數:第一個是圖像本身的路徑,第二個指定應讀取圖像的方式。我們可以使用以下三個中的任何一個作為第二個參數。

cv2.IMREAD_COLOR —用於加載彩色圖像。它忽略圖像透明度,並且是默認標誌。它用於沒有Alpha通道的8位圖像。

cv2.IMREAD_GRAYSCALE-負責以灰度加載圖像。

cv2.IMREAD_UNCHANGED —使用alpha通道(RGBA)加載圖像。

使用OpenCV加載圖像時,默認情況下會將其加載到BGR顏色空間中。之後,複製通過的圖像的副本,以使通過的圖像不被更改。

步驟4:將圖像轉換為灰度圖像,因為OpenCV面部檢測器需要灰度圖像。

步驟5:現在,我們必須加載用於面部檢測和眼睛檢測的Haar分類器(下載的XML文件),該輸入將Haar分類器的訓練文件作為輸入。

第6步:現在,我們如何使用CascadeClassifier從圖像中檢測人臉?

好吧,OpenCV的CascadedClassifier再次使我們變得簡單,這是因為detectMultiScale()可以準確地檢測到您需要的東西。

detectMultiScale(image, scaleFactor, minNeighbors)

以下是應傳遞給detectMultiScale()的參數。

這是檢測對象的常規功能,在這種情況下,由於我們在人臉級聯中調用了人臉,因此它將檢測人臉。如果找到面部,則以"Rect(x,y,w,h)"的形式返回所述面部的位置列表。如果未找到,則返回"None"。

  • 圖像:第一個輸入是灰度圖像。
  • scaleFactor:此功能可以補償由於一張臉看起來比另一張臉更大而導致的錯誤尺寸感知,這僅僅是因為它離相機更近。
  • minNeighbors:檢測算法,它使用移動的窗口來檢測對象,它通過定義在當前對象附近可以找到多少個對象才能聲明所發現的人臉來進行檢測。

第8步:遍歷面孔列表並在圖像上繪製矩形。基本上,我們在這裡找到面孔,複製面孔,它們的大小以及繪製矩形。

步驟9:接下來,我們將進行眼睛檢測,有趣的部分是它可能找不到眼球來檢測眼睛。大多數眼睛檢測算法都使用周圍的皮膚,眼瞼,睫毛和眉毛來進行檢測。

最後我們的輸出:

這很簡單是不是?我們可以看到只有幾行代碼,但我們就開始了人臉檢測,而且預測結果還不錯,如果你真的想深入瞭解計算機視覺及其深度學習,歡迎找我探討交流~


我是沐叔


要調用api接口,建議用face++的,支付寶的人臉識別都是用的這個。可能需要一點費用,不貴,代碼裡把fece++的api接口放進代碼就行,還可以可以檢測情緒,年齡等等的。

當然也有其他公司人臉識別的api接口,自己發現吧,其實很多,但基本都不會免費,有的可以試用


我只在網吧裡學習


要調用api接口,建議用face++的,支付寶的人臉識別都是用的這個。可能需要一點費用,不貴,代碼裡把fece++的api接口放進代碼就行,還可以可以檢測情緒,年齡等等的。

當然也有其他公司人臉識別的api接口,自己發現吧,其實很多,但基本都不會免費,有的可以試用


分享到:


相關文章: