一、微笑识别原理
1.得到模型
①opencv读取数据集
②dlib人脸检测器定位人脸
③获取每张图片的HOG特征向量组
④利用SVM进行训练
⑤得出模型并保存
2.使用模型
①读取模型,读取照片或者打开摄像头进行实时检测
②将每一帧或者图片的HOG特征值提取出来并预测
③得出结果并显示出来
二、微笑识别
1.准备
在之前的虚拟环境安装tensorflow、keras、h5py包和数据集下载数据集genk4k
2.实现
(1)模型训练
# 导入包
import numpy as np
import cv2
import dlib
import random#构建随机测试集和训练集
from sklearn.svm import SVC #导入svm
from sklearn.svm import LinearSVC #导入线性svm
from sklearn.pipeline import Pipeline #导入python里的管道
import os
import joblib
#保存模型
from sklearn.preprocessing import StandardScaler,PolynomialFeatures #导入多项式回归和标准化
import tqdm
folder_path='D:/rgzn/jupyter/genki4k/'
label='labels.txt'#标签文件
pic_folder='files/'#图片文件路径
#获得默认的人脸检测器和训练好的人脸68特征点检测器
def get_detector_and_predicyor():
#使用dlib自带的frontal_face_detector作为我们的特征提取器
detector = dlib.get_frontal_face_detector()
"""
功能:人脸检测画框
参数:PythonFunction和in Classes
in classes表示采样次数,次数越多获取的人脸的次数越多,但更容易框错
返回值是矩形的坐标,每个矩形为一个人脸(默认的人脸检测器)
"""
#返回训练好的人脸68特征点检测器
predictor = dlib.shape_predictor('D://shape_predictor_68_face_landmarks.dat')
return detector,predictor
#获取检测器
detector,predictor=get_detector_and_predicyor()
def cut_face(img,detector,predictor):
#截取面部
img_gry=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
rects = detector(img_gry, 0)
if len(rects)!=0:
mouth_x=0
mouth_y=0
landmarks = np.matrix([[p.x, p.y] for p in predictor(img,rects[0]).parts()])
for i in range(47,67):#嘴巴范围
mouth_x+=landmarks[i][0,0]
mouth_y+=landmarks[i]