Распознавание речи | 1С:Зазеркалье

05.09.2022


Данная статья является анонсом новой функциональности.
Не рекомендуется использовать содержание данной статьи для освоения новой функциональности.
Полное описание новой функциональности будет приведено в документации к соответствующей версии.
Полный список изменений в новой версии приводится в файле v8Update.htm.

Планируется в версии 8.3.23

В версии 8.3.23 в платформе появится сервис распознавания речи.

С его помощью в приложениях 1С можно будет распознавать речь пользователя (как в реальном времени по мере произнесения, так и записанную в звуковой файл) и переводить её в текст. Распознавание речи будет делаться с помощью специально обученных нейросетей. Во встроенном языке появятся новые типы и методы для поддержки этой функциональности.

Например, можно будет разместить в почтовом приложении на форме письма кнопку, при нажатии на которую активируется распознавание речи, и текст письма можно будет надиктовать голосом.

Или разместить такую кнопку возле поля «Адресаты», чтобы заполнить адресатов письма голосом.

В составе «Функций для технического специалиста» появится функция «Управление распознаванием речи»: 


Эта функция, в частности, позволяет настроить доступность моделей (объектов, включающих в себя нейросети, обученные специальным образом), которые будут использоваться при распознавании речи.

Платформа может распознавать речь как локально, так и используя облачный сервис 1С. Для распознавания речи с в облачном сервисе нужно соединение с интернетом, учётная запись ИТС и подписка на сервис распознавания речи. Для локального распознавания нужно будет скачать модели распознавания речи из облачного сервиса 1С; хотим заметить, что для локального распознавания речи могут потребоваться дополнительные аппаратные ресурсы.

При этом для использования моделей на своих серверах не нужно будет устанавливать дополнительное ПО – всё необходимое уже входит в состав платформы.

В первой версии сервиса будет доступна только одна модель распознавания речи. В будущем мы планируем расширить ряд поставляемых моделей. При распознавании речи можно будет задать желаемые значения параметров:

  • «Акустика»: в каких условиях ведется работа — в помещении, на улице и т.п.

  • «Грамматика»: определяет специфические грамматические правила и слова, относящиеся к определенной прикладной области.

  • «Язык»: на каком языке следует вести распознавание речи.

И сервис распознавания речи подберет наиболее подходящую для заданных значений модель.

Модель, поставляемая в первой версии, будет поддерживать только один тип акустики — «Общий» («General»), один тип грамматики — «Общий» («General»), и два языка – русский и английский.

Грамматику моделей можно будет расширять для своих задач (например, задавая список фамилий из адресной книги почтового клиента). Тогда начнут распознаваться ранее неизвестные системе фамилии. Грамматику также можно будет расширить, когда ожидается распознавание узкоспециализированных терминов из какой-то специфической предметной области, например, медицинской.

Встроенный язык будет расширен новыми типами и методами для распознавания речи. У глобального контекста появится новое свойство РаботаСРечью, возвращающее объект нового типа МенеджерРаботыСРечью. С помощью методов этого объекта можно будет, в частности:

  • Переводить речь (произносимую в реальном времени или записанную в звуковой файл) в текст
  • Оперировать моделями распознавания речи (получить список доступных моделей, соответствующих заданным акустике, грамматике и языку, установить и удалить модель распознавания речи для информационной базы)
  • Оперировать грамматиками (получить список доступных грамматик, установить дополнительные грамматики, удалить грамматику)

А вот как это работает.

С помощью сервиса распознавания речи программа из нескольких строк кода позволяет голосом надиктовать текст письма.

Возможность распознавания речи будет доступна в файловом и клиент-серверном варианте работы, в тонком, толстом и веб-клиенте (на всех поддерживаемых браузерах кроме Firefox и Safari).

Теги: 8.3.23 

Возврат к списку

Рассказать друзьям:

технология, ее значении для маркетологов — CoMagic

 

