溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

python如何利用dlib獲取人臉的68個landmark

發(fā)布時間:2021-05-11 10:59:53 來源:億速云 閱讀:485 作者:小新 欄目:開發(fā)技術(shù)

小編給大家分享一下python如何利用dlib獲取人臉的68個landmark,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

python的五大特點是什么

python的五大特點:1.簡單易學(xué),開發(fā)程序時,專注的是解決問題,而不是搞明白語言本身。2.面向?qū)ο螅c其他主要的語言如C++和Java相比, Python以一種非常強大又簡單的方式實現(xiàn)面向?qū)ο缶幊獭?.可移植性,Python程序無需修改就可以在各種平臺上運行。4.解釋性,Python語言寫的程序不需要編譯成二進(jìn)制代碼,可以直接從源代碼運行程序。5.開源,Python是 FLOSS(自由/開放源碼軟件)之一。

(1) 單人臉情況

import cv2
import dlib

path = "1.jpg"
img = cv2.imread(path)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

#人臉檢測畫框
detector = dlib.get_frontal_face_detector()
# 獲取人臉關(guān)鍵點檢測器
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
#獲取人臉框位置信息
dets = detector(gray, 1)#1表示采樣(upsample)次數(shù) 0識別的人臉少點,1識別的多點,2識別的更多,小臉也可以識別
for face in dets:
  shape = predictor(img, face) # 尋找人臉的68個標(biāo)定點
  # 遍歷所有點,打印出其坐標(biāo),并圈出來
  for pt in shape.parts():
    pt_pos = (pt.x, pt.y)
    cv2.circle(img, pt_pos, 2, (0, 0, 255), 1)#img, center, radius, color, thickness

  cv2.imshow("image", img)

cv2.waitKey(0)
cv2.destroyAllWindows()

(2) 多人臉情況

import cv2
import dlib

path2 = "zxc.jpg"
img = cv2.imread(path2)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

#人臉檢測畫框
detector = dlib.get_frontal_face_detector()
# 獲取人臉關(guān)鍵點檢測器
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
#獲取人臉框位置信息
dets = detector(gray, 1)#1表示采樣(upsample)次數(shù) 0識別的人臉少點,1識別的多點,2識別的更多,小臉也可以識別

for i in range(len(dets)):
  shape = predictor(img, dets[i]) # 尋找人臉的68個標(biāo)定點
  # 遍歷所有點,打印出其坐標(biāo),并圈出來
  for pt in shape.parts():
    pt_pos = (pt.x, pt.y)
    cv2.circle(img, pt_pos, 2, (0, 0, 255), 1)#img, center, radius, color, thickness

cv2.imshow("image", img)

cv2.waitKey(0)#等待鍵盤輸入
cv2.destroyAllWindows()

(3) 獲取電腦攝像頭實時識別標(biāo)定

import cv2
import dlib
import numpy as np

cap = cv2.VideoCapture(0)#打開筆記本的內(nèi)置攝像頭,若參數(shù)是視頻文件路徑則打開視頻
cap.isOpened()

def key_points(img):
  points_keys = []
  PREDICTOR_PATH = "shape_predictor_68_face_landmarks.dat"
  detector = dlib.get_frontal_face_detector()
  predictor = dlib.shape_predictor(PREDICTOR_PATH)
  rects = detector(img,1)

  for i in range(len(rects)):
    landmarks = np.matrix([[p.x,p.y] for p in predictor(img,rects[i]).parts()])
    for point in landmarks:
      pos = (point[0,0],point[0,1])
      points_keys.append(pos)
      cv2.circle(img,pos,2,(255,0,0),-1)
  return img

while(True):
  ret, frame = cap.read()#按幀讀取視頻,ret,frame是cap.read()方法的兩個返回值。其中ret是布爾值,如果讀取幀是正確的則返回True,如果文件讀取到結(jié)尾,它的返回值就為False。frame就是每一幀的圖像,是個三維矩陣。
  # gray = cv2.cvtColor(frame)
  face_key = key_points(frame)
  cv2.imshow('frame',face_key)
  if cv2.waitKey(1) & 0xFF == ord('q'):
    break

cap.release()#釋放攝像頭
cv2.destroyAllWindows()#關(guān)閉所有圖像窗口

以上是“python如何利用dlib獲取人臉的68個landmark”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI