唇语识别项目进度

配置环境

安装numpy,tensorflow,keras,opencv-python,dlib,安装过程见 Here

提取脸部特征点

下载别人训练好的模型 shape_predictor_68_face_landmarks.dat ,如果下载速度慢可以到 Here 提取码:lzjy

从脸部 68 个特征点中提取唇部特征点(序号 49~68)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import numpy as np
import cv2
import dlib
import os
detector = dlib.get_frontal_face_detector()#创建一个容器
predictor = dlib.shape_predictor('D:/Python/shape_predictor_68_face_landmarks.dat')#加载一个自带的分类器
img_path = 'D:/img/face/test1.jpg' #我需要识别的图片位置

img = cv2.imread(img_path)#使用python-opencv读取图片
#print(img == None)
#cv2.namedWindow('1',cv2.WINDOW_NORMAL)
#cv2.imshow('1',img)

img_grey = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#使图片转化为灰度图片
rects = detector(img_grey, 0)#返回信息
for i in range(len(rects)):
    landmarks = np.matrix([[p.x, p.y] for p in predictor(img_grey,rects[i]).parts()])#获取点的坐标
    for idx, point in enumerate(landmarks):
        # 68点的坐标
        pos = (point[0, 0], point[0, 1])
        # cv2.circle(img, pos, 8, (0, 0, 255), -1)#图片,圆心,半径,颜色(BGR),实心/空心(-1/1)
        font = cv2.FONT_HERSHEY_SIMPLEX
        cv2.putText(img, str(idx + 1), pos, font, 0.8, (0, 0, 255), 2, cv2.LINE_AA) # 为圈圈标上序号
cv2.namedWindow("img", 2)
cv2.imshow("img", img) # 展示
cv2.waitKey(0)
cv2.destroyAllWindows()

# 使用单$作为行内数学公式分界符