基于Python和opencv实现抖音上墨镜和烟卷效果

person 匿名

发布日期: 2019-07-11 14:00:18 浏览量: 154
评分:
star star star star star_border star_border star_border star_border star_border star_border
*转载请注明来自write-bug.com

一、项目简介

现今较火的抖音上有一个十分有趣的特效,其可以自动检测出人脸并且放置墨镜和烟卷,鉴于此,想自己实现动手实现以下该特效的制作。

二、工作环境

Python 3.6,opencv+Dlib,Windows操作系统,pycharm

三、流程

  • 从摄像头获取视频流,并转换为一帧一帧的图像,然后将图像信息传递给opencv这个工具库处理,返回灰度图像。

  • 程序启动后,根据监听器信息,使用一个while循环,不断的加载视频图像,然后返回给opencv工具呈现图像信息。

  • 创建一个键盘事件监听,按下”d”键,则开始执行面部匹配,并进行面具加载(这个过程是动态的,你可以随时移动)。

  • 面部匹配使用Dlib中的人脸检测算法来查看是否有人脸存在。如果有,它将为每个人脸创建一个结束位置,眼镜和烟卷会移动到那里结束。

  • 然后我们需要缩放和旋转我们的眼镜以适合每个人的脸。我们将使用从Dlib的68点模型返回的点集来找到眼睛和嘴巴的中心,并为它们之间的空间旋转。

  • 在我们实时获取眼镜和烟卷的最终位置后,眼镜和烟卷从屏幕顶部进入,开始匹配你的眼镜和嘴巴

  • 假如没有人脸,程序会直接返回你的视频信息,不会有面具移动的效果。默认一个周期是4秒钟。然后你可以通过”d”键再次检测。

  • 退出程序按下q键。

四、关键代码

  • 创建面具加载服务类DynamicStreamMaskService及其对应的初始化属性:

  • 读取摄像头视频流并转化为图象:

  • 实现人脸定位函数,及眼镜和烟卷的定位:


  • 接下来实现画图函数:

  • 创建启动函数start:

五、运行结果

运行后,首先会打开摄像头,然后按下键盘d键,就会看到墨镜和烟卷从屏幕上方出来,自动定位到眼睛和嘴巴。参考结果如下:

图片经过马赛克处理了。

注意

代码中需要调用
shape_predictor_68_face_landmarks.dat人脸库,需要下载,然后在代码调用处中指定路径即可。

上传的附件 cloud_download face_control.rar ( 46.62mb, 0次下载 )
error_outline 下载需要15点积分
eject