Еще в ноябре я опубликовал здесь в своем блоге демонстрационное приложение, демонстрирующее службу IBM Watson QA Service для когнитивных / естественных языковых вычислений, подключенную к API веб-речи в Google Chrome, для реального разговорного взаимодействия с веб-приложением. Это хорошая демонстрация, но она всегда сводила меня с ума, что она работала только в Chrome. В прошлом месяце команда IBM Watson выпустила 5 новых услуги , и думает , что … распознавание речи и синтез речи включены!
Эти две службы позволяют вам быстро добавлять функции преобразования текста в речь или преобразования речи в текст в любое приложение. Есть ли лучший способ показать их, чем обновить мое существующее приложение, чтобы использовать новые речевые сервисы?
Итак, вот оно: watsonhealthqa.mybluemix.net !
Благодаря использованию сервисов Watson он теперь может работать в любом браузере, который поддерживает getUserMedia (для распознавания речи) и HTML5 <Audio> (для воспроизведения речи).
(Полный исходный код доступен в нижней части этого поста)
Вы можете посмотреть видео об этом в действии ниже:
Если ваш браузер не поддерживает API getUserMedia или HTML5 <Audio>, ваш пробег может отличаться. Вы можете проверить, где эти функции поддерживаются с помощью этих ссылок: <Audio> getUserMedia
Предупреждение: это предназначается для браузеров настольных компьютеров — HTML5 Audio — беспорядок на мобильных устройствах из-за ограниченной поддержки кодеков и незрелых API.
Так как же все это работает?
Как и служба QA , в IBM Bluemix теперь доступны новые службы Text To Speech и Speech To Text , так что вы можете создать новое приложение, использующее любую из этих служб, или добавить их в любое существующее приложение.
Я просто добавил службы «Текст в речь» и «Речь в текст» в свое существующее приложение Healthcare QA, которое работает в Bluemix:
Эти сервисы доступны через REST API. Добавив их в свое приложение, вы можете легко использовать их в любом приложении.
Я обновил код из моего предыдущего примера двумя способами: 1) использовать оболочку Watson Node.js, которая значительно упрощает взаимодействие с Watson, и 2) воспользоваться преимуществами этих новых сервисов.
Watson Node.js Wrapper
Используя Watson Node.js Wrapper , вы можете легко создавать экземпляры сервисов Watson в одной строке кода. Например:
var watson = require('watson-developer-cloud'); var question_and_answer_healthcare = watson.question_and_answer(QA_CREDENTIALS); var speechToText = watson.speech_to_text(STT_CREDENTIALS);
Учетные данные поступают из конфигурации вашей среды, затем вы просто создаете экземпляры тех служб, которые хотите использовать.
QA Сервис
Код для использования сервиса теперь намного проще, чем в предыдущей версии. Когда мы хотим отправить вопрос в службу Qatson Watson, теперь вы можете просто вызвать метод ask в экземпляре службы QA.
Ниже приведен мой серверный код из app.js, который принимает отправку POST из браузера, делегирует вопрос Уотсону, принимает результат и отображает HTML с использованием шаблона Jade . См. Руководство по началу работы для службы контроля качества Watson, чтобы узнать больше об оболочках для Node или Java.
// Handle the form POST containing the question app.post('/ask', function(req, res){ // delegate to Watson question_and_answer_healthcare.ask({ text: req.body.questionText}, function (err, response) { if (err) console.log('error:', err); else { var response = extend({ 'answers': response[0] },req.body); // render the template to HTML and send it to the browser return res.render('response', response); } }); });
Сравните это с предыдущей версией , и вы быстро увидите, что это намного проще.
Синтез речи
На данный момент у нас уже есть функциональный сервис, который может принимать текст на естественном языке, отправлять его в Watson и возвращать результат поиска в виде текста. Следующим логическим шагом для меня было добавление синтеза речи с помощью Watson Text To Speech Service (TTS). Опять же, сервисы Watson Node Wrapper и Rats от Watson делают эту задачу очень простой. На стороне клиента вам просто нужно установить src экземпляра <audio> в URL для службы TTS:
1 |
< audio controls = "" autoplay = "" src = "/synthesize?text=The text that should generate the audio goes here" ></ audio >
|
На сервере вам просто нужно синтезировать аудио из данных в строке запроса URL. Вот пример того, как вызвать службу text to voice непосредственно из примера приложения Watson TTS :
var textToSpeech = new watson.text_to_speech(credentials); // handle get requests app.get('/synthesize', function(req, res) { // make the request to Watson to synthesize the audio file from the query text var transcript = textToSpeech.synthesize(req.query); // set content-disposition header if downloading the // file instead of playing directly in the browser transcript.on('response', function(response) { console.log(response.headers); if (req.query.download) { response.headers['content-disposition'] = 'attachment; filename=transcript.ogg'; } }); // pipe results back to the browser as they come in from Watson transcript.pipe(res); });
Служба Watson TTS поддерживает форматы файлов .ogg и .wav . Я немного изменил этот пример, чтобы он возвращал файлы .ogg для Chrome и Firefox и файлы .wav для других браузеров. На стороне клиента они воспроизводятся с использованием тега HTML5 <audio> . Вы можете увидеть мои модификации в репозитории git .
Распознавание речи
Теперь, когда мы можем обрабатывать естественный язык и генерировать речь, последняя часть решения заключается в распознавании устного ввода и его преобразовании в текст. Служба Watson Speech To Text (STT) обрабатывает это для нас. Как и служба TTS, служба Speech To Text также имеет пример приложения с исходным кодом, который поможет вам начать работу.
Этот сервис использует API браузера getUserMedia (потоковая передача) с socket.io на узле для потоковой передачи данных обратно на сервер с минимальной задержкой. Самое приятное, что вам не нужно ничего настраивать самостоятельно. Просто используйте код из примера приложения . Примечание: API getUserMedia не везде поддерживается , поэтому имейте в виду .
На стороне клиента вам просто нужно создать экземпляр класса SpeechRecognizer в JavaScript и обработать результат:
var recognizer = new SpeechRecognizer({ ws: '', model: 'WatsonModel' }); recognizer.onresult = function(data) { //get the transcript from the service result data var result = data.results[data.results.length-1]; var transcript = result.alternatives[0].transcript; // do something with the transcript search( transcript, result.final ); }
На сервере вам нужно создать экземпляр службы Watson Speech To Text и настроить обработчики для пост-запроса на получение аудиопотока.
// create an instance of the speech to text service var speechToText = watson.speech_to_text(STT_CREDENTIALS); // Handle audio stream processing for speech recognition app.post('/', function(req, res) { var audio; if(req.body.url && req.body.url.indexOf('audio/') === 0) { // sample audio stream audio = fs.createReadStream(__dirname + '/../public/' + req.body.url); } else { // malformed url return res.status(500).json({ error: 'Malformed URL' }); } // use Watson to generate a text transcript from the audio stream speechToText.recognize({audio: audio, content_type: 'audio/l16; rate=44100'}, function(err, transcript) { if (err) return res.status(500).json({ error: err }); else return res.json(transcript); }); });
Исходный код
Вы можете взаимодействовать с действующим экземпляром этого приложения по адресу watsonhealthqa.mybluemix.net , а полный код на стороне клиента и сервера доступен по адресу github.com/triceam/IBMWatson-QA-Speech .
Просто настройте приложение Bluemix , клонируйте пример кода, запустите установку NPM и разверните приложение в Bluemix с помощью CLI Cloud Foundry .
Полезные ссылки
- Получение веб-приложений в IBM Bluemix
- IBM Watson QA Service
- Образец документации и образец IBM Watson QA
- Служба преобразования текста в речь IBM Watson
- Документация IBM Watson Text To Speech
- Образец приложения IBM Watson Text To Speech
- Служба преобразования речи в текст IBM Watson
- Речевая текстовая документация IBM Watson
- Образец приложения IBM Watson Speech To Text