grinenko - new platform is here - wsd - 2019 - spbГолосовые интерфейсы a11 ›...

77

Upload: others

Post on 26-Oct-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›
Page 2: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Новая платформа уже здесь

Владимир Гриненко, руководитель службы общих компонентов

WSD, 13 июля 2019, Санкт-Петербург

Page 3: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›
Page 4: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›
Page 5: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Они интегрировали БЭМ в стену?

Page 6: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Эволюция интерфейсов

A6

Перфокарты

$_CLI Desktop Touch

Page 7: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Эволюция интерфейсов

A7

Перфокарты

$_CLI Desktop TouchГолос

Page 8: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›
Page 9: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Роман Дворнов

Фронтенд — это круто

Page 10: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Голосовые интерфейсы

Page 11: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Голосовые интерфейсы

A11

› Распознаем голосовой запрос пользователя › Генерируем голосовой ответ

Page 12: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

$_

Page 13: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›
Page 14: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Speech Recognition API

Page 15: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

const recognition = new webkitSpeechRecognition()

recognition.onresult = function(event) { console.log(event.results[0][0].transcript) }

recognition.start()

Page 16: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›
Page 17: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Speech Synthesis API

Page 18: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

speechSynthesis.speak( new SpeechSynthesisUtterance('Привет, WSD!') )

Page 19: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›
Page 20: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

PenPineappleApplePenAPIPenPineappleApplePenAPI

Page 21: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

const recognition = new webkitSpeechRecognition()

recognition.onresult = function(event) { const transcript = event.results[0][0].transcript

speechSynthesis.speak( new SpeechSynthesisUtterance(transcript) ) }

recognition.start()

Page 22: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Алексей Охрименко

Мне нечего тебе сказать

Page 23: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

youtu.be/laZ1CFJnUyk

Page 24: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

navigator.mediaDevices.getUserMedia({ audio: true })

AJAX

распознавание

AJAXТекст

Page 25: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

распознавание

Акценты

Хриплый голос

Дети

NLU

Page 26: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Голосовые помощники

Page 27: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Голосовые помощники

A27

› Siri › Alexa › Cortana › Google assistant › Bixby › Xiao Ai

Page 28: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

У каждого 4 американского покупателя есть доступ к умной колонке

Page 29: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Рост числа пользователей в Штатах за год

A29

47.3M → 66.4M

Page 30: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

ПОРА!

Пора открывать дверь, Пора зажигать свет, Пора делать всё это голосом

Page 31: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Голосовые помощники у нас

A31

› Алиса › Олег › Маруся

Page 32: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Что можно делать

A32

› Задавать вопросы › Музыка, радио › Погода, карты, пробки › Будильник, таймер › Умный дом › Скиллы, тысячи их

Page 33: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Устройства

A33

› Умные колонки › Часы › Наушники › Машины › Телевизоры › Десктопы › Телефоны

Page 34: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Виды голосовых интерфейсов

Page 35: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Виды голосовых интерфейсов

A35

› Собственно голосовые › Визуальные, сопровождающие голос

Page 36: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Виды голосовых интерфейсов

A36

› Собственно голосовые › Визуальные, сопровождающие голос › Голос, дополняющий привычные способы взаимодействия

Page 37: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Новые сценарии

A37

› Руки заняты — в машине — на кухне — в тренажерке — заняты с ребенком

› Игры › Лень

Page 38: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›
Page 39: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Новые сценарии

A39

› Руки заняты — в машине — на кухне — в тренажерке — заняты с ребенком

› Игры › Лень › Люди с ограничениями › Дети

Page 40: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›
Page 41: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Голосовые интерфейсы для разработчиков интерфейсов

Page 42: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Пишем навыки

Page 43: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›
Page 44: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›
Page 45: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Делаем самостоятельно

A45

› Развернуть приложение › Зарегистрировать навык в Диалогах › Протестировать › Пройти модерацию

Page 46: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Навык на JavaScript

46

require('http').createServer((req, res) => { console.log(`req.url`, req.url); if (req.method !== 'POST') { res.statusCode = 404; return res.end('not found'); }

const body = []; req .on('data', chunk => body.push(chunk)) .on('end', () => { const { request, session, version } = JSON.parse(Buffer.concat(body).toString());

const data = { version, session, response: { text: 'Привет!' || request.command.split('').reverse().join(''), end_session: false } };

res.end(JSON.stringify(data)); }); }).listen(8000);

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

Page 47: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Навык на JavaScript

47

require('http').createServer((req, res) => { console.log(`req.url`, req.url); if (req.method !== 'POST') { res.statusCode = 404; return res.end('not found'); }

const body = []; req .on('data', chunk => body.push(chunk)) .on('end', () => { const { request, session, version } = JSON.parse(Buffer.concat(body).toString());

const data = { version, session, response: { text: 'Привет!' || request.command.split('').reverse().join(''), end_session: false } };

res.end(JSON.stringify(data)); }); }).listen(8000);

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

Page 48: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Навык на JavaScript

48

