产品战略专家梁宁确认出席AICon北京站,分享AI时代下的商业逻辑与产品需求 了解详情
写点什么

AI 在 RTC 中的四大技术应用方向

  • 2019-11-30
  • 本文字数:3559 字

    阅读完需:约 12 分钟

AI 在 RTC 中的四大技术应用方向

大到无人驾驶、智能物流,小到人们出国旅游手上拿着的翻译机,AI 早已从曾经的天马行空变得触手可及。AI 也成了很多公司未来的核心战略,并应用到了产品中。其实,在 RTC 领域亦是如此。


提到 RTC 中的 AI,你可能还会记得今年 RTC 领域中的热门话题超分辨率。前几天,据说某款手机已经将其应用于调节照片远景放大后的清晰度上。我们也曾有不止一位演讲人,曾在 RTC 2018 中分享过将超分辨率应用于实时音视频中的研究。不过,超分辨率只是 AI 在 RTC 中的一个应用而已。


概括来讲,目前 AI 与 RTC 的结合点有四个:


  • 语音分析:使用机器学习分析,将实时音视频中的语音转录为文本、字幕。

  • 语音机器人:在对话框中与用户交互的语音机器人,输入与输出皆通过语音,比如 Siri、Alexa、Cortana 等。

  • 计算机视觉:处理视频,分析和理解视频中的内容。

  • RTC 优化:用于提高服务质量或性能的机器学习算法模型。

1 语音分析(Speech Analytics)

如果你对今年 Google I/O 有印象,你可能还会记得官方曾经做过一段演示,YouTube 可以根据视频的图像和声音,将视频内容翻译并以字幕形式显示出来。而且,Google 在语音识别、分析方面做了优化,即使视频中口音模糊,也能根据视频内容进行智能翻译,最终显示为字幕。应用于其中的一个重要技术方向就是语音分析。


在 RTC 中,语音分析主要的应用形式包括电话中心智能语音交互、语音转文本、翻译等等。语音分析是一个相对成熟的技术应用方向,也是一个多学科应用于实际的范例。它涉及了信号处理、模式识别、概率论和信息论、发声机理和听觉机理、深度学习等。就像 Google 所做的,我们可以将它应用于自己的视频会议、视频通话、直播连麦等一系列实时音视频场景中。如果想快速实现,市场上有很多 API 可以帮助到你;如果你的团队技术实力雄厚,那么也有几个比较著名,也比较老的开源工具可以使用。


业界有不少公司都能提供语音分析功能,例如国内的讯飞、百度、搜狗等,再例如 Google Speech API 和 Facebook 推出的 wav2letter 等。Agora 开发者也完全可以基于 SDK 的接口与这些语音识别、分析服务结合,实现创新场景。



如果自研,那么也有不少可以参考的算法模型。例如这 4 个“历史悠久”的语音识别相关的开源项目与非开源项目:HTK、CMU Sphinx、Julius、Kaldi。我们逐一简单介绍下。

1. HTK

首先 HTK 并不是开源项目,它是由剑桥大学工程学院(Cambridge University Engineering Department ,CUED)的机器智能实验室于 1989 年开发的,用于构建 CUED 的大词汇量的语音识别系统。HTK 主要包括语音特征提取和分析工具、模型训练工具、语音识别工具。1999 年 HTK 被微软收购。2015 年 HTK 发布了 3.5 Beta 版本,也是目前最新的版本。

2. CMU-Sphinx

CMU-Sphinx 是卡内基-梅隆大学(CarnegieMellon University,CMU)开发的一款开源的语音识别系统。它包括了一系列语音识别器和声学模型训练工具,被称为第一个高性能的连续语音识别系统。Sphinx 的发展也很快,Sphinx4 已经用 Java 改写,所以适合嵌入到 Android 平台。

3. Julius

Julius 是日本京都大学和 Information-technology Promotion Agency 联合开发的一个实用高效双通道的大词汇连续语音识别引擎。Julius 通过结合语言模型和声学模型,可以很方便地建立一个语音识别系统。Julius 支持的语言模型包括:N-gram 模型,以规则为基础的语法和针对孤立词识别的简单单词列表。它支持的声学模型必须是以分词为单位,且由 HMM 定义的。HMM 作为语音信号的一种统计模型,是语音识别技术的主流建模方法,正在语音处理各个领域中获得广泛的应用。Julius 由 C 语言开发,遵循 GPL 开源协议,能够运行在 Linux、Windows、Mac:OS X、Solaris 以及其他 Unix 平台。Julius 最新的版本采用模块化的设计思想,使得各功能模块可以通过参数配置。

