AI文本朗读应用(一)

案例介绍

随着NLP(Natural Language Processing)技术的发展,NLP的应用场景正在逐渐扩大,这大大地方便了我们的生活。其中,TTS(Text To Speech)的应用在生活中极为广泛。

在过去,许多城市的公交及地铁报站的语音皆为人工录制,线路的临时变更等各种因素导致不得不多次重复录制语音内容,但是应用TTS技术之后,我们可以轻易地生成语音,而无需重新录制语音内容。再者,如今各类手机厂商、智能家居系统、车载系统等的语音助手也在广泛应用该技术,这让你的手机、音响和你的车可以开口"说话"了。曾经科幻电影才有的情景,突然就在不知不觉间成为了现实。

对于个人而言,TTS也极大地改善了我们的生活。在过去,对于视障人士而言,阅读是一件极其困难的事情,因为他们需要首先先学习盲文,并且只能购买资源十分有限的盲文书籍来阅读。而且,由于盲文的表达能力不及自然语言,阅读盲文的速度也不及正常阅读的速度,这进一步影响了他们的阅读体验。然而,利用TTS技术,我们可以轻易让计算机朗读现有的电子版书籍,从而帮助他们实现无障碍"听书"。再者,对于工作繁忙的上班族,他们也可以利用平时在路上通勤的时间听书,让通勤不再枯燥。

由于现在TTS的技术已经较为成熟,微软就提供了完整丰富的TTS-api,让我们无需关注TTS内部复杂的实现,这极大地降低了企业或个人开展TTS相关业务的难度。在此案例中,我们将学习如何利用微软的TTS-api快速构建一个文本朗读的桌面应用程序,从而实现“听书”。

先修知识

无需先修知识。

我们在案例中使用的微软的认知服务(Cognitive Services)下的语音服务,可以让我们在不了解TTS知识的情况下,快速实现TTS功能,完成桌面应用的开发。

什么是Azure认知服务?

Azure 认知服务是 API、SDK 和服务,可帮助开发人员生成智能应用程序,而无需具备直接的 AI 或数据科学技能或知识。开发人员使用 Azure 认知服务能够轻松地将认知功能添加到其应用程序中。Azure 认知服务的目标是帮助开发人员创建可以看、听、说、理解甚至开始推理的应用程序。Azure 认知服务中的服务目录可分为五大主要支柱类别:视觉、语音、语言、Web 搜索和决策。

了解更多

案例核心知识点

该案例涉及了以下几个知识点:

  1. TTS-api的申请和使用

  2. TTS应用的构建

  3. TTS功能的实现

上述内容将会在应用的构建中涉及。

虽然我们的案例并没有涉及TTS核心技术的开发,但是在开始之前,我们还是有必要简单了解TTS的基本原理。TTS的实现涉及了极其繁多和复杂的步骤,在看完之后,你或许能够体会到TTS核心技术开发的困难所在,从而理解利用一个TTS-api究竟能给开发者带来多大的便利。

TTS基本原理

传统常见模型

TTS的常见模型通常将文本转语音任务分解成两个部分:文本分析(Text Analysis) 和 语音合成(Speech Synthesis)。先是对输入的文本进行分析,提取出用于生成语音的信息,再利用特定的算法合成出语音。

1. 文本分析

该部分主要是对输入文本进行分析,提取出语音合成必需的信息,如音素、语调等。

通常有以下几个步骤:

  • 利用语句切分算法,将输入的文本切分成独立的语句

  • 对于每个句子,我们需要进一步分析词语,将句子分词成连续的Token序列

  • 分析Token,由于Token可能包含数字、日期等非自然语言,因此我们需要使用一定的规则将这些非自然语言转换成自然语言

  • 进行基础的语音语调分析,如找出语句中的重点部分等

其中,上述的每一个步骤都有各自的算法,对于不同的任务可能有着对应不同的实现,由于篇幅有限,在此不再展开,感兴趣的同学可以查阅《Text-to-Speech Synthesis》。

2. 语音合成

该部分的工作是利用文本分析提供的信息,合成出相应的语音。由此可见,如果文本分析提取的信息不够准确,势必会导致生成的语音效果不佳。除此之外,不同的语音合成算法也会对生成的语音的效果有影响。

