导读】本文是专栏《计算机视觉40例简介》的第37个案例《人脸表情识别》。该专栏简要介绍李立宗主编《计算机视觉40例——从入门到深度学习(OpenCV-Python)》一书的40个案例。

目前,该书已经在电子工业出版社出版,大家可以在京东、淘宝、当当等平台购买。

大家可以在公众号“计算机视觉之光”回复关键字【案例37】获取本文案例的源代码及使用的测试图片等资料。

针对本书40个案例的每一个案例,分别录制了介绍视频。如果嫌看文字版麻烦,可以关注公众号“计算机视觉之光”直接观看视频介绍版。

本文简要介绍了本案例的一些基础知识,更详细的理论介绍、代码实现等内容请参考《计算机视觉40例简介》第28章《人脸识别应用案例》以获取更详细信息。

Dlib是一个现代工具包,包含机器学习算法和工具,用于在程序中构造软件来解决复杂的现实世界问题。它被工业界和学术界广泛应用于机器人、嵌入式设备、移动电话和大型高性能计算环境等领域。Dlib的开源许可允许用户在任何应用程序中免费使用它。

Dlib官网提供了非常翔实的资料,对它的函数有非常具体的使用说明。除此以外,Dlib官网还提供了大量的案例帮助我们快速掌握该工具的使用。

本章中,我们使用Dlib实现几个跟人脸识别相关的具有代表性的案例,具体如下:

  1. 定位人脸
  2. 绘制关键点
  3. 勾勒五官轮廓
  4. 人脸对齐
  5. 调用CNN实现人脸检测

本章中所使用的模型均可在Dlib官网下载。

本节通过Dlib获取的嘴部关键点,实现一个简单的表情识别应用,识别正常、大笑、微笑三种不同的表情。具体实现中,我们根据脸部关键点之间的位置关系来对表情进行判断。

1 大笑表情识别

大笑时通常会把嘴张大,据此我们将嘴的“高宽比”作为大笑的衡量指标。当嘴的高宽比超过了一定的阈值,就判定为大笑。在图1中,中间的关键点示意图对应着左侧“脸”关键点示意图的中间嘴所在位置。通过计算嘴的关键点中三个不同高度(A、B、C)的均值 “(A+B+C)/3”(avg),与宽度D的比值“avg/D”来判定是否张大嘴。例如,当该比值超过了一定的阈值,则认为张大嘴,据此判断在大笑。

根据上述思路,构建嘴型高宽比的函数MAR如下:

def MAR(mouth):A = dist.euclidean(mouth[3], mouth[9])   #欧氏距离,直接计算y轴差值也可以B = dist.euclidean(mouth[2], mouth[10])C = dist.euclidean(mouth[4], mouth[8])avg = (A+B+C)/3D = dist.euclidean(mouth[0], mouth[6])mar=avg/Dreturn mar

其中,函数dist.euclidean用来计算欧式距离。

2 微笑表情识别

微笑时嘴角会上扬,会导致嘴的宽度与整个脸颊(下颚)的宽度之比变大。如图1右侧图所示,微笑时会导致“M/J”的值变大。

根据上述思路,构建函数MJR用来计算嘴宽度与脸颊宽度之比,具体如下:

def MJR(shape):#嘴宽度,欧氏距离,也可以直接计算x轴差值mouthWidht = dist.euclidean(shape[48], shape[54]) #下巴两侧宽度,根据实际情况选用不同的索引如:4和13等等jawWidth = dist.euclidean(shape[3], shape[13])     return mouthWidht/jawWidth 

图1 关系图

根据上述内容,编写程序,运行结果如图2所示。

图2 结果演示

在《计算机视觉40例——从入门到深度学习(OpenCV-Python)》第28章《人脸识别应用案例》中详细介绍了人脸表情识别、驾驶员疲劳监测、易容术、识别性别与年龄等案例。

《计算机视觉40例——从入门到深度学习(OpenCV-Python)》在介绍Python基础、OpenCV基础、计算机视觉理论基础、深度学习理论的基础上,介绍了计算机视觉领域内具有代表性的40个典型案例。这些案例中,既有传统的案例(数字识别、答题卡识别、物体计数、缺陷检测、手势识别、隐身术、以图搜图、车牌识别、图像加密、指纹识别等),也有深度学习案例(图像分类、风格迁移、姿势识别、实例分割等),还有人脸识别方面的案例(表情识别、驾驶员疲劳监测、识别性别与年龄等)。

