本文来自花椒直播海外技术负责人唐赓在livevideostackcon 2017上的分享,并由livevideostack整理而成,在分享中唐赓详细介绍了直播的基本组成部分以及arkit、3d引擎、深度学习等技术在直播场景下的应用。
大家好,我是唐赓,现就职于花椒直播。主要负责ios和一些新技术的应用。本次的分享内容主要是介绍一下我们包括个人对直播这项新技术应用的一些看法。
1. 直播的基本组成部分
直播行业大约是在2015开始火起来,由于是刚起步,所以整个直播行业不是特别成熟。在早期时甚至会出现音画不同步等一些基础的问题。之后也做了很多的工作,比如直播视频秒开的优化,包括网络自适应、码率自适应、分辨率以及帧率的自适应。对于码率自适应,在点播的场景下,服务器会事先准备几段不同码率的视频,观众根据不同的需要、网络状况从服务器上拉取不同的码流。但是在直播的场景下,网络自适应更多的是发生在主播端,比如当主播的网络不太好时,我们就会根据上行的码流情况来实时的进行调整,包括调整视频的分辨率、码率、帧率。然后对于超大型的聊天室或者一些直播网站,就要求每个直播间能够承受百万量级并发的在线用户,包括私信、群组,这都是我们过去已经做过的一些优化工作。
随着直播行业的发展,单向的直播已经没有什么新意了,现在大家开始关注连麦、一对一的单聊、群聊等。这些功能在我们的app中都已经实现了,包括上层的展现,比如美颜、滤镜、瘦脸、大眼、人脸识别贴纸、3d头盔等等。我们在2015年5月份左右起步做直播,这些都是我们在这两年里做过的一些事情,目前这些功能已经逐渐成为直播app的标配,那么下一步该如何去做?在我个人认为至少可以关注以下方面,如augment reality,computer graphics、computer vision以及machine learning.,接下来将分别给大家介绍一下这四个方面。
2. augment reality
首先是人脸识别技术,从2016年开始已经初步实现,而我们可以说是第一个把这项技术应用到直播场景中的。2016年初,我们发现手机上实时的人脸识别非常消耗cpu内存,因此就可能导致直播卡顿,无法播放。为了解决这个问题,我们当时进行了非常多的优化,比如,最先在有限的手机资源之上实现了实时的人脸贴纸功能。但当时人脸识别的sdk普遍的cpu消耗都在50%以上,甚至苹果自己提供的人脸识别的消耗都在80%以上,而且抖动非常厉害。到了2017年,在不断的优化之后,人脸识别在手机上的应用就非常成熟了。
现在基于arkit、arcore、sensear或者是基于imu都可以实现很多玩法,比如利用ai/ar可以实现手势识别与真实场景的结合。那么ar可以怎么利用呢?从一些小视频可以看到,拍摄者与表演者以及一些动画效果要配合的很好才能实现ar特效,但是这些都是假的ar,而我们用ar技术就完全可以把这些做成真的。另外,基于ar在直播间里的视频上面展现一些广告或者好玩的东西,这实际也是比较经典的ar应用。
3. computer fraphics
ar可以反馈一些基本场景的认知信息,包括平面在哪里,墙在哪里等。那么如何在上面叠加这些场景,这就需要基于图形学的一些技术。最常见的就是基于opengl/metal提供的一些api去实现,当然也有利用像unity、unreal之类相对成熟的引擎,包括苹果提供的scenekit 3d引擎。另外就是利用一些开源的引擎,比如cocos2d-x、crystal space、blender game engine,它们的功能也都比较强。像cocos2dx目前已经发展出比较强的3d能力,它能够展现骨骼动画以及一些比较复杂的光影效果。如果能力足够也可以开发自制引擎,据我所知,国内的很多游戏厂商比如腾讯、畅游、搜狐,他们用的都是自己研发的强大引擎。
4. computer vision
直播行业目前对计算机视觉的依赖也变得非常的强烈。计算机视觉的开源实现主要体现在两个开源库,分别是opencv和dlib。opencv是由intel发布的一个非常强大的视觉库。包括实时计算机视觉、机器学习,包括一些图像处理、分析等基本都离不开它,而且它的代码实现非常的简单快速。dlib的使用非常方便,而且它自带了它所依赖的一些东西,包括网络、线程、gui、各种各样的线性代数、机器学习、图像处理等各种模块。它最大的一个优势是自带强大的人脸识别引擎。接下来可以看一下基于opencv和dlib实现的一些功能。
a.人脸朝向识别
从上面这幅图可以看到,根据dlib给出的人脸关键点坐标信息,计算出了人脸的朝向,人脸前面的这根红线就是显示出了人脸的朝向。基于人脸关键点坐标、朝向信息,就可以实现比较炫酷的3d头盔功能,此处例子的实现目前在网上有开源的代码可以进行参考。
b.精确估算手势位置和姿势
从上图可以看到,在直播中可以精确的估算主播的手指头的位置以及姿势,主播可以利用这种技术完成很多有趣的交互。
目前,在pc上已经可以实现对于一个场景中多个人的复杂的肢体运动的实时识别。但是面临的一个非常大的挑战是如何将这个能力内嵌到手机app中,如果能够做到这一点,那么就可以把主播跳舞之类的身体动作实时截取出来并与动画人偶相结合,会使得整个直播间显得非常生动。
5. machine learning
接下来简单介绍一下机器学习。机器学习在直播中已经有了很多的运用,比如人脸识别、物体识别、手势识别、背景分割抠像等,再进一步的运用就是实时翻译、跨语种连麦、画质改进以及自动生成主播漫画人偶。
机器学习的运用除了此前介绍到的一些前台功能,还具有后台功能,包括实时判断主播的性别年龄、颜值才艺类型、识别场景、口才打分、人气等。
下面几页ppt简单介绍一下深度学习的一些入门知识。上面展现的是google的一个neural network playground ,在playground.tensorflow.org上可以看到,可以尝试设计自己的神经网络,了解深度学习的过程。(demo)。实际上深度学习就是在不断地调整它的超参数,增加深度学习的深度以及细胞的数量。现在所谓的深度学习的研究实际上就是用各种各样的排列组合来找出一种网络结构能够更适合的解决某一类问题。
上面列出了各种开源的网络结构,它们都是由各种学术机构花了很多的时间精力找出的比较适合解决某些问题的网络结构。当网络结构越复杂时,训练模型的时间就越久。
这是一个简单的深度学习的例子,其中高亮的几行是对网络结构的描述。它使用keras/tensorflow训练模型,在进行了一千次迭代之后,误差就降到了千分之四,我们就可以认为训练出来的模型已经学会了异或运算法则。
前面例子中训练出来的模型可以直接放在coreml中使用,运行出来的结果可以在上图中的输出看到,所以说coreml开发过程是非常简单快速的。
上面这个例子也是实现判断异或功能,但是它没有依赖任何框架,只是利用了一个最基本的数学运算库,这个例子可以看到深度学习核心算法的工作原理,右边是训练跑出来的结果,可以看到最终得到的结果跟前面的一样。所以深度学习就是这么简单暴力。
综上所述,有这么多的技术等着我们去把它放到直播中使用,我觉得后面的前景还是非常广阔的,我们还有很多事情要去做。
索尼最新的旗舰相机是他们迄今为止最先进的无反光镜相机
转鼓格栅机轴头磨损如何修复
晶闸管两端并联阻容网络的作用是什么?
FPGA设计技巧,如何能有效降低静态功耗?
备降、延误 无人机扰航该如何治理?
ARKit、3D引擎、深度学习等技术在直播场景下的应用
基于LFSR伪随机数的FPGA产生
新宙邦6.58亿天津“落子”:续航新锂程 再创芯篇章
小米Play参数全面曝光并没有采用4800万像素镜头
董明珠: 在5G手机技术研究上实现突破,为格力5G手机推出奠定基础
苹果13什么时候上市什么配置
静态时序分析基础知识
科隆新能源提升研发实力,为我国绿色低碳发展贡献力量
解析VR前景,为何VR的春天迟迟不来?
工业富联独角兽光环退散,工业互联网之路漫漫且修远
Python中pyzxing安装与测试方法
电脑主板电池没电引起的故障检查修理_提示CMOS电池电量不足怎么办
为什么说华为云CDN更值得选择?
连接器端子压接:看似简单,其实其中有门道……
海关对一批申报出口的涉嫌侵权集成电路进行立案调查