一、dlib以及opencv-python库安装

介于我使用的是jupyter notebook,所以在安装dlib和opencv-python时是在

这个命令行安装的

dlib安装方法:

1.若可以,直接使用上图所示命令行输入以下命令:

pip install cmake

pip install boost

pip install dlib

若安装了visual studio2019应该就可以直接pip install dlib,至少我是这样

由于很多在执行第三句时都会报错,所以这里提供第二种办法

2.去dlib官网:http://dlib.net/ 或者 https://github.com/davisking/dlib 下载压缩包

下载完成后,解压缩

在安装dlib前需要安装Boost和Cmake,dlib19之后你需要安装vs2015以上的IDE,本人是安装的vs2019,(建议先安装好VS之后再安装Cmake和 boost)

Cmake安装

我下的是

直接安装之后,配置环境变量

Boost下载

安装boost:下载地址:http://www.boost.org/

如果vs安装的是2015以上的版本,可以直接进行下一步,最好安装最新版本,不然会找不到b2命令

下载之后将其解压缩,进入boost_1_73_0文件夹中,找到bootstrap.bat批处理文件,双击运行,等待运行完成后(命令行自动消失)会生成两个文件b2.exe和bjam.exe

然后将这两个文件复制到boost_1_73_0根文件夹下:

同样开启一个命令行,定位到这个文件夹,运行命令:

b2 install

这个安装需要一段时间,耐心等候。

利用b2编译库文件:

b2 -a –with-python address-model=64 toolset=msvc runtime-link=static

之前你cmake下载的64位这里(address-model)写64,如果是32位的就把之前的64改成32

安装完成后配置boost环境变量

安装dlib

进入你的dlib解压路径,输入python setup.py install

成功之后会在文件夹中看见dlib和dlib.egg-info ,将这两个文件夹复制到你的python安装的目录下的Lib文件中:

—>例如我的python环境为python2.7,

—>所以将其放在python2-7文件夹的Python2-7\Lib\site-packages中

—>这时,就已经完成了dlib的配置

opencv-python安装方法

在Anaconda Prompt下输入以下命令

pip install opencv-python

但如果一直失败,建议在Anaconda Prompt下输入以下命令

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python

二、dlib的68点模型

dlib的68点模型,使用网络上大神训练好的特征预测器,用来进行python代码人脸识别的特征预测。

三、Python实现人脸识别&表情判别

"""

从视屏中识别人脸,并实时标出面部特征点

"""

import sys

import dlib # 人脸识别的库dlib

import numpy as np # 数据处理的库numpy

import cv2 # 图像处理的库OpenCv

class face_emotion():

def __init__(self):

# 使用特征提取器get_frontal_face_detector

self.detector = dlib.get_frontal_face_detector()

# dlib的68点模型,使用作者训练好的特征预测器

self.predictor = dlib.shape_predictor("F:/face.dat")

# 建cv2摄像头对象,这里使用电脑自带摄像头,如果接了外部摄像头,则自动切换到外部摄像头

self.cap = cv2.VideoCapture(0)

# 设置视频参数,propId设置的视频参数,value设置的参数值

self.cap.set(3, 480)

# 截图screenshoot的计数器

self.cnt = 0

def learning_face(self):

# 眉毛直线拟合数据缓冲

line_brow_x = []

line_brow_y = []

# cap.isOpened() 返回true/false 检查初始化是否成功

while (self.cap.isOpened()):

# cap.read()

# 返回两个值:

# 一个布尔值true/false,用来判断读取视频是否成功/是否到视频末尾

# 图像对象,图像的三维矩阵

flag, im_rd = self.cap.read()

# 每帧数据延时1ms,延时为0读取的是静态帧

k = cv2.waitKey(1)

# 取灰度

img_gray = cv2.cvtColor(im_rd, cv2.COLOR_RGB2GRAY)

# 使用人脸检测器检测每一帧图像中的人脸。并返回人脸数rects

faces = self.detector(img_gray, 0)

# 待会要显示在屏幕上的字体

font = cv2.FONT_HERSHEY_SIMPLEX

# 如果检测到人脸

if (len(faces) != 0):

# 对每个人脸都标出68个特征点

for i in range(len(faces)):

# enumerate方法同时返回数据对象的索引和数据,k为索引,d为faces中的对象

for k, d in enumerate(faces):

# 用红色矩形框出人脸

cv2.rectangle(im_rd, (d.left(), d.top()), (d.right(), d.bottom()), (0, 0, 255))

# 计算人脸热别框边长

self.face_width = d.right() - d.left()

# 使用预测器得到68点数据的坐标

shape = self.predictor(im_rd, d)

# 圆圈显示每个特征点

for i in range(68):

