您好,登錄后才能下訂單哦!
小編給大家分享一下python如何利用dlib獲取人臉的68個landmark,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
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è)資訊頻道!
免責(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)容。