1. 程式人生 > >『開發技術』Windows極簡安裝使用face_recognition

『開發技術』Windows極簡安裝使用face_recognition

face_recognition是一個強大、簡單、易上手的人臉識別開源專案,並且配備了完整的開發文件和應用案例,特別是相容樹莓派系統。此專案是世界上最簡潔的人臉識別庫,你可以使用Python和命令列工具提取、識別、操作人臉。

本專案的人臉識別是基於業內領先的C++開源庫 dlib中的深度學習模型,用Labeled Faces in the Wild人臉資料集進行測試,有高達99.38%的準確率。但對小孩和亞洲人臉的識別準確率尚待提升。

開源地址:https://github.com/ageitgey/face_recognition

 1.問題描述

在Windows使用此face_recognition專案時,由於官方不提供Windows版本:安裝時總是遇到不同問題。

不同作業系統的安裝方法

在 Mac 或者 Linux上安裝本專案

First, make sure you have dlib already installed with Python bindings:

第一步,安裝dlib和相關Python依賴:

  • 如何在macOS或者Ubuntu上安裝dlib

Then, install this module from pypi using pip3 (or pip2 for Python 2):

pip3 install face_recognition

如果你遇到了么蛾子,可以用Ubuntu虛擬機器安裝本專案,看下面這個教程。 如何使用Adam Geitgey大神提供的Ubuntu虛擬機器映象檔案安裝配置虛擬機器,本專案已經包含在映象中.

在 Mac 或者 Linux上安裝本專案 2

修改你的pip映象源為清華映象,然後使用pip install face_recognition,可以自動幫你安裝各種依賴,包括dlib。只是在安裝dlib的時候可能會出問題,因為dlib需要編譯,出現的問題一般是gcc或者g++版本的問題,所以在pip install face_recognition之前,可以通過在命令列鍵入

export CC=/usr/local/bin/gcc
export CXX=/usr/local/bin/g++  

來指定你gcc和g++對應的位置,(這兩句話會臨時修改當前終端的環境變數/usr/local/bin/gcc對應你自己gcc或者g++所在目錄)。

在樹莓派上安裝

  • 樹莓派安裝指南

在Windows上安裝

雖然本專案官方並不支援Windows,但一些大神們摸索出了在Windows上執行本專案的方法:

  • @masoudr寫的教程:如何在Win10系統上安裝 dlib庫和 face_recognition專案

使用Ubuntu虛擬機器映象檔案安裝配置虛擬機器,本專案已經包含在這個映象中

  • 如何使用Adam Geitgey大神提供的Ubuntu虛擬機器映象檔案安裝配置虛擬機器,本專案已經包含在映象中(需要電腦中安裝VMWare Player 或者 VirtualBox)

 使用conda和pip都無法直接安裝。

2.問題解決

經過不斷嘗試,最終選擇用pip安裝指定版本dlib==19.7.0,再安裝face_recognition。(如果需要請自行安裝Cmake):

pip install dlib==19.7.0
pip install face_recognition

3.簡單使用

face_recognition基於dli封裝很多常用人臉識別相關演算法,這裡舉兩個常用例子

1).人臉檢測

import face_recognition
import cv2
img_path = "gril.jpg"
imgs = cv2.imread(img_path,cv2.IMREAD_COLOR)

face_locations = face_recognition.face_locations(imgs)
print(face_locations)

cv2.rectangle(imgs,(face_locations[0][1],face_locations[0][0]),(face_locations[0][3],face_locations[0][2]),color=(0,255,0))

while True:
    cv2.imshow('image',imgs)
    if(cv2.waitKey(0)==27):
        break
    else:
        cv2.imwrite("save.jpg",imgs)

cv2.destroyAllWindows()

如右圖所示。

2).人臉比對(識別)

人臉識別原理其實很容易理解,就是對人臉提取特徵,再對特徵進行相似度(或者距離比對),最後選取合適閾值來判斷是否為同一人

程式碼一,兩張劉亦菲照片:輸出 [True]

import face_recognition
known_image = face_recognition.load_image_file("lyf.jpg")
unknown_image = face_recognition.load_image_file("lyf1.jpg")

biden_encoding = face_recognition.face_encodings(known_image)[0]
unknown_encoding = face_recognition.face_encodings(unknown_image)[0]

results = face_recognition.compare_faces([biden_encoding], unknown_encoding)

print(results)

程式碼二,劉亦菲與郭富城:輸出 [False]

import face_recognition
known_image = face_recognition.load_image_file("lyf1.jpg")
unknown_image = face_recognition.load_image_file("gfc.jpg")

biden_encoding = face_recognition.face_encodings(known_image)[0]
unknown_encoding = face_recognition.face_encodings(unknown_image)[0]

results = face_recognition.compare_faces([biden_encoding], unknown_encoding)

print(results)