Распознавание речи | Документация SmartMarket
Вы можете внедрить распознавание речи в свои приложения с помощью API сервиса SmartSpeech.
Ответ выдается только после обработки всей аудиозаписи. Максимальный размер аудио – 2 Мб, максимальная длина – одна минута. Для многоканального аудио распознается только первый канал.
Используется, если требуется распознавание речи в процессе ее записи: протоколы телефонии, запись аудио на мобильных устройствах и прочее. Возможно отображение промежуточных результатов и автоматическое определение конца фразы. Максимальный размер аудио – 1 Гб. Для многоканального аудио распознается только первый канал.
Подходит для распознавания многоканальных аудиозаписей. При работе стоит учитывать, что процесс асинхронного распознавания может быть дольше синхронного, поэтому этот тип подходит для случаев, когда длительность распознавания не важна. Максимальный размер аудио – 1 Гб.
Для распознавания доступны аудиофайлы со следующими кодировками:
PCM_S16LE
- PCM signed 16bit little-endian, с заголовком WAV или без.
- Частота дискретизации – от 8 до 96 кГц. Если без заголовка, то параметр
sample_rate
– обязательный. - Максимальное количество каналов – 8.
- Значение Content-Type –
audio/x-pcm;bit=16;rate=XXX
.
OPUS
- Opus в контейнере ogg.
- Параметр
sample_rate
– необязательный. - Поддерживается только одноканальный звук.
- Значение Content-Type –
audio/ogg;codecs=opus
.
MP3
- MP3 (кроме MPEG2.5).
- Параметр
sample_rate
– необязательный. - Максимальное количество каналов – 2.
- Значение Content-Type –
audio/mpeg
.
FLAC
- FLAC
- Параметр
sample_rate
– необязательный. - Максимальное количество каналов – 8.
- Значение Content-Type –
audio/flac
.
ALAW
- G.711 A-law, с заголовком WAV или без.
- Частота дискретизации – от 8 до 96 кГц. Если без заголовка, то параметр
– обязательный. - Максимальное количество каналов – 8.
- Значение Content-Type –
audio/pcma;rate=XXX
.
MULAW
- G.711 μ-law, с заголовком WAV или без.
- Частота дискретизации – от 8 до 96 кГц. Если без заголовка, то параметр
sample_rate
– обязательный. - Максимальное количество каналов – 8.
- Значение Content-Type –
audio/pcmu;rate=XXX
.
Чтобы повысить точность распознавания, укажите языковую модель, которую должен использовать сервис. Модель должна соответствовать частоте дискретизации.
Поддерживаемые модели:
- general – общая модель, для звука 16 кГц и больше. Рекомендуем начать с нее.
- media – модель, которая обучена понимать фамилии актеров, артистов, названия музыкальных групп, треков, фильмов – все, что связано с медиа-контентом. Частота – 16 кГц и больше.
- callcenter – модель, предназначенная для телефонии. Частота – меньше 16 кГц.
Для полноценной работы с распознаванием речи необходимо клиентское приложение. При его разработке используйте описание API для распознавания речи. Клиентское приложение общается с сервисом SmartSpeech. Например, для потокового распознавания (gRPC) процесс в зависимости от настроек выглядит следующим образом:
Приложение отправляет gRPC-запрос к методу Recognize сервиса SmartSpeech. В сообщениях рекомендуется отправлять следующие опции распознавания:
- В заголовке — информация для аутентификации.
- В первом сообщении — сообщение RecognitionOptions с описанием параметров распознавания. – В последующих сообщениях — чанки звука для распознавания.
- Аудиопоток передается в сообщениях RecognitionRequest.audio_chunk.
- В ответ приходят сообщения RecognitionResponse, содержащие нормализованный и ненормализованный текст в полях Hypothesis.normalized_text и Hypothesis.text.
Примеры клиентских приложений вы можете найти на нашей странице на GitHub.
Общие рекомендации
- Выбирайте языковую модель, которая подходит для вашего аудио. Например, для распознавания телефонных разговоров используйте
callcenter
, аgeneral
лучше всего распознает запросы к виртуальному ассистенту. - Убедитесь, что в запросе верно указана кодировка аудиофайла.
- Если при асинхронном распознавании пришел пустой ответ, проверьте, что вы корректно загрузили файл для распознавания. Если вы загружаете файл с компьютера, добавьте в запрос @:
- Если вы получили ошибку
8 ResourceExhausted
при распознавании через gRPC или429 Too Many Requests
при распознавании через HTTP, значит вы превысили лимит запросов. Напишите нам на [email protected] для увеличения лимита. Если вы получили много ошибок в результатах распознавания, пожалуйста, напишите нам на [email protected]. Приложите к письму аудиофайл, результаты распознавания, текст запроса и request-id. Также укажите в письме тип ошибок:
- Удаления — многие слова не распознаны.
- Замены — многие слова распознаны неверно.
- Вставки — в результатах распознавания много лишних слов, которых не было в аудио.
Хинты
Распознавание речи можно сильно улучшить использованием хинтов.
Хинты — это одноразовые подсказки для сервиса распознавания речи, помогающие правильно понять речь пользователя в определенный момент времени. Например, когда приложение ожидает от пользователя конкретный ответ, этот ответ заранее придет в сервис в виде хинтов.
Подсказка работает только для следующего ответа пользователя. После использования хинтов процесс распознавания речи пользователя возвращается к ее обработке без подсказок.
Подробнее об использовании хинтов вы можете прочитать в статье Хинты.
Добавить хинты вы можете при потоковом и асинхронном распознавании.
SpeechRecognition — Интерфейсы веб API
Experimental: Это экспериментальная технология
Так как спецификация этой технологии ещё не стабилизировалась, смотрите таблицу совместимости по поводу использования в различных браузерах. Также заметьте, что синтаксис и поведение экспериментальной технологии может измениться в будущих версиях браузеров, вслед за изменениями спецификации.
Интерфейс Распознавание голоса Web Speech API является интерфейсом контроллера для сервиса распознавания; который так же перехватывает событие SpeechRecognitionEvent
(en-US), отправленное сервисом распознавания.
SpeechRecognition
наследует свойства от своего родительского интерфейса, EventTarget
.
SpeechRecognition.grammars
(en-US)- Возвращает и устанавливает коллекцию объектов
SpeechGrammar
грамматики которые будут понятны текущему
. SpeechRecognition.lang
(en-US)- Задаёт и возвращает язык текущего
SpeechRecognition
. Если данное свойство не указано по умолчанию, то используется из HTML кода значение атрибутаlang
, или настройки языка агента текущего пользователя. SpeechRecognition.continuous
(en-US)- Проверяет возвращается ли непрерывные результаты или вернулся только один. По умолчанию для одиночного значение (
false
.) SpeechRecognition.interimResults
(en-US)- Контроллирует, следует ли возвращать промежуточные результаты (
true
) или нет (false
SpeechRecognitionResult.isFinal
(en-US) свойство ложно.) SpeechRecognition.maxAlternatives
(en-US)- Устанавливает максимальное количество предоставленных результатов
SpeechRecognitionAlternative
(en-US). По умолчанию значение 1. SpeechRecognition.serviceURI
(en-US)- Определяет местоположение службы распознавания речи, используемой текущим SpeechRecognition, для обработки фактического распознавания. По умолчанию используется речевая служба агента пользователя.
Обработчики событий
SpeechRecognition.onaudiostart
(en-US)- Вызывается когда пользовательский агент начал захват аудио.
SpeechRecognition.onaudioend
(en-US)- Вызывается когда пользовательский агент закончил захват аудио.
SpeechRecognition.onend
(en-US)- Вызывается когда служба распознавания речи отключилась.
SpeechRecognition.onerror
(en-US)- Вызывается когда произошла ошибка распознавания речи.
SpeechRecognition.onnomatch
(en-US)- Вызывается, когда служба распознавания речи возвращает окончательный результат без существенного распознавания. Это может включать определённую степень признания
confidence
(en-US) которая не соответствует пороговому значению или превышает его. SpeechRecognition.onresult
(en-US)- Вызывается когда возвращает результат — слово или фраза были распознаны положительно, и это было передано обратно в приложение.
SpeechRecognition.onsoundstart
(en-US)- Вызывается при обнаружении любого звука — не важно, распознана речь или нет.
SpeechRecognition.onsoundend
(en-US)- Вызывается когда любой звук — распознаваемая речь или нет — перестала распознаваться.
SpeechRecognition.onspeechstart
(en-US)- Вызывается, когда обнаружен звук, распознаваемый службой распознавания речи как речевой сигнал.
SpeechRecognition.onspeechend
(en-US)- Вызывается, когда прекращается обнаружение речи, распознанной службой распознавания речи.
SpeechRecognition.onstart
(en-US)- Вызывается, когда служба распознавания речи начинает обрабатывать входящий звук с намерением распознать грамматики, связанные с текущим распознаванием речи.
Распознавание речи также наследует методы от своего родительского интерфейса, EventTarget
.
SpeechRecognition.abort()
(en-US)- Останавливает обработку входящего аудио службой распознавания речи и не пытается вернуть
SpeechRecognitionResult
(en-US). SpeechRecognition.start()
(en-US)- Запускает службу распознавания речи, прослушивая входящее аудио с целью распознавания грамматик, связанных с текущим распознаванием речи.
SpeechRecognition.stop()
(en-US)- Останавливает обработку входящего аудио службой распознавания речи и пытается вернуть
SpeechRecognitionResult
(en-US) Используя уже записанный звук.
В нашем простом примере Speech color changer , мы создаём новый объект экземпляра SpeechRecognition
используя этот конструктор SpeechRecognition()
(en-US) , создание нового SpeechGrammarList
(en-US), И установить его в качестве грамматики, которая будет распознаваться экземпляром распознавание речи с использованием свойства SpeechRecognition.grammars
(en-US).
После определения некоторых других значений мы затем устанавливаем их так, чтобы служба распознавания началась когда произошло событие по клику ( SpeechRecognition.start()
(en-US).) Когда результат был успешно распознан, the SpeechRecognition.onresult
(en-US) обработчик извлекаем цвет, который был произнесён из события, а затем меняем цвет фона на данный цвет <html>
.
var grammar = '#JSGF V1.0; grammar colors; public <color> = aqua | azure | beige | bisque | black | blue | brown | chocolate | coral | crimson | cyan | fuchsia | ghostwhite | gold | goldenrod | gray | green | indigo | ivory | khaki | lavender | lime | linen | magenta | maroon | moccasin | navy | olive | orange | orchid | peru | pink | plum | purple | red | salmon | sienna | silver | snow | tan | teal | thistle | tomato | turquoise | violet | white | yellow ;'
var recognition = new SpeechRecognition();
var speechRecognitionList = new SpeechGrammarList();
speechRecognitionList.addFromString(grammar, 1);
recognition.grammars = speechRecognitionList;
recognition.lang = 'en-US';
recognition.interimResults = false;
recognition.maxAlternatives = 1;
var diagnostic = document.querySelector('.output');
var bg = document.querySelector('html');
document.body.onclick = function() {
recognition.start();
console.log('Ready to receive a color command.');
}
recognition.onresult = function(event) {
var color = event.results[0][0].transcript;
diagnostic.textContent = 'Result received: ' + color;
bg.style.backgroundColor = color;
}
Таблица совместимостей
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
---|---|---|---|---|---|
Базовая поддержка | CompatChrome(33)}}property_prefix(«webkit»)[1] | Не совместима[2] | Не совместима | Не совместима | Не совместима |
постоянная | CompatChrome(33) [1] | Не совместима | Не совместима | Не совместима | Не совместима |
Feature | Android | Chrome | Firefox Mobile (Gecko) | Firefox OS | IE Phone | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|---|
Basic support | Неизвестно | Неизвестная совместимая версия [1] | Совместим с GeckoMobile(44) | 2.5 | Не совместима | Не совместима | Не совместима |
continuous | Неизвестно | Неизвестная совместимая версия[1] | Совместимость неизвестна | Не совместима | Не совместима | Не совместима | Не совместима |
- [1] Интерфейсы распознавания речи в настоящее время префиксные в Chrome, поэтому вам нужно указать имена интерфейсов, например, префикс. WebkitSpeechRecognition; вы также должны будете обслуживать свой код через веб-сервер для распознавания работы
- [2] Может быть активирована через
media.webspeech.recognition.enable
флаг в about:config на телефоне. Не реализовано вообще на рабочем столе Firefox — см.баг 1248897.
Firefox OS разрешения
Чтобы использовать распознавание речи в приложении, вам необходимо указать следующие разрешения в своём manifest:
"permissions": {
"audio-capture" : {
"description" : "Audio capture"
},
"speech-recognition" : {
"description" : "Speech recognition"
}
}
Вам также нужно привилегированное приложение, поэтому вам необходимо также включить его:
Распознавание речи в телефонных звонках
Вам было удобно, что каждый разговор с клиентом фиксируется и в любой момент можно прослушать запись, чтобы уточнить какие-то моменты?
Мы сделали еще удобнее!
Теперь мы добавили к нашей телефонии функцию распознавания речи. Вы можете не прослушивать записи, а просто задать текстовый фрагмент для поиска – и Битрикс24 найдет этот текст в диалоге. Ведь аудио-запись преобразовывается в текст диалога, то есть не просто распознается, а разделяется по ролям «Оператор» – «Клиент».
Как это работает?
Перейдите в раздел Телефония > Подключения > Настройка номеров, выбрать нужное подключение в меню:
Затем в настройках номера во вкладке Запись и оценка отметьте пункт Расшифровывать запись звонка и выберите язык для расшифровки. Сервис распознаёт речь на 80 языках мира.
Теперь при каждом входящем или исходящем звонке в Детализация звонков появится не только пиктограмма прослушивания и скачивания аудио-файла в формате mp3, но и символ распознанного текста.
Примечание: для распознавания понадобится время, в зависимости от объема записи это может занять от 20 до 80 сек.
Примечание: распознаваться будут только новые записи, то есть те, которые появятся после включения функции расшифровки. Старые записи распознаны не будут.
И вы сможете найти этот диалог по любому фрагменту. К примеру, вы запомнили, что разговаривали с клиентом о диване «Прием», но с кем и когда – не помните. Задайте поисковую строку – и получайте результат!
Стоимость распознавания можно узнать на странице тарифов Voximpant в разделе Features > Speech Recognition. По умолчанию используется распознавание голоса в текст от компании Google.
Списывается автоматически с вашего баланса телефонии.
Распознавание включается сразу для всех разговоров, поэтому выбрать только одну запись для распознавания нельзя.
Они нас слышат: куда развиваются речевые технологии?
Миллионы лет назад, когда речь только появилась у наших предков, для них это была «суперсила», которая помогала объединиться и скоординировать действия. Сегодня по мере объединения физического и цифрового мира, человек хочет использовать голос для взаимодействия и управления компьютерами, смартфонами и другими «поумневшими» устройствами.
Каждая стиральная машинка, чайник оснащены сенсорным экраном. Но зачем нажимать на кнопки, когда можно использовать собственный голос? В минуту мы можем напечатать до 40 слов, а произнести до 150. Меняются скорости взаимодействия с автоматизированной техникой. И бизнес включился в эту смену парадигмы – управление голосом скоро станет обязательным его условием.
Сектор речевых технологий признан одним из самых динамично развивающихся в мирe. Согласно отчету MarketsandMarkets, мировой рынок речевых технологий вырастет с 3,7 млрд долларов сегодня до 12 млрд к 2022 году. Основной драйвер роста — спрос на аутентификацию с помощью голоса в финансовых учреждениях, предприятиях здравоохранения и правительственных организациях. Вырастет доля использования речевых технологий и в телекоме, колл-центрах и В2С секторе. Самое широкое применение голосовые технологии пока получили в Азии: например, в Японии уже все колл-центры автоматизированы.
Реклама на Forbes
Предыстория
Технологии распознавания речи существуют еще с середины 60-х годов минувшего века. Однако лишь несколько лет назад машинное преобразование речи в текст и аудиоответы пользователям были полноценно поставлены на коммерческий поток. Рывок в развитии речевых технологий произошел за счет того, что стоимость вычислительных ресурсов за последние несколько лет сильно упала, стало экономически выгодно создавать большие нейронные сети и обрабатывать с их помощью массивы данных для решения различных задач. По оценкам Techcrunch, прорыв в голосовых технологиях за последние 18 месяцев гораздо значительнее, чем за прошлые 15 лет. Теперь мы смело можем говорить о существовании рынка автоматической обработки речи. На нем развиваются и B2C-технологии виртуальных ассистентов, и B2B-решения распознавания речи.
Невидимый друг
К 2020 году мы все будем иметь невидимого друга. Не важно, каким будет его имя — Siri, Amazon Echo или OK Google — но мы входим в мир, где персональный ассистент реализует наши желания и отвечает на поставленные вопросы. Этот «Паспарту» будет учиться на своих ошибках, понимать контекст и будет все больше интегрирован в нашу жизнь. Согласно исследованию Google еще в 2014 году, 31% подростков используют голосовой поиск для выполнения домашнего задания, 23% взрослых «ищут голосом» во время приготовления пищи.
Большим шагом вперед для рынка «умных голосовых помощников» стал выпуск два года назад умной колонки со встроенным голосовым помощником Amazon Echo. Amazon Echo, небольшая колонка, — устройство голосового управления, подключенное к «облаку». Гаджет способен воспринимать голосовые команды, голосом давать на них ответы, будить вас, управлять вашим календарем в Google, взаимодействовать с умными системами домашнего освещения, воспроизводить музыку и многое другое. На сегодняшний день стоимость Amazon Echo уже снизилась до $200.
Разработка таких устройств от Amazon, как Amazon Echo или ее облегченные версии Amazon Tap ($129.99) и Echo Dot ($89.99) были профинансированы специально созданным $100 миллионным фондом Alexa (также называется и сама голосовая платформа от Amazon). Он инвестирует только в проекты, создающие инновационные технологии в области голосового управления, умного дома и носимых аксессуаров. Amazon планирует расширить сферу действия фонда на робототехнику, здравоохранение и другие отрасли.
Огромное внимание ИТ-гигантов к речевым технологиям понятно: они предвидят или создают технологическую эволюцию, удерживая пользователя в своей экосистеме за счет постоянного добавления новых возможностей. Но и другие компании и индустрии начали активно внедрять голосовые технологии, поскольку в человеческой речи помимо естественности оказалось много других особенностей, а скорость голоса как интерфейса в разы быстрее других методов.
Беспилотные автомобили
Технология распознавания речи сегодня используется и в автомобильной промышленности. Самое примитивное — уже привычные нам навигаторы. Технологии сегодняшнего дня – это голосовое управление различными функциями автомобиля, и это доступно не только в автомобилях класса люкс. Большие успехи делает Ford, оснащая свои машины возможностями для голосового управления навигационной или мультимедийной системами. Технологии скорого будущего — беспилотные автомобили, которыми можно управлять, задавая маршрут как с помощью компьютера, так и голосом. Автономные автомобили Google, электромобиль Tesla, автомобили-роботы MIG (Made in Germany), AKTIV, VisLab, автомобиль из Брауншвейга, получивший имя Leonie — все они предполагают использование искусственного интеллекта и голосового управления. О начале разработки беспилотного грузовика сообщил Яндекс и Камаз. Первая модель увидит свет уже в 2018 году и будет оборудована искусственным интеллектом от Яндекс.
Речевые технологии на заводах
В начале 2016 года резидент «Сколково» компания «ЦРТ-инновации» презентовала технологию автоматического распознавания речевых команд, запрограммированную на работу с промышленными роботами. В основе технологии лежат акустические модели, создаваемые с помощью глубоких нейронных сетей (Deep neural networks, DNN), что делает программу более точной и надежной. Новая разработка позволяет включать и выключать станок, изменять режим работы вентиляции в помещении, управлять техникой на стройке. Технология выделяет речь на фоне сильного производственного шума, адаптируется к конкретным людям на производстве, подстраиваясь под их речевые особенности и многое другое. По прогнозам создателей, программа позволит увеличить производительность труда рабочих, одновременно снизив травматизм на предприятиях.
Речевые технологии в банковском секторе
В феврале этого года банк HSBC в Великобритании предложил 15 миллионам своих клиентов голосовую идентификацию для доступа к онлайн-сервисам банка. И технология опознает клиента, даже если он простыл или охрип, анализируя до 100 параметров определения голоса: паттерны в произношении, модуляцию, звуки, которые отражают объем и форму глотки, носовую полость, голосового тракта. В 2013 году Barclays предложил подобную функцию для 300 тысяч самых состоятельных клиентов, которые были в полном восторге, ведь время идентификации снизилось с 1,5 минуты до 10 секунд.
Помимо скорости и удобства для клиента, которому теперь не нужно запоминать кодовое слово и другие пароли, переход на биометрическую аутентификацию повышает безопасность банковского аккаунта. В России технологию идентификации клиентов по биометрическим данным планирует вводить к 2018 году Сбербанк.
Речевые технологии в телекоме и маркетинге
Реклама на Forbes
Свои исследования и разработки в области систем распознавания речи ведет Яндекс. Сегодня система распознавания речи Yandex SpeechKit нашла свое применение сразу в двух секторах экономики — телекоме и маркетинге. Мегафон выбрал Yandex.SpeechKit для виртуального консультанта «Елена 2.0». Его главная задача заключается в том, чтобы облегчить нагрузку на колл-центры оператора. На данный момент «Елена 2.0» помогает абонентам «МегаФона» проверить биллинг, сообщает о подключенных тарифах и услугах, может подключить или отключить услугу или перевести деньги с одного номера на другой. Конечно, сейчас виртуальная барышня не сможет полностью заменить сотрудника колл-центра, но по мере машинного обучения, «Елена 2.0» сможет отвечать на сотни миллионов звонков в год.
Будущее
Новые разработки есть и в сфере безопасности. AmberBox — американский стартап, участник Y Combinator S16, автор одноименного гаджета с автоматическим определением звука разряда оружия. Разработка детектора была вызвана волной вспышек насилия и расстрелов в США. В детекторе AmerBox используется комбинированный алгоритм звукового реагирования и инфракрасного обнаружения, благодаря которому устройство способно точно отделить звук выстрела от других шумов — и в случае его обнаружения подать сигнал охране, предупредить находящихся поблизости людей и инициировать программу эвакуации. Это позволяет сократить время реагирования полиции вплоть до 63% и, как следствие, сохранить жизни людей.
Еще один горячий стартап, который поддерживают на своих конференциях Google и Apple — компания AVA — разработчик мобильного приложения из Сан-Франциско, которое позволяет людям видеть то, что говорят вокруг них меньше, чем за секунду. Программа предназначена для слабослышащих и глухих людей. Голосовые технологии вообще значительно помогут людям с ограниченными возможностями во взаимодействии с окружающим миром, компьютерами и умными устройствами. Например, одним из первых было приложение SayShopping для iPhone, которое позволяло слепым или слабовидящим людям покупать товары с онлайн-гипермаркета только через голос.
Практически у всех стартапов амбициозные цели. Так например, компания ObEN, основанная в 2014 году в Калифорнии, называет своей миссией собрать самый большой в мире банк речевых паттернов и голосов и стать ресурсом для развития робототехники, игровой индустрии, развлечений, образования, здравоохранения и музыки.
Реклама на Forbes
Но даже если не думать обо всех зарождающихся в пригородах Сан-Франциско стартапах, а просто посмотреть вокруг, сидя в своем кабинете или квартире, мы поймем, что каждый элемент интерьера, офисной и бытовой техники будет скоро понимать наш голос и выполнять соответствующие указания. А это огромный рынок для каждого производителя.
Иногда я думаю, в чем связь между ростом популярности фильмов о супер-героях и все новыми гаджетами? Каждый новый умный девайс, словно новый навык, новая способность. И, получив новую сверхспособность, мы уже никогда не захотим отказаться от нее. ОК, Google, когда там премьера «Доктор Стрейнджлав»?
Распознавание речи в текст в Москве — YouDo
В условиях технологического прогресса многие компании проводят различные тренинги и публичные выступления, используя при этом записывающие устройства. Наиболее удобным устройством записи разговоров, конференций или семинаров является диктофон. Однако материал, записанный с помощью диктофона, со временем необходимо конвертировать. Распознавание голоса в текст называется транскрибацией. Известно, что первое устройство, способное производить распознавание речи в текст, было разработано еще в 1952 году и могло расшифровывать произнесенные цифры. Сейчас же разработано множество подобных программ, способных распознавать разную речь на многих языках.
Где можно заказать услуги по распознаванию текста?
На сегодняшний день конвертировать речь в текст можно с помощью:
- различных программ в режиме он-лайн, а также устанавливаемых на компьютер или на телефон;
- специализированных компаний, занимающихся распознаванием голоса;
- фрилансеров, предлагающих свои услуги на различных серверах.
Недостатком использования программ по расшифровке речи является то, что точность конвертации зависит от объема словаря, установленного в программе. Поэтому часто этот способ не оказывается достаточно качественным и эффективным.
Специальные компании, обычно, предоставляют лучших специалистов, способных перевести голос в текст. Однако стоимость таких услуг часто оказывается гораздо выше ожидаемой.
Поэтому наиболее выгодной оказывается возможность заказать услуги фрилансера, который может качественно и профессионально перевести голос в текст.
От чего зависит стоимость транскрибации?
Цена такой услуги, как расшифровка речи в текст, зависит от нескольких факторов:
- объем голосового материала, который необходимо перевести в текст;
- качество и громкость сделанной записи, наличие или отсутствие явных помех;
- время, на протяжении которого фрилансеру необходимо перевести речь в текст.
Где найти опытных фрилансеров?
На сегодняшний день транскрибация записей производится удаленно исполнителями, услуги которых вы можете найти и заказать на сайте YouDo. Для этого достаточно пройти простую процедуру регистрации, разместить заявку «конвертация речи в текст», указать стоимость работы с учетом стандартной цены за подобные виды услуг, ожидать откликнувшихся специалистов, а затем нанять наиболее опытного из них.
Расшифровка речи исполнителями сервиса YouDo производится профессионально и качественно с учетом всех требований заказчика. Важным преимуществом сервиса является возможность установить собственные расценки, а затем удаленно найти фрилансера для конвертации записанной речи в текстовый формат.
Оставляйте свои заявки в режиме он-лайн и уже через несколько минут вы сможете нанять специалиста, который проведет распознавание речи любой сложности в кратчайшие сроки.
что это такое, как работает технология, где применяется
04 июня 2021 Время прочтения статьи: 5 минут
4460
Голосовой поиск в Google или голосовое управление в машине уже никого не удивляют — мы привыкли к этим технологиям. Они экономят время и делают жизнь комфортнее. Но технология распознавания речи включает гораздо больше возможностей: оптимизацию бизнес-процессов, анализ маркетинговых кампаний и повышение продаж. Как работает распознавание речи и как применить его в бизнесе — читайте в статье.
Что такое распознавание речи
Это технология, с помощью которой речь человека возможно трансформировать в текст. Система распознавания речи может работать автономно, а может обучаться особенностям произношения конкретного пользователя.
Распознавание голоса — часть технологии распознавания речи. Идентификацию говорящего используют при биометрической проверке, для ограничения доступа к личным файлам. Система запоминает голос человека и отличает его от других голосов.
Технология распознавания речи или Speech-to-Text появилась еще в конце прошлого столетия, но качественно преобразовывать человеческую речь в текст программы научились только в 2000-х — по мере развития IT-технологий и машинного обучения на Западе, а потом и в России. Сегодня системы распознавания речи массово используют в повседневной жизни и в бизнесе, ведь это здорово экономит ресурсы.
Как работает технология
Это сложный многоступенчатый алгоритм, поэтому постараемся описать общий принцип действия. Если сказать голосовому поиску «Александр Пушкин», то телефон услышит не имя известного писателя, а звуковой сигнал без четких границ. Система восстанавливает по этому непрерывному сигналу воспроизведенную человеком фразу следующим образом:
-
Сначала устройство записывает голосовой запрос, а нейросеть анализирует поток речи. Волна звука делится на фрагменты — фонемы.
-
Затем нейросеть обращается к своим шаблонам и сопоставляет фонемы с буквой, слогом или словом. Далее образуется порядок из известных программе слов, а неизвестные слова она вставляет по контексту. В результате объединения информации с этих двух этапов получается речь, превращенная в текст.
На заре развития процесс работы Speech-to-Text заключался в элементарной акустической модели — речь человека сопоставлялась с шаблонами. Но количества словарей в системе было недостаточно для точного распознавания, программа часто ошибалась.
Благодаря обучаемости нейронных сетей качество распознавания речи значительно выросло. Алгоритм знает типичную последовательность слов в живой речи и может воспринимать структуру языка — так работает языковая модель. А каждая новая обработанная голосовая информация влияет на качество обработки следующей, уменьшая количество погрешностей.
Где применяют алгоритм
Технология распознавания речи позволяет нам искать нужную информацию, составлять маршрут по навигатору. Вот еще несколько сфер, где применение Speech-to-Text сделало жизнь проще:
-
Телефония. Технология экономит не только время звонящего, но и ресурсы компании. С помощью голосового набора и робота клиенты могут без участия менеджеров заказывать товары, отвечать на опросы и получать консультации.
-
Бытовая техника. Сегодня можно управлять голосом различными устройствами: выключателями в доме, системами освещения и гаджетами.
-
Медицина. В 2020 году российские разработчики создали Voice2Med — систему на основе искусственного интеллекта, которая заполняет медицинские документы, пока врач диктует информацию во время осмотра.
Как распознавание речи используется в бизнесе
Распознавание речи позволяет автоматизировать многие процессы в бизнесе, от продаж и контроля клиентского сервиса, до защиты от мошенников.
Благодаря этой технологии аналитика телефонных разговоров с клиентами стала проще и дешевле: система автоматически записывает звонки и собирает данные для повышения конверсии.
Например, система речевой аналитики MANGO OFFICE помогает узнать, с какими конкурентами клиенты чаще всего сравнивают ваш продукт. Вы создаете теги для упоминаний о конкурентах, анализируете отчеты разговоров и понимаете, как нужно улучшить маркетинговую стратегию. Также можно анализировать работу сотрудников — отмечайте стоп-слова, следите за соблюдением скриптов продаж.
Еще одно направление, где речевая аналитика помогает развитию бизнеса — интерактивные голосовые системы (IVR). Это незаменимый инструмент в управлении колл-центром. Speech-to-Text распознает речь клиента, а голосовой робот автоматически подбирает нужную информацию для ответа или переводит звонок на оператора. Технология уменьшает количество потерянных звонков, так как многие люди не успевают или не могут нажимать на кнопки в голосовом меню.
Службам контроля сервиса не обязательно проводить дополнительные опросы: это можно сделать автоматически, а потом проанализировать отчеты. Службы безопасности в банках используют речевую аналитику, чтобы защитить личные данные клиентов.
Заключение
Технология преобразования голоса в текст упрощает повседневные задачи и помогает развивать многие профессиональные сферы. В бизнесе Speech-to-Text используют для эффективного взаимодействия с клиентами и быстрой обработки большого объема данных. Аналитика телефонных звонков и голосовые роботы уменьшают затраты, повышают средний чек и изучают реальные потребности клиентов.
«Одноклассники» запустили сервис распознавания аудиосообщений
Интернет Веб-сервисы | ПоделитьсяВ социальной сети «Одноклассники» появилась функция перевода аудиосообщений в текст. Сервис распознавания аудио автоматически конвертирует голосовое сообщение в текст, позволяя без прослушивания понять, о чем говорит собеседник. Сервис работает на базе искусственного интеллекта и реализован на основе технологии, разработанной «Вконтакте». Запуск стал очередным важным шагом в интеграции «Одноклассников» и экосистемы VK.
Новый сервис сделает общение в «Одноклассниках» более комфортным в ситуациях, когда прослушать голосовое сообщение невозможно: в общественном транспорте, во время совещания с коллегами или во время просмотра фильма. Технология распознает как полученные, так и отправленные голосовые сообщения на русском языке длительностью до 60 минут. Благодаря этому текст аудиосообщений индексируется поиском по сообщениям, что позволяет легко найти в чате любую информацию, даже отправленную голосом. При ответе на распознанное голосовое сообщение в чате будет отображаться текст исходного сообщения, а не аудио, что поможет ориентироваться в переписке с собеседником. Для распознанных сообщений в списке чатов также отображается текст, а не значок аудиосообщения.
Конвертация голосовых сообщений в текст в «Одноклассниках» полностью автоматизирована: пользователь сразу получает расшифровку без дополнительных действий. «Одноклассники» также добавили возможность скопировать текст распознанного аудиосообщения. Функцию можно использовать для работы с текстами, которые наговорит собеседник, или конвертации собственных голосовых заметок в текст для дальнейшей работы с ним.
Технология распознавания речи «Вконтакте» основана на трех нейросетях: одна отвечает за распознавание, вторая находит подходящие слова, а третья расставляет знаки препинания и заглавные буквы. Для обучения нейросетей используются аудио, которые специально для этой задачи записывают участники программы VK Testers, и база субтитров из фильмов. На конвертацию аудио в текст уходит всего около секунды. Нейросеть распознает русскоязычную речь, при этом в расшифровке учитываются разговорные слова, заимствованная лексика, а также сложные условия записи – например, низкое качество звука или нечеткая речь собеседника.
Распознавание аудиосообщений автоматически включено у всех пользователей последних версий мобильных приложениях «Одноклассников» на Android и iOS, а также в десктопной версии соцсети. Отключить новую функцию можно в настройках профиля, в разделе «Сообщения».
Распознавание ключевых слов | Ядро TensorFlow
В этом руководстве показано, как выполнить предварительную обработку аудиофайлов в формате WAV, а также построить и обучить базовую модель автоматического распознавания речи (ASR) для распознавания десяти разных слов. Вы будете использовать часть набора данных Speech Commands (Warden, 2018), который содержит короткие (не более одной секунды) звуковые фрагменты команд, такие как «вниз», «идти», «влево», «нет», « вправо», «стоп», «вверх» и «да».
Реальные системы распознавания речи и звука сложны.Но, как и классификация изображений с набором данных MNIST, это руководство должно дать вам общее представление об используемых методах.
Настройка
Импортировать необходимые модули и зависимости. Обратите внимание, что в этом уроке вы будете использовать Seaborn для визуализации.
импорт ОС
импортировать pathlib
импортировать matplotlib.pyplot как plt
импортировать numpy как np
импортировать Seaborn как sns
импортировать тензорный поток как tf
из слоев импорта tensorflow.keras
из моделей импорта tensorflow.keras
из отображения импорта IPython
# Установите начальное значение для воспроизводимости эксперимента.семя = 42
tf.random.set_seed (начальное число)
np.random.seed (семя)
Импорт мини-набора данных речевых команд
Чтобы сэкономить время при загрузке данных, вы будете работать с уменьшенной версией набора данных Speech Commands. Исходный набор данных состоит из более чем 105 000 аудиофайлов в формате аудиофайлов WAV (Waveform), в которых люди произносят 35 разных слов. Эти данные были собраны Google и опубликованы под лицензией CC BY.
Загрузите и распакуйте mini_speech_commands.zip
, содержащий меньшие наборы данных Speech Commands с tf.keras.utils.get_file
:
DATASET_PATH = 'данные/мини_речевые_команды'
data_dir = pathlib.Path(DATASET_PATH)
если нет data_dir.exists():
tf.keras.utils.get_file(
'mini_speech_commands.zip',
origin="http://storage.googleapis.com/download.tensorflow.org/data/mini_speech_commands.zip",
экстракт = правда,
cache_dir='.', cache_subdir='данные')
Загрузка данных из http://storage.googleapis.com/download.tensorflow.org/data/mini_speech_commands.zip 182083584/182082353 [=============================] - 6s 0us/шаг 1820
/182082353 [=============================] - 6 с 0 мкс/шаг
Аудиожисты набора данных хранятся в восьми папках, соответствующих каждому речью команду: №
, ,
, ,
, ,
, ,
, ,
, справа
и Стоп
:
команд = np.массив (tf.io.gfile.listdir (str (data_dir)))
команды = команды[команды != 'README.md']
print('Команды:', команды)
Команды&двоеточие; ['да' 'идти' 'налево' 'направо' 'вверх' 'вниз' 'стоп' 'нет']
Извлеките аудиоклипы в список с именем имен файлов
и перетасуйте его:
имен файлов = tf.io.gfile.glob(str(data_dir) + '/*/*')
имена файлов = tf.random.shuffle(имена файлов)
num_samples = длина (имена файлов)
print('Всего примеров:', num_samples)
print('Количество примеров на этикетку:',
лен (тф.io.gfile.listdir(str(data_dir/commands[0]))))
print('Пример файлового тензора:', имена файлов[0])
Общее количество примеров: 8000 Количество примеров на ярлык: 1000 Пример файла tensor: tf.Tensor(b'data/mini_speech_commands/up/05739450_nohash_2.wav', shape=(), dtype=string)
Разделить имен файлов
на обучающие, проверочные и тестовые наборы с использованием соотношения 80:10:10 соответственно:
train_files = имена файлов[:6400]
val_files = имена файлов[6400: 6400 + 800]
test_files = имена файлов[-800:]
print('Размер тренировочного набора', len(train_files))
print('Размер проверочного набора', len(val_files))
print('Размер тестового набора', len(test_files))
Размер тренировочного набора 6400 Размер проверочного набора 800 Размер тестового набора 800
Чтение аудиофайлов и их меток
В этом разделе вы предварительно обработаете набор данных, создав декодированные тензоры для сигналов и соответствующие метки.Обратите внимание:
- Каждый файл WAV содержит данные временных рядов с заданным числом выборок в секунду.
- Каждая выборка представляет собой амплитуду аудиосигнала в указанное время.
- В 16-битной системе, такой как WAV-файлы в мини-наборе данных Speech Commands, значения амплитуд находятся в диапазоне от -32 768 до 32 767.
- Частота дискретизации для этого набора данных составляет 16 кГц.
Форма тензора, возвращаемого tf.audio.decode_wav
, равна [семплы, каналы]
, где каналов
— это 1
для моно или 2
для стерео.Мини-набор данных Speech Commands содержит только монозаписи.
test_file = tf.io.read_file(DATASET_PATH+'/down/0a9f9af7_nohash_0.wav')
test_audio, _ = tf.audio.decode_wav (содержимое = test_file)
test_audio.shape
Тензорформа([13654, 1])
Теперь давайте определим функцию, которая предварительно обрабатывает необработанные аудиофайлы WAV набора данных в аудиотензоры:
определение decode_audio (аудио_двоичный):
# Декодировать WAV-кодированные аудиофайлы в тензоры `float32`, нормализованные
# к [-1.0, 1,0]. Возвращает звук `float32` и частоту дискретизации.
аудио, _ = tf.audio.decode_wav (содержимое = audio_binary)
# Так как все данные одноканальные (моно), удалите `channels`
# ось из массива.
вернуть tf.squeeze (аудио, ось = -1)
Определите функцию, которая создает метки, используя родительские каталоги для каждого файла:
- Разделите пути к файлам на
tf.RaggedTensor
s (тензоры с рваными размерами — с кусочками, которые могут иметь разную длину).
по определению get_label (file_path):
части = tf.strings.split(
ввод = путь_к_файлу,
sep=os.path.sep)
# Примечание: здесь вы будете использовать индексацию вместо распаковки кортежа, чтобы включить это
# для работы в графе TensorFlow.
возврат частей[-2]
Определите еще одну вспомогательную функцию — get_waveform_and_label
— которая объединяет все это:
- Введено имя аудиофайла WAV.
- Выходные данные представляют собой кортеж, содержащий тензоры аудио и меток, готовые к обучению с учителем.
по определению get_waveform_and_label (file_path):
метка = get_label (путь_к_файлу)
audio_binary = tf.io.read_file(file_path)
форма волны = декодировать_аудио (аудио_двоичный)
форма обратной волны, метка
Создайте обучающий набор для извлечения пар звуковых меток:
Позже вы создадите наборы для проверки и тестирования, используя аналогичную процедуру.
АВТОНАСТРОЙКА = tf.data.АВТОНАСТРОЙКА
files_ds = tf.data.Dataset.from_tensor_slices (train_files)
waveform_ds = файлы_ds.карта(
map_func=get_waveform_and_label,
num_parallel_calls = АВТОНАСТРОЙКА)
Построим несколько звуковых сигналов:
строк = 3
столбцы = 3
n = строки * столбцы
рис, оси = plt.subplots (строки, столбцы, figsize = (10, 12))
для i (аудио, метка) в enumerate(waveform_ds.take(n)):
г = я // столбцы
с = я % столбцов
топор = оси[r][c]
топор.сюжет (аудио.numpy())
ax.set_yticks (np.arange (-1,2, 1,2, 0,2))
метка = метка.numpy().decode('utf-8')
ax.set_title (метка)
plt.show()
Преобразование сигналов в спектрограммы
Сигналы в наборе данных представлены во временной области.Далее вы преобразуете формы сигналов из сигналов временной области в сигналы частотной области времени путем вычисления кратковременного преобразования Фурье (STFT) для преобразования форм сигналов в виде спектрограмм, которые показывают изменения частоты во времени и могут быть представлены в виде 2D-изображений. Вы будете передавать изображения спектрограммы в свою нейронную сеть для обучения модели.
Преобразование Фурье ( tf.signal.fft
) преобразует сигнал в его составляющие частоты, но теряет всю информацию о времени.Для сравнения, STFT ( tf.signal.stft
) разбивает сигнал на временные окна и выполняет преобразование Фурье в каждом окне, сохраняя некоторую информацию о времени и возвращая двумерный тензор, на котором вы можете выполнять стандартные свертки.
Создайте вспомогательную функцию для преобразования сигналов в спектрограммы:
- Осциллограммы должны быть одинаковой длины, чтобы при преобразовании их в спектрограммы результаты имели одинаковые размеры. Это можно сделать, просто дополнив нулями аудиоклипы короче одной секунды (используя
tf.нулей
). - При вызове
tf.signal.stft
выберите параметрыframe_length
иframe_step
таким образом, чтобы сгенерированное «изображение» спектрограммы было почти квадратным. Для получения дополнительной информации о выборе параметров STFT обратитесь к этому видео Coursera об обработке аудиосигнала и STFT. - STFT создает массив комплексных чисел, представляющих амплитуду и фазу. Однако в этом уроке вы будете использовать только величину, которую можно получить, применив
тс.abs
на выходеtf.signal.stft
.
по определению get_spectrogram(форма волны):
# Заполнение нулями для звуковой волны с менее чем 16 000 сэмплов.
input_len = 16000
форма волны = форма волны [: input_len]
zero_padding = tf.zeros(
[16000] - tf.shape(форма волны),
dtype=tf.float32)
# Привести dtype тензоров волновых форм к float32.
форма волны = tf.cast (форма волны, dtype = tf.float32)
# Объедините форму волны с `zero_padding`, что гарантирует, что все аудио
# клипы имеют одинаковую длину.equal_length = tf.concat([waveform, zero_padding], 0)
# Преобразование сигнала в спектрограмму с помощью STFT.
спектрограмма = tf.signal.stft(
равная_длина, длина_фрейма=255, шаг_фрейма=128)
# Получить величину STFT.
спектрограмма = tf.abs(спектрограмма)
# Добавьте измерение `channels`, чтобы можно было использовать спектрограмму
# как входные данные, похожие на изображения, со слоями свертки (которые ожидают
# shape(`batch_size`, `высота`, `ширина`, `каналы`).
спектрограмма = спектрограмма[..., tf.newaxis]
обратная спектрограмма
Далее приступайте к изучению данных.Распечатайте формы тензоризованной волны одного примера и соответствующую спектрограмму и воспроизведите исходный звук:
для сигнала, метка в файле waveform_ds.take(1):
метка = метка.numpy().decode('utf-8')
спектрограмма = get_spectrogram (форма волны)
print('Метка:', метка)
print('Форма волны:', waveform.shape)
print('Форма спектрограммы:', spectrogram.shape)
print('Воспроизведение аудио')
display.display (display. Audio (форма волны, скорость = 16000))
Метка&двоеточие; вверх Форма волны&двоеточие; (11606,) Форма спектрограммы&двоеточие; (124, 129, 1) Воспроизведение аудио
Ваш браузер не поддерживает аудио элементы.
Теперь определите функцию для отображения спектрограммы:
def plot_spectrogram (спектрограмма, топор):
если len(spectrogram.shape) > 2:
утверждать len(spectrogram.shape) == 3
спектрограмма = np.squeeze (спектрограмма, ось = -1)
# Преобразовать частоты в логарифмическую шкалу и транспонировать, чтобы время
# представлено по оси X (столбцы).
# Добавьте эпсилон, чтобы избежать получения нулевого логарифма.
log_spec = np.log (spectrogram.T + np.finfo (float).eps)
высота = log_spec.shape[0]
ширина = log_spec.форма[1]
X = np.linspace(0, np.size(спектрограмма), num=width, dtype=int)
Y = диапазон (высота)
ax.pcolormesh(X, Y, log_spec)
Постройте форму сигнала примера в зависимости от времени и соответствующую спектрограмму (частоты во времени):
рис, оси = plt.subplots(2, figsize=(12, 8))
шкала времени = np.arange (waveform.shape [0])
оси [0].plot(временная шкала, waveform.numpy())
оси[0].set_title('Форма волны')
оси [0].set_xlim([0, 16000])
plot_spectrogram (spectrogram.numpy (), оси [1])
оси[1].set_title('Спектрограмма')
plt.show()
Теперь определите функцию, которая преобразует набор данных формы волны в спектрограммы и соответствующие им метки в виде целочисленных идентификаторов:
def get_spectrogram_and_label_id (аудио, метка):
спектрограмма = get_spectrogram(аудио)
label_id = tf.argmax (метка == команды)
вернуть спектрограмму, label_id
Карта get_spectrogram_and_label_id
по элементам набора данных с Dataset.map
:
спектрограмма_ds = сигнал_ds.карта(
map_func=get_spectrogram_and_label_id,
num_parallel_calls = АВТОНАСТРОЙКА)
Изучите спектрограммы для различных примеров набора данных:
строк = 3
столбцы = 3
n = строки * столбцы
рис, оси = plt.subplots (строки, столбцы, figsize = (10, 10))
для i, (spectrogram, label_id) в enumerate(spectrogram_ds.take(n)):
г = я // столбцы
с = я % столбцов
топор = оси[r][c]
plot_spectrogram (spectrogram.numpy (), топор)
ax.set_title (команды [label_id.numpy()])
топор.ось('выкл')
plt.show()
Собери и обучи модель
Повторите предварительную обработку обучающего набора для проверочного и тестового наборов:
def preprocess_dataset (файлы):
файлы_ds = tf.data.Dataset.from_tensor_slices(файлы)
output_ds = files_ds.map(
map_func=get_waveform_and_label,
num_parallel_calls = АВТОНАСТРОЙКА)
output_ds = output_ds.map(
map_func=get_spectrogram_and_label_id,
num_parallel_calls = АВТОНАСТРОЙКА)
вернуть output_ds
train_ds = spectrogram_ds
val_ds = предварительный_набор_данных (val_files)
test_ds = предварительный_набор_данных (тестовые_файлы)
Группируйте обучающие и проверочные наборы для обучения модели:
размер_пакета = 64
поезд_дс = поезд_дс.партия (размер_пакета)
val_ds = val_ds.batch(размер_пакета)
Добавьте операции Dataset.cache
и Dataset.prefetch
, чтобы уменьшить задержку чтения при обучении модели:
train_ds = train_ds.cache().prefetch(AUTOTUNE)
val_ds = val_ds.cache().prefetch(AUTOTUNE)
Для модели вы будете использовать простую сверточную нейронную сеть (CNN), поскольку вы преобразовали аудиофайлы в изображения спектрограмм.
Ваш тс.Модель keras.Sequential
будет использовать следующие слои предварительной обработки Keras:
Для уровня Нормализация
его метод адаптации
сначала необходимо вызвать для обучающих данных, чтобы вычислить совокупную статистику (то есть среднее значение и стандартное отклонение).
для спектрограммы, _ в spectrogram_ds.take(1):
input_shape = спектрограмма.форма
print('Форма ввода:', input_shape)
num_labels = длина (команды)
# Создать экземпляр `tf.keras.слои. Слой нормализации.
norm_layer = слои. Нормализация ()
# Подгонять состояние слоя к спектрограммам
# с `Normalization.adapt`.
norm_layer.adapt (данные = spectrogram_ds.map (map_func = лямбда-спецификация, метка: спецификация))
модель = models.Sequential([
слои. Вход (форма = форма_ввода),
# Даунсемплинг ввода.
слои. Изменение размера (32, 32),
# Нормализовать.
норм_слой,
слои.Conv2D(32, 3, активация='relu'),
слои.Conv2D(64, 3, активация='relu'),
слои.MaxPooling2D(),
слои.Отсев(0,25),
слои.Свести(),
слои. Плотность (128, активация = 'relu'),
слои. Выпадение (0,5),
слои.Dense(num_labels),
])
модель.резюме()
Форма ввода&двоеточие; (124, 129, 1) Модель&двоеточие; "последовательный" _________________________________________________________________ Слой (тип) Выходная форма Параметр # ================================================== =============== изменение размера (Изменение размера) (Нет, 32, 32, 1) 0 нормализация (Normalizatio (None, 32, 32, 1) 3 н) conv2d (Conv2D) (Нет, 30, 30, 32) 320 conv2d_1 (Conv2D) (Нет, 28, 28, 64) 18496 max_pooling2d (MaxPooling2D (Нет, 14, 14, 64) 0 ) отсев (отсев) (нет, 14, 14, 64) 0 сгладить (сгладить) (нет, 12544) 0 плотный (плотный) (нет, 128) 1605760 dropout_1 (Выпадение) (Нет, 128) 0 плотности_1 (Плотные) (Нет, 8) 1032 ================================================== =============== Всего параметров & двоеточие; 1 625 611 Обучаемые параметры & двоеточие; 1 625 608 Необучаемые параметры & двоеточие; 3 _________________________________________________________________
Настройте модель Keras с оптимизатором Adam и кросс-энтропийной потерей:
модель.компилировать(
оптимизатор=tf.keras.optimizers.Adam(),
потеря = tf.keras.losses.SparseCategoricalCrossentropy (from_logits = True),
метрики=['точность'],
)
Обучить модель более 10 эпох в демонстрационных целях:
ЭПОХ = 10
история = model.fit(
поезд_дс,
validation_data=val_ds,
эпохи = ЭПОХИ,
callbacks=tf.keras.callbacks.EarlyStopping(многословный=1, терпение=2),
)
Эпоха 1/10 100/100 [===============================] - 13 с 40 мс/шаг - потеря&двоеточие; 1.7404 - точность&двоеточие; 0.3823 - val_loss: 1.3372 - val_accuracy: 0,5550 Эпоха 2/10 100/100 [===============================] - 0 с 4 мс/шаг - потеря&двоеточие; 1.1776 - точность&двоеточие; 0.5903 - val_loss: 0,9747 - val_accuracy: 0,6600 Эпоха 3/10 100/100 [===============================] - 0 с 4 мс/шаг - потеря&двоеточие; 0,9027 - точность&двоеточие; 0,6778 - val_loss: 0,8096 - val_accuracy: 0,7150 Эпоха 4/10 100/100 [===============================] - 0 с 4 мс/шаг - потеря&двоеточие; 0.7647 - точность&двоеточие; 0.7316 - val_loss: 0,7325 - val_accuracy: 0,7625 Эпоха 5/10 100/100 [===============================] - 0 с 4 мс/шаг - потеря&двоеточие; 0,6492 - точность&двоеточие; 0,7658 - val_loss: 0,6697 - val_accuracy: 0,7688 Эпоха 6/10 100/100 [===============================] - 0 с 5 мс/шаг - потеря&двоеточие; 0,5796 - точность&двоеточие; 0,7937 - val_loss: 0,6108 - val_accuracy: 0,7875 Эпоха 7/10 100/100 [===============================] - 0 с 4 мс/шаг - потеря&двоеточие; 0.5261 - точность&двоеточие; 0,8117 - val_loss: 0,5708 - val_accuracy: 0,8087 Эпоха 8/10 100/100 [===============================] - 0 с 4 мс/шаг - потеря&двоеточие; 0,4747 - точность&двоеточие; 0,8267 - val_loss: 0,5429 - val_accuracy: 0,8163 Эпоха 9/10 100/100 [===============================] - 0 с 4 мс/шаг - потеря&двоеточие; 0,4427 - точность&двоеточие; 0,8428 - val_loss: 0,5379 - val_accuracy: 0,8175 Эпоха 10/10 100/100 [===============================] - 0 с 4 мс/шаг - потеря&двоеточие; 0.3927 - точность&двоеточие; 0,8637 - val_loss: 0.5320 - val_accuracy: 0,8213
Давайте построим кривые потерь при обучении и проверке, чтобы проверить, насколько улучшилась ваша модель во время обучения:
метрик = история.история
plt.plot(history.epoch, metrics['loss'], metrics['val_loss'])
plt.legend(['потеря', 'val_loss'])
plt.show()
Оценка производительности модели
Запустите модель на тестовом наборе и проверьте производительность модели:
test_audio = []
test_labels = []
для аудио метка в test_ds:
тест_аудио.добавить (аудио.numpy())
test_labels.append(метка.numpy())
test_audio = np.array (test_audio)
test_labels = np.array (test_labels)
y_pred = np.argmax (model.predict (test_audio), ось = 1)
y_true = тестовые_метки
test_acc = сумма (y_pred == y_true) / длина (y_true)
print(f'Точность набора тестов: {test_acc:.0%}')
Точность набора тестов&колон; 84%
Показать матрицу путаницы
Используйте матрицу путаницы, чтобы проверить, насколько хорошо модель справилась с классификацией каждой из команд в тестовом наборе:
путаница_mtx = tf.math.confusion_matrix (y_true, y_pred)
plt.figure(figsize=(10, 8))
sns.heatmap(confusion_mtx,
xticklabels=команды,
yticklabels=команды,
annot=Истина, fmt='g')
plt.xlabel('Прогноз')
plt.ylabel('Ярлык')
plt.show()
Выполнение вывода по аудиофайлу
Наконец, проверьте вывод прогноза модели, используя входной аудиофайл, в котором кто-то говорит «нет». Насколько хорошо работает ваша модель?
файл_образца = каталог_данных/'нет/01bb6a2a_nohash_0.wav'
sample_ds = preprocess_dataset([str(sample_file)])
для спектрограммы метка в sample_ds.batch(1):
прогноз = модель (спектрограмма)
plt.bar (команды, tf.nn.softmax (прогноз [0]))
plt.title(f'Предсказания для "{commands[label[0]]}"')
plt.show()
Судя по выходным данным, ваша модель должна была распознать аудиокоманду как «нет».
Следующие шаги
В этом учебном пособии показано, как выполнять простую аудиоклассификацию/автоматическое распознавание речи с использованием сверточной нейронной сети с TensorFlow и Python.Чтобы узнать больше, рассмотрите следующие ресурсы:
Передача обучения с помощью YAMNet для классификации звуков окружающей среды | Ядро TensorFlow
YAMNet — это предварительно обученная глубокая нейронная сеть, которая может предсказывать звуковые события из 521 класса, такие как смех, лай или сирена.
В этом уроке вы узнаете, как:
- Загрузите и используйте модель YAMNet для логического вывода.
- Создайте новую модель, используя вложения YAMNet, чтобы классифицировать звуки кошек и собак.
- Оцените и экспортируйте свою модель.
Импорт TensorFlow и других библиотек
Начните с установки TensorFlow I/O, что облегчит вам загрузку аудиофайлов с диска.
pip установить tensorflow_io
импорт ОС
из отображения импорта IPython
импортировать matplotlib.pyplot как plt
импортировать numpy как np
импортировать панд как pd
импортировать тензорный поток как tf
импортировать tensorflow_hub как концентратор
импортировать tensorflow_io как tfio
О YAMNet
YAMNet — это предварительно обученная нейронная сеть, использующая архитектуру свертки MobileNetV1 с разделением по глубине.Он может использовать форму аудиосигнала в качестве входных данных и делать независимые прогнозы для каждого из 521 аудиособытия из корпуса AudioSet.
Модель извлекает «кадры» из звукового сигнала и обрабатывает пакеты этих кадров. Эта версия модели использует кадры продолжительностью 0,96 секунды и извлекает один кадр каждые 0,48 секунды.
Модель принимает одномерный массив float32 Tensor или NumPy, содержащий сигнал произвольной длины, представленный в виде одноканальных (моно) отсчетов 16 кГц в диапазоне [-1.0, +1,0]
. Это руководство содержит код, который поможет вам преобразовать файлы WAV в поддерживаемый формат.
Модель возвращает 3 вывода, включая баллы класса, встраивания (которые вы будете использовать для трансферного обучения) и логарифмическую спектрограмму мела. Вы можете найти более подробную информацию здесь.
Одно из конкретных применений YAMNet — это высокоуровневый экстрактор функций — вывод 1024-мерного встраивания. Вы будете использовать входные функции базовой (YAMNet) модели и передавать их в более мелкую модель, состоящую из одного скрытого tf.keras.layers. Плотный слой
. Затем вы будете обучать сеть на небольшом количестве данных для классификации звука без , требующего большого количества размеченных данных и сквозного обучения. (Это похоже на перенос обучения для классификации изображений с TensorFlow Hub для получения дополнительной информации.)
Сначала вы протестируете модель и увидите результаты классификации звука. Затем вы создадите конвейер предварительной обработки данных.
Загрузка YAMNet из концентратора TensorFlow
Вы собираетесь использовать предварительно обученный YAMNet из Tensorflow Hub для извлечения вложений из звуковых файлов.
Загрузить модель из TensorFlow Hub очень просто: выберите модель, скопируйте ее URL-адрес и используйте функцию загрузки
.
yamnet_model_handle = 'https://tfhub.dev/google/yamnet/1'
yamnet_model = hub.load (yamnet_model_handle)
Загрузив модель, вы можете следовать руководству по основам использования YAMNet и загрузить образец WAV-файла для выполнения вывода.
testing_wav_file_name = tf.keras.utils.get_file('miaow_16k.wav',
'https://storage.googleapis.com/audioset/miaow_16k.wav',
cache_dir='./',
cache_subdir='test_data')
печать (testing_wav_file_name)
Загрузка данных с https://storage.googleapis.com/audioset/miaow_16k.wav 221184/215546 [==============================] - 0s 0us/шаг ./test_data/miaow_16k.wav
Вам понадобится функция загрузки аудиофайлов, которая также будет использоваться в дальнейшем при работе с обучающими данными. (Узнайте больше о чтении аудиофайлов и их меток в разделе Простое распознавание аудио.
Примечание: Возврат wav_data
из load_wav_16k_mono
уже нормализован до значений в диапазоне [-1.0, 1.0]
(дополнительную информацию см. в документации YAMNet на TF Hub). # Служебные функции для загрузки аудиофайлов и проверки правильности частоты дискретизации[email protected]
def load_wav_16k_mono (имя файла):
""" Загрузите файл WAV, преобразуйте его в тензор с плавающей запятой, передискретизируйте до одноканального звука 16 кГц. """
file_contents = tf.io.read_file(имя файла)
wav, sample_rate = tf.audio.decode_wav(
файл_содержимое,
желаемые_каналы=1)
wav = tf.squeeze(wav, ось=-1)
Sample_rate = tf.cast (sample_rate, dtype = tf.int64)
wav = tfio.audio.resample(wav, rate_in=sample_rate, rate_out=16000)
вернуть wav
testing_wav_data = load_wav_16k_mono(testing_wav_file_name)
_ = пл.график (testing_wav_data)
# Воспроизведение аудиофайла.
display.Audio (testing_wav_data, скорость = 16000)
ПРЕДУПРЕЖДЕНИЕ:tensorflow:из /tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow/python/ops/parallel_for/pfor.py:2382: вызов сбора (из tensorflow.python.ops.array_ops) с validate_indices устарел и будет удален в будущей версии. Инструкции по обновлению: Аргумент `validate_indices` не действует. Индексы всегда проверяются на CPU и никогда не проверяются на GPU.ПРЕДУПРЕЖДЕНИЕ:tensorflow:из /tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow/python/ops/parallel_for/pfor.py:2382: вызов сбора (из tensorflow.python.ops.array_ops) с validate_indices устарел и будет удален в будущей версии. Инструкции по обновлению: Аргумент `validate_indices` не действует. Индексы всегда проверяются на CPU и никогда не проверяются на GPU. ПРЕДУПРЕЖДЕНИЕ:tensorflow:Использование цикла while_loop для преобразования IO>AudioResample ПРЕДУПРЕЖДЕНИЕ:tensorflow:Использование цикла while_loop для преобразования IO>AudioResample
Ваш браузер не поддерживает аудио элементы.
Загрузить сопоставление классов
Важно загрузить имена классов, которые YAMNet может распознать. Файл сопоставления находится по адресу yamnet_model.class_map_path()
в формате CSV.
class_map_path = yamnet_model.class_map_path().numpy().decode('utf-8')
class_names = list (pd.read_csv (class_map_path) ['display_name'])
для имени в class_names[:20]:
печать (имя)
Распечатать('...')
Речь Детская речь, ребенок говорит Беседа Рассказ, монолог лепет Синтезатор речи Кричать Беллоу Упс Кричать Дети кричат Кричать шепотом Смех Детский смех хихикать Сникер живот смех Смеяться, хихикать Плачет, рыдает ...
Запустить вывод
YAMNet предоставляет оценки классов на уровне кадров (т. е. 521 оценка для каждого кадра). Чтобы определить прогнозы на уровне клипа, оценки могут быть агрегированы для каждого класса по кадрам (например, с использованием среднего или максимального агрегирования). Это делается ниже с помощью scores_np.mean(axis=0)
. Наконец, чтобы найти класс с наивысшим баллом на уровне клипа, вы берете максимум из 521 агрегированного балла.
баллов, встраивания, спектрограмма = yamnet_model(testing_wav_data)
class_scores = tf.reduce_mean (баллы, ось = 0)
top_class = tf.argmax(class_scores)
предполагаемый_класс = имена_классов[высший_класс]
print(f'Основной звук: {inferred_class}')
print(f'Форма встраивания: {embeddings.shape}')
Основной звук : Животное Вложения shape: (13, 1024)Примечание: Модель правильно определила звук животного. Ваша цель в этом руководстве — повысить точность модели для определенных классов. Также обратите внимание, что модель сгенерировала 13 вложений, по 1 на кадр.
Набор данных ESC-50
Набор данных ESC-50 (Piczak, 2015) представляет собой помеченную коллекцию из 2000 пятисекундных аудиозаписей окружающей среды. Набор данных состоит из 50 классов, по 40 примеров в каждом классе.
Загрузите набор данных и распакуйте его.
_ = tf.keras.utils.get_file('esc-50.zip',
'https://github.com/karoldvl/ESC-50/archive/master.zip',
cache_dir='./',
cache_subdir = 'наборы данных',
экстракт = Истина)
Загрузка данных с https://github.com/karoldvl/ESC-50/archive/master.zip 645701632/Неизвестно - 41 с 0 мкс/шаг
Исследуйте данные
Метаданные для каждого файла указаны в CSV-файле по адресу ./datasets/ESC-50-master/meta/esc50.csv
и все аудиофайлы находятся в ./datasets/ESC-50-master/audio/
Вы создадите pandas DataFrame
с сопоставлением и будете использовать его для более четкого представления данных.
esc50_csv = './наборы данных/ESC-50-мастер/мета/esc50.csv'
base_data_path = './datasets/ESC-50-master/аудио/'
pd_data = pd.read_csv (esc50_csv)
pd_data.head()
Фильтр данных
Теперь, когда данные хранятся в DataFrame
, примените некоторые преобразования:
- Отфильтровать строки и использовать только выбранные классы —
собака
икошка
. Если вы хотите использовать какие-либо другие классы, вы можете выбрать их здесь. - Измените имя файла, указав полный путь. Это облегчит загрузку позже.
- Изменить цели так, чтобы они находились в пределах определенного диапазона. В этом примере
собака
останется как0
, нокошка
станет1
вместо исходного значения5
.
my_classes = ['собака', 'кошка']
map_class_to_id = {'собака':0, 'кошка':1}
filtered_pd = pd_data[pd_data.category.isin(my_classes)]
class_id = filtered_pd['категория'].apply(имя лямбда: map_class_to_id[имя])
filtered_pd = filtered_pd.assign(target=class_id)
полный_путь = filtered_pd['имя файла'].применить (лямбда-строка: os.path.join (base_data_path, строка))
filtered_pd = filtered_pd.assign (имя файла = полный_путь)
filtered_pd.head(10)
Загрузите аудиофайлы и извлеките вложения
Здесь вы примените load_wav_16k_mono
и подготовите данные WAV для модели.
При извлечении вложений из данных WAV вы получаете массив формы (N, 1024)
, где N
— количество кадров, найденных YAMNet (по одному на каждые 0,48 секунды звука).
Ваша модель будет использовать каждый кадр как один вход. Поэтому вам нужно создать новый столбец с одним кадром в строке. Вам также необходимо расширить метки и столбец fold
, чтобы правильно отразить эти новые строки.
Расширенный столбец fold
сохраняет исходные значения. Вы не можете смешивать кадры, потому что при выполнении разделения вы можете получить части одного и того же звука в разных разделениях, что сделает ваши шаги проверки и тестирования менее эффективными.
имен файлов = filtered_pd['имя файла']
цели = filtered_pd['цель']
складки = filtered_pd['fold']
main_ds = tf.data.Dataset.from_tensor_slices((имена файлов, цели, складки))
main_ds.element_spec
(TensorSpec(shape=(), dtype=tf.string, name=None), TensorSpec (форма = (), dtype = tf.int64, имя = нет), TensorSpec (форма = (), dtype = tf.int64, имя = нет))
def load_wav_for_map (имя файла, метка, складка):
вернуть load_wav_16k_mono(имя файла), метку, свернуть
main_ds = основные_ds.карта (load_wav_for_map)
main_ds.element_spec
ПРЕДУПРЕЖДЕНИЕ:tensorflow:Использование цикла while_loop для преобразования IO>AudioResample ПРЕДУПРЕЖДЕНИЕ:tensorflow:Использование цикла while_loop для преобразования IO>AudioResample (TensorSpec(shape=, dtype=tf.float32, name=None), TensorSpec (форма = (), dtype = tf.int64, имя = нет), TensorSpec (форма = (), dtype = tf.int64, имя = нет))
# применяет модель извлечения внедрения к данным wav
def extract_embedding (wav_data, label, fold):
''' запустите YAMNet, чтобы извлечь встраивание из данных wav '''
оценки, вложения, спектрограмма = yamnet_model(wav_data)
количество_вложений = tf.форма (вложения) [0]
возврат (вложения,
tf.repeat (метка, num_embeddings),
tf.repeat (fold, num_embeddings))
# извлечь встраивание
main_ds = main_ds.map(extract_embedding).unbatch()
main_ds.element_spec
(TensorSpec (форма = (1024,), dtype = tf.float32, имя = нет), TensorSpec (форма = (), dtype = tf.int64, имя = нет), TensorSpec (форма = (), dtype = tf.int64, имя = нет))
Разделить данные
Вы будете использовать столбец fold
, чтобы разделить набор данных на наборы для обучения, проверки и тестирования.
ESC-50 состоит из пяти одинаковых по размеру кросс-валидаций кратных
, так что клипы из одного и того же исходного источника всегда находятся в одном и том же кратном
— узнайте больше в документе ESC: Dataset for Environmental Sound Classification.
Последний шаг — удалить столбец fold
из набора данных, поскольку вы не собираетесь использовать его во время обучения.
cached_ds = main_ds.cache()
train_ds = cached_ds.filter (встраивание лямбда, метка, складка: складка < 4)
val_ds = кэшированные_ds.фильтр (вложение лямбда, метка, складка: складка == 4)
test_ds = cached_ds.filter (встраивание лямбда, метка, складка: складка == 5)
# удалить столбец folds, поскольку он больше не нужен
remove_fold_column = лямбда-встраивание, метка, складка: (встраивание, метка)
train_ds = train_ds.map(remove_fold_column)
val_ds = val_ds.map (удалить_fold_column)
test_ds = test_ds.map (удалить_fold_column)
train_ds = train_ds.cache().shuffle(1000).batch(32).prefetch(tf.data.AUTOTUNE)
val_ds = val_ds.cache().batch(32).prefetch(tf.данные.АВТОНАСТРОЙКА)
test_ds = test_ds.cache().batch(32).prefetch(tf.data.AUTOTUNE)
Создайте свою модель
Вы сделали большую часть работы! Затем определите очень простую модель Sequential с одним скрытым слоем и двумя выходными данными для распознавания кошек и собак по звукам.
my_model = tf.keras.Sequential([
tf.keras.layers.Input (форма = (1024), dtype = tf.float32,
имя = 'input_embedding'),
tf.keras.layers.Dense(512, активация='relu'),
тф.keras.layers.Dense (len (my_classes))
], имя='моя_модель')
моя_модель.резюме()
ВНИМАНИЕ:tensorflow:пожалуйста, добавьте keras.layers.InputLayer вместо keras.Input в последовательную модель. keras.Input предназначен для использования функциональной моделью. ВНИМАНИЕ:tensorflow:пожалуйста, добавьте keras.layers.InputLayer вместо keras.Input в последовательную модель. keras.Input предназначен для использования функциональной моделью. Модель&двоеточие; "моя_модель" _________________________________________________________________ Слой (тип) Выходная форма Параметр # ================================================== =============== плотный (Плотный) (Нет, 512) 524800 _________________________________________________________________ плотности_1 (Плотные) (Нет, 2) 1026 ================================================== =============== Всего параметров & двоеточие; 525 826 Обучаемые параметры & двоеточие; 525 826 Необучаемые параметры & двоеточие; 0 _________________________________________________________________
моя_модель.скомпилировать (потеря = tf.keras.losses.SparseCategoricalCrossentropy (from_logits = True),
оптимизатор = "адам",
метрики=['точность'])
callback = tf.keras.callbacks.EarlyStopping(monitor='потеря',
терпение=3,
restore_best_weights=Истина)
история = my_model.fit(train_ds,
эпохи=20,
validation_data=val_ds,
обратные вызовы = обратный вызов)
Эпоха 1/20 15/15 [===============================] - 5 с 25 мс/шаг - потеря&двоеточие; 0.7833 - точность&двоеточие; 0.8000 - val_loss: 0,6789 - val_accuracy: 0,8687 Эпоха 2/20 15/15 [===============================] - 0 с 16 мс/шаг - потеря&двоеточие; 0,5082 - точность&двоеточие; 0,8958 - val_loss: 0,3775 - val_accuracy: 0,8813 Эпоха 3/20 15/15 [===============================] - 0 с 17 мс/шаг - потеря&двоеточие; 0,3210 - точность&двоеточие; 0,8750 - val_loss: 0,5043 - val_accuracy: 0,8750 Эпоха 4/20 15/15 [===============================] - 0 с 17 мс/шаг - потеря&двоеточие; 0.2146 - точность&колон; 0.9021 - val_loss: 0,3757 - val_accuracy: 0,8750 Эпоха 5/20 15/15 [===============================] - 0 с 17 мс/шаг - потеря&двоеточие; 0,2113 - точность&двоеточие; 0.9062 - val_loss: 0.2740 - val_accuracy: 0,8750 Эпоха 6/20 15/15 [===============================] - 0 с 17 мс/шаг - потеря&двоеточие; 0,2672 - точность&двоеточие; 0,9167 - val_loss: 0,4483 - val_accuracy: 0,8750 Эпоха 7/20 15/15 [===============================] - 0 с 17 мс/шаг - потеря&двоеточие; 0.2386 - точность и двоеточие; 0.9333 - val_loss: 0,5775 - val_accuracy: 0,8687 Эпоха 8/20 15/15 [===============================] - 0 с 17 мс/шаг - потеря&двоеточие; 0,1639 - точность&двоеточие; 0,9229 - val_loss: 0,4539 - val_accuracy: 0,8750 Эпоха 9/20 15/15 [===============================] - 0 с 18 мс/шаг - потеря&двоеточие; 0,3539 - точность&двоеточие; 0.9250 - val_loss: 0,2091 - val_accuracy: 0,9187 Эпоха 10/20 15/15 [===============================] - 0 с 18 мс/шаг - потеря&двоеточие; 0.2705 - точность&двоеточие; 0.9271 - val_loss: 0,2505 - val_accuracy: 0,9062 Эпоха 11/20 15/15 [===============================] - 0 с 17 мс/шаг - потеря&двоеточие; 0,2582 - точность&двоеточие; 0.9312 - val_loss: 0.2182 - val_accuracy: 0,9250
Давайте запустим метод оценки
на тестовых данных, чтобы убедиться, что нет переобучения.
потеря, точность = my_model.evaluate(test_ds)
print("Убыток: ", убыток)
print("Точность: ", точность)
5/5 [===============================] - 0 с 4 мс/шаг - потеря&двоеточие; 0.6575 - точность&двоеточие; 0,8125 Потеря&колон; 0,657511293888092 Точность&двоеточие; 0,8125
Ты сделал это!
Протестируйте свою модель
Затем попробуйте свою модель на встраивании из предыдущего теста, используя только YAMNet.
баллов, встраивания, спектрограмма = yamnet_model(testing_wav_data)
результат = my_model(вложения).numpy()
inferred_class = my_classes[result.mean(ось=0).argmax()]
print(f'Основной звук: {inferred_class}')
Основной звук : Кот
Сохраните модель, которая может напрямую принимать WAV-файл в качестве входных данных
Ваша модель работает, когда вы вводите в нее вложения.
В реальном сценарии вы захотите использовать аудиоданные в качестве прямого ввода.
Для этого вы объедините YAMNet со своей моделью в единую модель, которую сможете экспортировать для других приложений.
Чтобы упростить использование результатов модели, последним слоем будет операция reduce_mean
. При использовании этой модели для сервировки (о которой вы узнаете позже в этом уроке) вам понадобится имя финального слоя. Если вы не определите его, TensorFlow автоматически определит добавочный, что затруднит тестирование, поскольку он будет меняться каждый раз, когда вы обучаете модель.При использовании необработанной операции TensorFlow вы не можете присвоить ей имя. Чтобы решить эту проблему, вы создадите пользовательский слой, который применяет reduce_mean
и назовите его 'классификатор'
.
класс ReduceMeanLayer (tf.keras.layers.Layer):
def __init__(я, ось=0, **kwargs):
super(ReduceMeanLayer, self).__init__(**kwargs)
self.axis = ось
деф вызов(я, ввод):
вернуть tf.math.reduce_mean (вход, ось = self.axis)
save_model_path = './dogs_and_cats_yamnet'
input_segment = tf.keras.layers.Input(shape=(), dtype=tf.float32, name='аудио')
embedding_extraction_layer = hub.KerasLayer(yamnet_model_handle,
обучаемый = Ложь, имя = 'ямнет')
_, embeddings_output, _ = embedding_extraction_layer (входной_сегмент)
serve_outputs = my_model (embeddings_output)
serve_outputs = ReduceMeanLayer (ось = 0, имя = 'классификатор') (serving_outputs)
serve_model = tf.keras.Model (input_segment, serve_outputs)
serving_model.сохранить (saved_model_path, include_optimizer = False)
ВНИМАНИЕ:tensorflow:Загруженная модель скомпилирована, но скомпилированные метрики еще не созданы. `model.compile_metrics` будет пустым, пока вы не обучите или не оцените модель. ВНИМАНИЕ:tensorflow:Загруженная модель скомпилирована, но скомпилированные метрики еще не созданы. `model.compile_metrics` будет пустым, пока вы не обучите или не оцените модель. INFO:tensorflow:Активы, записанные в: ./dogs_and_cats_yamnet/активы INFO:tensorflow:Активы, записанные в: ./dogs_and_cats_yamnet/активы
tf.keras.utils.plot_model (serving_model)
Загрузите сохраненную модель, чтобы убедиться, что она работает должным образом.
reloaded_model = tf.saved_model.load (путь_сохраненной_модели)
И последний тест: учитывая некоторые звуковые данные, возвращает ли ваша модель правильный результат?
reloaded_results = reloaded_model(testing_wav_data)
cat_or_dog = мои_классы[tf.argmax(reloaded_results)]
print(f'Основной звук: {cat_or_dog}')
Основной звук : Кот
Если вы хотите опробовать новую модель в настройке обслуживания, вы можете использовать сигнатуру serving_default.
serve_results = reloaded_model.signatures['serving_default'](testing_wav_data)
cat_or_dog = my_classes[tf.argmax(serving_results['классификатор'])]
print(f'Основной звук: {cat_or_dog}')
Основной звук : Кот
(дополнительно) Еще несколько тестов
Модель готова.
Давайте сравним его с YAMNet на тестовом наборе данных.
test_pd = filtered_pd.loc[filtered_pd['fold'] == 5]
строка = test_pd.sample(1)
имя файла = строка['имя файла'].item()
печать (имя файла)
форма волны = load_wav_16k_mono(имя файла)
print(f'Значения формы волны: {форма волны}')
_ = plt.plot(форма волны)
display.Audio (форма волны, скорость = 16000)
./наборы данных/ESC-50-мастер/аудио/5-212454-A-0.wav ПРЕДУПРЕЖДЕНИЕ:tensorflow:Использование цикла while_loop для преобразования IO>AudioResample ПРЕДУПРЕЖДЕНИЕ:tensorflow:Использование цикла while_loop для преобразования IO>AudioResample Значения формы волны&двоеточие; [-8.8849301e-09 2.6603255e-08 -1.1731625e-08 ... -1.3478296e-03 -1.0509168e-03 -9.1038318e-04]
Ваш браузер не поддерживает аудио элементы.
# Запускаем модель, проверяем вывод.
оценки, вложения, спектрограмма = yamnet_model (форма волны)
class_scores = tf.reduce_mean (баллы, ось = 0)
top_class = tf.argmax(class_scores)
предполагаемый_класс = имена_классов[высший_класс]
top_score = class_scores[top_class]
print(f'[YAMNet] Основной звук: {inferred_class} ({top_score})')
reloaded_results = reloaded_model (форма волны)
ваш_верхний_класс = tf.argmax(reloaded_results)
your_inferred_class = my_classes[your_top_class]
class_probabilities = tf.nn.softmax (reloaded_results, ось = -1)
your_top_score = class_probabilities[your_top_class]
print(f'[Ваша модель] Основной звук: {your_inferred_class} ({your_top_score})')
[YAMNet] Основной звук : Животное (0,9570276141166687) [Ваша модель] Основной звук : собака (0,9999711513519287)
Следующие шаги
Вы создали модель, которая может классифицировать звуки собак и кошек.С той же идеей и другим набором данных вы можете попробовать, например, построить акустический идентификатор птиц на основе их пения.
Поделитесь своим проектом с командой TensorFlow в социальных сетях!
Использовать распознавание голоса в Windows
Настройка микрофона
Перед настройкой распознавания речи убедитесь, что у вас настроен микрофон.
Выберите (Пуск) > Настройки > Время и язык > Речь .
В разделе Микрофон нажмите кнопку Начать .
Откроется окно мастера Speech , и установка начнется автоматически. Если мастер обнаружит проблемы с вашим микрофоном, они будут перечислены в диалоговом окне мастера. Вы можете выбрать параметры в диалоговом окне, чтобы указать проблему и помочь мастеру решить ее.
Помогите компьютеру распознать ваш голос
Вы можете научить Windows 11 распознавать ваш голос. Вот как это настроить:
Нажмите клавишу с логотипом Windows+Ctrl+S. Окно мастера настройки распознавания речи открывается с введением на странице Добро пожаловать в распознавание речи .
Совет: Если вы уже настроили распознавание речи, нажмите клавишу с логотипом Windows+Ctrl+S, чтобы открыть распознавание речи, и вы готовы его использовать.Если вы хотите переучить компьютер распознавать ваш голос, нажмите клавишу с логотипом Windows, введите Панель управления и выберите Панель управления в списке результатов. В Панели управления выберите Простота доступа > Распознавание речи > Обучите свой компьютер лучше понимать вас .
Выбрать Далее . Следуйте инструкциям на экране, чтобы настроить распознавание речи.Мастер проведет вас через этапы настройки.
После завершения настройки вы можете пройти обучение, чтобы узнать больше о распознавании речи. Чтобы пройти обучение, выберите Start Tutorial в окне мастера. Чтобы пропустить учебник, выберите Пропустить учебник . Теперь вы можете начать использовать распознавание речи.
См. также
Команды распознавания речи Windows
Настройка микрофона
Прежде чем настраивать распознавание голоса, убедитесь, что у вас настроен микрофон.
Нажмите кнопку Пуск , затем выберите Настройки > Время и язык > Речь .
В разделе Микрофон нажмите кнопку Начать .
Помогите компьютеру распознать ваш голос
Вы можете научить Windows 10 распознавать ваш голос.Вот как это настроить:
В поле поиска на панели задач введите Распознавание речи Windows , а затем выберите Распознавание речи Windows в списке результатов.
Если вы не видите диалоговое окно с надписью «Добро пожаловать в программу обучения распознаванию речи», в поле поиска на панели задач введите Панель управления и выберите Панель управления в списке результатов.Затем выберите Специальные возможности > Распознавание речи > Научите компьютер лучше понимать вас .
Следуйте инструкциям по настройке распознавания речи.
См. также
Команды распознавания речи Windows
Полное руководство по распознаванию речи с помощью Python — Real Python
Смотреть сейчас Это руководство содержит связанный с ним видеокурс, созданный командой Real Python.Посмотрите его вместе с письменным учебным пособием, чтобы углубить свое понимание: Распознавание речи с помощью Python
Вы когда-нибудь задумывались, как добавить распознавание речи в свой проект Python? Если да, то продолжайте читать! Это проще, чем вы думаете.
Далеко не причуда, ошеломляющий успех продуктов с поддержкой речи, таких как Amazon Alexa, доказал, что некоторая степень поддержки речи будет важным аспектом бытовой техники в обозримом будущем. Если подумать, причины довольно очевидны.Включение распознавания речи в ваше приложение Python обеспечивает уровень интерактивности и доступности, с которым могут сравниться немногие технологии.
Заслуживают внимания только улучшения специальных возможностей. Распознавание речи позволяет пожилым людям, а также людям с физическими и зрительными нарушениями взаимодействовать с современными продуктами и услугами быстро и естественно — без графического интерфейса!
Лучше всего то, что включить распознавание речи в проект Python очень просто. В этом руководстве вы узнаете, как это сделать.Вы узнаете:
- Как работает распознавание речи,
- Какие пакеты доступны в PyPI; и
- Как установить и использовать пакет SpeechRecognition — полнофункциональную и простую в использовании библиотеку распознавания речи Python.
В конце концов, вы примените полученные знания в простой игре «Угадай слово» и увидите, как все это сочетается.
Как работает распознавание речи — обзор
Прежде чем мы приступим к распознаванию речи в Python, давайте поговорим о том, как работает распознавание речи.Полное обсуждение заняло бы целую книгу, поэтому я не буду утомлять вас всеми техническими подробностями. На самом деле, этот раздел не является обязательным для остальной части учебника. Если вы хотите сразу перейти к делу, не стесняйтесь пропустить вперед.
Распознавание речи берет свое начало в исследованиях, проведенных в Bell Labs в начале 1950-х годов. Ранние системы были ограничены одним говорящим и имели ограниченный словарный запас примерно в дюжину слов. Современные системы распознавания речи прошли долгий путь по сравнению со своими древними аналогами.Они могут распознавать речь нескольких говорящих и обладают огромным словарным запасом на многих языках.
Первым компонентом распознавания речи является, конечно же, речь. Речь должна быть преобразована из физического звука в электрический сигнал с помощью микрофона, а затем в цифровые данные с помощью аналого-цифрового преобразователя. После оцифровки можно использовать несколько моделей для преобразования аудио в текст.
Большинство современных систем распознавания речи основаны на так называемой скрытой марковской модели (СММ).Этот подход основан на предположении, что речевой сигнал, рассматриваемый в течение достаточно короткого промежутка времени (скажем, десять миллисекунд), может быть разумно аппроксимирован как стационарный процесс, то есть процесс, в котором статистические свойства не меняются во времени.
В типичном HMM речевой сигнал делится на 10-миллисекундные фрагменты. Спектр мощности каждого фрагмента, который по сути представляет собой график зависимости мощности сигнала от частоты, отображается в вектор действительных чисел, известный как кепстральные коэффициенты.Размерность этого вектора обычно невелика — иногда всего 10, хотя более точные системы могут иметь размерность 32 и более. Конечным результатом HMM является последовательность этих векторов.
Для декодирования речи в текст группы векторов сопоставляются с одной или несколькими фонемами — фундаментальной единицей речи. Этот расчет требует тренировки, поскольку звучание фонемы варьируется от говорящего к говорящему и даже варьируется от одного высказывания к другому одним и тем же говорящим. Затем применяется специальный алгоритм для определения наиболее вероятного слова (или слов), которые образуют заданную последовательность фонем.
Можно себе представить, что весь этот процесс может быть дорогостоящим в вычислительном отношении. Во многих современных системах распознавания речи нейронные сети используются для упрощения речевого сигнала с использованием методов преобразования признаков и уменьшения размерности до распознавания HMM . Детекторы голосовой активности (VAD) также используются для сокращения звукового сигнала до тех частей, которые могут содержать речь. Это предотвращает трату времени распознавателем на анализ ненужных частей сигнала.
К счастью, как программисту Python вам не нужно ни о чем беспокоиться. Ряд служб распознавания речи доступен для использования в Интернете через API, и многие из этих служб предлагают Python SDK.
Выбор пакета распознавания речи Python
В PyPI существует несколько пакетов для распознавания речи. Вот некоторые из них:
Некоторые из этих пакетов, такие как wit и apiai, предлагают встроенные функции, такие как обработка естественного языка для определения намерений говорящего, которые выходят за рамки простого распознавания речи.Другие, такие как google-cloud-speech, сосредоточены исключительно на преобразовании речи в текст.
Существует один пакет, отличающийся простотой использования: SpeechRecognition.
Для распознавания речи требуется аудиовход, и SpeechRecognition делает получение этого ввода очень простым. Вместо того, чтобы создавать сценарии для доступа к микрофонам и обработки аудиофайлов с нуля, SpeechRecognition позволит вам начать работу всего за несколько минут.
Библиотека SpeechRecognition выступает в качестве оболочки для нескольких популярных речевых API и, таким образом, является чрезвычайно гибкой.Один из них — Google Web Speech API — поддерживает ключ API по умолчанию, который жестко запрограммирован в библиотеке SpeechRecognition. Это означает, что вы можете встать с ног, не подписываясь на услугу.
Гибкость и простота использования пакета SpeechRecognition делают его отличным выбором для любого проекта Python. Однако не гарантируется поддержка каждой функции каждого API-интерфейса, который он обертывает. Вам нужно будет потратить некоторое время на изучение доступных вариантов, чтобы выяснить, будет ли работать SpeechRecognition в вашем конкретном случае.
Итак, теперь, когда вы убеждены, что вам нужно попробовать SpeechRecognition, следующим шагом будет его установка в вашей среде.
Установка распознавания речи
SpeechRecognition совместим с Python 2.6, 2.7 и 3.3+, но требует некоторых дополнительных шагов по установке для Python 2. В этом руководстве я предполагаю, что вы используете Python 3.3+.
Вы можете установить SpeechRecognition с терминала с помощью pip:
$ pip установить SpeechRecognition
После установки вы должны проверить установку, открыв сеанс интерпретатора и введя:
>>> >>> импортировать voice_recognition как sr
>>> ср.__версия__
«3.8.1»
Примечание: Номер версии, который вы получите, может отличаться. Версия 3.8.1 была последней на момент написания.
Держите этот сеанс открытым. Вы начнете работать с ним чуть позже.
SpeechRecognition будет работать из коробки , если все, что вам нужно сделать, это работать с существующими аудиофайлами. Однако для конкретных случаев использования требуется несколько зависимостей. Примечательно, что пакет PyAudio необходим для захвата микрофонного входа.
Вы увидите, какие зависимости вам нужны, когда будете читать дальше. А пока давайте погрузимся и изучим основы пакета.
Распознаватель
Класс Вся магия в SpeechRecognition происходит с классом Recognizer
.
Основной целью экземпляра Recognizer
, конечно же, является распознавание речи. Каждый экземпляр поставляется с различными настройками и функциями для распознавания речи из источника звука.
Создать экземпляр Recognizer
очень просто. В текущем сеансе интерпретатора просто введите:
>>> r = sr.Recognizer()
Каждый экземпляр Recognizer
имеет семь методов распознавания речи из аудиоисточника с использованием различных API. Это:
Из семи только распознавать_sphinx()
работает в автономном режиме с двигателем CMU Sphinx. Остальные шесть требуют подключения к Интернету.
Полное обсуждение функций и преимуществ каждого API выходит за рамки данного руководства.Поскольку SpeechRecognition поставляется с ключом API по умолчанию для Google Web Speech API, вы можете сразу начать работу с ним. По этой причине в этом руководстве мы будем использовать API Web Speech. Остальные шесть API требуют аутентификации либо с помощью ключа API, либо с помощью комбинации имени пользователя и пароля. Для получения дополнительной информации обратитесь к документации SpeechRecognition.
Предупреждение: Ключ по умолчанию, предоставленный SpeechRecognition, предназначен только для целей тестирования, и Google может отозвать его в любое время .Это , а не , хорошая идея использовать Google Web Speech API в производстве. Даже с действительным ключом API вы будете ограничены только 50 запросами в день, и увеличить эту квоту невозможно. К счастью, интерфейс SpeechRecognition практически идентичен для каждого API, поэтому то, что вы сегодня изучите, будет легко применить в реальном проекте.
Каждый метод cognition_*()
вызовет исключение speech_recognition.RequestError
, если API недоступен.Для распознать_sphinx()
это может произойти в результате отсутствия, повреждения или несовместимости установки Sphinx. Для других шести методов может быть выдано сообщение RequestError
, если достигнуты пределы квоты, сервер недоступен или отсутствует подключение к Интернету.
Ладно, хватит болтать. Давайте испачкаем руки. Продолжайте и попробуйте вызвать распознать_google()
в сеансе интерпретатора.
>>> r.recognize_google()
Что случилось?
Вы, вероятно, получили что-то вроде этого:
Трассировка (последний последний вызов):
Файл "", строка 1, в
Ошибка типа: в системе распознавания_google() отсутствует 1 обязательный позиционный аргумент: 'audio_data'
Вы могли догадаться, что это произойдет.Как можно что-то узнать из ничего?
Все семь методов cognize_*()
класса Recognizer
требуют аргумента audio_data
. В каждом случае audio_data
должен быть экземпляром класса AudioData
SpeechRecognition.
Существует два способа создания экземпляра AudioData
: из аудиофайла или из аудиозаписи, записанной с микрофона. С аудиофайлами немного проще начать работу, поэтому давайте сначала рассмотрим их.
Работа с аудиофайлами
Прежде чем продолжить, вам нужно скачать аудиофайл. Тот, который я использовал для начала, «harvard.wav», можно найти здесь. Убедитесь, что вы сохранили его в том же каталоге, в котором запущен ваш сеанс интерпретатора Python.
SpeechRecognition упрощает работу с аудиофайлами благодаря удобному классу AudioFile
. Этот класс может быть инициализирован путем к аудиофайлу и предоставляет интерфейс менеджера контекста для чтения и работы с содержимым файла.
Поддерживаемые типы файлов
В настоящее время SpeechRecognition поддерживает следующие форматы файлов:
- WAV: должен быть в формате PCM/LPCM
- АИФФ
- AIFF-C
- FLAC: должен быть собственный формат FLAC; OGG-FLAC не поддерживается
Если вы работаете в Linux, macOS или Windows на базе x-86, вы сможете без проблем работать с файлами FLAC. На других платформах вам потребуется установить кодировщик FLAC и убедиться, что у вас есть доступ к инструменту командной строки flac
.Вы можете найти дополнительную информацию здесь, если это относится к вам.
Использование
record()
для захвата данных из файлаВведите в сеанс интерпретатора следующее, чтобы обработать содержимое файла «harvard.wav»:
>>> >>> гарвард = sr.AudioFile('harvard.wav')
>>> с Гарвардом в качестве источника:
... аудио = r.record(источник)
...
Менеджер контекста открывает файл и считывает его содержимое, сохраняя данные в экземпляре AudioFile
с именем source.
Затем метод record()
записывает данные из всего файла в экземпляр AudioData
. Вы можете убедиться в этом, проверив тип аудио
:
>>> тип (аудио)
<класс 'speech_recognition.AudioData'>
Теперь вы можете вызвать распознавание_google()
, чтобы попытаться распознать любую речь в аудио. В зависимости от скорости вашего интернет-соединения вам, возможно, придется подождать несколько секунд, прежде чем вы увидите результат.
>>> r.recognize_google(аудио)
'Несвежий запах старого пива задерживается, требуется тепло
чтобы вывести запах, холодное купание восстанавливает здоровье и
цедра соленый огурец вкус прекрасный с ветчиной тако аль
Пасторе - моя любимая пикантная еда - горячая
перекрестная булочка
Поздравляем! Вы только что записали свой первый аудиофайл!
Если вам интересно, откуда берутся фразы в файле «harvard.wav», это примеры Гарвардских предложений. Эти фразы были опубликованы IEEE в 1965 году для использования при тестировании разборчивости речи на телефонных линиях.Они до сих пор используются при тестировании VoIP и сотовой связи.
Гарвардские предложения состоят из 72 списков из десяти фраз. Вы можете найти в свободном доступе записи этих фраз на веб-сайте Open Speech Repository. Записи доступны на английском, китайском, французском и хинди. Они представляют собой отличный источник бесплатных материалов для тестирования вашего кода.
Захват сегментов со смещением
и длительностью
Что делать, если вы хотите записать в файл только часть речи? Метод record()
принимает аргумент ключевого слова duration
, который останавливает запись по истечении заданного количества секунд.
Например, следующая запись фиксирует любую речь в первые четыре секунды файла:
>>> >>> с Гарвардом в качестве источника:
... аудио = r.record (источник, продолжительность = 4)
...
>>> r.recognize_google(аудио)
'застоялся запах старого пива'
Метод record()
при использовании внутри блока с
всегда перемещается вперед в файловом потоке. Это означает, что если вы записываете один раз в течение четырех секунд, а затем снова записываете в течение четырех секунд, второй раз возвращает четыре секунды звука после первых четырех секунд.
>>> с Гарвардом в качестве источника:
... audio1 = r.record (источник, продолжительность = 4)
... audio2 = r.record (источник, продолжительность = 4)
...
>>> r.recognize_google(аудио1)
'застоялся запах старого пива'
>>> r.recognize_google(аудио2)
«Требуется тепло, чтобы вызвать запах холодного купания»
Обратите внимание, что audio2
содержит часть третьей фразы в файле. При указании длительности запись может остановиться на середине фразы или даже на середине слова, что может снизить точность транскрипции.Подробнее об этом чуть позже.
В дополнение к указанию продолжительности записи методу record()
можно задать конкретную начальную точку с помощью ключевого аргумента offset
. Это значение представляет собой количество секунд от начала файла, которое следует игнорировать перед началом записи.
Чтобы захватить только вторую фразу в файле, вы можете начать со смещения в четыре секунды и записать, скажем, три секунды.
>>> >>> с Гарвардом в качестве источника:
... аудио = r.record (источник, смещение = 4, продолжительность = 3)
...
>>> r.recognize_google(аудио)
«Требуется тепло, чтобы вывести запах»
Аргументы ключевого слова offset
и duration
полезны для сегментации аудиофайла , если вы предварительно знаете структуру речи в файле. Однако их поспешное использование может привести к плохой транскрипции. Чтобы увидеть этот эффект, попробуйте в интерпретаторе следующее:
>>> с Гарвардом в качестве источника:
... аудио = r.record (источник, смещение = 4,7, продолжительность = 2,8)
...
>>> r.recognize_google(аудио)
'Мескит, чтобы вывести запах Айко'
Начав запись с 4,7 секунды, вы пропустили часть «it t» в начале фразы «требуется тепло, чтобы выделить запах», поэтому API получил только «akes heat», которое было сопоставлено с «мескитовым оттенком». ».
Точно так же в конце записи вы уловили «а ко», которое является началом третьей фразы «холодное купание восстанавливает здоровье и бодрость.Это было сопоставлено с «Айко» по API.
Есть еще одна причина, по которой вы можете получить неточные транскрипции. Шум! Приведенные выше примеры работали хорошо, потому что аудиофайл достаточно чистый. В реальном мире, если у вас нет возможности предварительно обработать аудиофайлы, вы не можете ожидать, что звук будет бесшумным.
Влияние шума на распознавание речи
Шум - это факт жизни. Все аудиозаписи содержат некоторую степень шума, а необработанный шум может нарушить точность приложений для распознавания речи.
Чтобы понять, как шум может повлиять на распознавание речи, загрузите файл «jackhammer.wav» здесь. Как всегда, убедитесь, что вы сохранили это в рабочий каталог вашего сеанса интерпретатора.
В этом файле есть фраза «затхлый запах старого пива», произнесенная на фоне громкого отбойного молотка.
Что происходит, когда вы пытаетесь расшифровать этот файл?
>>> >>> отбойный молоток = sr.AudioFile('отбойный молоток.wav')
>>> с отбойным молотком в качестве источника:
... аудио = r.record(источник)
...
>>> r.recognize_google(аудио)
'запах улиток от старых продавцов снаряжения'
Прочь!
И как ты с этим справляешься? Одна вещь, которую вы можете попробовать, это использовать метод Adjust_for_ambient_noise()
класса Recognizer
.
>>> с отбойным молотком в качестве источника:
... r.adjust_for_ambient_noise (источник)
... аудио = r.record(источник)
...
>>> r.recognize_google(аудио)
"до сих пор пахнет старыми торговцами пивом"
Это немного приблизило вас к настоящей фразе, но она все еще не идеальна.Кроме того, в начале фразы отсутствует «the». Это почему?
Метод Adjust_for_ambient_noise()
считывает первую секунду файлового потока и калибрует распознаватель по уровню шума аудио. Следовательно, эта часть потока потребляется до того, как вы вызовете record()
для захвата данных.
Вы можете настроить период времени, который Adjust_for_ambient_noise()
использует для анализа, с помощью ключевого аргумента duration
.Этот аргумент принимает числовое значение в секундах и по умолчанию равен 1. Попробуйте уменьшить это значение до 0,5.
>>> с отбойным молотком в качестве источника:
... r.adjust_for_ambient_noise (источник, продолжительность = 0,5)
... аудио = r.record(источник)
...
>>> r.recognize_google(аудио)
«улитки пахнут, как старые торговцы пивом»
Что ж, вы получили "the" в начале фразы, но теперь у вас есть новые проблемы! Иногда невозможно удалить эффект шума — сигнал слишком шумный, чтобы с ним можно было успешно справиться.Именно так обстоит дело с этим файлом.
Если вы часто сталкиваетесь с этими проблемами, возможно, вам придется прибегнуть к некоторой предварительной обработке звука. Это можно сделать с помощью программного обеспечения для редактирования аудио или пакета Python (например, SciPy), который может применять фильтры к файлам. Подробное обсуждение этого выходит за рамки этого руководства — если вам интересно, ознакомьтесь с книгой Allen Downey Think DSP. На данный момент просто имейте в виду, что окружающий шум в аудиофайле может вызвать проблемы и должен быть устранен, чтобы максимизировать точность распознавания речи.
При работе с зашумленными файлами может быть полезно увидеть фактический ответ API. Большинство API возвращают строку JSON, содержащую множество возможных транскрипций. Метод cognition_google()
всегда будет возвращать наиболее вероятную транскрипцию , если вы не заставите его дать вам полный ответ.
Это можно сделать, установив для аргумента ключевого слова show_all
метода распознать_google()
значение True.
>>> р.распознать_google (аудио, show_all = True)
{'альтернатива': [
{'транскрипт': 'улитки пахнут, как старые торговцы пивом'},
{'транскрипт': 'неподвижный запах старых торговцев пивом'},
{'транскрипт': 'улитки пахнут старыми торговцами пивом'},
{'транскрипт': 'затхлый запах старых торговцев пивом'},
{'транскрипт': 'улитки пахнут старыми торговцами пивом'},
{'транскрипт': 'неприятный запах старых продавцов пива'},
{'транскрипт': 'до сих пор пахнет старыми торговцами пивом'},
{'транскрипт': 'запах бастилии старых торговцев пивом'},
{'транскрипт': 'до сих пор пахнет старыми пивоварами'},
{'транскрипт': 'неподвижный запах старых пивных лавок'},
{'расшифровка': 'все еще вонючие старые продавцы пива'},
{'транскрипт': 'затхлый запах старых торговцев пивом'},
{'транскрипт': 'неподвижный запах старого торговца пивом'}
], 'финал': Истина}
Как видите, распознавание_google()
возвращает словарь с ключом 'alternative'
, указывающим на список возможных расшифровок.Структура этого ответа может варьироваться от API к API и в основном полезна для отладки.
К настоящему моменту у вас есть довольно хорошее представление об основах пакета SpeechRecognition. Вы видели, как создать экземпляр AudioFile
из аудиофайла и использовать метод record()
для захвата данных из файла. Вы узнали, как записывать сегменты файла, используя смещение
и длительность
аргументы ключевого слова record()
, и вы испытали пагубное влияние шума на точность транскрипции.
А теперь самое интересное. Давайте перейдем от расшифровки статических аудиофайлов к интерактивности вашего проекта, принимая входные данные с микрофона.
Работа с микрофонами
Чтобы получить доступ к микрофону с помощью SpeechRecognizer, вам необходимо установить пакет PyAudio. Идите вперед и закройте текущий сеанс интерпретатора, и давайте сделаем это.
Установка PyAudio
Процесс установки PyAudio зависит от вашей операционной системы.
Дебиан Линукс
Если вы используете Linux на основе Debian (например, Ubuntu), вы можете установить PyAudio с apt
:
$ sudo apt-get установить python-pyaudio python3-pyaudio
После установки вам может понадобиться запустить pip install pyaudio
, особенно если вы работаете в виртуальной среде.
macOS
Для macOS сначала необходимо установить PortAudio с Homebrew, а затем установить PyAudio с pip
:
$ варить установить портаудио
$ pip установить pyaudio
Windows
В Windows вы можете установить PyAudio с pip
:
Проверка установки
После установки PyAudio вы можете протестировать установку из консоли.
$ python -m voice_recognition
Убедитесь, что ваш микрофон по умолчанию включен и включен. Если установка прошла успешно, вы должны увидеть что-то вроде этого:
Минуту молчания, пожалуйста...
Установите минимальный порог энергии на 600,4452854381937.
Скажите что-то!
Идите вперед и немного поиграйте с ним, говоря в микрофон и наблюдая, насколько хорошо SpeechRecognition расшифровывает вашу речь.Примечание: Если вы работаете в Ubuntu и получаете странный вывод, например «ALSA lib… Unknown PCM», обратитесь к этой странице за советами по подавлению этих сообщений.Эти выходные данные получены из пакета ALSA, установленного вместе с Ubuntu, а не из SpeechRecognition или PyAudio. На самом деле эти сообщения могут указывать на проблему с вашей конфигурацией ALSA, но, по моему опыту, они не влияют на функциональность вашего кода. В основном они неприятны.
Микрофон
Класс
Откройте другой сеанс интерпретатора и создайте экземпляр класса распознавателя.
>>> >>> импортировать voice_recognition как sr
>>> г = ср.Распознаватель()
Теперь вместо аудиофайла в качестве источника вы будете использовать системный микрофон по умолчанию. Вы можете получить к нему доступ, создав экземпляр класса Microphone
.
>>> mic = sr.Microphone()
Если в вашей системе нет микрофона по умолчанию (например, на Raspberry Pi) или вы хотите использовать микрофон, отличный от микрофона по умолчанию, вам нужно будет указать, какой из них использовать, указав индекс устройства. Вы можете получить список имен микрофонов, вызвав статический метод list_microphone_names()
класса Microphone
.
>>> sr.Microphone.list_microphone_names()
['HDA Intel PCH: аналог ALC272 (hw:0,0)',
'HDA Intel PCH: HDMI 0 (hw:0,3)',
'по умолчанию',
'фронт',
'объем40',
'объем51',
'объем71',
'HDMI',
'пульс',
'дмикс',
'дефолт']
Обратите внимание, что ваш вывод может отличаться от приведенного выше примера.
Индекс устройства микрофона — это индекс его имени в списке, возвращаемом функцией list_microphone_names().
Например, с учетом приведенного выше вывода, если вы хотите использовать микрофон с именем «передний», который имеет индекс 3 в списке, вы должны создать такой экземпляр микрофона:
>>> # Это просто пример; не беги
>>> микрофон = ср.Микрофон (device_index=3)
Однако для большинства проектов вы, вероятно, захотите использовать системный микрофон по умолчанию.
Использование
listen()
для захвата микрофонного входа Теперь, когда у вас есть экземпляр Microphone
, готовый к работе, пришло время записать некоторые данные.
Как и класс AudioFile
, Microphone
является менеджером контекста. Вы можете захватить ввод с микрофона, используя метод listen()
класса Recognizer
внутри блока with
.Этот метод принимает источник звука в качестве первого аргумента и записывает ввод от источника до тех пор, пока не будет обнаружена тишина.
>>> с микрофоном в качестве источника:
... аудио = r.listen(источник)
...
После того, как вы выполните блок с
, попробуйте сказать «привет» в микрофон. Подождите немного, пока приглашение интерпретатора не отобразится снова. Как только появится подсказка «>>>», вы готовы распознать речь.
>>> р.распознать_гугл(аудио)
'Привет'
Если подсказка никогда не появляется, ваш микрофон, скорее всего, улавливает слишком много окружающего шума. Вы можете прервать процесс с помощью Ctrl + C , чтобы вернуть подсказку.
Для обработки окружающего шума вам потребуется использовать метод Adjust_for_ambient_noise()
класса Recognizer
, точно так же, как вы делали это при попытке разобраться в шумном аудиофайле. Поскольку ввод с микрофона гораздо менее предсказуем, чем ввод из аудиофайла, рекомендуется делать это каждый раз, когда вы прослушиваете ввод с микрофона.
>>> с микрофоном в качестве источника:
... r.adjust_for_ambient_noise (источник)
... аудио = r.listen(источник)
...
После запуска приведенного выше кода подождите секунду, пока Adjust_for_ambient_noise()
сделает свое дело, затем попробуйте сказать «привет» в микрофон. Опять же, вам придется подождать некоторое время, пока не вернется приглашение переводчика, прежде чем пытаться распознать речь.
Напомним, что Adjust_for_ambient_noise()
анализирует источник звука в течение одной секунды.Если это кажется вам слишком длинным, вы можете изменить его с помощью аргумента ключевого слова duration
.
В документации SpeechRecognition рекомендуется использовать продолжительность не менее 0,5 секунды. В некоторых случаях вы можете обнаружить, что длительности больше, чем одна секунда по умолчанию, дают лучшие результаты. Минимальное необходимое значение зависит от окружающей среды микрофона. К сожалению, эта информация обычно неизвестна во время разработки. По моему опыту, длительности по умолчанию в одну секунду достаточно для большинства приложений.
Обработка нераспознаваемой речи
Попробуйте ввести предыдущий пример кода в интерпретатор и издать какие-то неразборчивые звуки в микрофон. В ответ вы должны получить что-то вроде этого:
Трассировка (последний последний вызов):
Файл "", строка 1, в
Файл "/home/david/real_python/speech_recognition_primer/venv/lib/python3.5/site-packages/speech_recognition/__init__.py", строка 858, в распознавании_google
если не isinstance(actual_result, dict) или len(actual_result.get("alternative", [])) == 0: поднять UnknownValueError()
speech_recognition.UnknownValueError
Звук, который не может быть сопоставлен с текстом с помощью API, вызывает исключение UnknownValueError
. Вы всегда должны оборачивать вызовы API блоками try
и , кроме блоков
, чтобы обработать это исключение.
Примечание : Возможно, вам придется приложить больше усилий, чем вы ожидаете, чтобы получить исключение. API очень усердно работает, чтобы транскрибировать любые вокальные звуки. Даже короткое ворчание было для меня расшифровано как слова вроде «как».Кашель, хлопки в ладоши и щелканье языком постоянно вызывают исключение.
Собираем все вместе: игра «Угадай слово»
Теперь, когда вы ознакомились с основами распознавания речи с помощью пакета SpeechRecognition, давайте воспользуемся вашими новыми знаниями и напишем небольшую игру, которая выбирает случайное слово из списка и дает пользователю три попытки угадать слово.
Вот полный скрипт:
случайный импорт
время импорта
импортировать speech_recognition как sr
defcognition_speech_from_mic(распознаватель,микрофон):
"""Транскрибируйте речь с записи с `микрофона`.Возвращает словарь с тремя ключами:
"success": логическое значение, указывающее, был ли запрос API
успешный
"error": `None`, если ошибки не произошло, в противном случае строка, содержащая
сообщение об ошибке, если API не может быть достигнут или
речь была неузнаваема
"транскрипция": `Нет`, если речь не может быть расшифрована,
в противном случае строка, содержащая расшифрованный текст
"""
# проверяем, что аргументы распознавателя и микрофона соответствуют типу
если не экземпляр(распознаватель, ср.Распознаватель):
поднять TypeError («`распознаватель` должен быть экземпляром `распознавателя`»)
если не экземпляр(микрофон, ср.микрофон):
поднять TypeError («`микрофон` должен быть экземпляром `Микрофон`»)
# настроить чувствительность распознавателя к окружающему шуму и записать звук
# с микрофона
с микрофоном в качестве источника:
распознаватель.adjust_for_ambient_noise (источник)
аудио = распознаватель.слушай(источник)
# настроить объект ответа
ответ = {
"успех": Правда,
"ошибка": Нет,
"транскрипция": нет
}
# попробуй распознать речь в записи
# если перехвачено исключение RequestError или UnknownValueError,
# соответствующим образом обновить объект ответа
пытаться:
ответ["транскрипция"] = распознаватель.распознать_гугл(аудио)
кроме sr.RequestError:
# API недоступен или не отвечает
ответ["успех"] = Ложь
ответ["ошибка"] = "API недоступен"
кроме sr.UnknownValueError:
# речь была неразборчива
response["error"] = "Не удалось распознать речь"
вернуть ответ
если __name__ == "__main__":
# установить список слов, максимальное количество догадок и лимит подсказок
СЛОВА = ["яблоко", "банан", "виноград", "апельсин", "манго", "лимон"]
NUM_GUESSES = 3
ПРОМТ_ЛИМИТ = 5
# создать экземпляры распознавателя и микрофона
распознаватель = ср.Распознаватель()
микрофон = ср.Микрофон()
# получить случайное слово из списка
слово = случайный.выбор(СЛОВА)
# отформатировать строку инструкций
инструкция =(
"Я думаю об одном из этих слов:\n"
"{слова}\n"
"У вас есть {n} попыток угадать, какой из них.\n"
).format(words=', '.join(WORDS), n=NUM_GUESSES)
# показать инструкции и подождать 3 секунды перед запуском игры
распечатать (инструкции)
время сна(3)
для i в диапазоне (NUM_GUESSES):
# получить предположение от пользователя
# если возвращается транскрипция, выйти из цикла и
# Продолжать
# если транскрипция не возвращена и запрос API не выполнен, прерываем
# зациклить и продолжить
# если запрос API прошел успешно, но транскрипция не была возвращена,
# повторно предложить пользователю высказать свою догадку еще раз.Сделай это
# до PROMPT_LIMIT раз
для j в диапазоне (PROMPT_LIMIT):
print('Угадай {}. Произнеси!'.format(i+1))
угадать = распознать_речь_из_микрофона (распознаватель, микрофон)
если угадать["транскрипция"]:
ломать
если не угадать["успех"]:
ломать
print("Я не расслышал. Что ты сказал?\n")
# если произошла ошибка, остановить игру
если предположить["ошибка"]:
print("ОШИБКА: {}".format(догадка["ошибка"]))
ломать
# показать пользователю транскрипцию
print("Вы сказали: {}".формат(угадай["транскрипция"]))
# определить правильность догадки и остались ли попытки
угадай_есть_правильно = угадай["транскрипция"].нижний() == слово.нижний()
user_has_more_attempts = я < NUM_GUESSES - 1
# определить, выиграл ли пользователь игру
# если нет, повторить цикл, если у пользователя есть еще попытки
# если попыток не осталось, пользователь проигрывает игру
если предположение_верно:
print("Верно! Вы выиграли!".format(word))
ломать
Элиф user_has_more_attempts:
печатать("Неверно.Попробуйте еще раз.\n")
еще:
print("Извините, вы проиграли!\nЯ думал о '{}'.".format(word))
ломать
Давайте немного разберемся.
Функция cognition_speech_from_mic()
принимает экземпляр Recognizer
и Microphone
в качестве аргументов и возвращает словарь с тремя ключами. Первый ключ, "success"
, является логическим значением, указывающим, был ли запрос API успешным. Второй ключ, «ошибка»
, — это либо None
, либо сообщение об ошибке, указывающее, что API недоступен или речь неразборчива.Наконец, ключ «транскрипция» содержит транскрипцию звука, записанного микрофоном.
Функция сначала проверяет, что аргументы распознавателя
и микрофона
имеют правильный тип, и вызывает TypeError
, если любой из них недействителен:
если не isinstance(recognizer, sr.Recognizer):
поднять TypeError («распознаватель» должен быть экземпляром «распознавателя»)
если не экземпляр(микрофон, ср.микрофон):
поднять TypeError («микрофон» должен быть экземпляром «Микрофон»)
Затем используется метод listen()
для записи микрофонного входа:
с микрофоном в качестве источника:
распознаватель.Adjust_for_ambient_noise (источник)
аудио = распознаватель.слушай(источник)
Метод Adjust_for_ambient_noise()
используется для калибровки распознавателя для изменения условий шума каждый раз, когда вызывается функция распознавать_речи_от_микрофона()
.
Затем вызывается распознавание_google()
для расшифровки любой речи в записи. Блок try...except
используется для перехвата исключений RequestError
и UnknownValueError
и соответствующей их обработки.Успех запроса API, любые сообщения об ошибках и расшифрованная речь сохраняются в ключах success
, error
и Transcription
словаря response
, который возвращается функцией cognition_speech_from_mic()
.
ответ = {
"успех": Правда,
"ошибка": Нет,
"транскрипция": нет
}
пытаться:
ответ["транскрипция"] = распознаватель.recognize_google(аудио)
кроме sr.RequestError:
# API недоступен или не отвечает
ответ["успех"] = Ложь
ответ["ошибка"] = "API недоступен"
кроме ср.НеизвестнаяВалуееррор:
# речь была неразборчива
response["error"] = "Не удалось распознать речь"
вернуть ответ
Вы можете протестировать функцию распознать_речь_из_микрофона()
, сохранив приведенный выше сценарий в файл с именем «guessing_game.py» и запустив в сеансе интерпретатора следующее:
>>> импортировать voice_recognition как sr
>>> из угадайки импортировать распознать_речь_из_микрофона
>>> r = sr.Recognizer()
>>> м = ср.Микрофон()
>>> распознать_речь_из_микрофона(р, м)
{'успех': Истина, 'ошибка': Нет, 'транскрипция': 'привет'}
>>> # Ваш вывод будет зависеть от того, что вы говорите
Сама игра довольно проста. Во-первых, объявляется список слов, максимально допустимое количество догадок и лимит подсказок:
. СЛОВА = ['яблоко', 'банан', 'виноград', 'апельсин', 'манго', 'лимон']
NUM_GUESSES = 3
ПРОМТ_ЛИМИТ = 5
Затем создается экземпляр Recognizer
и Microphone
и выбирается случайное слово из WORDS
:
распознаватель = ср.Распознаватель()
микрофон = ср.Микрофон()
слово = случайный.выбор(СЛОВА)
После печати некоторых инструкций и ожидания в течение 3 трех секунд используется цикл для
для управления каждой попыткой пользователя угадать выбранное слово. Первым делом в цикле for
является еще один цикл for
, который запрашивает у пользователя не более PROMPT_LIMIT
раз для предположения, каждый раз пытаясь распознать ввод с помощью функции cognition_speech_from_mic()
и сохраняя словарь, возвращенный в локальная переменная угадывает
.
Если "транскрипция"
ключ предположения
не равен None
, то речь пользователя была расшифрована, и внутренний цикл завершается break
. Если речь не была расшифрована и ключ "успех"
установлен на False
, то произошла ошибка API и цикл снова завершается с break
. В противном случае запрос API был выполнен успешно, но речь была неузнаваема. Пользователь получает предупреждение, и цикл для
повторяется, давая пользователю еще один шанс на текущую попытку.
для j в диапазоне (PROMPT_LIMIT):
print('Угадай {}. Произнеси!'.format(i+1))
угадать = распознать_речь_из_микрофона (распознаватель, микрофон)
если угадать["транскрипция"]:
ломать
если не угадать["успех"]:
ломать
print("Я не расслышал. Что ты сказал?\n")
После завершения внутреннего цикла for
словарь предположения
проверяется на наличие ошибок. Если это произошло, отображается сообщение об ошибке, и внешний цикл for
прерывается с помощью break
, что завершает выполнение программы.
если предположить['ошибка']:
print("ОШИБКА: {}".format(догадка["ошибка"]))
ломать
Если ошибок не было, транскрипция сравнивается со случайно выбранным словом. Метод lower()
для строковых объектов используется для обеспечения лучшего соответствия предположения выбранному слову. API может возвращать речь, соответствующую слову «яблоко», как «яблоко» или «яблоко», и любой ответ должен считаться правильным ответом.
Если предположение было правильным, пользователь выигрывает и игра прекращается.Если пользователь ошибся и у него остались попытки, внешний цикл for
повторяется и извлекается новое предположение. В противном случае пользователь проигрывает игру.
предположение_верно_правильно = предположение["транскрипция"].нижний() == слово.нижний()
user_has_more_attempts = я < NUM_GUESSES - 1
если предположение_верно:
print('Верно! Вы выиграли!'.format(word))
ломать
Элиф user_has_more_attempts:
print('Неверно. Попробуйте еще раз.\n')
еще:
print("Извините, вы проиграли!\nЯ думал о '{}'.".формат(слово))
ломать
При запуске вывод будет выглядеть примерно так:
Я думаю об одном из этих слов:
яблоко, банан, виноград, апельсин, манго, лимон
У вас есть 3 попытки угадать, какой из них.
Угадай 1. Говори!
Вы сказали: банан
Неправильно. Попробуй снова.
Угадай 2. Говори!
Вы сказали: лимон
Неправильно. Попробуй снова.
Угадай 3. Говори!
Вы сказали: Апельсин
Правильный! Ты победил!
Резюме и дополнительные ресурсы
В этом руководстве вы увидели, как установить пакет SpeechRecognition и использовать его класс Recognizer
, чтобы легко распознавать речь как из файла — с помощью record()
, так и из микрофонного ввода — с помощью listen().
Вы также видели, как обрабатывать сегменты аудиофайла, используя смещение
и длительность
ключевые аргументы метода record()
.
Вы увидели, как шум может влиять на точность транскрипции, и узнали, как настроить чувствительность экземпляра Recognizer
к окружающему шуму с помощью Adjust_for_ambient_noise().
Вы также узнали, какие исключения может вызывать экземпляр Recognizer
— RequestError
для неправильных запросов API и UnkownValueError
для неразборчивой речи — и как обрабатывать их с помощью try...кроме блоков
.
Распознавание речи — это глубокая тема, и то, что вы здесь узнали, едва касается поверхности. Если вы хотите узнать больше, вот несколько дополнительных ресурсов.
Дополнительные сведения о пакете распознавания речи:
.Несколько интересных интернет-ресурсов:
Несколько хороших книг по распознаванию речи:
- Голос в машине: создание компьютеров, понимающих речь, Pieraccini, MIT Press (2012).Доступная для широкой аудитории книга, охватывающая историю и современные достижения в области обработки речи.
- Основы распознавания речи, Рабинер и Хуанг, Прентис Холл (1993). Рабинер, исследователь из Bell Labs, сыграл важную роль в разработке некоторых из первых коммерчески жизнеспособных распознавателей речи. Этой книге уже более 20 лет, но многие основы остались прежними.
- Автоматическое распознавание речи: подход к глубокому обучению, Ю и Дэн, Спрингер (2014).Ю и Дэн — исследователи в Microsoft, оба активно работают в области обработки речи. Эта книга охватывает множество современных подходов и передовых исследований, но не для математически слабонервных.
Приложение: Распознавание речи на языках, отличных от английского
В этом руководстве мы распознавали речь на английском языке, который является языком по умолчанию для каждого метода распознавать_*()
пакета SpeechRecognition. Однако распознать речь на других языках вполне возможно, и сделать это довольно просто.
Чтобы распознавать речь на другом языке, задайте в качестве аргумента ключевого слова language
метода распознать_*()
строку, соответствующую нужному языку. Большинство методов принимают языковой тег BCP-47, например 'en-US'
для американского английского или 'fr-FR'
для французского. Например, следующее распознает французскую речь в аудиофайле:
импортировать voice_recognition как sr
г = ср.Распознаватель()
с помощью sr.AudioFile('путь/к/аудиофайлу.wav') в качестве источника:
аудио = r.record(источник)
r.recognize_google (аудио, язык = 'fr-FR')
Только следующие методы принимают аргумент ключевого слова языка
:
-
распознать_bing()
-
распознать_google()
-
распознать_google_cloud()
-
распознать_ibm()
-
распознать_сфинкс()
Чтобы узнать, какие языковые теги поддерживаются используемым вами API, обратитесь к соответствующей документации.Список тегов, принятых cognition_google()
, можно найти в этом ответе на переполнение стека.
Смотреть сейчас Это руководство содержит связанный с ним видеокурс, созданный командой Real Python. Посмотрите его вместе с письменным учебным пособием, чтобы углубить свое понимание: Распознавание речи с помощью Python
Преобразование речи в текст Онлайн-блокнот
Преобразование речи в текст Онлайн-блокнот
Профессиональный, точный текстовый редактор с распознаванием свободной речи
Не отвлекающее, быстрое и простое в использовании веб-приложение для диктовки и набора текста
НОВАЯ услуга: автотранскрибирование аудио- и видеофайлов
Мы запустили новую профессиональную услугу транскрипции для потребителей.Это означает, что теперь вы можете пользоваться этой услугой на VIP-условиях и по низкой цене 0,1 $/мин. Попробуйте наш новый сервис автоматической транскрипции здесь.
Speechnotes — это мощный онлайн-блокнот с поддержкой речи, предназначенный для воплощения ваших идей за счет реализации чистого и эффективного дизайна, чтобы вы могли сосредоточиться на своих мыслях.
Мы стремимся предоставить лучший онлайн-инструмент для диктовки, используя передовые технологии распознавания речи для получения наиболее точных результатов, которые технологии могут достичь сегодня, а также встроенные инструменты (автоматические или ручные) для повышения эффективности, производительности и комфорта пользователей. .
Работает полностью онлайн в браузере Chrome. Никакой загрузки, установки и даже регистрации не требуется, так что вы можете сразу приступить к работе.
Разработано, чтобы вдохновлять на творчество и держать вас в фокусе
Приложение Speechnotes специально разработано для того, чтобы вы не отвлекались.
Каждая заметка начинается с новой чистой белой бумаги, чтобы стимулировать ваш разум новым чистым началом. Все остальные элементы, кроме самого текста, исчезают из поля зрения, поэтому вы можете сконцентрироваться на самой важной части — собственном творчестве.
Кроме того, разговор вместо набора текста позволяет думать и говорить бегло, без перерыва, что опять же способствует творческому, ясному мышлению. Шрифты и цвета во всем приложении были разработаны, чтобы быть четкими и иметь отличные характеристики разборчивости.
Отзывы и отзывы пользователей (более 4,5 звезд!)
Мы совсем недавно были в эфире, но уже были представлены в «ProductHunt» и других международных технических журналах. Но больше всего мы гордимся отзывами наших пользователей.Speechnotes — приложение для распознавания речи с самым высоким рейтингом в магазине Chrome, рейтинг которого превышает 4,5 звезды! Намного выше других онлайн-альтернатив. Вот некоторые отзывы пользователей, которые мы получили в магазине Chrome:
«Я хотел бы сказать, что я очень доволен этим плагином для диктовки. Он лучше и намного точнее, чем два других, которые я пробовал. Это определенно мое любимое приложение для диктовки.
Фактически, я написал этот обзор с помощью приложения.
Недурно разработчикам!!"
"Он делает то, что написано на банке...& более. Бесценный.
Тони Хоуз. Чья вера была восстановлена в приложениях этим».
... И еще много чего. Прочтите их все в магазине Chrome
.Большое спасибо, ребята! Ваши отзывы дают нам большую мотивацию продолжать разработку отличных решений
Бесплатная альтернатива естественно говорящему дракону
Speechnotes полностью бесплатен и по своей точности сравним с Dragon Natural Speaking. Многие из вас говорили нам, что в некоторых отношениях он даже превосходит Dragon.Однако следует отметить, что Speechnotes является альтернативой Dragon только для целей диктовки, а не для голосового управления другим программным обеспечением и не для голосового набора в другом программном обеспечении. У Дракона есть эти дополнительные возможности. Однако, если вам нужно надиктовать статью, вы найдете Speechnotes не только дешевле, но, возможно, даже лучше для вас.
Функции, созданные для повышения производительности и эффективности как голосового набора, так и обычного набора клавиш
Для многих из нас набор клавиш занимает много времени и занимает много времени.Speechnotes позволяет печатать со скоростью речи (медленная и четкая речь).
Speechnotes позволяет плавно перейти от голосового набора (диктовки) к набору текста с клавиатуры. Таким образом, вы можете диктовать, когда это удобно, и печатать, когда это более уместно. Вы также можете сразу диктовать и редактировать свои текстовые результаты и продолжать диктовать. Нет необходимости переключаться между режимами приложения или даже останавливать диктовку.
Вставка знаков препинания с помощью речи (голосовые команды) или одним щелчком мыши.
Другие функции, созданные для повышения производительности при наборе текста обоими типами:
Автоматическое сохранение, которое сохраняет документ в режиме реального времени при любых изменениях, поэтому вам никогда не придется беспокоиться об этом.
Экспорт на Google Диск (сохранение в облаке) или загрузка в виде документа на компьютер.
Один щелчок, чтобы отправить по электронной почте или распечатать заметку.
Автоматический умный ввод заглавных букв в начале предложений.
Не требуется вход в систему, регистрация, установка или загрузка. Работает "прямо из коробки". Итак, где хранятся все автоматически сохраненные заметки? Speechnotes сохраняет все ваши данные на вашем компьютере через ваш браузер. Преимущество в том, что вам не нужно входить в систему.Недостатком является то, что вы не можете получить доступ к этим документам с других компьютеров. Для этого Speechnotes позволяет экспортировать на Google Диск. Еще один небольшой недостаток заключается в том, что после большого количества заметок у вас может закончиться место для хранения, поэтому рекомендуется время от времени удалять ненужные старые заметки.
Неограниченное использование бесплатно.
Передовые технологии
Speechnotes основан на передовых механизмах распознавания речи Google. По сути, вся ваша речь отправляется в Google, там она интерпретируется с помощью мощных параллельных серверов и алгоритмов и отправляется обратно в Speechnotes в виде потока возможных результатов транскрипции.При правильной обработке этих результатов и наборе команд для механизмов преобразования речи в текст мы можем добиться результатов, которые не уступают по точности даже по сравнению с самым профессиональным и дорогим программным обеспечением, доступным на рынке. Добавьте к этому вставку знаков препинания при нажатии и голосовые команды, а также интеллектуальный ввод заглавных букв, и вы получите одно из самых продвинутых приложений.
В количественном отношении следует ожидать уровень точности выше 90 %.
Преимущества голосового набора для здоровья
Сидение перед компьютером в целом может привести к различным типам связанных с компьютером травм от повторяющихся перегрузок (RSI).Чтобы избежать их, лучше всего не сидеть перед компьютером в течение длительного периода времени. Но, если вам нужно, вы должны уделять особое внимание своей осанке. Подробнее об этом можно прочитать здесь (http://rsi.unl.edu/). Голосовой набор — один из основных рекомендуемых способов минимизировать эти риски, так как он позволяет удобно сесть, полностью освобождая руки, кисти, плечи и спину. Вы можете вернуться к вводу после того, как закончите диктовку для исправлений и редактирования.
Инструкции и советы
Подготовка к работе:
Подключите к компьютеру высококачественный микрофон (если у вас есть встроенный микрофон, этого может быть достаточно).
Операция:
1) Нажмите микрофон
2) Только в первый раз: в вашем браузере появится всплывающее окно с запросом на то, чтобы вы разрешили сайту слушать ваш микрофон. Нажмите «Разрешить».
3) Начните диктовать. Говори медленно и четко. Расставьте слова и подчеркните правильную дикцию для достижения лучших результатов.
4) Промежуточные результаты будут отображаться в буфере. Существует 3 способа финализации и переноса результатов транскрипции из буфера в сам текстовый редактор:
(a) Нажмите клавишу «Ввод» на клавиатуре.
(b) Произнесите или нажмите на знак препинания
(c) Подождите
Поиск и устранение неисправностей:
Наиболее распространенными причинами сбоев являются:
1) Аппаратная проблема с микрофоном
2) Браузер, а не Chrome
3) Разрешение на прослушивание не предоставлено
4) Chrome слушает не тот микрофон
Чтобы исправить последние 2 проблемы, вы должны нажать на маленькую иконку камеры в адресной строке браузера (появится после того, как вы нажмете на микрофон), установить разрешение Разрешить речевые заметки и выбрать правильный микрофон из выпадающего списка.
Кому могут быть полезны Speechnotes?
Любому, кто устал от обычного набора текста, могут пригодиться Speechnotes. Это также может быть полезно специально для людей с трудностями при наборе текста. Такие трудности могут быть вызваны физическим состоянием или просто неспособностью освоить технику набора текста на клавиатуре в достаточно раннем возрасте.
Кроме того, люди, которые много печатают в силу своей профессии или хобби, могут найти Speechnotes очень полезным, поскольку долгий набор текста на клавиатуре может быть очень утомительным и даже иметь медицинские последствия в качестве побочных эффектов.Излишне говорить, что транскрибаторы (от студентов до профессионалов) найдут Speechnotes очень полезным, поскольку они могут прослушать запись и повторить речь в микрофон, чтобы Speechnotes расшифровал ее для них.
Совместимость и системные требования
Speechnotes — действительно широкоплатформенное приложение. Пока вы запускаете его через браузер Chrome, он будет работать. Нет необходимости в установке, дисковом пространстве или высокопроизводительных компьютерах. Он будет работать без сбоев на вашем ПК, настольном компьютере, ноутбуке и Chromebook.Вы можете попробовать его на своих планшетах и телефонах, но на некоторых устройствах могут возникнуть проблемы.
Конфиденциальность
Мы в Speechnotes, Speechlogger, TextHear, Speechkeys ценим вашу конфиденциальность, и поэтому мы не храним ничего, что вы говорите или печатаете, или фактически любые другие данные о вас. Мы не передаем его третьим сторонам, кроме Google для механизма преобразования речи в текст. Ваша речь отправляется из приложения на вашем устройстве напрямую в механизмы преобразования речи в текст Google для транскрипции, даже не проходя через наши серверы.Обратите внимание, что могут применяться политики конфиденциальности Google.
На наших веб-сайтах мы используем файлы cookie — данные, хранящиеся на вашем собственном компьютере — так мы можем, например, сохранить ваш предыдущий сеанс. Мы используем его только для того, что нам нужно для продукта. Кроме того, мы размещаем объявления Google AdSense и используем Google Analytics. Они также используют файлы cookie для показа рекламы на основе предыдущих посещений пользователем вашего веб-сайта или других веб-сайтов. Использование Google рекламных файлов cookie позволяет ему и его партнерам показывать рекламу нашим пользователям на основе их посещения наших сайтов и/или других сайтов в Интернете.Пользователи могут отказаться от персонализированной рекламы, посетив Настройки рекламы. Кроме того, пользователи могут отказаться от использования файлов cookie сторонними поставщиками для персонализированной рекламы, посетив сайт www.aboutads.info.
Дополнительный Google OAuth — для загрузки файлов на Google Диск
Если вы хотите загружать файлы на Google Диск напрямую из Speechnotes, мы запросим ваше разрешение на это. Мы будем использовать это разрешение только для этой цели — синхронизировать ваши речевые заметки с вашим Google Диском по вашему запросу.
Условия
Как бы мы ни старались, результаты речи могут быть неточными. Кроме того, Speechnotes предоставляется как услуга «КАК ЕСТЬ», и мы не можем гарантировать, что она будет продолжаться и в будущем. По этой причине, а также из-за небольшой вероятности сбоя программного обеспечения, мы предлагаем вам экспортировать важные тексты либо на Google Диск, либо на ваш компьютер, чтобы защититься от неожиданной потери данных. Мы не несем ответственности за потерю или неточность данных.
Мы ценим ваши отзывы и поддержку
Speechnotes был разработан в 2015 году командами Speechlogger и TTSReader, чтобы помочь людям во всем мире печатать свои мысли, истории и заметки более простым и удобным способом.Вот почему Speechnotes бесплатен и доступен онлайн для всех. Потребность в таком программном инструменте привлекла наше внимание из
электронные письма с отзывами, которые мы получили от наших пользователей. Если у вас есть отзывы, идеи или пожелания, пожалуйста, свяжитесь с нами, мы будем более чем рады услышать от вас.
Если вам нравятся Speechnotes, поддержите нас, оценив нас в магазине Chrome,
делиться с друзьями или упоминать нас в своих сообщениях и блогах. Ваши друзья и подписчики тоже оценят это. Вы также можете внести свой вклад небольшим пожертвованием («купи мне кофе»).
Что такое программное обеспечение для распознавания речи?
Что такое программное обеспечение для распознавания речи?
Программное обеспечение для распознавания речи— это компьютерная программа, обученная воспринимать входную человеческую речь, интерпретировать ее и преобразовывать в текст.
Как это работает?
Программное обеспечение для распознавания речи работает, разбивая звук записи речи на отдельные звуки, анализируя каждый звук, используя алгоритмы для поиска наиболее вероятного слова, подходящего для этого языка, и транскрибируя эти звуки в текст.
Программное обеспечение для распознавания речи использует обработку естественного языка (NLP) и нейронные сети глубокого обучения. «НЛП — это способ для компьютеров анализировать, понимать и извлекать смысл из человеческого языка умным и полезным способом», — говорится в блоге Algorithma. Это означает, что программное обеспечение разбивает речь на биты, которые оно может интерпретировать, преобразует ее в цифровой формат и анализирует фрагменты контента.
Оттуда программа делает выводы на основе программирования и речевых моделей, выдвигая гипотезы о том, что на самом деле говорит пользователь.После определения того, что, скорее всего, сказали пользователи, программа преобразует разговор в текст.
Все это звучит достаточно просто, но достижения в области технологий означают, что эти многочисленные сложные процессы происходят с молниеносной скоростью. Машины могут расшифровывать человеческую речь более точно, правильно и быстро, чем люди.
История программного обеспечения для распознавания речи и искусственного интеллекта
Технология распознавания голоса и транскрипции прошла долгий путь с момента своего появления.Теперь мы используем технологию распознавания голоса в нашей повседневной жизни, голосовой поиск становится все более популярным, все больше людей используют таких помощников, как Google Home, Siri и Amazon Alexa.
Недавно мы написали блог об истории технологии распознавания речи — с начала 1900-х до наших дней.
Каковы потенциальные переменные в программном обеспечении для распознавания речи?
«Правильность и точность — две разные вещи, — говорит Адам Хофман, менеджер по продукции CallRail. Согласно конспектам лекций по курсам информатики, разница заключается в том, что правильность означает «абсолютно безошибочный», а точный означает «правильный во всех деталях» и «способный или успешный в достижении намеченной цели».
При распознавании речи это означает, что хотя транскрипция может быть не на 100 % правильной (некоторые слова, имена или детали могут быть расшифрованы неправильно), пользователь понимает общую идею расшифрованного фрагмента речи. То есть это не просто набор случайных слов, а целостная концепция, которая может быть интерпретирована из текста в целом.
Однако нет двух одинаковых людей, и поэтому необходимо учитывать особенности речи и другие отклонения.Такие аномалии, как акценты (даже те, которые говорят на английском как на родном языке), могут привести к тому, что программное обеспечение для распознавания речи пропустит определенные аспекты разговоров. То, как говорящие произносят, а не бормочут, скорость, с которой они говорят, и даже колебания громкости голоса говорящего могут поставить технологию распознавания речи в тупик.
Тем не менее, большинство современных технологий распознавания речи работают вместе с платформами машинного обучения. Следовательно, по мере того, как пользователь продолжает использовать технологию, программное обеспечение изучает речевые паттерны и вариации этого конкретного человека и соответствующим образом настраивается.По сути, это учит пользователя. Технология распознавания голоса CallRail используется в функциях Conversation Intelligence, таких как CallScore, правила автоматизации и транскрипции.
Каковы преимущества использования программного обеспечения для распознавания речи?
Хотя технологии распознавания речи не соответствуют полноценному человеческому интеллекту, использование этой технологии дает много преимуществ, особенно в бизнес-приложениях. Короче говоря, программное обеспечение для распознавания речи помогает компаниям экономить время и деньги, автоматизируя бизнес-процессы и предоставляя мгновенную информацию о том, что происходит в их телефонных звонках.
Поскольку программное обеспечение выполняет задачи по распознаванию и транскрипции речи быстрее и точнее, чем человек, это означает, что оно более рентабельно, чем привлечение человека для выполнения той же работы. Это также может быть утомительной работой для человека со скоростью, с которой многие предприятия нуждаются в оказании услуги.
Программное обеспечение для распознавания и расшифровки речи стоит меньше в минуту, оно более точно, чем человек, работающий с той же скоростью, и никогда не надоедает работа.
Как он используется для отслеживания вызовов?
Многие предприятия во всех отраслях промышленности используют технологию распознавания речи в своем программном обеспечении для отслеживания вызовов CallRail.Conversation Intelligence включает в себя такие функции, как Transcriptions CallRail, которые расшифровывают звук телефонных звонков, включая расшифровку между агентом и клиентом, CallScore, который использует Transcriptions для автоматической маркировки звонков как потенциальных или не потенциальных, и правила автоматизации, которые помечают звонки на основе ключевых слов, сказанных агентом. или клиент.
Помимо основного использования, записи звонков можно использовать для исследования ключевых слов для SEO и платного SEM. Записи звонков также можно анализировать для получения данных, чтобы улучшить процесс продаж или поддержки.Компании также могут использовать записи звонков, чтобы улучшить качество обслуживания клиентов в целом — в Интернете, по телефону и после продажи.
SpeechRecognition · PyPI
Библиотека для распознавания речи с поддержкой нескольких механизмов и API, онлайн и офлайн.
Быстрый старт: pip install SpeechRecognition. Подробности смотрите в разделе «Установка».
Чтобы быстро попробовать, запустите python -m speech_recognition после установки.
Требования
Для использования всего функционала библиотеки необходимо иметь:
- Python 2.6, 2.7 или 3.3+ (обязательно)
- PyAudio 0.2.11+ (требуется, только если вам нужно использовать микрофонный вход, микрофон)
- PocketSphinx (требуется, только если вам нужно использовать распознаватель Sphinx, распознаватель_экземпляра.recognize_sphinx)
- Клиентская библиотека Google API для Python (требуется, только если вам нужно использовать Google Cloud Speech API, распознаватель_экземпляра.распознать_google_cloud)
- Кодер FLAC (требуется, только если система не на базе x86 Windows/Linux/OS X)
Следующие требования являются необязательными, но в некоторых ситуациях могут улучшить или расширить функциональность:
- В Python 2 и только в Python 2 некоторые функции (например, распознавание_экземпляра.
- При использовании CMU Sphinx может потребоваться установить дополнительные языковые пакеты для поддержки таких языков, как международный французский или китайский.
В следующих разделах подробно рассматривается каждое требование.
PyAudio (для пользователей микрофона)
PyAudio требуется тогда и только тогда, когда вы хотите использовать микрофонный вход (Microphone). Требуется PyAudio версии 0.2.11+, так как в более ранних версиях были известные ошибки управления памятью при записи с микрофонов в определенных ситуациях.
Если не установлено, все в библиотеке будет по-прежнему работать, за исключением того, что попытка создать экземпляр объекта Microphone вызовет AttributeError.
Инструкции по установке на сайте PyAudio неплохие — для удобства они сведены ниже:
- В Windows установите PyAudio с помощью Pip: выполните pip install pyaudio в терминале.
- В дистрибутивах Linux, производных от Debian (таких как Ubuntu и Mint), установите PyAudio с помощью APT: выполните команду sudo apt-get install python-pyaudio python3-pyaudio в терминале.
- Если версия в репозиториях слишком старая, установите последнюю версию с помощью Pip: выполните sudo apt-get install portaudio19-dev python-all-dev python3-all-dev && sudo pip install pyaudio (замените pip на pip3, если с использованием Python 3).
- В OS X установите PortAudio с помощью Homebrew: brew install portaudio. Затем установите PyAudio с помощью Pip: pip install pyaudio.
- В других системах на основе POSIX установите пакеты portaudio19-dev и python-all-dev (или python3-all-dev при использовании Python 3) (или их ближайшие эквиваленты) с помощью диспетчера пакетов по вашему выбору, а затем установите PyAudio используя Pip: pip install pyaudio (замените pip на pip3, если используете Python 3).
Пакеты колес PyAudio для распространенных 64-разрядных версий Python для Windows и Linux включены для удобства в каталог Third-Party/ в корне репозитория.Для установки просто запустите pip install wheel, а затем pip install ./first-party/WHEEL_FILENAME (замените pip на pip3, если используете Python 3) в корневом каталоге репозитория.
PocketSphinx-Python (для пользователей Sphinx)
PocketSphinx-Python требуется тогда и только тогда, когда вы хотите использовать распознаватель Sphinx (recognizer_instance.recognize_sphinx).
Пакеты колес PocketSphinx-Python для 64-разрядных версий Python 2.7, 3.4 и 3.5 для Windows включены для удобства в каталог Third-Party/.Для установки просто запустите pip install wheel, а затем pip install ./first-party/WHEEL_FILENAME (замените pip на pip3, если используете Python 3) в папке SpeechRecognition.
В Linux и других системах POSIX (таких как OS X) следуйте инструкциям в разделе «Сборка PocketSphinx-Python из исходного кода» в Примечаниях по использованию PocketSphinx для получения инструкций по установке.
Обратите внимание, что версии, доступные в большинстве репозиториев пакетов, устарели и не будут работать со связанными языковыми данными.Рекомендуется использовать комплектные пакеты колес или сборку из исходного кода.
См. Примечания по использованию PocketSphinx для получения информации об установке языков, компиляции PocketSphinx и создании языковых пакетов из онлайн-ресурсов. Этот документ также включен в файл reference/pocketsphinx.rst.
Клиентская библиотека Google API для Python (для пользователей Google Cloud Speech API)
Клиентская библиотека Google API для Python требуется тогда и только тогда, когда вы хотите использовать Google Cloud Speech API (recognizer_instance.распознать_google_cloud).
Если не установлено, все в библиотеке будет по-прежнему работать, за исключением того, что вызов cognizer_instance.recognize_google_cloud вызовет RequestError.
Согласно официальным инструкциям по установке, рекомендуемый способ установки — с помощью Pip: выполните pip install google-api-python-client (замените pip на pip3, если используете Python 3).
Кроме того, вы можете выполнить установку полностью в автономном режиме из исходных архивов под расширением ./ Third-Party/Исходный код клиентской библиотеки Google API для Python и ее зависимостей/ каталог.
FLAC (для некоторых систем)
Кодер FLAC требуется для кодирования аудиоданных для отправки в API. Если вы используете Windows (x86 или x86-64), OS X (только Intel Mac, OS X 10.6 или выше) или Linux (x86 или x86-64), это уже в комплекте с этой библиотекой - вам не нужно устанавливать ничего .
В противном случае убедитесь, что у вас есть инструмент командной строки flac, который часто доступен через системный менеджер пакетов.Например, обычно это будет sudo apt-get install flac в производных от Debian или brew install flac в OS X с Homebrew.
Monotonic для Python 2 (для более быстрых операций в некоторых функциях на Python 2)
В Python 2 и только в Python 2, если вы не установите библиотеку Monotonic для Python 2, некоторые функции будут работать медленнее, чем могли бы в противном случае (хотя все по-прежнему будет работать правильно).
В Python 3 функциональность этой библиотеки встроена в стандартную библиотеку Python, что делает ее ненужной.
Это связано с тем, что монотонное время необходимо для правильной обработки истечения срока действия кэша перед лицом изменений системного времени и других проблем, связанных со временем. Если функциональность монотонного времени недоступна, такие вещи, как запросы маркеров доступа, не будут кэшироваться.
Для установки используйте Pip: выполните pip install monotonic в терминале.
Поиск и устранение неисправностей
Распознаватель пытается распознать речь, даже когда я не говорю или после того, как я закончил говорить.
Попробуйте увеличить распознаватель_экземпляр.свойство energy_threshold. По сути, это то, насколько чувствителен распознаватель к тому, когда должно начинаться распознавание. Более высокие значения означают, что он будет менее чувствительным, что полезно, если вы находитесь в шумной комнате.
Это значение полностью зависит от вашего микрофона или аудиоданных. Универсального значения не существует, но хорошие значения обычно находятся в диапазоне от 50 до 4000.
Также проверьте настройки громкости микрофона. Если он слишком чувствителен, микрофон может улавливать много окружающего шума.Если он слишком нечувствителен, микрофон может воспринимать речь как просто шум.
Распознаватель не может распознать речь сразу после первого прослушивания.
Вероятно, для свойства распознавателя_экземпляра.энергии_порога задано значение, которое слишком велико для начала, а затем оно автоматически снижается путем динамической настройки порога энергии. Прежде чем он будет на хорошем уровне, энергетический порог настолько высок, что речь просто считается фоновым шумом.
Решение состоит в том, чтобы уменьшить это пороговое значение или заранее вызвать распознаватель_экземпляра.adjust_for_ambient_noise, который автоматически установит пороговое значение в хорошее значение.
Распознаватель не понимает мой конкретный язык/диалект.
Попробуйте установить язык распознавания на свой язык/диалект. Для этого см. документацию по распознавателям_instance.recognize_sphinx, распознавателя_экземпляра.распознавание_bing, распознавание_экземпляра.recognize_api, распознавание_экземпляра.recognize_houndify и распознавание_экземпляра.recognize_ibm.
Например, если ваш язык/диалект — британский английский, лучше использовать в качестве языка «en-GB», а не «en-US».
Распознаватель зависает на распознавателе_instance.listen; в частности, когда он вызывает Microphone.MicrophoneStream.read.
Обычно это происходит, когда вы используете плату Raspberry Pi, которая сама по себе не имеет возможности ввода звука.Это приводит к тому, что микрофон по умолчанию, используемый PyAudio, просто блокируется, когда мы пытаемся его прочитать. Если вы используете Raspberry Pi, вам понадобится звуковая карта USB (или микрофон USB).
После этого измените все экземпляры Microphone() на Microphone(device_index=MICROPHONE_INDEX), где MICROPHONE_INDEX — аппаратный индекс микрофона.
Чтобы выяснить, каким должно быть значение MICROPHONE_INDEX, запустите следующий код:
импортировать voice_recognition как sr для индекса, имя в перечислении (sr.Microphone.list_microphone_names()): print("Микрофон с именем \"{1}\" найден для `Microphone(device_index={0})`".format(index, name))
Будет напечатано что-то вроде следующего:
Микрофон с именем "HDA Intel HDMI: 0 (hw:0,3)" найден для `Microphone(device_index=0)` Микрофон с именем "HDA Intel HDMI: 1 (hw:0,7)" найден для `Microphone(device_index=1)` Микрофон с именем "HDA Intel HDMI: 2 (hw:0,8)" найден для `Microphone(device_index=2)` Микрофон с именем "Blue Snowball: USB Audio (hw:1,0)" найден для `Microphone(device_index=3)` Микрофон с именем "hdmi" найден для `Microphone(device_index=4)` Микрофон с именем "pulse" найден для `Microphone(device_index=5)` Микрофон с именем "по умолчанию" найден для `Microphone(device_index=6)`
Теперь, чтобы использовать микрофон Snowball, вы должны изменить Microphone() на Microphone(device_index=3).
При вызове Microphone() выдается ошибка IOError: нет доступного устройства ввода по умолчанию.
Как говорит ошибка, программа не знает, какой микрофон использовать.
Чтобы продолжить, либо используйте Microphone(device_index=MICROPHONE_INDEX, ...) вместо Microphone(...), либо установите микрофон по умолчанию в вашей ОС. Вы можете получить возможные значения MICROPHONE_INDEX, используя код в записи об устранении неполадок прямо над этой записью.
Примеры кода вызывают ошибку UnicodeEncodeError: кодек 'ascii' не может кодировать символ при запуске.
Если вы используете Python 2, и ваш язык использует символы, отличные от ASCII, а терминал или файловый объект, в который вы печатаете, поддерживает только ASCII, возникает ошибка при попытке написать символы, отличные от ASCII.
Это связано с тем, что в Python 2 распознавание_экземпляра.распознавание_ibm возвращает строки юникода ("что-то"), а не строки байтов ("что-то"). В Python 3 все строки являются строками Unicode.
Чтобы печать строк Unicode работала и в Python 2, замените все операторы печати в коде на следующий вид:
печать SOME_UNICODE_STRING
Со следующим:
печать SOME_UNICODE_STRING.encode("utf8")
Однако это изменение не позволит коду работать в Python 3.
Программа не запускается при компиляции с помощью PyInstaller.
Начиная с PyInstaller версии 3.0, SpeechRecognition поддерживается по умолчанию. Если у вас возникают странные проблемы при компиляции программы с помощью PyInstaller, просто обновите PyInstaller.
Вы можете легко сделать это, запустив pip install --upgrade pyinstaller.
В Ubuntu/Debian я получаю раздражающий вывод в терминале, говорящий что-то вроде «bt_audio_service_open: […] Отказано в соединении» и другие.
Ошибка «bt_audio_service_open» означает, что у вас есть аудиоустройство Bluetooth, но поскольку физическое устройство в данный момент не подключено, мы не можем его использовать — если вы не используете микрофон Bluetooth, то это можно смело игнорировать. Если да, а звук не работает, дважды проверьте, действительно ли микрофон подключен. Кажется, нет простого способа отключить эти сообщения.
Об ошибках вида «ALSA lib […] Unknown PCM» см. этот ответ StackOverflow.По сути, чтобы избавиться от ошибки вида «Неизвестные PCM-карты.pcm.rear», просто закомментируйте pcm.rearcards.pcm.rear в /usr/share/alsa/alsa.conf, ~/.asoundrc и /etc/asound.conf.
Для «сервер jack не работает или не может быть запущен» или «вызов connect(2) к /dev/shm/jack-1000/default/jack_0 не удался (ошибка=Нет такого файла или каталога)» или «попытка подключения к server failed», они вызваны тем, что ALSA пытается подключиться к JACK, и их можно безопасно игнорировать. В настоящее время я не знаю какого-либо простого способа отключить эти сообщения, кроме [полного отключения печати при включении микрофона] (https://github.com/Uberi/speech_recognition/issues/182#issuecomment-266256337).
В OS X я получаю сообщение ChildProcessError о том, что не может найти системный преобразователь FLAC, хотя он и установлен.
Установка FLAC для OS X напрямую из исходного кода не сработает, так как неправильно добавляет исполняемые файлы в путь поиска.
Установка FLAC с помощью Homebrew гарантирует правильное обновление пути поиска. Сначала убедитесь, что у вас установлен Homebrew, затем запустите brew install flac, чтобы установить необходимые файлы.
Разработка
Чтобы взломать эту библиотеку, сначала убедитесь, что у вас выполнены все требования, перечисленные в разделе «Требования».
- Большая часть кода библиотеки находится в файле speech_recognition/__init__.py.
- Примеры находятся в каталоге examples/, а демонстрационный сценарий находится в файле speech_recognition/__main__.py.
- Двоичные файлы кодировщика FLAC находятся в каталоге speech_recognition/.
- Документацию можно найти в каталоге reference/.
- Сторонние библиотеки, утилиты и справочные материалы находятся в папке Third-Party/.
Чтобы установить/переустановить библиотеку локально, запустите python setup.py install в корневом каталоге проекта.
Перед выпуском номер версии увеличивается в README.rst и speech_recognition/__init__.py. Затем создаются теги версий с помощью git config gpg.program gpg2 && git config user.signingkey DB45F6C431DE7C2DCD99FF72258A4063489 && git tag -s VERSION_GOES_HERE -m "Версия VERSION_GOES_HERE".
Релизы выполняются путем запуска make-release.sh VERSION_GOES_HERE для сборки исходных пакетов Python, их подписи и загрузки в PyPI.
Тестирование
Для запуска всех тестов:
python -m unittest обнаружить --verbose
Тестирование также выполняется TravisCI автоматически при каждом нажатии. Чтобы настроить среду для автономного/локального тестирования, подобного Travis, в системе, подобной Debian:
sudo docker run --volume "$(pwd):/speech_recognition" --interactive --tty quay.io/travisci/travis-python: последний /bin/bash Су - Трэвис && cd /speech_recognition sudo apt-get update && sudo apt-get install swig libpulse-dev pip install --user pocketsphinx monotonic && pip install --user flake8 rstcheck && pip install --user -e . python -m unittest discovery --verbose # запустить модульные тесты python -m flake8 --ignore=E501,E701 примеры тестов распознавания речи setup.py # игнорировать ошибки для длинных строк и строк с несколькими операторами python -m rstcheck README.первая ссылка/*.rst # убедиться, что RST правильно сформирован
Исполняемые файлы FLAC
Прилагаемый исполняемый файл flac-win32 является официальным двоичным файлом FLAC 1.3.2 для 32-разрядной версии Windows.
Прилагаемые исполняемые файлы flac-linux-x86 и flac-linux-x86_64 созданы из исходного кода FLAC 1.3.2 с помощью Manylinux, чтобы гарантировать его совместимость с широким спектром дистрибутивов.
Созданные исполняемые файлы FLAC должны быть воспроизводимы побитно. Чтобы перестроить их, запустите в каталоге проекта в системе, подобной Debian, следующее:
# скачать и извлечь исходный код FLAC компакт-диск сторонний sudo apt-get install --yes докер.ио # соберите FLAC внутри образа Manylinux i686 Docker tar xf flac-1.3.2.tar.xz sudo docker run --tty --interactive --rm --volume "$(pwd):/root" quay.io/pypa/manylinux1_i686:последний bash компакт-диск /root/flac-1.3.2 ./configure LDFLAGS=-static # флаги компилятора для создания статической сборки сделать выход cp flac-1.3.2/src/flac/flac ../speech_recognition/flac-linux-x86 && sudo rm -rf flac-1.3.2/ # соберите FLAC внутри образа Manylinux x86_64 Docker tar xf flac-1.3.2.tar.xz sudo docker run --tty --interactive --rm --volume "$(pwd):/root" набережная.io/pypa/manylinux1_x86_64:последний баш компакт-диск /root/flac-1.3.2 ./configure LDFLAGS=-static # флаги компилятора для создания статической сборки сделать выход cp flac-1.3.2/src/flac/flac ../speech_recognition/flac-linux-x86_64 && sudo rm -r flac-1.3.2/
Включенный исполняемый файл flac-mac извлечен из xACT 2.39, который представляет собой интерфейс для FLAC 1.3.2, который удобно включает двоичные файлы для всех своих кодировщиков. В частности, это копия xACT 2.39/xACT.app/Contents/Resources/flac в xACT2.39.zip.
Авторы
Убери(Энтони Чжан) бобсайшилол arvindch (Арвинд Чембарпу) kevinismith (Кевин Смит) haas85 DelightRun индивидуалист kamushadenes (Камус Хаденес) sbraden (Сара Брейден) tb0hdan (Богдан Туркиневич) Тайникс (Стив Догерти) биди <бродерик[email protected]> (Бродерик Карлин)
Пожалуйста, сообщайте об ошибках и предложениях в системе отслеживания ошибок!
Как цитировать эту библиотеку (стиль APA):
Чжан, А. (2017). Распознавание речи (версия 3.8) [программное обеспечение]. Доступно на https://github.com/Uberi/speech_recognition#readme.
Как цитировать эту библиотеку (чикагский стиль):
Чжан, Энтони. 2017. Распознавание речи (версия 3.8).
Также ознакомьтесь с Python Baidu Yuyin API, который основан на более старой версии этого проекта и добавляет поддержку Baidu Yuyin.Обратите внимание, что Baidu Yuyin доступен только в Китае.
Лицензия
Copyright 2014-2017 Энтони Чжан (Uberi). Исходный код этой библиотеки доступен онлайн на GitHub.
SpeechRecognition доступен по лицензии BSD, состоящей из 3 пунктов. См. LICENSE.txt в корневом каталоге проекта для получения дополнительной информации.
Для удобства все официальные дистрибутивы SpeechRecognition уже включают копии необходимых уведомлений об авторских правах и лицензий.В своем проекте вы можете просто сказать, что информацию о лицензировании для SpeechRecognition можно найти в файле README SpeechRecognition, и убедиться, что SpeechRecognition виден пользователям, если они хотят ее видеть .
SpeechRecognition распространяет исходный код, двоичные файлы и языковые файлы из CMU Sphinx. Эти файлы находятся под лицензией BSD и могут распространяться до тех пор, пока правильно сохраняются уведомления об авторских правах. См. раздел speech_recognition/pocketsphinx-data/*/LICENSE*.txt и сторонний/LICENSE-Sphinx.txt для деталей лицензии для отдельных частей.
SpeechRecognition распространяет исходный код и двоичные файлы из PyAudio. Эти файлы находятся под лицензией MIT и могут распространяться до тех пор, пока правильно сохраняются уведомления об авторских правах. Подробнее о лицензии см. в файле Third-Party/LICENSE-PyAudio.txt.
SpeechRecognition распространяет бинарные файлы из FLAC — speech_recognition/flac-win32.exe, speech_recognition/flac-linux-x86 и speech_recognition/flac-mac. Эти файлы находятся под лицензией GPLv2 и могут распространяться до тех пор, пока соблюдаются условия GPL.Двоичные файлы FLAC представляют собой совокупность отдельных программ, поэтому эти ограничения GPL не применяются к библиотеке или вашим программам, использующим библиотеку, а только к самому FLAC. Подробнее о лицензии см. в LICENSE-FLAC.txt.
.