Вы знали, что технологии распознавания голоса существуют уже 50 лет? Полвека эту задачу решают ученые и только в последние несколько десятилетий к ее решению подключились IT-компании. Результатом последнего года работы стал новый уровень точности распознавания и массовое использование технологии в повседневной и профессиональной жизни.

Технология в жизни

Каждый день мы пользуемся поисковыми системами. Мы ищем, где пообедать, как добраться до нужного места или пытаемся найти значение неизвестного термина. Технология распознавания голоса, которую используют, например, Google или Яндекс.Навигатор помогает нам тратить на поиск минимум времени. Это просто и удобно.

Источник:
http://www.limebridge.com.au/cartoons/technology

В профессиональной среде технология помогает упростить работу в несколько раз. Например, в медицине речь врача преобразуется в текст истории болезни и рецепт сразу на приеме. Это экономит время на занесение информации о пациенте в документы. Встроенная в бортовой компьютер автомобиля система реагирует на запросы водителя, например, помогает найти ближайшую заправку. Для людей с ограниченными возможностями актуально внедрение систем в программное обеспечение бытовых приборов для управления ими с помощью голоса.

Развитие систем распознавания голоса

Идея распознавания речи выглядела многообещающе во все времена. Но уже на этапе распознавания чисел и самых простых слов исследователи столкнулись с проблемой. Суть распознавания сводилась к построению акустической модели, когда речь представлялась как статистическая модель, которая сравнивалась с готовыми шаблонами. Если модель соответствовала шаблону, то система принимала решение о том, что команда или число распознано. Рост словарей, которые могла распознать система, требовал увеличения мощностей вычислительных систем.

Графики роста производительности компьютеров и снижения ошибки распознавания в системах распознавания голоса англоязычной речи
  Источники:
Herb Sutter. The Free Lunch Is Over: A Fundamental Turn Toward Concurrency in Software
https://minghsiehee.usc.edu/2017/04/the-machines-are-coming/

          

Сегодня алгоритмы распознавания дополнились языковыми моделями, которые описывают структуру языка, например, типичную последовательность слов.

Обучение системы происходит на реальном речевом материале.

Новым этапом в развитии технологии стало применение нейронных сетей. Система распознавания устроена таким образом, что каждое новое распознавание влияет на точность распознавания в будущем. Система становится обучаемой.


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

Положение дел в развитии технологии сегодня выражается целью: от распознавания речи к пониманию. Для этой цели выбран и ключевой показатель – процент ошибок в распознавании. Стоит сказать, что такой показатель применяется и в распознавании речи одного человека другим. Мы пропускаем часть слов, принимая во внимания другие факторы, например, контекст. Это позволяет нам понимать речь даже без понимания значений отдельных слов. Для человека показатель ошибки распознавания равен 5,1%.

Другими сложностями в обучении системы распознавания речи пониманию языка будут эмоции, неожиданная смена темы разговора, использование сленга и индивидуальные особенности говорящего: темп речи, тембр, произношение звуков.


Мировые игроки рынка

Несколько мировых игроков рынка платформ распознавания голоса хорошо известны. Это Apple, Google, Microsoft, IBM. Эти компании обладают достаточными ресурсами для исследований и обширной базой для обучения собственных систем. Например, Google использует для обучения миллионы поисковых запросов, которые пользователи с удовольствием задают сами. С одной стороны, это повышает точность распознавания, а с другой – накладывает ограничения: система распознает речь отрезками по 15 секунд и рассчитывает на «вопрос широкого профиля». Ошибка распознавания системы Google – 4,9 %. У IBM этот показатель равен 5,5 %, а у Microsoft – 6,3 % на конец 2016 года.

Голосовой поиск в России недавно запустил Яндекс. Учитывая число пользователей, можно рассчитывать, что в скором времени точность распознавания будет высока.

Платформу для применения в профессиональных областях разрабатывает американская компания Nuance. Среди областей применения: медицина, юриспруденция, финансы, журналистика, строительство, безопасность, автомобильная сфера.

