Как мы делали
кроссплатформенную
библиотеку SpeechKit на C++
Александр Панин
Распознавание речи в Навигаторе
«Поехали домой»
«Улица Льва Толстого 16»
«Вижу ДТП в правом ряду»
Yandex SpeechKit
Ограничения первой версии
Платформенно-зависимая часть (PAL) не рассчитана на
использование в библиотеке
Конфликты версий библиотек
Большой объем кода
Yandex SpeechKit 2.0
Цели
Кроссплатформенность и минимум дублирования кода
Одинаково стабильное поведение на всех платформах
Производительность
Удобная, компактная и легко интегрируемая библиотека
Кроссплатформенность
Кроссплатформенность
С Assembler
Система сборки
1 gyp
generate
libspeechkit.gyp
speechkit.gyp
lips.gyp
gyp
build.хml, android.mk
.xcodeproj
.sln, .csproj
build
ant, ndk-build
xcode build, libtool
ms build
binaries
.a, .so, .dll
deploy
bash, gradle
bash, lipo, pod
nuget
library project, .aar
framework, cocoapod
nuget package
doc
doxygen
html
2 версии SpeechKit
Внешняя Внутренняя
Особенности
Platform Abstraction Layer
Android
iOS
WP8
Java
Objective C
C#
JNI
Objective C++
C++/CLI
C++
JNI
1 Минимум JNI
JNI -> Java
Конфликты имен в статических
библиотеках в iOS
Коверкание имен (mangling)
Mangling
Создание Framework в iOS
Правильные проектные файлы
Сборка библиотеки и зависимостей
Создание универсальной библиотеки
Сборка ресурсов
Копирование ресурсов, библиотеки, заголовочных
файлов в каталог framework
WP8
1 Плохая поддержка С (С89)
Windows Phone Runtime Component
Управление памятью
1 Очень конкурентная среда
Время жизни объектов
Решение: умные указатели
Резюме
Android
iOS
WP8
Принципы
Ядро на C++
Тонкий слой между ядром и PAL
gyp
Используемые решения
gyp
ant, ndk-build, xcodebuild, libtool, msbuild
bash, gradle, lipo, pod, nuget
doxygen
Yandex SpeechKit
Качество распознавания общих
поисковых запросов на русском языке
84%
Качество распознавания гео запросов
на русском языке
94%
Среднее время ответа
секунда
Стандартный UI
Как интегрировать SpeechKit с UI для Android
строк кода
Какие задачи можно решать с помощью
SpeechKit:
Создание голосового интерфейса для управление
сервисом/приложением (голосовые команды)
Голосовой поиск по контенту приложения
Диктовка коротких текстов (заметки, смс, комментарии и пр.), т.е.
перевод речи в текст
В каких приложениях/сервисах можно
использовать SpeechKit
Геоинформационные
Поиск по контенту
Команды и меню
api.yandex.ru/speechkit/
43
clubs.ya.ru/speechkit/
44
Спасибо за внимание!