原理

面部表情跟踪就是根据检测的人脸特征点对应到特定的器官,比如眼睛、鼻子、嘴巴、耳朵等等,以此来跟踪各个面部器官的动作。

本文首先开启摄像头,然后利用dlib中dlib.get_frontal_face_detector()识别人脸,并利用dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")预测人脸的68点,之后根据特征点对应关系,在新建的图像中,绘制面部各个器官的轮廓,最终显示的图像统一为500*500.

代码实现:

# -*- coding: utf-8 -*-
import cv2
import dlib
#import datetime
import numpy as npdef face_boundary(img, shape):# enumerate方法同时返回数据对象的索引和数据for i, d in enumerate(shape.parts()):if i == 0:x_min = d.xx_max = d.xy_min = d.yy_max = d.yelse:if d.x < x_min:x_min = d.xif d.x > x_max:x_max = d.xif d.y < y_min:y_min = d.yif d.y > y_max:y_max = d.y#如果出现负值,即人脸位于图像框之外的情况,应忽视图像外的部分,将负值置为0if x_min < 0:x_min = 0if y_min < 0:y_min = 0if x_min == x_max or y_min == y_max:return Noneelse:return img[y_min:y_max, x_min:x_max]def draw_left_eyebrow(img, shape):#17 - 21pt_pos = []for index, pt in enumerate(shape.parts()[17:22]):pt_pos.append((pt.x, pt.y))for num in range(len(pt_pos)-1):cv2.line(img, pt_pos[num], pt_pos[num+1], 255, 2)def draw_right_eyebrow(img, shape):# 22 - 26pt_pos = []for index, pt in enumerate(shape.parts()[22:27]):pt_pos.append((pt.x, pt.y))for num in range(len(pt_pos) - 1):cv2.line(img, pt_pos[num], pt_pos[num + 1], 255, 2)def draw_left_eye(img, shape):# 36 - 41pt_pos = []for index, pt in enumerate(shape.parts()[36:42]):pt_pos.append((pt.x, pt.y))for num in range(len(pt_pos) - 1):cv2.line(img, pt_pos[num], pt_pos[num + 1], 255, 2)cv2.line(img, pt_pos[0], pt_pos[-1], 255, 2)def draw_right_eye(img, shape):# 42 - 47pt_pos = []for index, pt in enumerate(shape.parts()[42:48]):pt_pos.append((pt.x, pt.y))for num in range(len(pt_pos) - 1):cv2.line(img, pt_pos[num], pt_pos[num + 1], 255, 2)cv2.line(img, pt_pos[0], pt_pos[-1], 255, 2)def draw_nose(img, shape):# 27 - 35pt_pos = []for index, pt in enumerate(shape.parts()[27:36]):pt_pos.append((pt.x, pt.y))for num in range(len(pt_pos) - 1):cv2.line(img, pt_pos[num], pt_pos[num + 1], 255, 2)cv2.line(img, pt_pos[0], pt_pos[4], 255, 2)cv2.line(img, pt_pos[0], pt_pos[-1], 255, 2)cv2.line(img, pt_pos[3], pt_pos[-1], 255, 2)def draw_mouth(img, shape):# 48 - 59pt_pos = []for index, pt in enumerate(shape.parts()[48:60]):pt_pos.append((pt.x, pt.y))for num in range(len(pt_pos) - 1):cv2.line(img, pt_pos[num], pt_pos[num + 1], 255, 2)cv2.line(img, pt_pos[0], pt_pos[-1], 255, 2)# 60 - 67pt_pos = []for index, pt in enumerate(shape.parts()[60:]):pt_pos.append((pt.x, pt.y))for num in range(len(pt_pos) - 1):cv2.line(img, pt_pos[num], pt_pos[num + 1], 255, 2)cv2.line(img, pt_pos[0], pt_pos[-1], 255, 2)def draw_jaw(img, shape):# 0 - 16pt_pos = []for index, pt in enumerate(shape.parts()[0:17]):pt_pos.append((pt.x, pt.y))for num in range(len(pt_pos) - 1):cv2.line(img, pt_pos[num], pt_pos[num + 1], 255, 2)# 使用特征提取器get_frontal_face_detector
detector = dlib.get_frontal_face_detector()
# dlib的68点模型,使用训练好的特征预测器
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
#使用电脑自带摄像头
cap = cv2.VideoCapture(0)
font = cv2.FONT_HERSHEY_SIMPLEXwhile(1):# cap.read()# 返回两个值:#    一个布尔值true/false,用来判断读取视频是否成功/是否到视频末尾#    图像对象,图像的三维矩阵ret, frame = cap.read()img = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)dets = detector(img, 1)for index, face in enumerate(dets):# 使用预测器得到68点数据的坐标shape = predictor(img, face)#image.shape获取图像的形状,返回值是一个包含行数、列数、通道数的元组features = np.zeros(img.shape[0:-1], dtype=np.uint8)#黑色图像for i, d in enumerate(shape.parts()):d_pos = (d.x, d.y)cv2.circle(features, d_pos, 2, 255, 1)draw_left_eyebrow(features, shape)draw_right_eyebrow(features, shape)draw_left_eye(features, shape)draw_right_eye(features, shape)draw_nose(features, shape)draw_mouth(features, shape)draw_jaw(features, shape)faceROI = face_boundary(features, shape)faceROI = cv2.resize(faceROI, (500, 500), interpolation=cv2.INTER_LINEAR)cv2.imshow('face {}'.format(index), faceROI)if cv2.waitKey(10) == 27:   #按ESCBreak