В России Центр речевых технологий – крупнейший производитель профессиональных средств распознавания голоса и синтезирования речи. Решения компании внедрены в 67 странах мира. Основные направления работы: голосовая биометрия – идентификация по голосу; речевые системы самообслуживания – IVR, применяемые в колл-центрах; синтезаторы речи. В США российская компания работает под брендом SpeechPro и проводит исследования по распознаванию англоязычной речи. Результаты распознавания входят в ТОП-5 результатов по величине ошибки.


Ценность распознавания голоса в маркетинге

Цель маркетинга – изучение потребностей рынка и организация бизнеса в соответствии с ними для увеличения прибыльности и эффективности. Голос интересует маркетологов в двух случаях: если говорит клиент и если говорит сотрудник. Поэтому объект изучения для маркетологов и сфера применения технологии – телефонные звонки.

Сегодня аналитика телефонных переговоров развита плохо. Звонки не только нужно записывать, но и прослушивать, оценивать и только потом анализировать. Если организовать запись несложно – это может любая виртуальная АТС или сервис коллтрекинга, – то организовать прослушивание звонков сложнее. Эту задачу решает или отдельный человек в компании, или руководитель колл-центра. Прослушивание звонков также отдают на аутсорсинг. В любом случае погрешность в оценке звонков – проблема, которая ставит под сомнение результаты аналитики и принятые на их основе решения.

С помощью технологии распознавания голоса звонки будут анализироваться автоматически, и это откроет двери для массового использования.

(12)

3.3/5

Оцените статью

Поделитесь с друзьями

Google Speech-to-Text в веб-приложении | Tomasz Kiełbowicz

Google Speech-to-Text (STT) API — это простой способ интегрировать распознавание голоса в ваше приложение. Идея сервиса проста, он принимает аудиопоток и отвечает распознанным текстом. На момент написания статьи первые 60 минут распознавания речи в месяц предоставляются бесплатно, поэтому вы можете попробовать его без каких-либо затрат. Каждая минута сверх лимита стоит около $0,006, время округляется до 15 секунд.

Чтобы следовать этому руководству, вы должны включить преобразование речи в текст:

  1. Откройте консоль GCP https://console.cloud.google.com/
  2. Выберите или создайте новый проект
  3. Найдите «Cloud Speech- to-Text API» и включите его
  4. Найдите «Учетные записи служб» и создайте новую учетную запись службы
  5. Добавьте ключ к учетной записи службы, выберите формат JSON, загрузите и безопасно сохраните файл ключа

Можно отправлять аудиопоток прямо из браузера, но, насколько мне известно, нет возможности разрешить клиенту (браузеру) использовать нашу учетную запись, не раскрывая учетные данные службы. Поэтому мы собираемся отправить аудиопоток из браузера через веб-сокет на серверную часть, а затем перенаправить его на STT и отправить обратно ответ.

На стороне клиента мы используем Typescript без дополнительных зависимостей, а на бэкэнде это будет http4s настроенный с тапиром. Для вызовов STT мы будем использовать библиотеку, предоставленную Google.

API является центральной точкой нашего решения, поэтому сначала мы должны понять, как мы можем использовать эту службу и какие требования или ограничения она налагает на остальную часть решения.

В документации описаны 3 типичных сценария использования: транскрипция короткого файла, транскрипция длинного файла и транскрипция входного аудиопотока. Нас интересует 3-й сценарий, так как мы хотим распознавать речь пользователя на лету.

Для достижения наилучшего результата распознавания речи документация рекомендует следующие характеристики аудиопотока:

  • выборка на частоте 16 кГц
  • 16-битный формат выборки со знаком
  • сжатие без потерь фрагмент аудио в каждом запросе в потоке

Также не рекомендуется любая предварительная обработка, такая как регулировка усиления, шумоподавление или передискретизация.