4. Kaldi

Kaldi 是 2009 年由 JohnsHopkins University 开发的,刚开始项目代码是基于 HTK 进行的开发,现在是 C++ 作为主要语言。Kaldi 的维护和更新非常及时,几乎每一、两天就有新的 commits,而且在跟进学术研究的新算法方面也更加快速。国内外很多公司和研究机构也都在用 Kaldi。


上述几种语音识别开源代码是基础的开源版本,基于这些版本诞生了不少衍生的版本,比如 Platypus、FreeSpeech、Vedics、NatI、Simon、Xvoice、Zanzibar、OpenIVR、Dragon Naturally Speaking 等。

2 语音机器人

现在很多呼叫中心都引入了 IVR(互动式语音应答),顾客可在任何时间打电话获取他们希望得到的信息,当遇到无法解决的问题时才转入人工坐席。它可以提高服务质量、节省费用。


但它自身也存在着问题。你可能也遇到过,有时候打给一个客户中心,语音提供了多个选项让你选择,可当你听到第五个之后,就忘了之前的选项都有什么,以至于还要再听一遍。所以很多呼叫中心会把菜单设计成更少选项更多层级。但这会让用户的交互过程变得更长。


所以语音机器人开始成为呼叫中心的新选择(也可能有人管它叫智能客服或其它名字)。用户只需要说出想要什么,它就能根据关键信息筛选出用户想要的信息,就好像电话那头多了一个 Siri。



当然,Siri 也是是除了呼叫中心以外,语音机器人的另一种应用形式。目前已经有很多公司都推出了相应的产品或接口(如上图所示)。不过,要建立一个能与人自然交流的语音机器人,从架构、音频处理到算法模型的训练等,需要面对很多问题:


  • 处理噪音

  • 处理方言和自定义词汇表

  • 语音验证

  • 处理延迟

  • 使用 SSML 进行更自然的语音合成

  • 模型训练

3 计算机视觉

现在计算机视觉的应用应该已经很常见了,例如:


  • 面部识别

  • 物体检测

  • 手势识别

  • 情感分析


我们曾在年初的时候分享过两篇文章,讲述了如何结合 WebRTC 与 TensorFlow 实现物体识别,这是一位开发者的实验。大体过程是,每秒将视频图像经由 HTTP 传输到服务器端,然后通过服务器端的机器学习算法模型处理后得出检测结果,再反馈给本地,具体代码可以看我们之前的文章。


不过这个实验仍然存在很多的局限,如果图像质量过高,会需要更多传输、处理的时间,这会影响检测的实时性。所以,后来有人提出了可以在本地进行图像识别。



上图是一个基本架构,如果你感兴趣,也可以尝试一下。它利用了 google 的 AIY 硬件工具来运行 DNN。也就是说,当你采集到视频之后,可以在本地进行处理,那么就无需担心图像识别的实时性问题了。

4 对 RTC 的优化

利用 AI 可以在实时音视频方面做很多事情,例如利用超分辨率来提升实时视频中模糊图像的细节,给用户呈现更高清的视频效果,提高视觉体验;同时,由于网络传输线路上有丢包,接收的数据有失真,所以 AI 也被用来做算法补偿,提升传输质量。


超分辨率是通过深度学习来提高其分辨率,进而改善实时视频图像质量的技术。为什么需要这项技术呢?因为尽管现在用户都在高分辨率模式下获取图像,但在实时传输过程中,视频编码器可能会降低分辨率,以匹配可用带宽和性能限制。由于这个处理机制,导致图像质量通常会低于实际拍摄的质量。而超分辨率的目的就是将视频质量恢复到原始状态。


超分辨率在整个实时音视频传输过程中属于后处理中的一步。视频源经过编码在网络上传输,解码器收到后经过解码出来是一个相对模糊的图像,经过超分辨率处理把细节提升或者放大,再显示出来。


现在很多的实时视频场景都发生在移动设备上,所以对于一个深度学习算法模型来讲,需要模型体量尽量要小,这就需要面对三个主要的挑战:


  • 模型能够实时运行于移动设备上,且尽量降低功耗,避免引起发热等问题。

  • 模型小,但性能要好,可以得到足够好的结果。

  • 训练要能够基于比较合理数量的数据集。


