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

Preview:

Citation preview

Как мы делали

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

библиотеку 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

pdf

2 версии SpeechKit

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

Особенности

Platform Abstraction Layer

Android

iOS

WP8

Java

Objective C

C#

DNI

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, xcode build, libtool, ms build

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

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

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

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

agpanin@yandex-team.ru

Recommended