最近由于论文写作需要涉及到人脸的提取操作,结合以前做过的人脸识别项目:Python自动识别人脸开机 和 ffmpeg 的影片逐帧提取功能,实现了自动提取电影中所有人脸的操作。

我们知道,机器学习、深度学习的算法需要数据量到达一定量级之后效果才比较好。所以我们今天的这个功能主要可以用于一些人脸识别算法的训练集、测试集提取。

1.准备

我们使用ffmpeg提取视频中的图片,它的安装方法如下:

1.1 (1)windows安装ffmpeg :

1.http://ffmpeg.zeranoe.com/builds/,点击 download build 按钮

2.解压 ffmpeg-20170418-6108805-win64-static.zip 文件到指定目录

3.将解压后的文件目录中 bin 目录(包含 ffmpeg.exe )添加进 path 环境变量中。添加方法:此电脑->右键->属性->高级系统设置->环境变量->编辑Path用户变量->新建-> 输入 bin目录的完整路径

4.进入 cmd,输入 ffmpeg -version,可验证当前系统是否识别 ffmpeg,以及查看 ffmpeg 的版本;如果可以,则说明安装成功。

1.1 (2)macOS安装ffmpeg:

1.Command+空格 搜索终端(Terminal)

2.输入以下命令安装homebrew:/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

3.输入以下命令安装ffmpeg:brew install ffmpeg

1.2 安装用于提取人脸的OpenCV模块:

如果你已经安装好了Python(如果没有的话请看这篇文章:超详细Python安装指南),打开CMD/终端(Termianl)输入以下命令即可安装:pip install opencv-python

接下来,让我们先学会从影片中逐帧提取图片。

2.提取图片

FFmpeg从视频中提取图片非常简单,而且功能很强大,能选择多少秒提取一帧,或者每秒提取X帧。

如果我们只需要1秒1帧,在CMD或Terminal中输入以下命令即可:ffmpeg -i 视频路径.mp4 -r 1 image-%5d.jpg

其中:

-r 1 代表每秒取1帧

image-%5d.jpg是指命名格式为 image-00001.jpg

如图所示:

58cb98084fb888d989ab76d88b890591.png

这样就能获得视频里的帧图:

45ef762175d08a7c1911647f38759259.png

3.从图片中提取人脸

如果你阅读过我以前的这篇文章:就会知道其实用OpenCV提取人脸是一件非常简单的事情。

它只需要你将图片使用 cv2.imread函数读取进来,然后再使用一个训练好的 分类器文件就能获得 人脸的位置。如下代码所示:

937b826a6b9fb20ba12ab1c990816e2b.png

获得了人脸的位置后,我们只需要将这部分位置写入到新的图片中即可:

c440cd35497239457b48b550db0f484d.png

怎么样,是不是特别简单?完整代码请在Python实用宝典公众号后台回复电影提取人脸下载。

最后让我们来看看效果:

1ac57ba9e47b287f6b1f4ad00e3b4159.png

大部分提取都是正确的,当然不排除有些例外出现,这时候你就要手动去除了,比如说这个(汗):

1d3071b58c1ea7bd5f941bdcae734ca2.png

您这也能分类成人脸???嗯???(不过仔细看还真挺像的)

如果你喜欢今天的Python 教程,请持续关注Python实用宝典,如果对你有帮助,麻烦在下面点一个赞/在看

5e8915fcd5654d6a515c10b1a4305040.gif,有任何问题都可以在下方留言,我们会耐心解答的!

点击下方阅读原文可以获取所有代码和链接哦!

Python实用宝典 (pythondict.com)

不只是一个宝典欢迎关注公众号:Python实用宝典67fdac934630aac34196425aa6542bbe.png

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