just-ai / aimybox-ios-sdk Goto Github PK
View Code? Open in Web Editor NEWVoice assistant SDK for iOS devices written in Swift
Home Page: https://aimybox.com
License: Apache License 2.0
Voice assistant SDK for iOS devices written in Swift
Home Page: https://aimybox.com
License: Apache License 2.0
Предусловия:
Авторизоваться в мобильное приложение Алфа-Мобайл
Шаги воспроизведения:
Описание: Альф слышит команду, отвечает, но следующую команду уже не слышит
Чтобы услышал, надо тапнуть на анимацию
iOS 12.5 iphone 6
iOS 12.5.1 iPhone 5S
Я проверял в наушинках AirPods и Mi True Wireless EBs
Шаги
Фактический результат:
Блютуз соединение с наушниками установилось, но звук воспроизводится с динамика телефона. Звук появится в наушниках, если выйти из голосового помощника и снова зайти.
Ожидаемый результат
Блютуз соединение с наушниками установилось, звук передается в наушники .
For compatibility
В своем проекте обновили firebase, зависимость com.google.firebase:firebase-perf-ktx тянет com.google.protobuf:protobuf-javalite:3.14.0. Эта версия конфликтует с com.google.protobuf:protobuf-lite:3.0.1, которую подтягивает библиотека com.justai.aimybox:yandex-speechkit.
От использования новой версии firebase отказаться не можем. Чтобы разрешить конфликт зависимостей необходимо поддержать в com.justai.aimybox:yandex-speechkit обновление io.grpc » grpc-protobuf-lite до версии 1.35.0
При подключении этой версии происходит краш:
2021-02-20 10:25:05.750 10628-10839/ru.alfabank.mobile.android.feature W/System.err: java.lang.ExceptionInInitializerError
2021-02-20 10:25:05.750 10628-10839/ru.alfabank.mobile.android.feature W/System.err: at yandex.cloud.ai.stt.v2.SttServiceOuterClass$StreamingRecognitionRequest.getDefaultInstance(SttServiceOuterClass.java:467)
2021-02-20 10:25:05.751 10628-10839/ru.alfabank.mobile.android.feature W/System.err: at yandex.cloud.ai.stt.v2.SttServiceGrpc.getStreamingRecognizeMethod(SttServiceGrpc.java:50)
2021-02-20 10:25:05.751 10628-10839/ru.alfabank.mobile.android.feature W/System.err: at yandex.cloud.ai.stt.v2.SttServiceGrpc$SttServiceStub.streamingRecognize(SttServiceGrpc.java:130)
2021-02-20 10:25:05.751 10628-10839/ru.alfabank.mobile.android.feature W/System.err: at com.justai.aimybox.speechkit.yandex.cloud.YandexRecognitionApi.openStream$yandex_speechkit_release(YandexRecognitionApi.kt:53)
2021-02-20 10:25:05.752 10628-10839/ru.alfabank.mobile.android.feature W/System.err: at com.justai.aimybox.speechkit.yandex.cloud.YandexRecognitionApi$openStream$1.invokeSuspend(Unknown Source:12)
2021-02-20 10:25:05.752 10628-10839/ru.alfabank.mobile.android.feature W/System.err: at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
2021-02-20 10:25:05.752 10628-10839/ru.alfabank.mobile.android.feature W/System.err: at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:56)
2021-02-20 10:25:05.752 10628-10839/ru.alfabank.mobile.android.feature W/System.err: at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
2021-02-20 10:25:05.753 10628-10839/ru.alfabank.mobile.android.feature W/System.err: at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:738)
2021-02-20 10:25:05.753 10628-10839/ru.alfabank.mobile.android.feature W/System.err: at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678)
2021-02-20 10:25:05.754 10628-10839/ru.alfabank.mobile.android.feature W/System.err: at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)
2021-02-20 10:25:05.755 10628-10839/ru.alfabank.mobile.android.feature W/System.err: Caused by: java.lang.RuntimeException: Unable to get message info for yandex.cloud.ai.stt.v2.SttServiceOuterClass$StreamingRecognitionRequest
2021-02-20 10:25:05.755 10628-10839/ru.alfabank.mobile.android.feature W/System.err: at com.google.protobuf.GeneratedMessageInfoFactory.messageInfoFor(GeneratedMessageInfoFactory.java:62)
2021-02-20 10:25:05.755 10628-10839/ru.alfabank.mobile.android.feature W/System.err: at com.google.protobuf.ManifestSchemaFactory$CompositeMessageInfoFactory.messageInfoFor(ManifestSchemaFactory.java:143)
2021-02-20 10:25:05.755 10628-10839/ru.alfabank.mobile.android.feature W/System.err: at com.google.protobuf.ManifestSchemaFactory.createSchema(ManifestSchemaFactory.java:55)
2021-02-20 10:25:05.756 10628-10839/ru.alfabank.mobile.android.feature W/System.err: at com.google.protobuf.Protobuf.schemaFor(Protobuf.java:90)
2021-02-20 10:25:05.756 10628-10839/ru.alfabank.mobile.android.feature W/System.err: at com.google.protobuf.Protobuf.schemaFor(Protobuf.java:104)
2021-02-20 10:25:05.756 10628-10839/ru.alfabank.mobile.android.feature W/System.err: at com.google.protobuf.GeneratedMessageLite.makeImmutable(GeneratedMessageLite.java:175)
2021-02-20 10:25:05.756 10628-10839/ru.alfabank.mobile.android.feature W/System.err: at yandex.cloud.ai.stt.v2.SttServiceOuterClass$StreamingRecognitionRequest.<clinit>(SttServiceOuterClass.java:463)
2021-02-20 10:25:05.756 10628-10839/ru.alfabank.mobile.android.feature W/System.err: ... 11 more
2021-02-20 10:25:05.757 10628-10839/ru.alfabank.mobile.android.feature W/System.err: Caused by: java.lang.UnsupportedOperationException
2021-02-20 10:25:05.757 10628-10839/ru.alfabank.mobile.android.feature W/System.err: at yandex.cloud.ai.stt.v2.SttServiceOuterClass$StreamingRecognitionRequest.dynamicMethod(SttServiceOuterClass.java:455)
2021-02-20 10:25:05.758 10628-10839/ru.alfabank.mobile.android.feature W/System.err: at com.google.protobuf.GeneratedMessageLite.dynamicMethod(GeneratedMessageLite.java:256)
2021-02-20 10:25:05.758 10628-10839/ru.alfabank.mobile.android.feature W/System.err: at com.google.protobuf.GeneratedMessageLite.buildMessageInfo(GeneratedMessageLite.java:284)
2021-02-20 10:25:05.758 10628-10839/ru.alfabank.mobile.android.feature W/System.err: at com.google.protobuf.GeneratedMessageInfoFactory.messageInfoFor(GeneratedMessageInfoFactory.java:60)
2021-02-20 10:25:05.758 10628-10839/ru.alfabank.mobile.android.feature W/System.err: ... 17 more```
Generate an appropriate exception if text-to-speech or speech-to-text component requires an internet connection.
Для отслеживания метрик работы голосового помощника необходимо получать информацию о времени обработки запроса TextToSpeech в Yandex SpeechKit Яндекс.Облака. На текущий момент при использовании SDK AimyBox для IOS нет возможности отслеживать данную метрику, есть возможность только получить время запроса с учетом времени, которое еще требуется на произнесение текста.
Необходимо добавить возможность передачи времени ответа или факт получения успешного ответа от Yandex SpeechKit
iphone 11, ios14.1
Перевести девайс в беззвучный режим, уровень громкости снизить до 0.
Зайти в голосового помощника
ОР: не слышно озвучки фраз помощника
ФР: помощник говорит вслух, снова можно уменьшить громкость
Implement SpeechDataReceived the same way as in TextToSpeech
Check dictation and microphone permissions on initialisation to prevent the application crash.
Проверить, вызывается ли speechStarted в YandexTestToSpeech; если не вызывается, добавить вызов + прокидывать AimyboxSpeech в speechDataRecieved, чтобы понимать, какой спич закончил загружаться.
В данный момент в стейтах listening и processing аудио сессия сконфигурирована на запись, поэтому невозможно проиграть звук. Требуется возможность проигрывать звуки при переходе в стейт listening и уходе с него.
У некоторых пользователей на проде Альф (голосовой помощник Альфа банка) тихо говорит и громкость невозможно повысить кнопками
замечено на:
iPhone 11, ios 15.0.1
iPhone 11 PRO, ios 15
iPhone 7, ios 14.6
iPhone 7 Plus, 14.6
версия сдк: 0.0.13
Посмотрел демоапп с конфигами альфа-мобайла. Я смотрел на iPhone 11 iOS 15.1. Проверял на AirPods и сторонних беспроводных наушниках (MI True Wireless EBs и JBL FREE).
Если вызвать yandexSpeechToText.stopRecognition
до того, как пришел final result, и сразу же yandexSpeechToText.startRecognition
, то при открытии новой сессии получаем остаточные результаты от прошлой.
Шаги:
func stt(_ speechToText: SpeechToText, recognitionPartial result: String)
yandexSpeechToText.stopRecognition
(либо aimybox.stopRecognition
, либо aimybox.sendRequest(query:)
)yandexSpeechToText.startRecognition
и ничего не говоримОжидаемое поведение:
6. Если ничего не говорим, не приходит респонс от YandexSpeechToText
Фактическое поведение:
6. Если предыдущий стрим не успел закрыться, то получаем partialResult("привет")
и finalResult("привет")
Не работает метод остановки проговаривания речи в YandexTextToSpeech
(func stop()
).
Посмотрел демоапп с конфигами альфа-мобайла. Я смотрел на iPhone 11 iOS 15.1. Проверял на AirPods и сторонних беспроводных наушниках (MI True Wireless EBs и JBL FREE).
Баг №1. В сторонних наушниках (не в AirPods) слышу гудки при включении/выключения микрофона.
Кейс 1
Кейс 2
Фактический результат: Перед тем как голосовой помощник начнет говорить и после того как закончит, я слышу гудки в наушниках из-за того, что в них включается и включается микрофон. При включении микрофона, нажав на соответствующую иконку, тоже слышу гудки. На эйрподсах такие звуки не воспроизводятся. Только в сторонних наушниках .
Ожидаемый результат распишу ниже, после 2 бага.
Баг №2. При подключенных наушниках не работает распознавание голоса через микрофон
Ожидаемый результат для багов №1 и №2
Для наушников AirPods: Микрофон должен работать на наушниках.
Для сторонних наушников: Так как в них слышим гудки при включении/отключении микрофона(напомню что в эйрподсах нету таких звуков), то микрофон в наушниках не должен работать и распознавание голоса должно происходить через микрофон телефона.
P.S. Я решил посмотреть как работает Сири через наушники. Если с ней общаемся через эйрподсы, то микрофон будет работать на наушниках . А если с ней пообщаться через сторонние наушники, то микрофон будет работать в телефоне.
When you are on the call and same time while clikcing on mic button, app is crashing.
The audio interruption doesn't seem to have been handled.
Такая проблема - при переводе в tts обрезается первое английское слово, остальные слова произносятся нормально.
https://tts.api.cloud.yandex.net/speech/v1/tts:synthesize?folderId=b1gq9gur08br1ugei06g&text=запустит на Гавайях гигантскую виртуальную электростанцию.&lang=ru-RU&voice=kuznetsov&format=lpcm&sampleRateHertz=48000&speed=1.0&emotion=neutral
Посмотрел демоапп с конфигами альфа-мобайла. Я смотрел на iPhone 11 iOS 15.1. Проверял на AirPods и сторонних беспроводных наушниках (MI True Wireless EBs и JBL FREE).
Я распишу 4 кейса , которые могут привести к крашу. Ожидаемый результат для этих кейсов : Приложение не должно крашится.
Кейс 1
Фактический результат: Произойдёт краш приложения
Кейс 2
Фактический результат: Произойдёт краш приложения
Кейс 3
Фактический результат: После того как он закончит речь, то приложение крашится.
Кейс 4
Фактический результат: После того как он закончит речь, то приложение крашится.
Предусловие: подключены airpods
Шаги:
ожидаемый результат: Альф говорит и слушает через наушники
Фактический результат: Альф говорит через динамик
can I create a custom wakeword for the app?
For compatibiliy
Я воспроизвел это в iphone 11 ios 15.1. Коллега смотрела на iphone 7+, ios 14.4 . У неё не воспроизводится такое.
В альфа мобайле столкнулся с такой же проблемой.
Скринкаст можно посмотреть здесь https://drive.google.com/file/d/1P2nmOL89S3oNXorPIw2Fwf54G5w5RHC2/view
Посмотрел демоапп с конфигами альфа-мобайла. Обнаружил баги. Я смотрел на iPhone 11 iOS 15.1. Проверял на AirPods и сторонних беспроводных наушниках (MI True Wireless EBs и JBL FREE).
Баг №1 Приложение крашится. Воспроизводится для всех наушников.
Я распишу 4 кейса , которые могут привести к крашу. Ожидаемый результат для этих кейсов : Приложение не должно крашится.
Кейс 1
Фактический результат: Произойдёт краш приложения
Кейс 2
Фактический результат: Произойдёт краш приложения
Кейс 3
Фактический результат: После того как он закончит речь, то приложение крашится.
Кейс 4
Фактический результат: После того как он закончит речь, то приложение крашится.
Баг №2. В сторонних наушниках (не в AirPods) слышу гудки при включении/выключения микрофона.
Кейс 1
Кейс 2
Фактический результат: Перед тем как голосовой помощник начнет говорить и после того как закончит, я слышу гудки в наушниках из-за того, что в них включается и включается микрофон. При включении микрофона, нажав на соответствующую иконку, тоже слышу гудки. На эйрподсах такие звуки не воспроизводятся. Только в сторонних наушниках .
Ожидаемый результат распишу ниже, после 3 бага.
Баг №3. При подключенных наушниках не работает распознавание голоса через микрофон
Ожидаемый результат для багов №2 и №3
Для наушников AirPods: Микрофон должен работать на наушниках.
Для сторонних наушников: Так как в них слышим гудки при включении/отключении микрофона наушников(напомню что в эйрподсах нету таких звуков), то микрофон в наушниках не должен работать и распознавание голоса должно происходить через микрофон телефона.
P.S. Я решил посмотреть как работает Сири через наушники. Если с ней общаемся через эйрподсы, то микрофон будет работать на наушниках . А если с ней пообщаться через сторонние наушники, то микрофон будет работать в телефоне.
Баг №4 Сжатый звук в беспроводных наушниках
Обновить все библиотеки, от которых зависит СДК.
Проблема:
Когда на фронт приходит фраза, в которой мы хотим услышать ударение на нужном слове (передаем символ "+"), сдк почему-то обрезает этот символ и фраза произносится некорректно
Вот пример из логов iOS:
https://tts.api.cloud.yandex.net/speech/v1/tts:synthesize?folderId=b1gq9gur08br1ugei06g&text=Заплат ите 57 407,24 ₽ до 11 марта 2021&lang=ru-RU&speed=1.0&voice=kuznetsov&emotion=neutral&format=lpcm&sampleRateHertz=48000
хотя приходит фраза: "tts":"Заплат+ите 57 407,24 ₽ до 11 марта 2021"
В том же самом кейсе, на андроиде проблема не воспроизводится, и все произносится нормально. Ниже прикрепляю два видео с проблемой на айосе и с нормальным произнесением на андроиде
При запросе к Yandex SpeechKit Яндекс.Облака для диагностики ошибок необходимо передавать разрешение сохранять данные, переданные пользователем в запросе. В соответствии с документацией Яндекса https://cloud.yandex.ru/docs/speechkit/concepts/support-headers данное разрешение передается в параметре - x-data-logging-enabled.
На текущий момент при использовании SDK AimyBox для iOS нет возможности передать данный параметр в запросе к Yandex SpeechKit.
Необходимо в объекты YandexTextToSpeech и YandexSpeechToText добавить возможность передачи параметра x-data-logging-enabled.
Убрать ограничение class у протоколов, чтобы можно было создавать структуры для моделей, а не только классы
К примеру Reply, Request, Response и т.д.
Если при входе в голосового помощника включена музыка (в наушниках или динамиках) то музыка не прерывается
Шаги воспроизведения:
ОР: музыка прерывается, слышно только ГП
ФР: Музыка становится громче, слышно музыку и ГП
Версия SDK 0.0.13
iOS 14.6, ios15, ios 13
Iphone 12 mini, iphone 11, iphone SE(2nd)
Update UI in demo to match Aimybox Android Assistant demo. (See GIF here)
При входе в Альфа (голосового помощника Альфа-банка) происходит краш приложения Альфа-мобайл
Воспроизводится периодически
Логи ошибке в файле
Дефект на продакшене
12.3 (18546) iOS 14.7.1 iPhone XS Oct 22, 2021, 2:37:11 PM
CrushSummary.txt
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.