目前,语音的合成主要有以下几类方法:

  1. 波形拼接法

    在合成之前,我们会预先录制大量语料,预先录制的语音可以通过波形片段的形式储存在数据库。在合成阶段,我们需要把我们分析出来的词语编码为音素,再通过查询预先录制的语音数据库,找出尽可能匹配的声音波形片段。当选出特定的波形片段序列后,我们可以使用信号处理的方式将它们拼接在一起,形成连续的声波语音。通常来说,拼接法生成的语音最为自然。常见的方法有:单元选择合成(Unit Selection Synthesis)、双音合成(Diphone Synthesis)、特定领域合成(Domain-specific Synthesis)。

  2. 参数生成法

    参数生成法是通过分析语音中的参数如基频、发声、音长等,建立声学模型,再使用不同的参数组合转化为声波。参数生成法在生成语音时不会像波形拼接法一样,使用预先录制的语音,而是通过参数和模型生成一段语音。当然,利用这种方法也需要预录制语音,但是需要录制的内容会少于波形拼接法,且录制下来的内容主要用于学习参数,不直接用于生成内容。常见的方法有:共振峰合成(Formant Synthesis)、隐马尔可夫模型合成(Hidden Markov Model Synthesis)等。

深度学习方法

除了传统的常见模型以外,如今也有不少团队尝试使用深度学习来实现TTS。深度学习的方法通常不会明显地划分文本分析和语音合成部分,而是利用了深度神经网络(Deep Neural Networks),通过特定的网络结构和训练大量的文本和语音数据,实现端到端的文本转语音。例如,Google的Tacotron、DeepMind的WaveNet等。

其他模型

1. 信号到信号模型(Signal-to-Signal model)

在此模型里,处理过程可以看作直接将文本信号转换为语音信号,而不再显式地划分文本分析和语音合成的阶段。例如,上述的深度学习方法。其中,谷歌的深度学习模型Tacotron便是实现了端到端的TTS转换。

2. 流水线模型(Pipelined model)

熟悉编译原理的同学应该会对此模型比较熟悉。流水线模型将任务划分了不同的模块,每个模块负责特定的任务,上个模块的输出将作为当前的输入,当前的输出也将作为下个模块的输入。许多Signal-to-Signal的模型便是使用了流水线模型来实现的。

我们在这里只提到了部分模型,更多的模型请查阅《Text-to-Speech Synthesis》。

环境与工具

操作系统:Windows 10

开发环境:Visual Studio 2019

开发语言:C#

注:在安装时,请确保已勾选“.NET 桌面开发”。Visual Studio 2019

推荐学习时长

该案例推荐学习时长为:1.5小时

应用的构建

该案例利用了Azure的TTS-api服务构建了一个文本朗读的桌面应用程序,实现了中文文本转语音,并能够保存生成的音频文件。

构建分为以下几个步骤:

  1. 申请TTS-api

  2. 构建窗体界面

  3. 调用api实现TTS

申请TTS-api

Azure提供了30天的免费使用版,如果需要注册免费试用,请转到试用认知服务或参考 B04-定制化-语言理解应用案例-智能家居 中的申请试用语音转文本。

  1. 完成注册或登录Azure账户之后,请按照在Azure中创建语音资源的指引申请TTS-api。

  2. 完成TTS-api的申请后,登录Azure主页,点击“最新资源”下的“TTS-api”。

  3. 进入“TTS-api”后可以查看自己的Key终结点,你需要记下它们,因为这将在后续的开发中使用。

构建窗体界面

  1. 打开Visual Studio 2019,选择“创建新项目”。

    选择语言为“C#”,选择“Windows窗体应用(.NET Framework)”。

    修改项目名称为“TTS_Demo”,点击“创建”。、

  2. 点击左侧“工具箱”,选择“公共控件”,选择“Button”。

    将“button”拖至右侧界面中适当位置,调整大小至合适尺寸。

    右侧属性框可以设置按钮属性。将Text设置成“保存”,Font设置成“微软雅黑, 10pt”。

    将Design中的Name设置成“saveButton”。

  3. 按上述方法依次创建按钮“播放”、“生成”,并放置到适当的位置,将其属性框内Design中的Name分别设置成“playButton”、“transferButton”。

  4. 在“工具箱”中选择“TextBox”,拖至右侧界面中适当位置。在属性框内的Behavior中的Multiline设置为“True”。在界面中调整TextBox大小至合适尺寸。

  5. 在“工具箱”中选择“Label”,拖至界面适当位置,设置属性框中的Text属性为“文本转语音服务”,并设置适当字体。同理,新建“Label”并修改Text属性为“请在下方输入内容”,设置适当字体及颜色。

