Распознавание речи в мобильном приложении 1С на Android
Внешняя компонента для мобильной платформы 1С, работающая в связке с отдельной службой и позволяющая реализовать распознавание речи в мобильном приложении на Android.
- Описание
- Подробнее
Описание
В мобильном приложении 1С есть простой способ распознавания речи с использованием объекта ЗапускПриложенияМобильногоУстройства.
Приложение = Новый ЗапускПриложенияМобильногоУстройства("android.speech.action.RECOGNIZE_SPEECH");
Результат = Приложение.Запустить(Истина);
Если Результат = 0 Тогда
Возврат;
КонецЕсли;
СтрокаВвода = Приложение.ДополнительныеДанные.Получить("query").Значение;Вот хорошая статья, описывающая работу с подобным подходом. Казалось бы, запускай и радуйся, но мне понадобилось сделать свою Алису фоновое распознавание в непрерывном режиме, поэтому и пришлось реализовать следующую связку:
- Приложение (фоновая служба) для Android «Сервис распознавания речи для мобильной 1С»
- Внешняя компонента для мобильной платформы, которая взаимодействует с указанной службой.
Схема работы выглядит следующим образом:

На устройство Android устанавливает отдельное приложение (служба), которая работает в фоновом режиме, а в мобильное приложение добавляется внешняя компонента, умеющая с этой службой договариваться и генерирующая внешние события.
Наличие соединения с интернет для распознавания не обязательно, но качество распознавания, как мне показалось, немного лучше, когда оно есть.
Подключение и запуск распознавания:
Если ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаРаспознаванияРечи", "Component", ТипВнешнейКомпоненты.Native) Тогда
Компонента = Новый("AddIn.Component.SpeechRecognizer");
Компонента.ЗапуститьРаспознаваниеРечи();
КонецЕсли;Обработка внешних событий:
&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
Если Событие = "initialization" Тогда
Компонента.ЗапроситьСтатусСервиса();
ПодключитьОбработчикОжидания("ПроверкаСтатусаСервисаРаспознавания", 1, Истина);
ИначеЕсли Событие = "RecognitionResult" Тогда
ОбработатьГолосовойВвод(Данные);
ИначеЕсли Событие = "RecognitionReady" Тогда
ДатаПоследнегоОтветаКомпоненты = ТекущаяДата();
ЕстьПромежуточныеРезультаты = Ложь;
ИначеЕсли Событие = "RecognitionPartialResult" Тогда
ДатаПоследнегоОтветаКомпоненты = ТекущаяДата();
ЕстьПромежуточныеРезультаты = Истина;
ИначеЕсли Событие = "ServiceStatus" Тогда
СтатусСервисаРаспознавания = Данные;
ИначеЕсли Событие = "onBeginningOfSpeech" Тогда
ДатаНачалаПроизношения = ТекущаяДата();
КонецЕсли;
КонецПроцедурыОстановка распознавания:
Компонента.ОстановитьРаспознаваниеРечи();
