Отправить результат Google-Speech-Text на сервер
Я пытаюсь отправить транскрипт, сгенерированный этим примером кода, из Google для преобразования речи в текст на сервер nodejs и отобразить его пользователю.
var http = require('http');
const recorder = require('node-record-lpcm16');
const speech = require('@google-cloud/speech');
const client = new speech.SpeechClient();
const encoding = 'LINEAR16';
const sampleRateHertz = 16000;
const languageCode = 'en-US';
const request = {
config: {
encoding: encoding,
sampleRateHertz: sampleRateHertz,
languageCode: languageCode,
},
interimResults: false, // if you want interim results, set this to true
};
// create a recognize stream
const recognizeStream = client
.streamingRecognize(request)
.on('error', console.error)
.on('data', data =>
//console.log('test');
process.stdout.write(
data.results[0] && data.results[0].alternatives[0]
? `Transcription: ${data.results[0].alternatives[0].transcript}\n`
: '\n\nReached transcription time limit, press Ctrl+C\n'
)
writeToServer(data.results[0].alternatives[0].transcript);
);
function writeToServer(data){
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.write(data);
res.end();
}).listen(8080);
}
// start recording and send the microphone input to the speech api.
// ensure SoX is installed, see https://www.npmjs.com/package/node-record-lpcm16#dependencies
recorder
.record({
sampleRateHertz: sampleRateHertz,
threshold: 0,
// other options, see https://www.npmjs.com/package/node-record-lpcm16#options
verbose: false,
recordProgram: 'rec', // try also "arecord" or "sox"
silence: '1.0',
})
.stream()
.on('error', console.error)
.pipe(recognizeStream);
console.log('listening, press Ctrl+C to stop.');
Мне трудно получить доступ к расшифровке стенограммы из клиента речи Google. Также приветствуются ссылки на то, как передавать микрофонный ввод из веб-приложения вместо локального микрофона, поскольку цель состоит в том, чтобы получить микрофонный ввод от пользователя через браузер и передать API-интерфейс Google-Speech-to-Text.
1 ответ
Я рекомендую вам следующий рабочий процесс:
Запишите аудио пользователя -> отправьте его в свое веб-приложение -> расшифровку с помощью Google-Speech-To-Text -> отправьте ответ клиенту
Для рендеринга вашей страницы я рекомендовал ExpressJs, который представляет собой минимальную и гибкую структуру веб-приложений Node.js, которая обеспечивает надежный набор функций для веб-приложений и мобильных приложений.
После того, как вы настроили веб-приложение, вы можете попробовать с помощью Recorder.Js записать микрофон пользователя, а затем отправить его в свое веб-приложение.
Клиент:
var filename = new Date().toISOString();
//filename to send to server without extension
//upload link
var upload = document.createElement('a');
upload.href = “/transcriptaudio”;
upload.innerHTML = "Upload";
upload.addEventListener("click", function(event) {
var xhr = new XMLHttpRequest();
xhr.onload = function(e) {
if (this.readyState === 4) {
console.log("Server returned: ", e.target.responseText);
}
};
var fd = new FormData();
fd.append("audio_data", blob, filename);
xhr.open("POST", "upload.php", true);
xhr.send(fd);
})
li.appendChild(document.createTextNode(" ")) //add a space in between
li.appendChild(upload) //add the upload link to li
Сервер:
app.post(‘/transcriptaudio’, function (req, res) {
audio = req.body.audio_data;
// create a recognize stream
const recognizeStream = client
.streamingRecognize(audio)
.on('error', console.error)
.on('data', data =>
//console.log('test');
process.stdout.write(
data.results[0] && data.results[0].alternatives[0]
? Transcription: ${data.results[0].alternatives[0].transcript}\n
: '\n\nReached transcription time limit, press Ctrl+C\n'
)
res.send(data.results[0].alternatives[0].transcript);
);
});