常见的MTCNN同时实现了人脸检测跟landmarks检测,但是只支持5点检测。而OpenVINO自带的Landmark检测模型基于自定义的卷积神经网络实现,取35个人脸各部位关键点。...模块人脸检测的tensorflow量化8位模型 opencv_face_detector_uint8.pb权重文件 opencv_face_detector.pbtxt配置文件 OpenCV3.3以上版本支持 Landmarks...检测 模型名称:facial-landmarks-35-adas-0002 支持35点分布表示出左眼、右眼、鼻子、嘴巴、左侧眉毛、右侧眉毛、人脸轮廓。
上一篇【Matlab】表情合成尝试(4)——Dlib库混合编译中成功让应用了Dlib库的C++函数编译为了matlab的可用的Mex文件,又说到了Dlib库可以用来自动标定人脸的68个特征点(landmarks
(im) return im, s def annotate_landmarks(im, landmarks): ''' 人脸关键点,画图函数 ''' im...= read_im_and_landmarks('02.jpg') # 底图 im1 = annotate_landmarks(im1, landmarks1) %matplotlib inline...# 人脸对齐函数 def face_Align(Base_path,cover_path): im1, landmarks1 = read_im_and_landmarks(Base_path)...# 底图 im2, landmarks2 = read_im_and_landmarks(cover_path) # 贴上来的图 if len(landmarks1) == 0...) # 底图 im2, landmarks2 = read_im_and_landmarks(cover_path) # 贴上来的图 if len(landmarks1) == 0
, output_img = detector.detect_landmarks(img) info_landmarks = detector.get_info(landmarks, img.shape..., output_img = detector.detect_landmarks(img) info_landmarks = detector.get_info(landmarks...for f_landmarks in detected_landmarks: self.draw_utils.draw_landmarks(img, f_landmarks..., output_img = detector.detect_landmarks(img) info_landmarks = detector.get_info(landmarks, img.shape..., output_img = detector.detect_landmarks(img) info_landmarks = detector.get_info(landmarks
: for hand_landmarks in results.multi_hand_landmarks: mp_drawing.draw_landmarks( image...: print('hand_landmarks:', hand_landmarks) print( f'Index finger tip coordinates: (',...: for hand_landmarks in results.multi_hand_landmarks: mp_drawing.draw_landmarks( image...(image, hand_landmarks): new_landmarks = [] for i in range(0,len(hand_landmarks.landmark)): float_x...= hand_landmarks.landmark[i].x float_y = hand_landmarks.landmark[i].y # Z坐标靠近屏幕增大,远离屏幕减小 float_z
from torchvision import transforms,utils import warnings warnings.filterwarnings("ignore") plt.ion() landmarks_frame...= pd.read_csv('data/faces/face_landmarks.csv') n = 65 img_name = landmarks_frame.iloc[n,0] landmarks...= landmarks_frame.iloc[n,1:].as_matrix() landmarks = landmarks.astype("float").reshape(-1,2) print(...'Image name:{}'.format(img_name)) print("Landmarks shape:{}".format(landmarks.shape)) print("First 4...Landmarks:
(image, hand_landmarks): new_landmarks = [] for i in range(0,len(hand_landmarks.landmark)): float_x...new_landmarks def Draw_hand_points(image, normalized_hand_landmarks): cv2.circle(image,normalized_hand_landmarks...),3) x1, y1 = normalized_hand_landmarks[4][0], normalized_hand_landmarks[4][1] x2, y2 = normalized_hand_landmarks...: for hand_landmarks in results.multi_hand_landmarks: mp_drawing.draw_landmarks(...image, hand_landmarks, mp_hands.HAND_CONNECTIONS) normalized_landmarks = Normalize_landmarks
: # make random landmarks located in the world # def make_landmarks(self, num_landmarks)...: self.landmarks = [] for i in range(num_landmarks): self.landmarks.append...# create any number of landmarks num_landmarks = 3 r.make_landmarks(num_landmarks) # print out our robot's...landmarks = [] for i in range(num_landmarks): landmarks.append((mu[2*(N+i)].item(),...Estimated landmarks: 一个地标位置列表(x,y),其长度恰好是num_landmarks。 ?
)))for face_landmarks in face_landmarks_list: #打印此图像中每个面部特征的位置 facial_features = [ 'chin'...= face_recognition.face_landmarks(image)for face_landmarks in face_landmarks_list: pil_image = Image.fromarray...0, 128)) d.polygon(face_landmarks['bottom_lip'], fill=(150, 0, 0, 128)) d.line(face_landmarks['...face_landmarks['right_eye'], fill=(255, 255, 255, 30)) #涂一些眼线 d.line(face_landmarks['left_eye']...+ [face_landmarks['left_eye'][0]], fill=(0, 0, 0, 110), width=6) d.line(face_landmarks['right_eye
= face_recognition.face_landmarks(image) 遍历列表中的元素,修改眉毛 d.polygon(face_landmarks['left_eyebrow'], fill...=(68, 54, 39, 128)) d.polygon(face_landmarks['right_eyebrow'], fill=(68, 54, 39, 128)) d.line(face_landmarks...8) d.line(face_landmarks['bottom_lip'], fill=(150, 0, 0, 64), width=8) 增加眼线 d.polygon(face_landmarks[...)) d.line(face_landmarks['left_eye'] + [face_landmarks['left_eye'][0]], fill=(0, 0, 0, 110), width=6)...d.line(face_landmarks['right_eye'] + [face_landmarks['right_eye'][0]], fill=(0, 0, 0, 110), wid=6) 根据以上代码做了
将左右眼和嘴巴按矩形区域划分截取: #右眼睛区域左上角点(x,y),右下角点(x0,y0) x, y, x0, y0 = landmarks.part(42).x - 5, min(landmarks.part...(43).y, landmarks.part(44).y) - 5, landmarks.part(45).x + 5, max(landmarks.part(46).y, landmarks.part...(47).y) + 5 #左眼睛区域左上角点(x1,y1),右下角点(x2,y2) x1,y1,x2,y2 = landmarks.part(36).x-5,min(landmarks.part(37)....y,landmarks.part(38).y)-5,landmarks.part(39).x+5,max(landmarks.part(40).y,landmarks.part(41).y)+5 #...嘴巴区域左上角点(x3,y3),右下角点(x4,y4) x3, y3, x4, y4 = landmarks.part(48).x-5, min(landmarks.part(50).y,landmarks.part
算法本身非常复杂,但dlib接口使用起来非常简单: PREDICTOR_PATH = "/home/matt/dlib-18.16/shape_predictor_68_face_landmarks.dat...) warped_mask = warp_im(mask, M, im1.shape) combined_mask = numpy.max([get_face_mask(im1, landmarks1...(im, landmarks): im = im.copy() for idx, point in enumerate(landmarks): pos = (point[...= read_im_and_landmarks(sys.argv[1]) im2, landmarks2 = read_im_and_landmarks(sys.argv[2]) M = transformation_from_points...(landmarks1[ALIGN_POINTS], landmarks2[ALIGN_POINTS]) mask = get_face_mask
(15).y)), ((landmarks.part(27).x), (landmarks.part(27).y)), ((landmarks.part...(39).x), (landmarks.part(1).y))] # 宽,中覆盖口罩 mask_c = [((landmarks.part(29).x), (landmarks.part...((landmarks.part(34).x), (landmarks.part(34).y)), ((landmarks.part(33).x), (landmarks.part...top_ellipse = landmarks.part(27).y + (landmarks.part(28).y - landmarks.part(27).y) / 2 centre_x =...landmarks.part(28).x centre_y = landmarks.part(8).y - ((landmarks.part(8).y - (top_ellipse)) / 2
(im, fname) def resize(self, im_head, landmarks_head, im_face, landmarks_face): '''...= (landmarks_head / scale).astype(landmarks_head.dtype) else: im_face = cv2.resize...(im_face, (int(im_face.shape[1] * scale), int(im_face.shape[0] * scale))) landmarks_face...= (landmarks_face * scale).astype(landmarks_face.dtype) return im_head, landmarks_head, im_face...[self.LEFT_EYE_POINTS], axis=0) - np.mean(landmarks_head[self.RIGHT_EYE_POINTS], axis=0))
= pd.read_csv('data/faces/face_landmarks.csv') n = 65 img_name = landmarks_frame.iloc[n, 0] landmarks...= landmarks_frame.iloc[n, 1:].as_matrix() landmarks = landmarks.astype('float').reshape(-1, 2) print...4 Landmarks: {}'.format(landmarks[:4])) 输出如下所示: 接着写一个辅助函数来显示人脸图片及其关键点,代码如下所示: def show_landmarks(image..., landmarks): """Show image with landmarks""" plt.imshow(image) plt.scatter(landmarks[:,...[idx, 1:] landmarks = np.array([landmarks]) landmarks = landmarks.astype('float').reshape
image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR) if results.multi_face_landmarks: for face_landmarks...in results.multi_face_landmarks: mp_drawing.draw_landmarks( image=image,...landmark_list=face_landmarks) mp_drawing.draw_landmarks( image=image,...landmark_list=face_landmarks) mp_drawing.draw_landmarks( image=image,...landmark_list=face_landmarks ) # Flip the image horizontally for a selfie-view display.
= face_recognition.face_landmarks(image) for face_landmarks in face_landmarks_list: pil_image =..., 39, 128)) d.line(face_landmarks['left_eyebrow'], fill=(68, 54, 39, 150), width=5) d.line(face_landmarks...(face_landmarks['top_lip'], fill=(150, 0, 0, 64), width=8) d.line(face_landmarks['bottom_lip'], fill...face_landmarks['left_eye'] + [face_landmarks['left_eye'][0]], fill=(0, 0, 0, 110), width...=6) d.line( face_landmarks['right_eye'] + [face_landmarks['right_eye'][0]], fill=
算法本身非常复杂,但dlib接口使用起来非常简单: PREDICTOR_PATH = "/home/matt/dlib-18.16/shape_predictor_68_face_landmarks.dat...): blur_amount = COLOUR_CORRECT_BLUR_FRAC * numpy.linalg.norm( numpy.mean(landmarks1[LEFT_EYE_POINTS...(im, landmarks): im = im.copy() for idx, point in enumerate(landmarks): pos = (point[0, 0], point[...= read_im_and_landmarks(sys.argv[1]) im2, landmarks2 = read_im_and_landmarks(sys.argv[2]) M = transformation_from_points...(landmarks1[ALIGN_POINTS], landmarks2[ALIGN_POINTS]) mask = get_face_mask(im2, landmarks2) warped_mask
= face_recognition.face_landmarks(image) 遍历列表中的元素,修改眉毛 d.polygon(face_landmarks['left_eyebrow'], fill...face_landmarks['bottom_lip'], fill=(150, 0, 0, 128)) d.line(face_landmarks['top_lip'], fill=(150, 0,...face_landmarks['left_eye'], fill=(255, 255, 255, 30)) d.polygon(face_landmarks['right_eye'], fill=(255..., 255, 255, 30)) d.line(face_landmarks['left_eye'] + [face_landmarks['left_eye'][0]], fill=(0, 0, 0,...110), width=6) d.line(face_landmarks['right_eye'] + [face_landmarks['right_eye'][0]], fill=(0, 0, 0,
= pd.read_csv('faces/face_landmarks.csv') 【查看数据格式】 查看前5行数据: landmarks_frame.head(5) 5行137列,去掉第一列图像名字...landmarks = landmarks_frame.iloc[n, 1:].as_matrix() landmarks 输出 array([138, 392, 141, 427, 145, 464...# -1 表示模糊匹配 landmarks = landmarks.astype('float').reshape(-1, 2) # 打印输出前5行数据 landmarks[:5,:] 输出 array...定义特征点绘制方法 def show_landmarks(image, landmarks): """Show image with landmarks""" plt.imshow(image...) plt.scatter(landmarks[:, 0], landmarks[:, 1], s=10, marker='
领取专属 10元无门槛券
手把手带您无忧上云