其實這套系統的原理很簡單,本著能夠讓每個人都能讀懂的原則,一定不要用專業的眼光去看這套系統,其實它只不過是用幾個現成的元件拼接而成的。

系統流程如圖:

教你如何製作自己的人臉識別系統

準備工作:攝像頭,Ubuntu系統、python開發環境、網路環境

沒錯,就是這麼簡單,需要準備的東西並不多。這裡你也可以用Windows系統來搭建,只要你高興,怎麼著都行。

安裝python的依賴包

對於python環境,你可以直接透過下載

anaconda

,它是一款python的整合開發環境,裡面包含了大量的python依賴包。接下來會安裝一些anaconda中沒有的依賴包:

face_recognition、OpenaCV、pymysql、wxpy

對於pymysql,可以這麼安裝:

pip install pymysql -i https://pypi。tuna。tsinghua。edu。cn/simple

對於face_recognition和OpenaCV,會比較麻煩

安裝OpenCV

裝一大堆核心:

#Remove any previous installations of x264

sudo apt-get remove x264 libx264-dev

#We will Install dependencies now

sudo apt-get install build-essential checkinstall cmake pkg-config yasmsudo apt-get install git gfortransudo apt-get install libjpeg8-dev libjasper-dev libpng12-dev

# If you are using Ubuntu 14。04

sudo apt-get install libtiff4-dev

# If you are using Ubuntu 16。04

sudo apt-get install libtiff5-dev

sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev

sudo apt-get install libxine2-dev libv4l-dev

sudo apt-get install libgstreamer0。10-dev libgstreamer-plugins-base0。10-dev

sudo apt-get install qt5-default libgtk2。0-dev libtbb-dev

sudo apt-get install libatlas-base-devsudo apt-get install libfaac-dev libmp3lame-dev libtheora-dev

sudo apt-get install libvorbis-dev libxvidcore-dev

sudo apt-get install libopencore-amrnb-dev libopencore-amrwb-dev

sudo apt-get install x264 v4l-utils

# Optional dependencies

sudo apt-get install libprotobuf-dev protobuf-compiler

sudo apt-get install libgoogle-glog-dev libgflags-dev

sudo apt-get install libgphoto2-dev libeigen3-dev libhdf5-dev doxygen

下載opencv包:

git clone https://github。com/opencv/opencv。git

cd opencv

git checkout 3。3。1

cd 。。

下載opencv_contrib包:

git

clone

https

//

github

com

/

opencv

/

opencv_contrib

git

cd

opencv_contrib

git

checkout

3

3

1

cd

。。

開始編譯:

cd opencv

mkdir release

cd release

cmake -DBUILD_TIFF=ON \

-DBUILD_opencv_java=OFF \

-DWITH_CUDA=OFF \

-DWITH_OPENGL=ON \

-DWITH_OPENCL=ON \

-DWITH_IPP=ON \

-DWITH_TBB=ON \

-DWITH_EIGEN=ON \

-DWITH_V4L=ON \

-DWITH_VTK=OFF \

-DBUILD_TESTS=OFF \

-DBUILD_PERF_TESTS=OFF \

-DCMAKE_BUILD_TYPE=RELEASE \

-DCMAKE_INSTALL_PREFIX=$(python -c “import sys; print(sys。prefix)”) \

-DPYTHON3_EXECUTABLE=$(which python) \

-DPYTHON3_INCLUDE_DIR=$(python -c “from distutils。sysconfig import get_python_inc; print(get_python_inc())”) \

-DPYTHON3_PACKAGES_PATH=$(python -c “from distutils。sysconfig import get_python_lib; print(get_python_lib())”) \

。。

make -j4

make install # not sudo, except for Raspberry Pi

#Note: on the Raspberry Pi, consider make -j2 to avoid over-temperature and under-voltage warnings (in general when compiling on Raspberry Pi, not just for OpenCV)。

此時此刻,opencv已經編譯完成了,在你的

/home/[user_name]/anaconda3/lib/python3。6/site-packages/

下會有一個

cv*。so

