python3利用Dlib19.7實現人臉68個特徵點標定,python3dlib19.7

來源:互聯網
上載者:User

python3利用Dlib19.7實現人臉68個特徵點標定,python3dlib19.7

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 #Face Service的庫dlibimport numpy as np #資料處理的庫numpyimport cv2 #影像處理的庫OpenCv

2.設計流程

工作內容主要以下兩大塊:68點標定OpenCv繪點

68點標定:

藉助官方的Demo(face_landmark_detection.py,在之前另一篇部落格裡面介紹過學習Python3 Dlib19.7進行人臉臉部辨識)實現;

OpenCv繪點:

介紹了用到的 畫圓函數cv2.circle() 和 輸出字串函數 cv2.putText() ;

流程:

  1.調用dlib庫來進行Face Service,調用預測器“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      #Face Service的庫dlibimport numpy as np    #資料處理的庫numpyimport 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)# 人臉數rectsrects = 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 

  

圖3 測試結果2

以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援幫客之家。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.