繁体   English   中英

ibm沃森语音转换为纯jQuery / JavaScript的文本api

[英]ibm watson speech to text api for pure jquery/javascript

我是IBM Watson Speech-to-Text的新手,也不擅长将实时音频文件从html发送到服务器。

目的是将语音转文本(免费版本)集成到Web应用程序中,以允许听写和记录笔记。 我以前已经实现了HTML语音api,但是该组织对其准确性水平并不满意。

到目前为止,我只看了他们的演示,这似乎表明可以进行实时转录,但是我似乎找不到要使用的示例代码。

我主要打算为此目的使用javascript代码(但是,该应用程序是在ASP MVC 3中构建的)。

如果可以提供任何指南或任何逐步指南以在免费使用的Web应用程序中实现语音转文本,这将是非常有用的。

任何帮助表示赞赏。

可在https://github.com/watson-developer-cloud/speech-to-text-nodejs上找到Bluemix演示应用程序的示例代码,以及分步说明。

我也是新手。 我只在网站上使用javascript。 我想使用Bluemix HTTPS端点(而不是WSS)。 问题是从我的网站上,如果我单击了语音转文本API,则将其视为CORS。

我读过-https: //github.com/watson-developer-cloud/node-sdk/tree/master/examples/webpack#important-notes-CORS版本要求我们发送令牌,而不是base64_encode(USERNAME + ':' + PASSWORD)

因此,我在此处查找了令牌API- https ://www.ibm.com/watson/developercloud/doc/common/getting-started-tokens.html-尽管它不能与CORS一起使用,但它并未在此处说明,但经过失败的尝试和阅读(需要参考),我发现此Token API不适用于CORS。 因此,我在服务器上设置了一个PHP文件,并将以下代码放入:

<?php

    $USERNAME = 'REMOVED';
    $PASSWORD = 'REMOVED';

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, "https://stream.watsonplatform.net/authorization/api/v1/token?url=https://stream.watsonplatform.net/speech-to-text/api");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");

    curl_setopt($ch, CURLOPT_USERPWD, $USERNAME . ":" . $PASSWORD);

    $result = curl_exec($ch);
    if (curl_errno($ch)) {
        echo 'Error:' . curl_error($ch);
    }
    curl_close ($ch);

    print $result;
?>

现在,这给了我一个令牌。 我认为我在Token API文档中阅读了该令牌,最多持续了一个小时。

因此,现在可以从javascript中访问服务器上的该端点以获取令牌,然后可以使用语音通过CORS(从我的网站)发短信。

这是我的代码:

导出异步功能getToken(){const response = await fetch('我给我令牌的网站网址); console.log('watson-stt :: getToken-response:',response);

if (response.status !== 200) {
    const error = await response.text();
    throw new Error(`Got bad response "status" (${response.status}) from Watson Token server, error: "${error}"`);
}

const token = await response.text();

return token;

}

导出异步函数getResults(audio,ext,token){//音频-blob(web)// ext-“ ogg”之类的文件类型(必须小写?我不这么认为,但是我所看到的全部)

    const data = new FormData();
    // assume blob
    const blob = audio;
    data.append('file', blob, `recording.${ext}`);

    const response = await fetch('https://stream.watsonplatform.net/speech-to-text/api/v1/recognize?continuous=true', {
        method: 'POST',
        headers: {
            'Content-Type': `audio/${ext}`,
            'X-Watson-Authorization-Token': token
        },
        body: data
    });

    console.log('watson-stt::getResults - response:', response);

    if (response.status !== 200) {
        const error = await response.text();
        throw new Error(`Got bad response "status" (${response.status}) from Watson Speach to Text server, error: "${error}"`);
    }

    return await response.json();
}

////////////////// usage below

let stream, recorder, chunks;
async function recordAndRecognize() {   
       try {
            stream = await navigator.mediaDevices.getUserMedia({ audio:true });
        } catch(ex) {
            console.error('Failed to get permission to use microphone, error:', ex);
            return;
        }

        recorder = new MediaRecorder(stream);
        recorder.addEventListener('stop', handleRecordingStop, false);
        recorder.addEventListener('dataavailable', handleRecordingData, false);

        chunks = [];

        recorder.start();

        setTimeout(recorder.stop, 5000); // record for 5 seconds
}

function handleRecordingData(e) {
    chunks.push(e.data);
}

async function handleRecordingStop() {
    let blob = new Blob(chunks, { type:'audio/ogg; codecs=opus' });

    let token = await getToken();
    let results = await getResults(blob, 'ogg', token);
}

recordAndRecognize(); // kick it off

这可以直接使用Firefox,但是在Google Chrome上,我想我需要先转换音频。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM