как подключить микрофон напрямую к сервису watson speechToText - PullRequest
0 голосов
/ 12 сентября 2018

Мы хотели бы подключить микрофон напрямую к просмотру речи в текстовом сервисе, но похоже, что сначала нам нужно пройти через .wav? Посмотрите, пожалуйста, следующие коды. В частности, я пытался подключить микрофон непосредственно к сервису speechToText. Я считаю, что это наиболее распространенный способ использования микрофона, а не передачи его в формат .wav, а затем потокового воспроизведения файла .wav в stt:

var mic;
 var SpeechToTextV1 = require('watson-developer-cloud/speech-to-text/v1');
 var fs = require('fs');
 var watson = require('watson-developer-cloud');
 var cp = require('child_process');
  mic = cp.spawn('arecord', ['--device=plughw:1,0', '--format=S16_LE', '--rate=44100', '--channels=1']); //, '--duration=10'
  mic.stderr.pipe(process.stderr);
  stt();

  function stt() {
     console.log("openCMDS");
         var speech_to_text = new SpeechToTextV1({
         username: '',
         password: ''
         });
     var params = {
     content_type: 'audio/wav',
     model: 'zh-CN_BroadbandModel',
     continuous: true,
     inactivity_timeout: -1
     };
     recognizeStream = speech_to_text.createRecognizeStream(params);
         mic.stdout.pipe(recognizeStream);
         //mic.stdout.pipe(require('fs').createWriteStream('test.wav')); 

         // Pipe in the audio.
         fs.createReadStream('test.wav').pipe(recognizeStream);
         recognizeStream.pipe(fs.createWriteStream('transcription.txt'));
     recognizeStream.setEncoding('utf8'); 
     console.log("start record");
        recognizeStream.on('data', function(event) { onEvent('Data:', event); });
        recognizeStream.on('error', function(event) { onEvent('Error:', event); });
        recognizeStream.on('close', function(event) { onEvent('Close:', event); });
 // Display events on the console.
 function onEvent(name, event) {
     console.log(name, JSON.stringify(event, null, 2));
      }

 }

1 Ответ

0 голосов
/ 13 сентября 2018

Служба «Речь в текст» должна знать формат аудио, которое вы пытаетесь отправить. 99% проблем, с которыми я столкнулся, связаны с тем, что служба ожидает формат аудио, отличный от используемого пользователями.

'--format=S16_LE', '--rate=44100', '--channels=1'

Это похоже на формат PCM 44,1 кГц.

В вашем коде вы указываете:

content_type: 'audio/wav'

Взгляните на поддерживаемые форматы аудио .

Может быть, попробуйте с audio/l16; rate=44100;. Вы также можете записать звук в другом формате.

Наконец, взгляните на javascript-speech-sdk . У нас есть примеры того, как транслировать микрофон из браузера.

Обновление

const mic = require('mic');
const SpeechToTextV1 = require('watson-developer-cloud/speech-to-text/v1');
const speechToText = new SpeechToTextV1({
  username: 'YOUR USERNAME',
  password: 'YOUR PASSWORD',
  url: 'YOUR SERVICE URL',
  version: 'v1'
});

// 1. Microphone settings
const micInstance = mic({
  rate: 44100,
  channels: 2,
  debug: false,
  exitOnSilence: 6
});



// 2. Service recognize settings
const recognizeStream = speechToText.createRecognizeStream({
  content_type: 'audio/l16; rate=44100; channels=2',
  model: 'zh-CN_BroadbandModel',
  interim_results: true,
})

// 3. Start recording
const micInputStream = micInstance.getAudioStream();
micInstance.start();

console.log('Watson is listening, you may speak now.');

// 4. Pipe audio to service
const textStream = micInputStream.pipe(recognizeStream).setEncoding('utf8');

textStream.on('data', user_speech_text => console.log('Watson hears:', user_speech_text));
textStream.on('error', e => console.log(`error: ${e}`));
textStream.on('close', e => console.log(`close: ${e}`));
...