我司的首席科学家钟声曾在 上海的 DevFest 活动和美国的 Kranky Geek 上分享过相关话题的演讲。如果你希望深入了解,可以查看我们过去的分享。


除了超分辨率,开发者们还可以利用无监督学习来分析通过 WebRTC 的 RTCStats 接口收集到的数据,从而来确定影响通话质量的原因。也可以用 TensorFlow 来分析并规范化 MOS 数据。



上图所示是一个常规的降噪算法的处理逻辑,但在以后,,Mozilla 曾推出过一个 RNNoise Project,利用了深度学习,帮助 WebRTC 用户,特别是在嘈杂环境中进行多方通话的用户实现更好的降噪效果。他们也在官方提供了一个 Sample,与 Speexdsp 的降噪效果进行对比。在 Sample 中,他们模拟了人在马路旁、咖啡馆中、车上的通话效果,然后用不同的方式进行降噪处理。你会明显听出,通过 RNNoise 降噪后,无人说话时几乎听不到噪声,而在有人说话时,还是会有轻微的噪音掺杂进来。如果你感兴趣,可以去搜搜看,体验一下。你可以在 xiph 的 Github 中找到它的代码。尽管这只是一个研究项目,但提供了一种很好的改进思路。


尽管举了这么多的研究案例与开源项目,但 AI 在 RTC 行业的应用还只是刚刚开始。


本文转载自公众号声网 Agora(ID:shengwang-agora)。


原文链接:


https://mp.weixin.qq.com/s/_KqrBhth0CDN53u1YpMLKw


2019-11-30 14:131540

评论

发布
暂无评论
发现更多内容

Spring Boot 集成 Elasticsearch 实战

Java 程序员 后端

fastposter 2.2.0 新版本发布 电商级海报生成器

物有本末

Java Vue 海报 fastposter 海报生成器

Spring boot —— 创建parent工程

Java 程序员 后端

Spring Boot 实战(11)整合MyBatis-Plus

Java 程序员 后端

外包学生管理系统详细架构设计文档

Beyond Ryan

Spring MVC温故而知新 – 从零开始

Java 程序员 后端

Spring Boot 快速入门(一)

Java 程序员 后端

Spring Boot在微服务中的最佳实践

Java 程序员 后端

Spring Boot 核心的 25 个注解

Java 程序员 后端

Vue进阶(幺柒伍):色彩搭配

No Silver Bullet

Vue 11月日更

Spring Cloud Gateway限流实战

Java 程序员 后端

Spring Cloud:第二章:eureka服务发现

Java 程序员 后端

Spring @Lookup实现单例bean依赖注入原型bean

Java 程序员 后端

Spring Boot 中三种跨域场景总结,这篇必看!不看后悔系列

Java 程序员 后端

Spring--基于AOP实现事务控制

Java 程序员 后端

Spring Boot 接入 GitHub 第三方登录,只要两行配置!

Java 程序员 后端

Spring(一):容器的实现——两大核心类

Java 程序员 后端

spring boot 自定义配置文件&参数绑定

Java 程序员 后端

Spring Boot + EasyExcel 导入导出,好用到爆!

Java 程序员 后端

来,带你一次性搞懂数据分析和数据挖掘!

博文视点Broadview

Go WebSocket开发与测试实践【/net/websocket】

FunTester

Java websocket 接口测试 Go 语言 FunTester

Spring 三级缓存和循环依赖 思考和总结

Java 程序员 后端

Spring Cloud Gateway修改请求和响应body的内容

Java 程序员 后端

Spring MVC框架:第六章:传统增删改查

Java 程序员 后端

Spring Cloud 2020 版本最佳实践,你落伍了

Java 程序员 后端

Spring MVC框架:第七章:REST架构风格(1)

Java 程序员 后端

Spring MVC框架:第七章:REST架构风格

Java 程序员 后端

【LeetCode】合并两个有序数组Java题解

Albert

算法 LeetCode 11月日更

Spring+SpringMVC+Mybatis框架整合(SSM整合)

Java 程序员 后端

Spring Boot 操作 Redis 的各种实现

Java 程序员 后端

Spring Boot+Mybatis+thymeleaf整合

Java 程序员 后端

AI 在 RTC 中的四大技术应用方向_AI&大模型_声网_InfoQ精选文章