2016-10-27 8 views
0

Я полностью новичок в IBM Watson Speech-to-Text, а также не умею отправлять прямые аудиофайлы с html на сервер.ibm watson речь в текст api для чистого jquery/javascript

Цель состоит в том, чтобы интегрировать Speech-to-Text (бесплатную версию) в веб-приложении, чтобы разрешить диктовать и делать заметки. Я ранее реализовал HTML-речь api, но организация не выглядит довольна уровнем точности.

До сих пор я видел только их демоверсию, которая, кажется, показывает, что транскрипция в реальном времени - это возможность, но я не могу найти пример кода для использования.

Я в первую очередь намерен использовать javascript-код для этой цели (однако приложение построено в ASP MVC 3).

Было бы очень полезно, если бы можно было дать какое-либо руководство или любое пошаговое руководство по реализации речи в текст в веб-приложении, которое является бесплатным для использования.

любая помощь оценена.

+0

Я также ищу это, я не хочу использовать SDK или прочее.Я просто хочу сделать это с помощью чистого javascript, потому что я буду реализовывать в трех разных кастетах - отредактируйте родной, электронный для рабочего стола и Интернета. Важно понимать, что происходит на каждом шаге с кодом. Вы могли понять это @ Abdul? – Noitidart

+0

привет. извинения нет. компания изменила свое внимание на данный момент и не продолжала говорить с текстом на данный момент –

+0

Спасибо @abdul за ваш ответ. Я действительно понял это. Я отправлю решение здесь. :) – Noitidart

ответ

0

Образец кода для демонстрационного приложения Bluemix доступен по адресу https://github.com/watson-developer-cloud/speech-to-text-nodejs, а также пошаговые инструкции.

+0

Используется SDK/предварительно упакованный. Есть ли шаг за шагом, который показывает, как попасть в конечную точку с помощью JS? У меня проблемы с этим. – Noitidart

0

Я также новичок в этом. Я использовал javascript только с моего сайта. Я хотел использовать конечную точку Bluemix HTTPS (а не WSS). Проблема в том, что с моего сайта, если я попал в Speech to Text 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, но из неудачных попыток и чтения somehwere (требуется ссылка) I Обнаружил этот Token API doesn ' t работать с 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 = Await выборки ('моего сайта URL, который дает мне маркер); 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 (аудио, внутр, маркер) {// аудио - блоб (веб) // доб - тип файла, как "" 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 Я думаю, что нужно преобразовать аудио первым.