cv2.circle(im_rd, (shape.part(i).x, shape.part(i).y), 2, (0, 255, 0), -1, 8)

# cv2.putText(im_rd, str(i), (shape.part(i).x, shape.part(i).y), cv2.FONT_HERSHEY_SIMPLEX, 0.5,

# (255, 255, 255))

# 分析任意n点的位置关系来作为表情识别的依据

mouth_width = (shape.part(54).x - shape.part(48).x) / self.face_width # 嘴巴咧开程度

mouth_higth = (shape.part(66).y - shape.part(62).y) / self.face_width # 嘴巴张开程度

# print("嘴巴宽度与识别框宽度之比:",mouth_width_arv)

# print("嘴巴高度与识别框高度之比:",mouth_higth_arv)

# 通过两个眉毛上的10个特征点,分析挑眉程度和皱眉程度

brow_sum = 0 # 高度之和

frown_sum = 0 # 两边眉毛距离之和

for j in range(17, 21):

brow_sum += (shape.part(j).y - d.top()) + (shape.part(j + 5).y - d.top())

frown_sum += shape.part(j + 5).x - shape.part(j).x

line_brow_x.append(shape.part(j).x)

line_brow_y.append(shape.part(j).y)

# self.brow_k, self.brow_d = self.fit_slr(line_brow_x, line_brow_y) # 计算眉毛的倾斜程度

tempx = np.array(line_brow_x)

tempy = np.array(line_brow_y)

z1 = np.polyfit(tempx, tempy, 1) # 拟合成一次直线

self.brow_k = -round(z1[0], 3) # 拟合出曲线的斜率和实际眉毛的倾斜方向是相反的

brow_hight = (brow_sum / 10) / self.face_width # 眉毛高度占比

brow_width = (frown_sum / 5) / self.face_width # 眉毛距离占比

# print("眉毛高度与识别框高度之比:",round(brow_arv/self.face_width,3))

# print("眉毛间距与识别框高度之比:",round(frown_arv/self.face_width,3))

# 眼睛睁开程度

eye_sum = (shape.part(41).y - shape.part(37).y + shape.part(40).y - shape.part(38).y +

shape.part(47).y - shape.part(43).y + shape.part(46).y - shape.part(44).y)

eye_hight = (eye_sum / 4) / self.face_width

# print("眼睛睁开距离与识别框高度之比:",round(eye_open/self.face_width,3))

# 分情况讨论

# 张嘴,可能是开心或者惊讶

if round(mouth_higth >= 0.03):

if eye_hight >= 0.056:

cv2.putText(im_rd, "amazing", (d.left(), d.bottom() + 20), cv2.FONT_HERSHEY_SIMPLEX,

0.8,

(0, 0, 255), 2, 4)

else:

cv2.putText(im_rd, "happy", (d.left(), d.bottom() + 20), cv2.FONT_HERSHEY_SIMPLEX, 0.8,

(0, 0, 255), 2, 4)

# 没有张嘴,可能是正常和生气

else:

if self.brow_k <= -0.3:

cv2.putText(im_rd, "angry", (d.left(), d.bottom() + 20), cv2.FONT_HERSHEY_SIMPLEX, 0.8,

(0, 0, 255), 2, 4)

else:

cv2.putText(im_rd, "nature", (d.left(), d.bottom() + 20), cv2.FONT_HERSHEY_SIMPLEX, 0.8,

(0, 0, 255), 2, 4)

# 标出人脸数

cv2.putText(im_rd, "Faces: " + str(len(faces)), (20, 50), font, 1, (0, 0, 255), 1, cv2.LINE_AA)

else:

# 没有检测到人脸

cv2.putText(im_rd, "No Face", (20, 50), font, 1, (0, 0, 255), 1, cv2.LINE_AA)

# 添加说明

im_rd = cv2.putText(im_rd, "S: screenshot", (20, 400), font, 0.8, (0, 0, 255), 1, cv2.LINE_AA)

im_rd = cv2.putText(im_rd, "Q: quit", (20, 450), font, 0.8, (0, 0, 255), 1, cv2.LINE_AA)

# 按下s键截图保存

if (k == ord('s')):

self.cnt += 1

cv2.imwrite("screenshoot" + str(self.cnt) + ".jpg", im_rd)

# 按下q键退出

if (k == ord('q')):

break

# 窗口显示

cv2.imshow("camera", im_rd)

# 释放摄像头

self.cap.release()

# 删除建立的窗口

cv2.destroyAllWindows()

if __name__ == "__main__":

my_face = face_emotion()

my_face.learning_face()

四、参考文章

到此这篇关于Python+Dlib+Opencv实现人脸采集并表情判别的文章就介绍到这了,更多相关Python Dlib Opencv 人脸采集内容请搜索python博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持python博客!

