python基於dlib的人臉識別+標記 -开发者知识库

python基於dlib的人臉識別+標記 -开发者知识库,第1张

python基於dlib的face landmarks

python使用dlib進行人臉檢測與人臉關鍵點標記

Dlib簡介:

首先給大家介紹一下Dlib

python基於dlib的人臉識別+標記 -开发者知识库,這里寫圖片描述,第2张

Dlib是一個跨平台的C 公共庫,除了線程支持,網絡支持,提供測試以及大量工具等等優點,Dlib還是一個強大的機器學習的C 庫,包含了許多機器學習常用的算法。同時支持大量的數值算法如矩陣、大整數、隨機數運算等等。

Dlib同時還包含了大量的圖形模型算法。

最重要的是Dlib的文檔和例子都非常詳細。

Dlib主頁:

http://dlib.net/

這篇博客所述的人臉標記的算法也是來自Dlib庫,Dlib實現了One Millisecond Face Alignment with an Ensemble of Regression Trees中的算法(http://www.csc.kth.se/~vahidk/papers/KazemiCVPR14.pdf,作者為Vahid Kazemi 和Josephine Sullivan)

這篇論文非常出名,在谷歌上打上One Millisecond就會自動補全,是CVPR 2014(國際計算機視覺與模式識別會議)上的一篇國際頂級水平的論文。毫秒級別就可以實現相當准確的人臉標記,包括一些半側臉,臉很不清楚的情況,論文本身的算法十分復雜,感興趣的同學可以下載看看。

Dlib實現了這篇最新論文的算法,所以Dlib的人臉標記算法是十分先進的,而且Dlib自帶的人臉檢測庫也很准確,我們項目受到硬件所限,攝像頭拍攝到的畫面比較模糊,而在這種情況下之前嘗試了幾個人臉庫,識別率都非常的低,而Dlib的效果簡直出乎意料。

相對於C 我還是比較喜歡使用Python,同時Dlib也是支持python的,只是在配置的時候碰了不少釘子,網上大部分的Dlib資料都是針對於C 的,我好不容易才配置好了python的dlib,這里分享給大家:

Dlib for python 配置:

因為是用python去開發計算機視覺方面的東西,python的這些科學計算庫是必不可少的,這里我把常用的科學計算庫的安裝也涵蓋在內了,已經安裝過這些庫的同學就可以忽略了。

我的環境是Ubuntu14.04:

大家都知道Ubuntu是自帶python2.7的,而且很多Ubuntu系統軟件都是基於python2.7的,有一次我系統的python版本亂了,我腦殘的想把python2.7卸載了重裝,然后……好像是提醒我要卸載幾千個軟件來着,沒看好直接回車了,等我反應過來Ctrl C 的時候系統已經沒了一半了…

所以我發現想要搞崩系統,這句話比rm -rf 還給力…

sudo apt-get remove python2.7
    
    
   
   
  • 1
  • 1

首先安裝兩個python第三方庫的下載安裝工具,ubuntu14.04好像是預裝了easy_install

以下過程都是在終端中進行:

1.安裝pip

sudo apt-get install python-pip
    
    
   
   
  • 1
  • 1

2.安裝easy-install

sudo apt-get install python-setuptools
    
    
   
   
  • 1
  • 1

3.測試一下easy_install

有時候系統環境復雜了,安裝的時候會安裝到別的python版本上,這就麻煩了,所以還是謹慎一點測試一下,這里安裝一個我之前在博客中提到的可以模擬瀏覽器的第三方python庫測試一下。

sudo easy_install Mechanize
    
    
   
   
  • 1
  • 1

4.測試安裝是否成功

在終端輸入python進入python shell

python
    
    
   
   
  • 1
  • 1

進入python shell后import一下剛安裝的mechanize

>>>import mechanize
    
    
   
   
  • 1
  • 1

沒有報錯,就是安裝成功了,如果說沒有找到,那可能就是安裝到別的python版本的路徑了。

同時也測試一下PIL這個基礎庫

>>>import PIL
    
    
   
   
  • 1
  • 1

沒有報錯的話,說明PIL已經被預裝過了

5.安裝numpy

接下來安裝numpy

首先需要安裝python-dev才可以編譯之后的擴展庫

sudo apt-get install python-dev
    
    
   
   
  • 1
  • 1

之后就可以用easy-install 安裝numpy了

sudo easy_install numpy
    
    
   
   
  • 1
  • 1

這里有時候用easy-install 安裝numpy下載的時候會卡住,那就只能用 apt-get 來安裝了:

sudo apt-get install numpy
    
    
   
   
  • 1
  • 1

不推薦這樣安裝的原因就是系統環境或者說python版本多了之后,直接apt-get安裝numpy很有可能不知道裝到哪個版本去了,然后就很麻煩了,我有好幾次遇到這個問題,不知道是運氣問題還是什么,所以風險還是很大的,所以還是盡量用easy-install來安裝。

同樣import numpy 進行測試

python


>>>import numpy
    
    
   
   
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

沒有報錯的話就是成功了

下面的安裝過程同理,我就從簡寫了,大家自己每步別忘了測試一下

6.安裝scipy

sudo apt-get install python-scipy
    
    
   
   
  • 1
  • 1

7.安裝matplotlib

sudo apt-get install python-matplotlib
    
    
   
   
  • 1
  • 1

8.安裝dlib

我當時安裝dlib的過程簡直太艱辛,網上各種說不知道怎么配,配不好,我基本把stackoverflow上的方法試了個遍,才最終成功編譯出來並且導入,不過聽說18.18更新之后有了setup.py,那真是極好的,18.18我沒有親自配過也不能亂說,這里給大家分享我配置18.17的過程吧:

1.首先必須安裝libboost,不然是不能使用.so庫的

sudo apt-get install libboost-python-dev cmake
    
    
   
   
  • 1
  • 1

2.到Dlib的官網上下載dlib,會下載下來一個壓縮包,里面有C 版的dlib庫以及例子文檔,Python dlib庫的代碼例子等等

python基於dlib的人臉識別+標記 -开发者知识库,這里寫圖片描述,第3张

我使用的版本是dlib-18.17,大家也可以在我這里下載:

http://download.csdn.net/detail/sunmc1204953974/9289913

之后進入python_examples下使用bat文件進行編譯,編譯需要先安裝libboost-python-dev和cmake

cd to dlib-18.17/python_examples

./compile_dlib_python_module.bat 
    
    
   
   
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

之后會得到一個dlib.so,復制到dist-packages目錄下即可使用

這里大家也可以直接用我編譯好的.so庫,但是也必須安裝libboost才可以,不然python是不能調用so庫的,下載地址:

http://download.csdn.net/detail/sunmc1204953974/9288259

將.so復制到dist-packages目錄下

sudo cp dlib.so /usr/local/lib/python2.7/dist-packages/
    
    
   
   
  • 1
  • 1

最新的dlib18.18好像就沒有這個bat文件了,取而代之的是一個setup文件,那么安裝起來應該就沒有這么麻煩了,大家可以去直接安裝18.18,也可以直接下載復制我的.so庫,這兩種方法應該都不麻煩~

有時候還會需要下面這兩個庫,建議大家一並安裝一下

9.安裝skimage

sudo apt-get install python-skimage
    
    
   
   
  • 1
  • 1

10.安裝imtools

sudo easy_install imtools
    
    
   
   
  • 1
  • 1

Dlib face landmarks Demo

環境配置結束之后,我們首先看一下dlib提供的示例程序

1.人臉檢測

dlib-18.17/python_examples/face_detector.py 源程序:


#!/usr/bin/python
# The contents of this file are in the public domain. See LICENSE_FOR_EXAMPLE_PROGRAMS.txt
#
# This example program shows how to find frontal human faces in an image. In
# particular, it shows how you can take a list of images from the command
# line and display each on the screen with red boxes overlaid on each human
# face.
#
# The examples/faces folder contains some jpg images of people. You can run
# this program on them and see the detections by executing the
# following command:
# ./face_detector.py ../examples/faces/*.jpg
#
# This face detector is made using the now classic Histogram of Oriented
# Gradients (HOG) feature combined with a linear classifier, an image
# pyramid, and sliding window detection scheme. This type of object detector
# is fairly general and capable of detecting many types of semi-rigid objects
# in addition to human faces. Therefore, if you are interested in making
# your own object detectors then read the train_object_detector.py example
# program. 
#
#
# COMPILING THE DLIB PYTHON INTERFACE
# Dlib comes with a compiled python interface for python 2.7 on MS Windows. If
# you are using another python version or operating system then you need to
# compile the dlib python interface before you can use this file. To do this,
# run compile_dlib_python_module.bat. This should work on any operating
# system so long as you have CMake and boost-python installed.
# On Ubuntu, this can be done easily by running the command:
# sudo apt-get install libboost-python-dev cmake
#
# Also note that this example requires scikit-image which can be installed
# via the command:
# pip install -U scikit-image
# Or downloaded from http://scikit-image.org/download.html. 

import sys

import dlib

from skimage import io

detector = dlib.get_frontal_face_detector()

win = dlib.image_window()

print("a");

for f in sys.argv[1:]:

    print("a");

    print("Processing file: {}".format(f))
    img = io.imread(f)
    # The 1 in the second argument indicates that we should upsample the image
    # 1 time.  This will make everything bigger and allow us to detect more
    # faces.
    dets = detector(img, 1)
    print("Number of faces detected: {}".format(len(dets)))
    for i, d in enumerate(dets):
        print("Detection {}: Left: {} Top: {} Right: {} Bottom: {}".format(
            i, d.left(), d.top(), d.right(), d.bottom()))

    win.clear_overlay()
    win.set_image(img)
    win.add_overlay(dets)
    dlib.hit_enter_to_continue()


# Finally, if you really want to you can ask the detector to tell you the score
# for each detection. The score is bigger for more confident detections.
# Also, the idx tells you which of the face sub-detectors matched. This can be
# used to broadly identify faces in different orientations.

if (len(sys.argv[1:]) > 0):
    img = io.imread(sys.argv[1])
    dets, scores, idx = detector.run(img, 1)
    for i, d in enumerate(dets):
        print("Detection {}, score: {}, face_type:{}".format(
            d, scores[i], idx[i]))
    
    
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 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
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 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
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81

我把源代碼精簡了一下,加了一下注釋: face_detector0.1.py

# -*- coding: utf-8 -*-

import sys

import dlib

from skimage import io


#使用dlib自帶的frontal_face_detector作為我們的特征提取器
detector = dlib.get_frontal_face_detector()

#使用dlib提供的圖片窗口
win = dlib.image_window()

#sys.argv[]是用來獲取命令行參數的,sys.argv[0]表示代碼本身文件路徑,所以參數從1開始向后依次獲取圖片路徑
for f in sys.argv[1:]:

    #輸出目前處理的圖片地址
    print("Processing file: {}".format(f))

    #使用skimage的io讀取圖片
    img = io.imread(f)

    #使用detector進行人臉檢測 dets為返回的結果
    dets = detector(img, 1)

    #dets的元素個數即為臉的個數
    print("Number of faces detected: {}".format(len(dets)))

    #使用enumerate 函數遍歷序列中的元素以及它們的下標
    #下標i即為人臉序號
    #left:人臉左邊距離圖片左邊界的距離 ;right:人臉右邊距離圖片左邊界的距離 
    #top:人臉上邊距離圖片上邊界的距離 ;bottom:人臉下邊距離圖片上邊界的距離
    for i, d in enumerate(dets):
        print("dets{}".format(d))
        print("Detection {}: Left: {} Top: {} Right: {} Bottom: {}"
            .format( i, d.left(), d.top(), d.right(), d.bottom()))

    #也可以獲取比較全面的信息,如獲取人臉與detector的匹配程度
    dets, scores, idx = detector.run(img, 1)
    for i, d in enumerate(dets):
        print("Detection {}, dets{},score: {}, face_type:{}".format( i, d, scores[i], idx[i]))    

    #繪制圖片(dlib的ui庫可以直接繪制dets)
    win.set_image(img)
    win.add_overlay(dets)

    #等待點擊
    dlib.hit_enter_to_continue()
    
    
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50

分別測試了一個人臉的和多個人臉的,以下是運行結果:

運行的時候把圖片文件路徑加到后面就好了

python face_detector0.1.py ./data/3.jpg

    
    
   
   
  • 1
  • 2
  • 1
  • 2

一張臉的:

python基於dlib的人臉識別+標記 -开发者知识库,這里寫圖片描述,第4张

兩張臉的:

python基於dlib的人臉識別+標記 -开发者知识库,這里寫圖片描述,第5张

這里可以看出側臉與detector的匹配度要比正臉小的很多

2.人臉關鍵點提取

人臉檢測我們使用了dlib自帶的人臉檢測器(detector),關鍵點提取需要一個特征提取器(predictor),為了構建特征提取器,預訓練模型必不可少。

除了自行進行訓練外,還可以使用官方提供的一個模型。該模型可從dlib sourceforge庫下載:

http://sourceforge.net/projects/dclib/files/dlib/v18.10/shape_predictor_68_face_landmarks.dat.bz2

也可以從我的連接下載:

http://download.csdn.net/detail/sunmc1204953974/9289949

這個庫支持68個關鍵點的提取,一般來說也夠用了,如果需要更多的特征點就要自己去訓練了。

dlib-18.17/python_examples/face_landmark_detection.py 源程序:

#!/usr/bin/python
# The contents of this file are in the public domain. See LICENSE_FOR_EXAMPLE_PROGRAMS.txt
#
# This example program shows how to find frontal human faces in an image and
# estimate their pose. The pose takes the form of 68 landmarks. These are
# points on the face such as the corners of the mouth, along the eyebrows, on
# the eyes, and so forth.
#
# This face detector is made using the classic Histogram of Oriented
# Gradients (HOG) feature combined with a linear classifier, an image pyramid,
# and sliding window detection scheme. The pose estimator was created by
# using dlib's implementation of the paper:
# One Millisecond Face Alignment with an Ensemble of Regression Trees by
# Vahid Kazemi and Josephine Sullivan, CVPR 2014
# and was trained on the iBUG 300-W face landmark dataset.
#
# Also, note that you can train your own models using dlib's machine learning
# tools. See train_shape_predictor.py to see an example.
#
# You can get the shape_predictor_68_face_landmarks.dat file from:
# http://sourceforge.net/projects/dclib/files/dlib/v18.10/shape_predictor_68_face_landmarks.dat.bz2
#
# COMPILING THE DLIB PYTHON INTERFACE
# Dlib comes with a compiled python interface for python 2.7 on MS Windows. If
# you are using another python version or operating system then you need to
# compile the dlib python interface before you can use this file. To do this,
# run compile_dlib_python_module.bat. This should work on any operating
# system so long as you have CMake and boost-python installed.
# On Ubuntu, this can be done easily by running the command:
# sudo apt-get install libboost-python-dev cmake
#
# Also note that this example requires scikit-image which can be installed
# via the command:
# pip install -U scikit-image
# Or downloaded from http://scikit-image.org/download.html. 

import sys
import os
import dlib
import glob
from skimage import io

if len(sys.argv) != 3:
    print(
        "Give the path to the trained shape predictor model as the first "
        "argument and then the directory containing the facial images.\n"
        "For example, if you are in the python_examples folder then "
        "execute this program by running:\n"
        " ./face_landmark_detection.py shape_predictor_68_face_landmarks.dat ../examples/faces\n"
        "You can download a trained facial shape predictor from:\n"
        " http://sourceforge.net/projects/dclib/files/dlib/v18.10/shape_predictor_68_face_landmarks.dat.bz2")
    exit()

predictor_path = sys.argv[1]
faces_folder_path = sys.argv[2]

detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor(predictor_path)
win = dlib.image_window()

for f in glob.glob(os.path.join(faces_folder_path, "*.jpg")):
    print("Processing file: {}".format(f))
    img = io.imread(f)

    win.clear_overlay()
    win.set_image(img)

    # Ask the detector to find the bounding boxes of each face. The 1 in the
    # second argument indicates that we should upsample the image 1 time. This
    # will make everything bigger and allow us to detect more faces.
    dets = detector(img, 1)
    print("Number of faces detected: {}".format(len(dets)))
    for k, d in enumerate(dets):
        print("Detection {}: Left: {} Top: {} Right: {} Bottom: {}".format(
            k, d.left(), d.top(), d.right(), d.bottom()))
        # Get the landmarks/parts for the face in box d.
        shape = predictor(img, d)
        print("Part 0: {}, Part 1: {} ...".format(shape.part(0),
                                                  shape.part(1)))
        # Draw the face landmarks on the screen.
        win.add_overlay(shape)

    win.add_overlay(dets)
    dlib.hit_enter_to_continue()
    
    
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 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
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 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
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84

精簡注釋版: face_landmark_detection0.1.py

# -*- coding: utf-8 -*-

import dlib

import numpy

from skimage import io

#源程序是用sys.argv從命令行參數去獲取訓練模型,精簡版我直接把路徑寫在程序中了
predictor_path = "./data/shape_predictor_68_face_landmarks.dat"

#源程序是用sys.argv從命令行參數去獲取文件夾路徑,再處理文件夾里的所有圖片
#這里我直接把圖片路徑寫在程序里了,每運行一次就只提取一張圖片的關鍵點
faces_path = "./data/3.jpg"

#與人臉檢測相同,使用dlib自帶的frontal_face_detector作為人臉檢測器
detector = dlib.get_frontal_face_detector()

#使用官方提供的模型構建特征提取器
predictor = dlib.shape_predictor(predictor_path)

#使用dlib提供的圖片窗口
win = dlib.image_window()

#使用skimage的io讀取圖片
img = io.imread(faces_path)

#繪制圖片
win.clear_overlay()
win.set_image(img)

 #與人臉檢測程序相同,使用detector進行人臉檢測 dets為返回的結果
dets = detector(img, 1)

#dets的元素個數即為臉的個數
print("Number of faces detected: {}".format(len(dets)))

#使用enumerate 函數遍歷序列中的元素以及它們的下標
#下標k即為人臉序號
#left:人臉左邊距離圖片左邊界的距離 ;right:人臉右邊距離圖片左邊界的距離 
#top:人臉上邊距離圖片上邊界的距離 ;bottom:人臉下邊距離圖片上邊界的距離
for k, d in enumerate(dets):
    print("dets{}".format(d))
    print("Detection {}: Left: {} Top: {} Right: {} Bottom: {}".format(
    k, d.left(), d.top(), d.right(), d.bottom()))

    #使用predictor進行人臉關鍵點識別 shape為返回的結果
    shape = predictor(img, d)

    #獲取第一個和第二個點的坐標(相對於圖片而不是框出來的人臉)
    print("Part 0: {}, Part 1: {} ...".format(shape.part(0),  shape.part(1)))

    #繪制特征點
    win.add_overlay(shape)

#繪制人臉框
win.add_overlay(dets)


#也可以這樣來獲取(以一張臉的情況為例)
#get_landmarks()函數會將一個圖像轉化成numpy數組,並返回一個68 x2元素矩陣,輸入圖像的每個特征點對應每行的一個x,y坐標。
def get_landmarks(im):

    rects = detector(im, 1)

    return numpy.matrix([[p.x, p.y] for p in predictor(im, rects[0]).parts()])

#多張臉使用的一個例子
def get_landmarks_m(im):

    dets = detector(im, 1)

    #臉的個數
    print("Number of faces detected: {}".format(len(dets)))

    for i in range(len(dets)):

        facepoint = np.array([[p.x, p.y] for p in predictor(im, dets[i]).parts()])

        for i in range(68):

            #標記點
            im[facepoint[i][1]][facepoint[i][0]] = [232,28,8]        

    return im    

#打印關鍵點矩陣
print("face_landmark:")

print(get_landmarks(img))

#等待點擊
dlib.hit_enter_to_continue()

    
    
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 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
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 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
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94

運行的時候從代碼里寫好模型地址以及圖片地址,以下是運行結果:

python基於dlib的人臉識別+標記 -开发者知识库,這里寫圖片描述,第6张

命令行輸出:

sora@sora:~/SORA/workspace/Project/face_landmark$ python face_landmark_detection0.2.py 
Number of faces detected: 1
dets[(113, 27) (267, 182)]
Detection 0: Left: 113 Top: 27 Right: 267 Bottom: 182
Part 0: (114, 58), Part 1: (115, 79) ...
face_landmark:
[[114  58]
 [115  79]
 [117  99]
 [121 119]
 [128 137]
 [140 154]
 [154 169]
 [169 182]
 [186 185]
 [202 181]
 [217 169]
 [233 155]
 [246 140]
 [256 122]
 [261 102]
 [264  81]
 [264  60]
 [127  60]
 [138  56]
 [151  57]
 [163  60]
 [175  66]
 [205  66]
 [217  62]
 [228  59]
 [239  57]
 [250  61]
 [191  79]
 [192  95]
 [192 111]
 [192 126]
 [176 127]
 [183 131]
 [191 134]
 [198 132]
 [204 128]
 [142  74]
 [151  69]
 [161  70]
 [169  78]
 [160  80]
 [149  79]
 [210  79]
 [217  71]
 [228  71]
 [236  76]
 [229  81]
 [219  81]
 [161 142]
 [173 143]
 [183 142]
 [190 145]
 [197 144]
 [206 145]
 [215 146]
 [205 156]
 [196 160]
 [188 161]
 [180 160]
 [171 155]
 [165 144]
 [182 149]
 [189 150]
 [197 150]
 [211 147]
 [196 150]
 [189 151]
 [181 149]]
Hit enter to continue

    
    
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 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
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 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
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76

多張臉時的運行結果:

python基於dlib的人臉識別+標記 -开发者知识库,這里寫圖片描述,第7张

最佳答案:

本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复