微软 Azure人工智能认知服务打造语音提醒喝水助手(带源码和演示地址)
Posted 小雨青年
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微软 Azure人工智能认知服务打造语音提醒喝水助手(带源码和演示地址)相关的知识,希望对你有一定的参考价值。
目录
一、写在前面
这是一杯水
我们每天大概需要喝八杯水。
这是我,一名程序员,每天工作的时间是8-24小时,长期伏案工作,一忙起来就忘记了喝水。
而这,是微软的Azure认知服务
Azure 认知服务是什么?
认知服务使每位开发人员无需具备机器学习的专业知识就能接触到 AI。只需要一个 API 调用,就可以将看、听、说、搜索、理解和加速决策的能力嵌入到应用中。让所有技能水平的开发人员都能轻松在其应用中添加 AI 功能。
那么,如何能让程序员小雨每天都能喝足八杯水呢?
当然是基于Azure 认知服务打造属于自己的工具,提醒自己喝水啦!
下面就让我们一步一步在微软 Azure人工智能认知服务平台上,为自己打造属于自己的语音提醒助手,提醒我们按时喝水吧!
二、创建认知服务资源
本文使用的是微软提供的组织账户,实际页面可能会有差别。
通过微软账号登录到Azure的管理平台,我们可以从入口进入。
1. 创建语音服务
首先搜索认知服务
我们创建语音服务
注意的是,资源组没有的话需要新建一个。
部署完成之后,我们就得到了一个语音服务的资源,会得到一个密钥,后续我们调用API也是通过这个密钥完成的。
这里官方给了两个密钥,方便我们实际部署项目时候,重置一个密钥时使用另一个密钥。
可以在线体验文本转语音的实际效果。
2. 创建文本服务
同样的,我们点击创建服务,搜索"文本"。
选择对应的资源组和定夹层。
经过短暂的等待,创建成功并部署成功,我们就能使用文本分析了。
和上面的语音服务一样,我们也得到了两个key和对应的区域,用于后续的服务调用。
文本分析服务能
- 提取信息
- 对文本进行分类
- 理解对话语言
- 回答问题
三、语音提醒助手
1. 文本转语音,提醒我喝水
作为语音提醒助手,最重要的当然是语音,Azure语音服务提供了文本转语音服务,我们可以输入自己想要的文本,通过参数调节,得到自己希望听到的语音。
PS:本文使用SDK为JS版本。
官方提供了SDK的DEMO,我们可以访问这里,快速学习如何使用认知服务。
文本转语音服务是我们使用的第一个服务,调用服务的流程为
- 使用密钥和区域对应的地址生成token
- 通过token获取可生成的声音列表
- 调用接口返回声音或下载声音文件
PS:本文的演示代码源文件会在文末给出。
经过一些精简之后,我选择默认的声音晓晓(Microsoft Server Speech Text to Speech Voice (zh-CN, XiaoxiaoNeural))
,在点击试听之后,网页即可播放文本对应的声音。
2. 语音转文本,我也能做回应
语音转文本,顾名思义,就是输入声音(来自文件或者麦克风)返回对应的文字。
作为简单的最小可行性的实现方案,我这里采用的是使用麦克风输入,实时返回文本的实现方案。
当然,语音转文本服务还能实现声音文件上传,和实时翻译成对应国家文字等功能,我就不一一展开了。
语音转文本的核心代码如下,我写了简单的注释。
function doRecognizeOnceAsync() {
resetUiForScenariostart(); //页面UI对应
var audioConfig = getAudioConfig(); //声音输入配置
var speechConfig = getSpeechConfig(SpeechSDK.SpeechConfig); //语音识别配置
if (!audioConfig || !speechConfig) return;
// Create the SpeechRecognizer and set up common event handlers and PhraseList data
reco = new SpeechSDK.SpeechRecognizer(speechConfig, audioConfig); //初始化SDK
applyCommonConfigurationTo(reco); //加载默认配置
// Note: in this scenario sample, the 'recognized' event is not being set to instead demonstrate
// continuation on the 'recognizeOnceAsync' call. 'recognized' can be set in much the same way as
// 'recognizing' if an event-driven approach is preferable.
reco.recognized = undefined;
// Note: this scenario sample demonstrates result handling via continuation on the recognizeOnceAsync call.
// The 'recognized' event handler can be used in a similar fashion.
reco.recognizeOnceAsync( //调用recognizeOnceAsync服务
function (successfulResult) {
onRecognizedResult(successfulResult);
},
function (err) {
window.console.log(err);
phraseDiv.innerhtml += "ERROR: " + err;
});
}
实际效果如图
从页面检查来看,SDK通过websocket访问了配置对应的tts服务,实时返回了识别结果,给微软认知服务点个赞!
3. 文本分析,得出喝水频率
上一步我们创建的文本分析服务,能做情绪分析。那么什么是情绪分析呢?
情绪分析功能根据服务在句子和文档级别找到的最高置信度分数来提供情绪标签(例如“消极”、“中立”和“积极”)。 此功能还会为每个文档和文档中的句子返回介于 0 和 1 之间的置信度分数以表示积极、中立和消极情绪。
那我可以简单的运用情绪分析,对你的语言得出一个情绪的印象,来给出你今天的喝水频率,做到千人千面。
curl -X POST https://emo.cognitiveservices.azure.cn/text/analytics/v3.2-preview.1/sentiment?opinionMining=true \\
-H "Content-Type: application/json" \\
-H "Ocp-Apim-Subscription-Key: e5b******************ba9362c" \\
-d '{ documents: [{ id: "1", text: "The customer service here is really good."}]}'
返回的结果如下
{
"documents": [
{
"id": "1",
"sentiment": "positive",
"confidenceScores": {
"positive": 1,
"neutral": 0,
"negative": 0
},
"sentences": [
{
"sentiment": "positive",
"confidenceScores": {
"positive": 1,
"neutral": 0,
"negative": 0
},
"offset": 0,
"length": 41,
"text": "The customer service here is really good.",
"targets": [
{
"sentiment": "positive",
"confidenceScores": {
"positive": 1,
"negative": 0
},
"offset": 4,
"length": 16,
"text": "customer service",
"relations": [
{
"relationType": "assessment",
"ref": "#/documents/0/sentences/0/assessments/0"
}
]
}
],
"assessments": [
{
"sentiment": "positive",
"confidenceScores": {
"positive": 1,
"negative": 0
},
"offset": 36,
"length": 4,
"text": "good",
"isNegated": false
}
]
}
],
"warnings": []
}
],
"errors": [],
"modelVersion": "2020-04-01"
}
这样我们就可以通过confidenceScores
得到三个情绪化数值
- positive 积极的
- neutral 中立的
- negative 消极的
我们可以这样定义,为了简化产品层面的流程,我们如下定义,并优先级为从高到低
- 积极的 每40分钟提醒一次
- 中立的 每30分钟提醒一次
- 消极的 每20分钟提醒一次
其中的文字来自于上一步的语音转文字的结果。
简单处理下交互,展示效果如下所示
4. 实现定时提醒!
万事俱备只欠东风,我们现在已经有了
- 文本转换的提醒语音
- 文本分析对语音转文字的情绪数值算出的时间间隔
那么,下一步就是在页面创建一个定时器,在时间间隔下调用文本转换的语音服务,就得到了定时提醒的功能。
本文完整的页面为
四、总结
(麦克风输入一定要配置https)
本文通过对微软 Azure人工智能认知服务中的
- 语音服务
- 文本转语音
- 语音转文本
- 文本服务
- 文本分析
三项服务的调用,并结合具体需求,做了语音定时提醒助手的应用,从中理解了认知服务的强大,并且成功创建案例。
微软 Azure人工智能认知服务目前已经广泛应用在各种领域,各位同志如果想体验,请访问
https://azure.microsoft.com/zh-cn/services/cognitive-services/
五、源码和演示地址
本演示所用的key,我会在月底重置。
源码地址:
以上是关于微软 Azure人工智能认知服务打造语音提醒喝水助手(带源码和演示地址)的主要内容,如果未能解决你的问题,请参考以下文章
微软 Azure人工智能认知服务打造语音提醒喝水助手(带源码和演示地址)
0元试用微软 Azure人工智能认知服务我做了个群聊天机器人
❤️Hi! Azure.❤️从零开始打造一个语音机器人,跟你的电脑聊聊天!❤️