您好,登錄后才能下訂單哦!
小編給大家分享一下python3怎么利用Dlib19.7實現人臉68個特征點標定,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
0.引言
利用Dlib官方訓練好的模型“shape_predictor_68_face_landmarks.dat”進行68點標定,利用OpenCv進行圖像化處理,在人臉上畫出68個點,并標明序號;
實現的68個特征點標定功能如下圖所示:
圖1 人臉68個特征點的標定
1.開發環境
python:3.6.3
dlib:19.7
OpenCv, numpy
需要調用的庫:
import dlib #人臉識別的庫dlib import numpy as np #數據處理的庫numpy import cv2 #圖像處理的庫OpenCv
2.設計流程
工作內容主要以下兩大塊:68點標定和OpenCv繪點
68點標定:
借助官方的Demo(face_landmark_detection.py,在之前另一篇博客里面介紹過學習Python3 Dlib19.7進行人臉面部識別)實現;
OpenCv繪點:
介紹了用到的 畫圓函數cv2.circle() 和 輸出字符串函數 cv2.putText() ;
流程:
1.調用dlib庫來進行人臉識別,調用預測器“shape_predictor_68_face_landmarks.dat”進行68點標定
2.存入68個點坐標
3.利用cv2.circle來畫68個點
4.利用cv2.putText()函數來畫數字1-68
3.源碼
# 68-points # 2017-12-28 # By TimeStamp # #cnblogs: http://www.cnblogs.com/AdaminXie/ import dlib #人臉識別的庫dlib import numpy as np #數據處理的庫numpy import cv2 #圖像處理的庫OpenCv # dlib預測器 detector = dlib.get_frontal_face_detector() predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat') path="********************" # cv2讀取圖像 img=cv2.imread(path+"test.jpg") # 取灰度 img_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) # 人臉數rects rects = detector(img_gray, 0) for i in range(len(rects)): landmarks = np.matrix([[p.x, p.y] for p in predictor(img, rects[i]).parts()]) for idx, point in enumerate(landmarks): # 68點的坐標 pos = (point[0, 0], point[0, 1]) # 利用cv2.circle給每個特征點畫一個圈,共68個 cv2.circle(img, pos, 5, color=(0, 255, 0)) # 利用cv2.putText輸出1-68 font = cv2.FONT_HERSHEY_SIMPLEX cv2.putText(img, str(idx+1), pos, font, 0.8, (0, 0, 255), 1, cv2.LINE_AA) cv2.namedWindow("img", 2) cv2.imshow("img", img) cv2.waitKey(0)
note:OpenCv的畫圖函數
1. 畫圓 cv2.circle( img, (p1,p2), r, (255,255,255) )
參數1: img- 圖片對象;
參數2: (p1,p2)- 圓心坐標;
參數3: r- 半徑;
參數4: (255,255,255)- 顏色數組;
2. 輸出字符 cv2.putText( img,"test", (p1,p2), font, 4, (255,255,255), 2, cv2, LINE_AA )
參數1: img- 圖像對象;
參數2: "test"- 需要打印的字符text(數字的話可以利用str()轉成字符);
參數3: (p1,p2)- 坐標textOrg;
參數4: font- 字體fontFace(注意這里 font = cv2.FONT_HERSHEY_SIMPLEX);
參數5: 4- 字號fontScale;
參數6: (255,255,255)- 顏色數組;
參數7: 2- 線寬thickness;
參數8: LINE_AA- 線條種類line_type;
*關于 顏色數組:
(255,255,255), (藍色,綠色,紅色),每個值都是0-255;
比如:藍色(255,0,0),紫色(255,0,255)
可以調整cv2.circle()函數和cv2.putText()函數中的 半徑、線寬 等參數使得輸出滿足需求方便查看;
結果:
圖2 測試結果1
以上是“python3怎么利用Dlib19.7實現人臉68個特征點標定”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。