带有 node.js Bot 框架的 Skype 语音识别 API

Posted

技术标签:

【中文标题】带有 node.js Bot 框架的 Skype 语音识别 API【英文标题】:Skype Speech Recognition API with node.js Bot Framework 【发布时间】:2017-06-30 12:33:39 【问题描述】:

我正在将 Skype 客户端用于机器人应用程序。我正在使用语音转文本

处理音频语音有两种模式:Mention enter link description here BY dandriscoll

    客户端录制一个小音频文件(如 WAV)并将其作为附件上传到机器人 客户端向机器人发送音频流

大多数 Bot Framework 渠道都支持模式 1,尽管客户端支持有所不同。在这种情况下,您可以将 WAV 上传到 Bing Speech API,它会返回转录结果。

支持模式 2 的唯一 Bot Framework 渠道是 Skype 通话。在这种情况下,您会收到一个音频流,并且可以使用 Bing Speech 客户端库来获取实时转录源。

这里要使用模式2的示例代码

var restify = require('restify');
var builder = require('botbuilder');
var calling = require('botbuilder-calling');
var prompts = require('./prompts');
var speechService = require('./speech-service.js');

//=========================================================
// Bot Setup
//=========================================================

// Setup Restify Server
var server = restify.createServer();
server.listen(process.env.port || process.env.PORT || 3978, function () 
   console.log('%s listening to %s', server.name, server.url); 
);

// Create chat bot
var chatConnector = new builder.ChatConnector(
    appId: process.env.MICROSOFT_APP_ID,
    appPassword: process.env.MICROSOFT_APP_PASSWORD
);
var chatBot = new builder.UniversalBot(chatConnector);
server.post('/api/messages', chatConnector.listen());

// Create calling bot
var connector = new calling.CallConnector(
    callbackUrl: 'https://example.in/api/calls',
    appId: process.env.MICROSOFT_APP_ID,
    appPassword: process.env.MICROSOFT_APP_PASSWORD
);
var bot = new calling.UniversalCallBot(connector);
server.post('/api/calls', connector.listen());

//=========================================================
// Chat Dialogs
//=========================================================
// Add root dialog

bot.dialog('/', function (session) 
    session.send('Headfitted Bot application... !');
    session.beginDialog('/record');
);

bot.dialog('/record', [
    function (session) 
        session.send(prompts.record.intro);
        calling.Prompts.record(session, prompts.record.prompt,  playBeep: true );
    ,
    function (session, results) 
        if (results.response) 
            console.log(results.response.recordedAudio);
            session.endDialog(prompts.record.result, results.response.lengthOfRecordingInSecs);

         else 
            session.endDialog(prompts.canceled);
        
    
]);

当我运行上面的演示时,我在命令提示符中收到了响应

 recordedAudio: <Buffer 30 26 b2 75 8e 66 cf 11 a6 d9 00 aa 00 62 ce 6c 3d 13 00 00 00 00 00 00 06 00 00 00 01 02 a1 dc ab 8c 47 a9 cf 11 8e e4 00 c0 0c 20 53 65 68 00 00 00 ... >,
lengthOfRecordingInSecs: 2.581 

现在我想使用recordedAudio并传递给speech to text API函数。 stream 将是我的 recordedAudio

speechService.getTextFromAudiostream(stream)
    .then(function (text) 
        session.send(processText(text));
    )
    .catch(function (error) 
        session.send('Oops! Something went wrong. Try again later.');
        console.error(error);
    );

我在 google 和 bot Framework 上进行了搜索,但没有运气。

【问题讨论】:

这里有问题吗? @PaulSturm 问题是如何将录制的音频传递给流中的 SpeechService。 花了一周时间解决这个问题后,我发现 Bing Speech API 只支持 WAV/PCM。所以我已经开始将 wma 转换为 wav 文件并将 wav 流传递给语音到文本 web api。使用 ffmpeg。感谢github.com/Microsoft/BotBuilder-Samples/issues/52用户 pcostantini 帖子 【参考方案1】:

我相信您需要以 Base64 格式发送音频。至少 BING SPEECH 的其余 api 使用音频作为 base64。您可以测试他们的浏览器演示并嗅探网络。他们发送如下内容。

请求网址:https://api.mixpanel.com/track/?data=eyJldmVudCI6ICIkY3JlYXRlX2FsaWFzIiwicHJvcGVydGllcyI6IHsiJG9zIjogIk1hYyBPUyBYIiwiJGJyb3dzZXIiOiAiQ2hyb21lIiwiJHJlZmVycmVyIjogImh0dHBzOi8vYXp1cmUubWljcm9zb2Z0LmNvbS90ci10ci9zZXJ2aWNlcy9jb2duaXRpdmUtc2VydmljZXMvc3BlZWNoLyIsIiRyZWZlcnJpbmdfZG9tYWluIjogImF6dXJlLm1pY3Jvc29mdC5jb20iLCIkY3VycmVudF91cmwiOiAiaHR0cHM6Ly9henVyZS5taWNyb3NvZnQuY29tL3RyLXRyL3NlcnZpY2VzL2NvZ25pdGl2ZS1zZXJ2aWNlcy9zcGVlY2gvIiwiJGJyb3dzZXJfdmVyc2lvbiI6IDYyLCIkc2NyZWVuX2hlaWdodCI6IDEwNTAsIiRzY3JlZW5fd2lkdGgiOiAxNjgwLCJtcF9saWIiOiAid2ViIiwiJGxpYl92ZXJzaW9uIjogIjIuMTQuMCIsImRpc3RpbmN0X2lkIjogIjE1ZmYxZGY2YjIwYWZlLTA0MzVjYmVmNDA2N2IxLTE3M2Y2ZDU2LTFhZWFhMC0xNWZmMWRmNmIyMWQxMSIsIiRzZWFyY2hfZW5naW5lIjogImdvb2dsZSIsIiRpbml0aWFsX3JlZmVycmVyIjogImh0dHBzOi8vd3d3Lmdvb2dsZS5jb20udHIvIiwiJGluaXRpYWxfcmVmZXJyaW5nX2RvbWFpbiI6ICJ3d3cuZ29vZ2xlLmNvbS50ciIsImFsaWFzIjogIjk1NTI3ZTI1LTA2M2MtNDE5ZS04NzkzLTNkYTNkMGVmNDQ4YSIsInRva2VuIjogIjFkOTJlM2FiZDE0YTJkNjVmNzQ4ZDEzMTRkZDI0Yjk5In19&ip=1&_=1511591715549

查看链接:Azure sample page

【讨论】:

以上是关于带有 node.js Bot 框架的 Skype 语音识别 API的主要内容,如果未能解决你的问题,请参考以下文章

Microsoft bot 框架 - Bot 频道注册。无法将录制的视频从 Skype 保存到 Azure 存储帐户

如何获取所有可用的 Microsoft bot Skype 组

Microsoft bot 框架获取用户时区

在 Node.js 中使用 Skype-sdk 构建的 Skype 机器人运行不正确?

在 Bot Framework 中获取 Skype 身份?

传出 Skype 消息不适用于 Bot Framework