Я также новичок в этом. Я использовал 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 Я думаю, что нужно преобразовать аудио первым.
Я также ищу это, я не хочу использовать SDK или прочее.Я просто хочу сделать это с помощью чистого javascript, потому что я буду реализовывать в трех разных кастетах - отредактируйте родной, электронный для рабочего стола и Интернета. Важно понимать, что происходит на каждом шаге с кодом. Вы могли понять это @ Abdul? – Noitidart
привет. извинения нет. компания изменила свое внимание на данный момент и не продолжала говорить с текстом на данный момент –
Спасибо @abdul за ваш ответ. Я действительно понял это. Я отправлю решение здесь. :) – Noitidart