的檔案,建立一個軟連線到你的虛擬環境下就OK了:

cd /home/[user_name]/anaconda3/lib/python3。6/site-packages/

ln -s /home/[user_name]/anaconda3/lib/python3。6/site-packages/cv2。cpython-36m-x86_64-linux-gnu。so cv2。so

可以開啟ipython來驗證一下:

In [1]: import cv2

In [2]: print(cv2。__version__)

3。3。1-dev

安裝face_recognition

這個比較簡單,官方寫了一份文件非常詳細,可以下載看看:

https://

media。readthedocs。org/p

df/face-recognition/latest/face-recognition。pdf

要說明的是,在看安裝說明時仔細一點。安裝face_recognition之前需要先安裝dlib,文件上都有連結,親測可用,非常順暢。

人臉識別

接下來該編寫一小段程式了,不過不要發慌,程式也有現成的例子,只需要根據自己的需求改一改,就可以了。python語言的優點就是閱讀性很強,基本能看懂英語的都能讀懂程式碼什麼意思,所以這份程式碼的樣例讀起來也很容易,連線在這裡:

https://

github。com/ageitgey/fac

e_recognition/blob/master/examples/facerec_from_webcam_faster。py

上面的註釋是比較詳細的,這裡我挑幾段簡單介紹一下:

video_capture = cv2。VideoCapture(0) ①

# Find all the faces and face encodings in the current frame of video

face_locations = face_recognition。face_locations(small_frame) ②

face_encodings = face_recognition。face_encodings(small_frame, face_locations) ③

第1行是將攝像頭開啟,開始捕捉畫面;第2行是尋找畫面中出現的人臉影象,第3行是提取出人臉影象中的特徵。什麼是特徵?你可以簡單把他理解為電腦為識別出人臉而定製的一套規則,符合這套規則就被認為是人臉。

找出人臉後與預存的人臉進行對比。對比的操作實際上就是計算相似度。首先需要將預存的人臉影象進行向量化,儲存為

numpy.array

格式。當然,為了每次啟動程式時不必重複對預存的圖片向量化,可以將結果進行儲存,用的時候讀取就行。

import os

import face_recognition

import numpy as np

import constants as cons

know_face_path = cons。BASE_FACES_PATH

model_path = cons。MODEL_PATH

time_now = cons。time_str

known_faces = []

known_names = []

for index, file_name in enumerate(sorted(os。listdir(know_face_path))): # 為了呼叫時順序一致

test_image = face_recognition。load_image_file(know_face_path + ‘/’ + file_name)

model = face_recognition。face_encodings(test_image)[0]

np。savetxt(model_path + ‘/’ + time_now + ‘_’ + str(index) + ‘。model’, model)

接下來,開始計算距離,排序,選出在我所設定閾值內的最小值,進行標識:

match = face_recognition。compare_faces(known_faces, face_encoding, tolerance=0。38)

dis = face_recognition。face_distance(known_faces, face_encoding)

name = “Unknown”

id = np。argmin(dis)

if match[id]:

name = known_names[id]。split(‘。’)[0]

好了,這就是程式碼中的主要部分,剩下的就是一些個性化的定製了。比如你可以在檢測到人臉之後,給自己傳送微信訊息,這就用到了

wxpy

登入微信:

# 匯入模組

from wxpy import *

# 初始化機器人,掃碼登入

bot = Bot()

尋找好友:

my_firend = bot。friends()。search(‘張三’, sex=MALE)[0]

傳送訊息:

# 傳送文字給好友

my_friend。send(‘Hello!!!’)

# 傳送圖片

my_friend。send_image(‘my_picture。fig’)

其他的一些好玩的功能可以去github上瞧瞧:

https://

github。com/youfou/wxpy

展示

以上就是製作人臉識別系統的過程,過程相對比較簡單,只要有耐心,都能夠製作完成,尤其是當看到系統正常執行時的心情,如沐浴春風,北京的天都藍了。

以下是我的執行結果圖(為銀行製作,後面搭接一個產品推薦系統):

教你如何製作自己的人臉識別系統