python表情识别程序_Python+Dlib+Opencv实现人脸采集并表情判别功能的代码相关推荐

  1. python视频图片识别算法_python利用Opencv进行人脸识别(视频流+图片)

    首先:需要在在自己本地安装opencv具体步骤可以问度娘 如果从事于开发中的话建议用第三方的人脸识别(推荐阿里) 1.视频流中进行人脸识别 # -*- coding: utf-8 -*- import ...

  2. python opencv人脸识别登录_python使用opencv进行人脸识别

    环境 ubuntu 12.04 LTS python 2.7.3 opencv 2.3.1-7 安装依赖 sudo apt-get install libopencv-* sudo apt-get i ...

  3. Python3+Dlib+Opencv实现摄像头采集人脸并对表情进行实时分类判读

    Python3+Dlib+Opencv实现摄像头采集人脸并对表情进行实时分类判读 一. dlib以及opencv-python库安装 1.1 dlib库安装 1.2 opencv-python库安装 ...

  4. matlab 动态识别,基于matlab脸部动态特征的人脸表情识别程序

    [实例简介] 通过训练jaffe数据库,实现识别人脸高兴.惊讶.恐惧.生气等六种表情,并圈出.可调用电脑摄像头实时监测.内附有使用说明,可以使用.仅供学习参考. [实例截图] [核心代码] fdf56 ...

  5. 【人脸识别】基于dlib库实现人脸特征值提取

    一.Dlib库介绍与安装 1. Dlib库简介 Dlib库是一个机器学习的开源库,包含了机器学习的很多算法,使用起来很方便,直接包含头文件即可,并且不依赖于其他库(自带图像编解码库源码).Dlib可以 ...

  6. 【人脸表情识别】基于回归模型的人脸表情识别方法

    前面几篇专栏中,我们介绍了有关基于图片/视频的人脸表情识别的相关内容,这两个领域采用解决分类问题的方法来对表情进行识别.这篇文章,我们将介绍通过回归的方式来理解表情的方式--基于连续模型的人脸表情识别 ...

  7. python dlib opencv人脸识别准确度_Python用opencv+dlib实现人脸识别

    代码: #coding=utf-8 import cv2 import dlib path = "imagePath/9.jpg" img = cv2.imread(path) g ...

  8. python人脸识别考勤系统 dlib+OpenCV和Pyqt5、数据库sqlite 人脸识别系统 计算机 毕业设计 源码

    一.项目介绍 Python语言.dlib.OpenCV.Pyqt5界面设计.sqlite3数据库 本系统使用dlib作为人脸识别工具,dlib提供一个方法可将人脸图片数据映射到128维度的空间向量,如 ...

  9. python判断性别程序_python 实现性别识别

    使用keras实现性别识别,模型数据使用的是oarriaga/face_classification的模型 实现效果 准备工作 在开始之前先要安装keras和tensorflow 安装keras使用命 ...

最新文章

  1. 神经网络RNN图解!
  2. 引用Drawable颜色常数及背景色
  3. hdu1839 二分最短路
  4. Summation Order
  5. Microsoft Office相关开发组件
  6. spring 面向接口编程_Spring面向方面的编程
  7. vue后端必须接口吗_前后端分离模式,后端说开发完才能给接口文档,合理吗
  8. EhCache 常用配置项详解
  9. LeetCode 397. 整数替换(Integer Replacement)
  10. HTML5 Canvas save 保存恢复状态
  11. Windows下FireFox插件dll文件名,必须是np开头,不能是plugin结尾
  12. Python安装cv2库出错及解决:Could not find a version that satisfies the requirement cv2
  13. HeadFirstJava 4,5,6
  14. javaweb框架和其他知识点总结
  15. 以阿里云服务器为例理解docker端口映射
  16. 推荐一个在线办公协作的
  17. linux 双显卡 黑屏 amd,彻底解决AMD显卡win10开机黑屏问题
  18. 二叉树多种遍历的时间复杂度和空间复杂度
  19. NR5G基础概念扫盲
  20. 离散数学期末复习知识点(不挂科系列)

热门文章

  1. tcp 服务端如何判断客户端断开连接
  2. vs2010本地调试打不开网页
  3. C# 通过socket实现UDP 通信
  4. c# UDP(udpclient)客户端和服务端有何区别?
  5. sonarqube没有html插件,SonarQube Github插件没有写拉问题的问题
  6. python pack属性_python tkinter基本属性详解
  7. php post防止hash攻击,MyBB editpost.php脚本'posthash' 参数SQL注入漏洞
  8. std::jthread与std::thread的区别
  9. 如何更改指定用户在windows系统目录的权限
  10. android开发之Glide加载图片之url转bitmap的方法