require('http').createServer((req, res) => { console.log(`req.url`, req.url); if (req.method !== 'POST') { res.statusCode = 404; return res.end('not found'); }

const body = []; req .on('data', chunk => body.push(chunk)) .on('end', () => { const { request, session, version } = JSON.parse(Buffer.concat(body).toString());

const data = { version, session, response: { text: 'Привет!' || request.command.split('').reverse().join(''), end_session: false } };

res.end(JSON.stringify(data)); }); }).listen(8000);

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

Page 49: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Навык на JavaScript

49

require('http').createServer((req, res) => { console.log(`req.url`, req.url); if (req.method !== 'POST') { res.statusCode = 404; return res.end('not found'); }

const body = []; req .on('data', chunk => body.push(chunk)) .on('end', () => { const { request, session, version } = JSON.parse(Buffer.concat(body).toString());

const data = { version, session, response: { text: 'Привет!' || request.command.split('').reverse().join(''), end_session: false } };

res.end(JSON.stringify(data)); }); }).listen(8000);

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

Page 50: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Навык на JavaScript

50

require('http').createServer((req, res) => { console.log(`req.url`, req.url); if (req.method !== 'POST') { res.statusCode = 404; return res.end('not found'); }

const body = []; req .on('data', chunk => body.push(chunk)) .on('end', () => { const { request, session, version } = JSON.parse(Buffer.concat(body).toString());

const data = { version, session, response: { text: request.command ? request.command.split('').reverse().join('') : 'Йо', end_session: false } };

res.end(JSON.stringify(data)); }); }).listen(8000);

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

Page 51: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Навык на JavaScript

51

require('http').createServer((req, res) => { console.log(`req.url`, req.url); if (req.method !== 'POST') { res.statusCode = 404; return res.end('not found'); }

const body = []; req .on('data', chunk => body.push(chunk)) .on('end', () => { const { request, session, version } = JSON.parse(Buffer.concat(body).toString());

const data = { version, session, response: { text: request.command ? request.command.split('').reverse().join('') : 'Йо', end_session: false } };

res.end(JSON.stringify(data)); }); }).listen(8000);

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

Page 52: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Повторное использование

Page 53: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Повторное использование

A53

› Портируем код бота для telegram › Реиспользуем код с браузером

Page 54: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›
Page 55: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Игра «Палец»

A55

Page 56: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Игра «Палец»: alice.js

A56

const { json } = require('micro'); const game = require('./lib/game');

const db = {};

module.exports = async req => { const { request, session, version } = await json(req);

const chat = db[session.session_id] || (db[session.session_id] = {});

let responseText;

const {isFinger, message} = game.onStart(chat.state);

if (session.new) { responseText = message; chat.state = isFinger; } else { const command = request.command.toLowerCase(); const isAnswerValid = command.includes('палец');

if (isAnswerValid) { const isUserAnsweredWithFinger = !command.includes('не палец'); const isRight = chat.state === isUserAnsweredWithFinger;

const answer = game.onAnswer(isRight); chat.state = answer.isFinger; responseText = answer.message + '\n' + game.onStart(answer.isFinger).message; } else { responseText = 'Выражайтесь понятнее, пожалуйста!'; } }

return { version, session, response: { text: responseText,

end_session: false } }; };

Page 58: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Разработка

Page 59: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Разработка

A59

› yandex-dialogs-sdk — кнопки — картинки — разметка › ngrok › postman

Page 60: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Деплой

A60

› now › heroku › Digital Ocean › Яндекс Облако

Page 61: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

FAQ

A61

› Несколько навыков на одном сервере › Приватные навыки › Умный дом › Картинки/звуки › Монетизация

Page 62: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Каждый сайт должен быть представлен голосовым интерфейсом

Page 63: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Вопросы

A63

› Как создавать голосовые интерфейсы эффективно? › Как реиспользовать существующие реализации сервисов в голосе?

— API — Чаты

› Как реиспользовать реализации голосовых интерфейсов? › Как тестировать?

Page 64: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

По-старому

A64

› Как чат-боты › Можно писать на JS › «Верстать» интонацию › Верстка для экранов, сопровождающих голосой диалог

Page 65: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›
Page 66: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

По-новому

A66

› Много способов сказать то же самое › Лишняя информация от пользователя › Обработка неожиданного ввода › Хочется перебить › Хочется, чтобы голосовой помощник мог перебивать › «Темная» тема

Page 67: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Давайте вместе искать решения!

Page 68: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Роман Дворнов

Мне нравится видеть результаты своей работы

Page 69: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Роман Дворнов

Мне нравится видеть результаты своей работы

слышать

Page 70: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Фронтендер

Режиссер

Диктор

ДизайнерРазработчик

Сценарист

Page 71: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Владимир Кузнецов

Будущее уже здесь!

Page 72: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Даешь voice first интерфейсы!

Page 73: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Спасибо!Владимир Гриненко

Руководитель службы общих компонентов

[email protected]

tadatuta

tadatuta

tadatuta

Page 74: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›
Page 75: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›
Page 76: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›

Ваши вопросыВладимир Гриненко

Руководитель службы общих компонентов

[email protected]

tadatuta

tadatuta

tadatuta

Page 77: Grinenko - New platform is here - WSD - 2019 - SpBГолосовые интерфейсы a11 › Распознаем голосовой запрос пользователя ›