去年11月份,苹果发布了iphoneX, Animoji功能挺强大的。于是本人在音视频开发学员QQ群中发布了如何自己去做一个animoji,动态贴纸之类的应用的方法。很多同学都做了一些尝试。 但有一些问题。作为讲课老师,我肯定也要亲自去写一写这样一个小软件。但是这个过程中,也有一些问题,经验,列出来。供大家参考。

视频链接: MacOS/PC版:  https://www.bilibili.com/video/av52641481/  移动版: https://www.bilibili.com/video/av52641358/

移动版2:   https://www.bilibili.com/video/av52641953/

一个苹果的animoji ,贴纸,换脸应用, 核心功能无非是facetracking + OpenGL渲染引擎+ 音视频录制。

1: Facetracking,有很多成熟的算法,比如CLM,3000fps,CLNF,SDM等.但是也需要自己标定数据。 自己标定数据,也有问题,就是标定的数据的精准度问题。中途记得我提供了标定软件,让几个群里的同学帮忙标定,每个人每天手动标定10张,但结果不尽如人意。

后来我自己动用了几个人,标定了5万张左右的图片。 训练了一个模型,结果还行,虽然比不上face++所宣传的效果(没用过face++),但基本可用。最近一年行业普遍用深度学习来做人脸对齐,动辄几十万张标定的图片数据,效果非常棒。

2: 关于OpenGL渲染引擎,有实力的公司当然可以自己写,当然也有很多开源的游戏引擎可以参考,比如cocos2dx, gameplay,godoit,Urho3D等。当然,对于程序员来讲,无论iOS,Android,Mac,Win,做客户端开发,c++非常友好,是首选。

但是我选了一个最简单容易使用的。 unity3d。个人从未接触过c#,但依然保持了程序员优良的传统,一周内上手任何开发语言。其实深入接触发现,C#蛮好用的。但是u3d其实真正写项目的时候,坑也还是蛮多的。如果要集成,打包作为一个sdk,给别人用,我还是会选择用C++开发的gameplay,这个黑莓当年开源的游戏引擎。自己可控性更高。支持所有平台。拿过来可以自己参考,改很多东西。

(注: 最新代码已经放弃写好的U3D,改用一套开源的C++游戏引擎进行代码重构)。 主要考虑到两个方面, 1: 我们要实现1080P 甚至4K的实时视频画面编码输出为mp4,(iOS/Android/Mac均可以用硬件编码).U3D的Texture2D.ReadPixels严重性能缺陷,当然可以自己写OpenGL/Metal插件。2018.3版本支持什么Asynchronous GPU readback 暂时没去尝试. 2:U3D不支持Fbx运行时加载. 只支持它那一套Asset打包方式运行时加载场景模型资源. 3: 封闭收费。不可控。

用u3d的好处就是,开发环境非常友好,相对容易一些。开发速度快一些。坏处就是要付费,我还专门给了2000左右的年费。 而且自己不能改。

用unity3d的另外一个问题,就是facetracking的代码是c++写的,而且有用到OpenCV,必须将OpenCV移植到unity上去。对一些OpenCV常见的接口进行封装。

虽然有付费的OpenCV for c# project,可以拿过来用,但是提供的接口是c#,而我需要的是自己封装 ,将OpenCV +facetracking一起针对每个平台编译成库,封装成一套接口,给unity3d当插件用。 付费的OpenCV for Unity3D,接口的是c#,根本没办法用。所以还是得自己做。

所以做的事,还是蛮多的。当然,第一个能跑原型做出来,差不多用了一个月。去年12月份。每天晚上回来做。

3:   mp4视频录制。 其实就是屏幕录制。 选择是ffmpeg+x264+faac+openAL. 这一套东西在windows,linux上跑莫得问题。但是在iOS,mac上,音频采集得用iOS,mac平台自己原生的。在安卓上,音频实时采集,用OpenSL比较好。安卓的rgb转yuv,用libyuv,效率会高很多。aac实时转换还是用libfaac. 屏幕录制,其实也是个难点,比如我需要对指定的区域进行录制。记得有个公司专门做了一个屏幕录制sdk,成立了一个公司。叫shareRec什么的忘记了。(最新iOS/Android/Mac均采用硬件编码).

我们做音视频的,肯定不能用别人的,哪怕免费的。所以都是全部自己做。

所以别看一个苹果的animoji, 动态贴纸。 真正去做,可以拆分成很多小功能。而这些小功能,可能是某公司的核心主打产品。

4: 关于3D动画,贴纸制作。3D 面部表情,我们可以用传统的骨骼动画,也可以用Blendshape, 基于顶点的形变动画. 这里,给大家推荐一个非常好用的免费的开源3D软件. Blender.  对于一些复杂的3D模型,我们可以用雕刻辅助,然后重新拓扑。这样建模就非常简单,可以做出非常复杂的模型。 当然,国内大家还是用ZBrush+Maya(Max). 都一样。贴纸,可以用3D的,也可以用2D的. 2D贴纸制作,本人用Inkscape + GIMP,当然也可以用Photoshop. 做个视频配音什么的,可以用苹果的iPad版本的GarageBand. 视频剪辑Finalcut pro.

 

这样一个小程序,所有的内容,都是一个人业余完成。 包括3D小动物制作。Icon设计。

关于3D雕刻,建模,关注我的同学,可以看我的大量的免费教程。B站,优酷都有。搜 深圳阿超。当然我是业余的。我的本质工作是c c++音视频程序员。业余致力于推动开源软件Blender,GIMP,Inkscape在国内的普及。

 

最后,广告下:音视频开发教程。 咨询QQ:347181469

https://edu.csdn.net/course/detail/2314

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