运行结果:

dlib 面部表情跟踪相关推荐

  1. python dlib学习(十二):面部表情跟踪

    前言 面部表情跟踪的原理就是检测人脸特征点,根据特定的特征点可以对应到特定的器官,比如眼睛.鼻子.嘴巴.耳朵等等,以此来跟踪各个面部器官的动作. 程序实现 原理很简单,下面直接上程序了: # *_*c ...

  2. 人脸检测、人脸跟踪、人脸识别、OpenCV(特征脸、LBPH、费歇脸)

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) Face_Detection.py# 导入OpenCV库 im ...

  3. 人脸检测江湖的那些事儿——从旷视说起

    点击我爱计算机视觉标星,更快获取CVML新技术 本文来自知乎Face++ Detection组专栏,52CV获作者王剑锋授权转载. https://zhuanlan.zhihu.com/c_10659 ...

  4. CVPR2021 最具创造力的那些工作成果!

    点击下方"计算机视觉联盟",一起进步!重磅干货,第一时间送达 大家好,终于肝出来了! 无论是不是你的研究方向,这次希望能给打工人周末依然在拼的人点个赞和在看!谢谢啦 今天分享的内内 ...

  5. CHI论文阅读(1)EmoGlass: an End-to-End AI-Enabled Wearable Platform for Enhancing Self-Awareness of Emoti

    文章目录 abstract introduction Related Work 用于健康感知的智能眼镜 情绪感知和检测 通过可穿戴设备进行面部表情识别 Hardware Design Form Fac ...

  6. 「唇语识别技术」看不透TA的心,但可以听懂TA的话

    导读 唇语识别有着极长的历史.古代的唇语师通过长期的训练,具备了"观察别人的嘴型,解读其表达语句"的能力.在现代社会里,一些听力障碍者们也会使用这种技巧与他人交谈,补充听力器官的不 ...

  7. 唇语识别技术的开源教程,听不见声音我也能知道你说什么!

    作者 | Amirsina Torfi.Seyed Mehdi Iranmanesh.Nasser M. Nasrabadi 译者 | 清爹 整理 | Jane 出品 | AI科技大本营 [导读]唇语 ...

  8. 面部表情识别java_使用Python+OpenCV+dlib为人脸生成口罩

    来源:深度学习与计算机视觉 本文约4800字,建议阅读6分钟本文试图用OpenCV和dlib库来实现这个过程,在这里我们综合生成5种类型的口罩来绘制人脸图像. 本文使用OpenCV dlib库生成口罩 ...

  9. python dlib学习(四):单目标跟踪

    前言 dlib提供了dlib.correlation_tracker()类用于跟踪目标. 官方文档入口:http://dlib.net/python/index.html#dlib.correlati ...

最新文章

  1. 洛谷 P3627 [APIO2009]抢掠计划 题解
  2. SAP Kyma上创建的Lambda function背后的技术实现
  3. Flash 生命终止,HTML5能否完美替代?
  4. php 价格计算方法,PHP算法逻辑:如何计算购买量?
  5. 【Matplotlib】 标注一些点
  6. .NET Core WebAPI Swagger使用
  7. 使用java实现冒泡排序和选择排序
  8. Comparable接口
  9. 公众号文章发送pdf文件 pdf文件如何变成导出图片
  10. 乌班图 修改ip_unbuntu(乌班图)虚拟机修改ip地址NAT模式
  11. java crc8_Crc8算法
  12. android app 检测是否开启了开发者模式
  13. java中json获取key值_如何获取JsonObject中key的值
  14. javascript学习心得
  15. NFT 数字藏品 3D 展示方案(obj、mtl、png)引用 three.js
  16. 50万美元的1PB存储机柜是个什么样子
  17. python根据出生日期计算年龄的源码
  18. react中css样式表无效
  19. getPhoneNumber:fail no permission
  20. 怎样把COFFEEscript 编译成JS

热门文章

  1. @zxing/library实现平板手机扫码功能(二维码+条形码)
  2. b区计算机复试国家线,今年调剂太恐怖 B区考研分数线竟比A区高?
  3. Android Tag-Cloud (云标签) 效果
  4. WINDOWS下多个桌面切换
  5. 颜值高的游戏键盘—HyperX Alloy Origins 60 霓虹粉游戏机械键盘
  6. java不属于约束,【单选题】在Java中,以下哪个约束符可以用来定义成员常量()。 A. static B. finally C. abstract D. final...
  7. 无需公网IP,在外远程访问NAS威联通QNAP【内网穿透】
  8. 如何将excel里的数据导入到mysql中
  9. cad计算机绘注意事项,CAD打印的基本操作和重要的注意事项
  10. 爬虫从头学之Requests+正则表达式爬取猫眼电影top100