Обычно для захвата аудио (и видео) в браузере используется MediaStream Recording API. К сожалению, он поддерживает только сжатые форматы, и, что еще хуже, поддерживаемые форматы зависят от браузера и платформы. Лучшим выбором является API веб-аудио, который можно использовать для обработки пользовательского аудиопотока. Обе технологии построены на Media Capture и Streams, которые обеспечивают доступ к аудиоустройствам клиента.

Во-первых, мы должны получить дескриптор аудиопотока микрофона пользователя с помощью Media Capture и Streams API:

 const sampleRate = 16000const stream = navigator.mediaDevices.getUserMedia({ 
audio: {
deviceId: "default" ,
sampleRate: sampleRate,
sampleSize: 16,
channelCount: 1
},
video: false
})

Здесь мы используем устройство «по умолчанию», хотя можно перечислить доступные устройства и выбрать конкретное. Также задаем необходимые параметры потока.

Далее мы собираемся обработать поток с помощью Web Audio API. Этот API позволяет нам построить сеть узлов обработки звука. API предоставляет набор узлов для общих задач обработки. Нас интересуют два из них:

  • MediaStreamAudioSourceNode — подключает медиапоток к сети
  • AudioWorkletNode — позволяет настраиваемую обработку аудиопотока

Все узлы существуют в AudioContext, которые мы должны создать в первую очередь:

 const audioContext = new window.AudioContext({sampleRate: sampleRate}) 

Затем из полученного ранее потока можно создать MediaStreamAudioSourceNode:

 const source: MediaStreamAudioSourceNode = audioContext.createMediaStreamSource(stream) 

немного сложнее. Узел worklet должен выполнять свою работу в отдельном потоке. Для этого Web Audio API использует Worker API. К счастью, большую часть процесса выполняет API. Нам нужно сделать 2 вещи:

  • создать сценарий обработки и зарегистрировать его под именем
  • создать узел worklet в основном контексте, используя зарегистрированное имя

Наш узел обработки отвечает за 2 задачи:

  • транскодирование потока
  • объединение кадров на аудиофрагменты по 100 мс

Узлы API веб-аудио обрабатывают аудиопоток кадрами длиной 128 сэмплов. Такой кадр по спецификации называется квантом рендеринга 9.0063 . Каждая выборка представлена ​​32-битным числом с плавающей запятой, поэтому транскодирование представляет собой просто переназначение 32-битной выборки с плавающей запятой на 16-битную выборку со знаком.

Полный исходный код скрипта обработки:

 constquantSize = 128 

class TestProcessor extends AudioWorkletProcessor {
конструктор(опции) {
super()
this.quantaPerFrame = 12
this.quantaCount = 0
this.frame = new Int16Array(quantumSize * this.quantaPerFrame)
}

процесс(входы, выходы, параметры) {
const offset =QuantSize * this.quantaCount
inputs[0][0].forEach((sample, idx) => this.frame[offset + idx] = Math.floor(sample * 0x7fff))
this.quantaCount = this.quantaCount + 1
if (this.quantaCount === this.quantaPerFrame) {
this.port.postMessage(this.frame)
this.quantaCount = 0
}
return true
}
}

registerProcessor(' pcm-worker', TestProcessor)

Количество квантов рендеринга в каждом чанке потока равно 12, поэтому длина чанка будет: (1/16 кГц)*128*12 = 96 мс.

Образец 32-битного числа с плавающей запятой находится в диапазоне (-1;1) . Нам нужно число в диапазоне (-32 768;32 767) . Для перекодирования нам нужно умножить входную выборку на 32 768 и округлить результат: Math.floor(sample * 0x7fff).

После завершения полного чанка он отправляется в основной контекст портом воркера: this.port.postMessage(this.frame) . Скоро мы увидим, как это будет воспринято на другом конце.

Прежде чем мы создадим узел ворклета, мы должны зарегистрировать сценарий ворклета в нашем аудиоконтексте:

 audioContext.audioWorklet.addModule('/pcmWorker.js') 

