3.1 ffmpeg工具    这个工具是一套开源的计算机程序,用于记录、转换数字和视频,并将其转换为流。也可以将视频转换为图片,这是没有问题的。之后就用这个进行视频帧的抽取和转换吧。先抽帧:
image.png
每秒按30帧来算了,抽帧完成。
image.png

3.2 将源程序进行一个功能性处理
目的是只运行output那一部分,其余部分不运行。
经过尝试,发现逻辑是不对的,之前想的是再程序里运行。但程序的运行逻辑是先载入图片,然后再人脸识别,之后就永远在这个图片的框架下运行了,这和我们的目的是矛盾的。所以我还是用python运行这个程序吧。
现在先验证一点,output能不能脱离render运行呢?
发现是可以的。
于是编写逻辑:在main函数中插入两个命令行参数,分别是输入图片路径和输出路径,然后opencv把图片输出到指定路径就行了。
用python写了一段循环,用来遍历所有的图片,然后挨个输入输出就行了。

image.png

然后一点一点输出出来就行了。

image.png

然后再回退回视频:
ffmpeg -framerate 30 -i ./outputimage/processed_output_%04d.png -c:v libx264 -r 30 -pix_fmt yuv420p output_video.mp4

最终生成的效果:

image.png

两个视频,生成完毕。
接下来的目标就是测试开源的OpenFace的landmarks参数抓取效果是怎么样的了。
3.3 Openface安装与测试
我感觉在我这台电脑上够呛了,换成大服务器吧。
安装教程:
https://blog.csdn.net/hongbin_xu/article/details/80223992?spm...
服务器上安装也够呛了,环境怕被弄乱,还是在内网主机上操作吧。

在内网主机上,获取到这个工具,然后就按照这个网页中的命令执行就可以了。
https://github.com/TadasBaltrusaitis/OpenFace/wiki/Command-line-arguments
所以下一步要做的事情就是学习这个命令,然后再把我们的图片输入进去,再输出出来。
3.3 OpenFcae工具使用说明

image.png

1,先将我的照片挪到内网里面去。
2,再用以下命令生成标记后信息:

   FaceLandmarkImg -fdir ./image

3,再用以下命令进行一个提取;
mv output_????.jpg ../result
4,最后再进行一个展示就完事了。
3.4 抽取Openface的关键landmarks信息

只用一张图片的信息抽取其中的landmarks信息,然后导回到之前的程序中,再看看美颜效果是怎么样的。接下来的工作就做这个了。
那个数据已经整理完成,但是传出来还是比较困难得,接下来还是弄明白这个GPUpixel中的landmarks是什么德行是一件比较重要的事情了。
失败的工具拉去,估计只能重新安装了。

image.png

在第一处是需要去将其注释掉,不让其对landmarks进行插手了。
可以看出来的是,这个output里面大有玄机,里面应该是有好多数据可以用的,但是在本程序中只有landmarks这个东西。
该变量是一个浮点型数组。

image.png

这一段说明了output.faceArr[0].facelandmarks[].x/.y保存了重要的信息。
而最有可能得一点是faceLandmarksNum的关键点数量并不固定。
不过看接下来的这个数据:
image.png
倒是感觉确实所言非虚,是有111个点的。
image.png

这个是111点的基础坐标,但要这基础坐标干嘛呀?
image.png

确实是106个人家的结果。
这106个文件之后去干嘛呢?
肯定这个美颜的滤镜是做了适配工作的。所以接下来就去看看,这些滤镜是如何适配这些点的。106到底有没有关系。
最终渲染的时候,是在这个位置传入的。

image.png

一切分析都抵不过跑一遍好。我觉得还是先架设起调试的环境吧。
image.png

调试环境架设完毕,接下来就一步一步捋一下这个流程。
经试验,深入不到里面的函数去打断点,只能在外面。
这个landmarks的值是一直不变的状态。

image.png

只要识别之后,之后就不会再变了。
之后就会被这个函数所回调:

image.png

进去之后:
image.png

被这个函数所调用,这个函数无法解析。

问题来了,landmarks是从1-221的数组,是没有脸什么的这些数据的。那这个滤镜是如何把脸上的数据给弄住的呢?

经过思考和推理:
是存在这个函数对landmarks数组索引的。

image.png

这个函数专门干的就是这个事儿。
标记专门的左眉毛(10),右眉毛(10),左眼(21)、右眼(21)、左脸颊(16)、右脸颊(16)、鼻子部分(16)、鼻子和嘴巴中间三角形(14)、上嘴唇部分(10)、下嘴唇部分(10)、唇间部分(8)、嘴巴和下巴之间的部分(24)。
就是根据这些索引来标记特定部位的。
那也就意味着,我用Openface的库只要生成这两部分文件,就能进行一个替换了。
所以接下来的第一步,就是找到landmarks的位置。
在之前生成cvs文件中,无法找到有效:

image.png
是不是之前的命令有所失所导致的呢?不太清楚。
再看看有没有其他的命令跑一次。

正式安装成功。

安装完成后,进行检测,发现了这个问题:

image.png

找不到相关的model。
https://blog.csdn.net/qq_51289776/article/details/135700211
遵循这个文档的操作下载模型之后,成了。

image.png
但是必须在bin文件夹下才可以。运行后,获取成功:

     Flandmarks -f  ../image -2Dfp

image.png

一共是67个坐标。


柬之不是剪枝
1 声望0 粉丝