目錄
- 一、Dlib庫介紹與安裝
- 1. Dlib庫簡介
- 2. 安裝Dlib庫
- 二、OpenCV介紹即安裝
- 1. OpenCV簡介
- 2. OpenCV安裝
- 三、提取人臉特征點
- 四、在眼睛處繪制黑色的實心圓
- 五、總結
- 六、參考
一、Dlib庫介紹與安裝
1. Dlib庫簡介
?? Dlib庫是一個機器學習的開源庫,包含了機器學習的很多演算法,使用起來很方便,直接包含頭檔案即可,并且不依賴于其他庫(自帶影像編解碼庫原始碼),Dlib可以幫助創建很多復雜的機器學習方面的軟體來幫助解決實際問題,目前Dlib已經被廣泛的用在行業和學術領域,包括機器人,嵌入式設備,移動電話和大型高性能計算環境,
2. 安裝Dlib庫
使用pip安裝
pip install dlib

二、OpenCV介紹即安裝
1. OpenCV簡介
??OpenCV是一個基于BSD許可(開源)發行的跨平臺計算機視覺和機器學習軟體庫,可以運行在Linux、Windows、Android和Mac OS作業系統上,它輕量級而且高效——由一系列 C 函式和少量 C++ 類構成,同時提供了Python、Ruby、MATLAB等語言的介面,實作了影像處理和計算機視覺方面的很多通用演算法,
2. OpenCV安裝
使用pip安裝
pip3 install opencv_python

三、提取人臉特征點
此處使用視頻測驗
import numpy as np
import cv2
import dlib
import os
import sys
import random
# 存盤位置
output_dir = './faces'
size = 64
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# 改變圖片的亮度與對比度
def relight(img, light=1, bias=0):
w = img.shape[1]
h = img.shape[0]
#image = []
for i in range(0,w):
for j in range(0,h):
for c in range(3):
tmp = int(img[j,i,c]*light + bias)
if tmp > 255:
tmp = 255
elif tmp < 0:
tmp = 0
img[j,i,c] = tmp
return img
#使用dlib自帶的frontal_face_detector作為我們的特征提取器
detector = dlib.get_frontal_face_detector()
# 打開攝像頭 引數為輸入流,可以為攝像頭或視頻檔案
#camera = cv2.VideoCapture(0)
camera = cv2.VideoCapture('./G.E.M.鄧紫棋 - 孤獨.mp4')
ok = True
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat')
while ok:
# 讀取攝像頭中的影像,ok為是否讀取成功的判斷引數
ok, img = camera.read()
# 轉換成灰度影像
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
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])
print(idx,pos)
# 利用cv2.circle給每個特征點畫一個圈,共68個
cv2.circle(img, pos, 2, color=(0, 255, 0))
# 利用cv2.putText輸出1-68
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img, str(idx+1), pos, font, 0.2, (0, 0, 255), 1,cv2.LINE_AA)
cv2.imshow('video', img)
k = cv2.waitKey(1)
if k == 27: # press 'ESC' to quit
break
camera.release()
cv2.destroyAllWindows()
運行結果:


四、在眼睛處繪制黑色的實心圓
??要求:不在原視頻上繪制顯示特征點,而是給人臉虛擬P上一付墨鏡(找到雙眼特征點坐標值,以坐標中心點為圓心,用opencv函式繪制兩個圓,并填充黑色)
def painting_sunglasses(img,detector,predictor):
#給人臉帶上墨鏡
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()])
right_eye_x=0
right_eye_y=0
left_eye_x=0
left_eye_y=0
for i in range(36,42):#右眼范圍
#將坐標相加
right_eye_x+=landmarks[i][0,0]
right_eye_y+=landmarks[i][0,1]
#取眼睛的中點坐標
pos_right=(int(right_eye_x/6),int(right_eye_y/6))
cv2.circle(img=img, center=pos_right, radius=30, color=(0,0,0),thickness=-1)
for i in range(42,48):#左眼范圍
#將坐標相加
left_eye_x+=landmarks[i][0,0]
left_eye_y+=landmarks[i][0,1]
#取眼睛的中點坐標
pos_left=(int(left_eye_x/6),int(left_eye_y/6))
cv2.circle(img=img, center=pos_left, radius=30, color=(0,0,0),thickness=-1)
#camera = cv2.VideoCapture(0)#打開攝像頭
camera = cv2.VideoCapture('./G.E.M.鄧紫棋 - 孤獨.mp4')
ok=True
# 打開攝像頭 引數為輸入流,可以為攝像頭或視頻檔案
while ok:
ok,img = camera.read()
# 轉換成灰度影像
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#display_feature_point(img,detector,predictor)
painting_sunglasses(img,detector,predictor)#呼叫畫墨鏡函式
cv2.imshow('video', img)
k = cv2.waitKey(1)
if k == 27: # press 'ESC' to quit
break
camera.release()
cv2.destroyAllWindows()
運行結果:

五、總結
??本文簡略地介紹了dlib庫與OpenCV,并初步嘗試使用dlib庫對人臉的特征值進行提取,
六、參考
Python之人臉特征提取
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/353248.html
標籤:AI
上一篇:pillow進行影像處理