【计算机视觉40例】案例37:人脸表情识别相关推荐

  1. 【计算机视觉40例】案例30:EigenFaces人脸识别

    [导读]本文是专栏<计算机视觉40例简介>的第30个案例<EigenFaces人脸识别>的简介,该专栏简要介绍李立宗主编<计算机视觉40例--从入门到深度学习(OpenC ...

  2. 【计算机视觉40例】案例29:LBPH人脸识别

    [导读]本文是专栏<计算机视觉40例简介>的第29个案例<LBPH人脸识别>.该专栏简要介绍李立宗主编<计算机视觉40例--从入门到深度学习(OpenCV-Python) ...

  3. 【计算机视觉40例】案例31:FisherFaces人脸识别

    [导读]本文是专栏<计算机视觉40例简介>的第31个案例<FisherFaces人脸识别>.该专栏简要介绍李立宗主编<计算机视觉40例--从入门到深度学习(OpenCV- ...

  4. 【计算机视觉40例】案例32:定位人脸

    [导读]本文是专栏<计算机视觉40例简介>的第32个案例<定位人脸>.该专栏简要介绍李立宗主编<计算机视觉40例--从入门到深度学习(OpenCV-Python)> ...

  5. 【计算机视觉40例】案例36:调用CNN实现人脸检测

    [导读]本文是专栏<计算机视觉40例简介>的第36个案例<调用CNN实现人脸检测>.该专栏简要介绍李立宗主编<计算机视觉40例--从入门到深度学习(OpenCV-Pyth ...

  6. 【计算机视觉40例】案例40:识别性别与年龄

    [导读]本文是专栏<计算机视觉40例简介>的第40个案例<识别性别与年龄>.该专栏简要介绍李立宗主编<计算机视觉40例--从入门到深度学习(OpenCV-Python)& ...

  7. 【计算机视觉40例】案例26:姿势识别

    [导读]本文是专栏<计算机视觉40例简介>的第26个案例<姿势识别>.该专栏简要介绍李立宗主编<计算机视觉40例--从入门到深度学习(OpenCV-Python)> ...

  8. 【计算机视觉40例】案例38:驾驶员疲劳监测

    <计算机视觉40例--从入门到深度学习(OpenCV-Python)>在介绍Python基础.OpenCV基础.计算机视觉理论基础.深度学习理论入门的基础上,介绍了计算机视觉领域内具有代表 ...

  9. 【计算机视觉40例】案例07:数字手势识别

    [导读]本文是专栏<计算机视觉40例简介>的第7个案例<手势识别>.该专栏简要介绍李立宗主编<计算机视觉40例--从入门到深度学习(OpenCV-Python)>一 ...

最新文章

  1. POJ - 2584 T-Shirt Gumbo 二分多重匹配
  2. iOS开发UI篇—多控制器和导航控制器简单介绍
  3. 看完50多家阵亡的初创企业,我们发现了AI创业的5个行业潜规则
  4. CatalanStirling数
  5. Reverse digits of an integer
  6. dat图片 电脑端微信_微信 PC 版迎来了重磅更新,可以在电脑端使用小程序了 !...
  7. 问题四十七:怎么用ray tracing画superellipsoid (2)
  8. EasyRecovery 618年度大促销,走过路过不要错过!
  9. Drools规则引擎使用入门
  10. 大学生必学练习题 - C 语言经典50例
  11. vue使用 Tinymce富文本编辑器
  12. If 表达式和条件语句
  13. MEMS:万物智联技术关键
  14. 春节感悟 - 原年人的爱和恨
  15. Centos7.2离线安装Docker和nvidias-docker2安装教程
  16. 关注虚拟财富“.ME”域名的投资价值
  17. 微信数据存储WCDB for iOS/macOS
  18. 华为华为Mate30pro青春版参数配置
  19. Unity游戏画面参数解析与应用:垂直同步、动态模糊、抗锯齿
  20. 安装主机及服务器系统

热门文章

  1. 次氯酸盐溶液增稠剂对稠度的执著已成癖,但似乎并没有坏处
  2. mysql 拼音首字母_MySQL拼音首字母查询(支持三个中文以内的查询)
  3. 股票的涨幅和跌幅求平均涨幅和跌幅
  4. 毕业之后,人生才扑面而来
  5. php strtotime,php strtotime不起作用
  6. Unity 之 最新原生广告Ads接入 -- 助力增长游戏收益
  7. MySQL中YEAR_MONTH,HOUR_MINUTE等关键字的用法
  8. 段错误:SIGSEGV
  9. Android应用安装时因签名问题不能安装的解决方法
  10. CTFT DTFT DFT ZT 这些变换之间有什么联系和区别