Теперь мы можем создать узел ворклета в основном потоке и подключиться это с узлом источника аудиопотока:

 const pcmWorker = new AudioWorkletNode(audioContext, 'pcm-worker', { 
outputChannelCount: [1]
})
source.connect(pcmWorker)

Для маршрутизации аудиопотока из рабочий узел к серверной части, мы должны установить соединение WebSocket:

 const conn = new WebSocket("ws://localhost:8080/ws/stt") 

и затем мы можем перенаправить аудиопоток от обработчика PCM на соединение (мы используем порт AudioWorkletNode для получения данных от обработки script):

 pcmWorker. port.onmessage = event => conn.send(event.data) 
pcmWorker.port.start()

Мы начнем реализацию серверной части с конечной точки WebSocket. Определение конечной точки в тапире:

 val  wsEndpoint  = 
конечная точка .get
.in("stt")
.out(webSocketBody[WebSocketFrame, CodecFormat.TextPlain, WebSocketFrame, CodecFormat.TextPlain]( Fs2Streams [Task]))

для создания маршрута http4s обеспечить handleWebSocket fs2 Pipe, преобразующий входной поток WebSocketFrame в выходной поток WebSocketFrame :

  wsEndpoint  .toRoutes(_ => Task.  pure  (901Weble2))))0055 

Прежде чем мы начнем отправлять аудиопоток в STT, мы должны создать SpeechClient и установить соединение gRPC:

 val  speechClient =  SpeechClient.  create 
val sttStream =
speechClient
.streamingRecognizeCallable.splitCall(new RecognitionObserver(queue))

Наш RecognitionObserver получит ответ от STT и поместит его в очередь fs2 после преобразования в простой класс RecognitionObserver JSON:

3 (очередь: Очередь[Задача, Строка]) расширяет ResponseObserver[StreamingRecognizeResponse] {

override def onResponse(response: StreamingRecognizeResponse) = {
val result = response. getResultsList.get(0)
val isFinal = result.getIsFinal
val Transcript = result.getAlternativesList.get(0).getTranscript
val msg = s" ""{"final": $ isFinal, "text" : " $ расшифровка"}"""
queue.enqueue1(msg).runSyncUnsafe()
}

override def onError(t: Throwable): Unit = {}
override def onComplete(): Unit = {}
override def onStart(controller: StreamController): Unit = {}
}

Первое сообщение, отправляемое на STT после подключения, должно быть конфигурационным. Мы должны предоставить параметры аудиопотока (кодирование и частота дискретизации), и мы можем настроить некоторые параметры процесса распознавания, такие как модель распознавания, язык или хотим ли мы получать промежуточные результаты:

 object SpeechRecognitionConfig { 
private val Конфигурация распознавания = Конфигурация распознавания. newBuilder
.setEncoding(RecognitionConfig.AudioEncoding. LINEAR16 )
.setLanguageCode("en_US")
.setSampleRateHertz(16000)
.setModel("command_and_search")
.build

def apply(): StreamingRecognitionConfig = StreamingRecognitionConfig. newBuilder
.setConfig( распознаваниеConfig )
.setInterimResults(true)
.build

val configRequest : StreamingRecognizeRequest = StreamingRecognizeRequest. newBuilder
.setStreamingConfig( SpeechRecognitionConfig ())
.Build
}

Отправка конфигурации:

 SttStream.send (SpeechecognitionConfig.  ConfigRequest ) 

. Затем мы можем начать посылать Audio Chunks To The Stttsppling It на .

 private def sendAudio(sttStream: ClientStream[StreamingRecognizeRequest], data: Array[Byte]) = 
Task (StreamingRecognizeRequest. newBuilder .setAudioContent(ByteString. copyFrom (data)).build)
.flatMap(req => Task (sttStream. send(req)))

И, наконец, handleWebSocket Труба, которая соединяет WebSocket с потоком STT:

3

3

