python通過Dlib庫實現人臉68點特徵點標記

2021-10-02 20:39:42 字數 4507 閱讀 5955

import cv2                    # 影象處理庫

import dlib # 人臉識別庫

from skimage import io # 影象處理庫

功能:人臉檢測畫框

引數:無

返回值:預設的人臉檢測器

detector = dlib.get_frontal_face_detector(

)print

(detector)

#

predictor = dlib.shape_predictor(

"shape_predictor_68_face_landmarks.dat"

)print

(predictor)

#

skimage.io.imread: 直接返回numpy.ndarray 物件,通道順序為rgb(注意cv2.imread()生成的是bgr),通道值預設範圍0-255。

cv2.cvtcolor(p1,p2) 是顏色空間轉換函式,p1是需要轉換的,p2是轉換成何種格式。

cv2.color_bgr2rgb 將bgr格式轉換成rgb格式

cv2.color_bgr2gray 將bgr格式轉換成灰度

dets = detector(img, 0)

# 特徵提取器的例項化

dets = detector(img,0)

print

(dets)

print

("人臉數:"

,len

(dets)

)# rectangles[[(62, 62) (211, 211)]]

# 人臉數: 1

shape = predictor(img, d)

功能:定位人臉關鍵點

引數:img:乙個numpy ndarray,包含8位灰度或rgb影象

d:開始內部形狀**的邊界框

返回值:68個關鍵點的位置

shape = predictor(img, d)

print

(shape)

#

cv2.circle(img,

(shape.part(i)

.x, shape.part(i)

.y),2,

(0,255,0

),-1,1)

cv2.circle(img, center, radius, color[, thickness[, linetype[, shift]]])

引數說明

center:圓心位置

radius:圓的半徑

color:圓的顏色

thickness:圓形輪廓的粗細(如果為正)。負厚度表示要繪製實心圓。

linetype: 圓邊界的型別。

shift:中心座標和半徑值中的小數字數。

cv2.puttext(img,

str(i)

,(shape.part(i)

.x, shape.part(i)

.y), cv2.font_hershey_******x,

0.5,

(255

,255

,255

))

puttext(img, text, org, fontface, fontscale, color[, thickness[, linetype[, bottomleftorigin]]]) -> img

文字內容,起點座標,字型,字型大小,顏色,線寬,線型別(cv2.line_aa)

函式cv2.imshow() 顯示影象,視窗會自動調整為影象大小。第乙個引數是視窗的名字,其次才是我們的影象。你可以建立多個視窗,只要你喜歡,但是必須給他們不同的名字。

cv2.imshow(

'face_detector_68'

, img)

關於cv2.waitkey()的詳細說明

import cv2                    # 影象處理庫

import dlib # 人臉識別庫

from skimage import io # 影象處理庫

# 使用特徵提取器get_frontal_face_detector

detector = dlib.get_frontal_face_detector(

)# dlib的68點模型,使用官方訓練好的特徵**器

predictor = dlib.shape_predictor(

"shape_predictor_68_face_landmarks.dat"

)# 所在路徑

# 特徵提取器的例項化

dets = detector(img,0)

print

("人臉數:"

,len

(dets)

)for k, d in

enumerate

(dets)

:print

("第"

, k+1,

"個人臉d的座標:"

,"left:"

, d.left(),

"right:"

, d.right(),

"top:"

, d.top(),

"bottom:"

, d.bottom())

width = d.right(

)- d.left(

) heigth = d.bottom(

)- d.top(

)print

('人臉面積為:'

,(width*heigth)

)# 利用**器**

shape = predictor(img, d)

# print(shape)

# 標出68個點的位置

for i in

range(68

):cv2.circle(img,

(shape.part(i)

.x, shape.part(i)

.y),2,

(0,255,0

),-1

,1) cv2.puttext(img,

str(i)

,(shape.part(i)

.x, shape.part(i)

.y), cv2.font_hershey_******x,

0.5,

(255

,255

,255))

# 顯示一下處理的,然後銷毀視窗

dlib庫的學習

dlib庫支援cnn演算法,有python版本和c 版本,先實現python版本,再實現c 版本,最後實現android版本。注意,還需要安裝libx11 dev庫,使用命令 sudo apt get install libx11 dev在dlib 19.15目錄下執行命令 mkdir build ...

dlib庫的安裝

t1方法 pip install dlib 此方法是需要在你安裝cmake boost環境的計算機使用 1 使用pip install cmake安裝cmake庫 2 使用pip install boost安裝boost庫 t2方法 conda install c menpo dlib 19.10 ...

python中dlib人臉識別庫安裝歷險記

dlib是一款出色的人臉識別庫,這個庫將很多常用的人臉識別演算法都封裝成為函式,而且是跨平台的庫,支援在cpp和python中被呼叫。dlib庫是建立在其他的庫打基礎進行使用的,這些庫主要有 opencv,boost庫等 在windows下安裝直接輸入 pip install dlib 由於wind...