至此,窗体界面的搭建就完成了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/336271.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自定义HBase负载均衡器MyCustomBalancer实现步骤与代码解析

目录 1.HBase默认负载均衡策略 1.1 负载均衡总体流程 1.2 不能触发负载均衡的情况 1.3 负载均衡算法 2.自定义的 HBase 负载均衡器的步骤 3.MyCustomBalancer的代码细节 3.1 balanceCluster 方法的作用 3.2balanceCluster 对数据的影响 3.3监控HBase的性能指标 3.3.…

C#,数值计算,高斯消元法与列主元消元法的源代码及数据动态可视化

高斯消元法! 一、高斯消元法 Gaussian Elimination 高斯消元法(或译:高斯消去法),是线性代数中的一个常用算法,常用于求解线性方程组和矩阵的逆。 本程序的运行效果: 1、高斯消元法的动画演示…

在学习爬虫前的准备

1. 写一个爬虫程序需要分几步 获取网页内容。 我们会通过代码给一个网站服务器发送请求,它会返回给我们网页上的内容。 在我们平时使用浏览器访问服务器内容是,本质上也是向服务器发送一个请求,然后服务器返回网页上的内容。只不过浏览器还会…

v-if控制div内容显示,克隆这个div但是v-if没有效果

问题描述: 我的子页面打印的时候通过isPdf来隐藏“选择参加人员”按钮。 我子页面有个el-dialog,el-dialog里面有个大的div它的id为app-pre-meet-add,在子页面我通过isPdf来显示我想要的内容。现在我在父页面先通过this.$refs.child.control…

高效管理近 2 万个 API,中金财富是如何做到的?

为引导安全的 API 治理,中国信息通信研究院云计算开源产业联盟近期整理并发布了《API 治理应用案例汇编(2023)》。此次征集中,Eolink 参与共建的三大项目入选金融行业示范案例,是入选项目最多的企业,充分体现官方对 Eolink 在金融…

计算机视觉技术-区域卷积神经网络(R-CNN)

区域卷积神经网络(region-based CNN或regions with CNN features,R-CNN) (Girshick et al., 2014)也是将深度模型应用于目标检测的开创性工作之一。 本节将介绍R-CNN及其一系列改进方法:快速的R-CNN(Fast R-CNN&#x…

构建自己的私人GPT-支持中文

上一篇已经讲解了如何构建自己的私人GPT,这一篇主要讲如何让GPT支持中文。 privateGPT 本地部署目前只支持基于llama.cpp 的 gguf格式模型,GGUF 是 llama.cpp 团队于 2023 年 8 月 21 日推出的一种新格式。它是 GGML 的替代品,llama.cpp 不再…

控制el-table的列显示隐藏

控制el-table的列显示隐藏,一般的话可以通过循环来实现,但是假如业务及页面比较复杂的话,list数组循环并不好用。 在我们的页面中el-table-column是固定的,因为现在是对现有的进行维护和迭代更新。 对需要控制列显示隐藏的页面进…

微信Windows版如何从旧电脑迁移聊天记录到新电脑

我们都知道,换手机的话,如果是同品牌,可以用该品牌的换机助手将微信资料传输给新手机,或者用微信PC端的迁移与备份功能来实现 那么换电脑或者重装系统呢?我们可以通过转移文件夹的方式进行 1、登录PC微信,…

SG-8101CGA 系列 (晶体振荡器 可编程 可用 +125°C )

SG-8101CGA是可编程晶体振荡器,具有CMOS输出,适用于汽车,同时,该系列还提供相同的频率和其他参数的轻松编程能力,符合AEC-Q100标准,具有出色的电磁兼容性和稳定性,可以在各种环境下使用。外部尺…

ELK生命周期

ELKkafka <es生命周期可视化配置界面> 一、创建索引模式 根据logstash中的日志规则 匹配对应系统日志 二、创建索引生命周期策略&#xff1a;可以控制生成索引的生命周期 共4个阶段&#xff1a;热阶段——温阶段——冷阶段——删除阶段 阶段1. hot: 索引被频繁写入和查…

Python - 深夜数据结构与算法之 Two-Ended BFS

目录 一.引言 二.双向 BFS 简介 1.双向遍历示例 2.搜索模版回顾 三.经典算法实战 1.Word-Ladder [127] 2.Min-Gen-Mutation [433] 四.总结 一.引言 DFS、BFS 是常见的初级搜索方式&#xff0c;为了提高搜索效率&#xff0c;衍生了剪枝、双向 BFS 以及 A* 即启发式搜索…