def handleWebSocket: Pipe[Task, WebSocketFrame, WebSocketFrame] = audioStream =>
for {
очередь <- eval(unbounded[Task, String])
sttStream <- скобка(connectStt(queue))(stt => Task(stt. closeSend()))
audioChunk <- audioStream.collect {
case binary: WebSocketFrame.Binary => binary.payload
}
sttResultStream = queue.dequeue
расшифровка <- eval(sendAudio(sttStream, audioChunk)).drain.mergeHaltBoth(sttResultStream)
} yield WebSocketFrame.text(transcript)

Рабочий пример можно найти здесь: https://github.com/gobio/bootzooka-speech-to-text

Он основан на Bootzooka от SoftwareMill, посмотрите документацию о том, как запустить приложение. Не забудьте установить GOOGLE_APPLICATION_CREDENTIALS 9Переменная среды 0063, указывающая на загруженный ключ JSON учетной записи службы. Пример содержит только необходимые элементы, необходимые для его работы, в частности, в нем отсутствует правильная обработка ошибок.

Все изменения, связанные с STT, были внесены с этой фиксацией.

Распознавание речи Google не распознает определенные слова / фразы, такие как гм и эээ | python

Итак, кажется, что распознавание речи Google удаляет определенные части моей речи, такие как гм, э и ааа. Проблема в том, что я хочу, чтобы они распознавались, я не могу понять, как это включить.

Вот код:

 импорт pyttsx3
распознаватель = распознавание_речи.Распознаватель()
вокальные_несовершенства = 0
vi_list = ['хмм', 'ммм', 'ага', 'ааа', 'э-э', 'гм', 'эээ']
пока верно:
    пытаться:
        с voice_recognition.Microphone() в качестве микрофона:
            распознаватель.adjust_for_ambient_noise (микрофон, продолжительность = 0,2)
            аудио = распознаватель.слушай(микрофон)
            текст = распознаватель.recognize_google(аудио, язык='en-IN', show_all=True)
            #text = распознаватель. recognize_ibm(аудио)
            если текст != []:
                текст = текст['альтернативный'][0]['расшифровка']
                если есть (слово в тексте за словом в vi_list):
                    вокальные_несовершенства = вокальные_несовершенства+1
                печать (текст)
                печать (вокал_несовершенства)
    кроме voice_recognition.UnknownValueError():
        распознаватель = распознавание_речи.Распознаватель()
        продолжать
 

Работает как надо, просто гугл убирает дефекты голоса. Кто-нибудь знает, как включить это или альтернативное бесплатное распознавание речи в реальном времени, которое будет распознавать несовершенства голоса?

Пример: Если бы я сказал: «Мм, я думаю, что сегодня 30-е число» Google вернет: «Я думаю, сегодня 30-е»

  • python
  • распознавание речи
  • google-speech-api

2

Я просмотрел документы Google Cloud Speech-to-text API и не нашел ничего подходящего (по состоянию на март 2022 г. ) . Я также наткнулся на эти связанные ресурсы:

  • Обнаружение слов-заполнителей в преобразовании речи в текст
  • Как я могу обнаружить слова-заполнители, такие как «ах, гм», с помощью API преобразования речи в текст, такого как Google Speech API? (Квора)
  • FillerWordShock — исследование одного человека на эту тему

Все данные свидетельствуют о том, что использовать службу Google Cloud Speech-to-text (в настоящее время) невозможно, и вам придется искать альтернативные службы. Я не буду пересказывать альтернативы, перечисленные в ресурсах, но есть несколько, и вам придется выбрать, какая из них лучше всего соответствует вашим конкретным потребностям.

Кроме того, вы, возможно, уже знаете об этом (так что извините, если знаете), но эти типы слов обычно называются «словами-заполнителями» и/или «нерешительными». Это может быть полезно для вас при изучении темы.

Хорошей новостью является то, что модуль SpeechRecognition (думаю, именно его вы используете, судя по вашему коду) поддерживает несколько различных механизмов, так что, надеюсь, один из них предоставляет слова-заполнители.