利用机器学习的方法训练微笑检测模型,给一张人脸照片,判断是否微笑;
数据集中69张没笑脸,65张有笑脸,训练结果识别精度在95%附近;
效果:
图1 示例效果
工程利用python 3 开发,借助Dlib进行 人脸嘴部20个特征点坐标(40维特征)的提取,
然后根据这 40维输入特征 和 1维特征输出(1代表有微笑 / 0代表没微笑)进行ML建模,
利用几种机器学习模型进行建模,达到一个二分类(分类有/无笑脸)的目的,然后分析模型识别精度和性能,并且可以识别给定图片的人脸是否微笑;
py文件:
1. Get_features.py :
returnfeatures(): 输入人脸图像路径,利用dlib的“shape_predictor_68_face_landmarks.dat”提取嘴部20个特征点坐标的40个特征值;
writeintoCSV(): 将40维特征输入和1维的输出标记(1代表有微笑/0代表没微笑)写入CSV文件中;
2. ML_ways.py:
pre_data(): 读取CSV中的数据,然后提取出训练集和测试集;
way_LR(): Logistic Regressio, 罗吉斯特回归方法建模;
way_SGD(): Stochastic Gradient Decent, 随机梯度下降法建模;
way_SVM(): Supported Vector Machine, 支持向量机法建模;
way_MLP(): Multi-Layer Perceptron, 多层神经网络法建模;
3. test_single_pic.py:
输入给定测试图像,用ML模型检测其有/无笑脸;
(实现稍微比较复杂,可以结合之前博客看看:
Python 3 利用 Dlib 19.7 进行人脸识别:
Python 3 利用 Dlib 19.7 进行人脸68个特征点的标定:
Python 3 利用机器学习模型进行手写体识别: )
1.开发环境
python: 3.6.3
dlib: 19.7
OpenCv, numpy, sklearn, pandas, os, csv等
Get_features.py中调用的库:
1 import dlib # 人脸识别的库dlib 2 import numpy as np # 数据处理的库numpy 3 import cv2 # 图像处理的库OpenCv 4 import os # 读取文件 5 import csv # csv操作