46

Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++

  • Upload
    yandex

  • View
    381

  • Download
    3

Embed Size (px)

Citation preview

Page 1: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
Page 2: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++

Как мы делали

кроссплатформенную

библиотеку SpeechKit на C++

Александр Панин

Page 3: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
Page 4: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
Page 5: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
Page 6: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
Page 7: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
Page 8: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++

Распознавание речи в Навигаторе

«Поехали домой»

«Улица Льва Толстого 16»

«Вижу ДТП в правом ряду»

Page 9: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
Page 10: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++

Yandex SpeechKit

Page 11: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++

Ограничения первой версии

Платформенно-зависимая часть (PAL) не рассчитана на

использование в библиотеке

Конфликты версий библиотек

Большой объем кода

Page 12: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++

Yandex SpeechKit 2.0

Page 13: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++

Цели

Кроссплатформенность и минимум дублирования кода

Одинаково стабильное поведение на всех платформах

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

Удобная, компактная и легко интегрируемая библиотека

Page 14: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++

Кроссплатформенность

Page 15: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++

Кроссплатформенность

С Assembler

Page 16: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++

Система сборки

1 gyp

Page 17: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++

generate

libspeechkit.gyp

speechkit.gyp

lips.gyp

gyp

build.хml, android.mk

.xcodeproj

.sln, .csproj

Page 18: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++

build

ant, ndk-build

xcode build, libtool

ms build

binaries

.a, .so, .dll

Page 19: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++

deploy

bash, gradle

bash, lipo, pod

nuget

library project, .aar

framework, cocoapod

nuget package

Page 20: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++

doc

doxygen

html

pdf

Page 21: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++

2 версии SpeechKit

Внешняя Внутренняя

Page 22: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++

Особенности

Page 23: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++

Platform Abstraction Layer

Android

iOS

WP8

Java

Objective C

C#

JNI

Objective C++

C++/CLI

C++

Page 24: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++

JNI

1 Минимум JNI

JNI -> Java

Page 25: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++

Конфликты имен в статических

библиотеках в iOS

Коверкание имен (mangling)

Page 26: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++

Mangling

Page 27: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++

Создание Framework в iOS

Правильные проектные файлы

Сборка библиотеки и зависимостей

Создание универсальной библиотеки

Сборка ресурсов

Копирование ресурсов, библиотеки, заголовочных

файлов в каталог framework

Page 28: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++

WP8

1 Плохая поддержка С (С89)

Windows Phone Runtime Component

Page 29: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++

Управление памятью

1 Очень конкурентная среда

Время жизни объектов

Решение: умные указатели

Page 30: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++

Резюме

Page 31: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++

Android

iOS

WP8

Page 32: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++

Принципы

Ядро на C++

Тонкий слой между ядром и PAL

gyp

Page 33: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++

Используемые решения

gyp

ant, ndk-build, xcodebuild, libtool, msbuild

bash, gradle, lipo, pod, nuget

doxygen

Page 34: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++

Yandex SpeechKit

Page 35: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++

Качество распознавания общих

поисковых запросов на русском языке

84%

Page 36: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++

Качество распознавания гео запросов

на русском языке

94%

Page 37: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++

Среднее время ответа

секунда

Page 38: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++

Стандартный UI

Page 39: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++

Как интегрировать SpeechKit с UI для Android

Page 40: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++

строк кода

Page 41: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++

Какие задачи можно решать с помощью

SpeechKit:

Создание голосового интерфейса для управление

сервисом/приложением (голосовые команды)

Голосовой поиск по контенту приложения

Диктовка коротких текстов (заметки, смс, комментарии и пр.), т.е.

перевод речи в текст

Page 42: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++

В каких приложениях/сервисах можно

использовать SpeechKit

Геоинформационные

Поиск по контенту

Команды и меню

Page 43: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++

api.yandex.ru/speechkit/

43

Page 44: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++

clubs.ya.ru/speechkit/

44

Page 45: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++

Спасибо за внимание!

Page 46: Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++

Александр Панин

Руководитель группы

[email protected]