Разработка сервиса Speech-to-text на базе существующего API

Разработка программного обеспечения сервиса по распознаванию речи с использованием API. Обеспечение поддержки сервисом популярных медиа форматов. Возможность распознавать речь из аудио в текст, быстрее реального времени и независимо от длины аудио файла.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 27.08.2018
Размер файла 882,9 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.Allbest.ru/

Размещено на http://www.Allbest.ru/

Федеральное автономное образовательное учреждение высшего образования

Национальный исследовательский университет «Высшая школа экономики»

Московский институт электроники и математики им. А.Н. Тихонова

Направление 09.03.01 Информатика и вычислительная техника

Выпускная квалификационная работ

На тему:

Разработка сервиса Speech-to-text на базе существующего API

Студент: Елесин А.И.

Руководитель Королев Д.А.

Москва - 2018

Аннотация

Целью данной выпускной квалификационной работы является разработка сервиса для распознавания речи с использованием готовых API для распознавания речи, таких как Google Speech API.

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

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

Объем работы - 32 страницы, количество иллюстраций - 7, количество таблиц - 1, количество использованных источников - 15.

Annotation

The goal of this final qualifying work is the development of a service for speech recognition using third-party APIs for speech recognition such as Google Speech API.

This paper discusses the main problems encountered in the development of software for speech recognition services, such as providing support for all popular media formats and the ability to recognize speech from audio to text cost-effectively, faster than real time and regardless of the length of the original audio file. The result of the final qualifying work is the created software that fully meets the initial requirements for the technical task.

The volume of work - 32 pages, the number of illustrations - 7, the number of tables - 1, the number of sources used - 15.

Оглавление

Введение

1. Анализ существующих решений

2. Постановка задачи

3. Методология

3.1 Архитектура

3.2 Программная часть

3.3 Описание решения поставленной задачи

3.3.1 Исследование, тестирование и выбор решений для распознавания речи

3.3.2 Обработка входных данных

3.3.3 Создание алгоритма распознавания

3.3.4 Разработка HTTP Request API

3.4 Описание структуры и рабочего процесса программного обеспечения

3.4.1 Работа app_recognition.py

3.4.2 Работа wit_recognition.py

3.5 Описание алгоритма работы разрабатываемого сервиса

3.6 ТЗ на создание сервера веб интерфейса и очереди задач

4. Полученные результаты и тестирование полученной технологии

Заключение

Перечень сокращений, условных обозначений, символов и терминов

Список используемых источников

Введение

Цель ВКР

Разработка сервиса по распознаванию речи на базе готовых API для распознавания речи

Задачи

1. Разработать ПО для распознавания речи из медиафайлов популярных аудио и видео форматов с быстрой скоростью и дешевой ценой распознавания одной минуты.

2. Разработать интерфейс для обмена данными между серверным приложением, что будет использовать ПО из пункта номер 1 и веб-сервером поддерживающим пользовательский сайт на основе запросов HTTP POST.

3. Подготовить ТЗ на разработку пользовательского веб-интерфейса.

4. Отладить работу компонентов сервиса и ПО на основе с использованием уже имеющейся старой версии веб-интерфейса.

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

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

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

1. Анализ существующих решений

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

? Голосовое управление

? Голосовые команды

? Голосовой ввод текста

? Голосовой поиск

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

В данный момент много IT компаний предоставляют свои решения для распознавания речи. Главная проблема данных решений - их недоступность для конечного пользователя, так как они предоставляются в виде API или SDK с помощью которых можно разработать свое программное обеспечение для распознавания речи.

В контексте моего проекта рассматривается задача распознавания речи, уже записанной в медиа файлы, и при изучении рынка сервисов, представляющих похожие услуги, было обнаружено, что основной конкурент разрабатываемого сервиса - услуги по ручному распознаванию записей. Такие услуги предоставляют качество распознавания, близкое с 100%, однако цены на такие услуги как правило в 10-20 раз дороже, чем предполагаемая себестоимость распознавания через разрабатываемый сервис. Так же были обнаружены неочевидные варианты [1] получить распознанный текст к любому видео, находящемуся на платформе Youtube, но данный вариант неочевиден для обычного пользователя, не обладающего технической подкованностью, и попросту неудобен в применении.

2. Постановка задачи

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

1. Поддержка всех популярных медиа форматов, включая аудио и видео записи, а именно mp3, wav, ogg, aac, mp4, mov, avi, 3gp.

2. Возможность распознавания записей любой длины.

3. Быстрое распознавание - одна секунда аудиозаписи должна распознаваться быстрее, чем за одну секунду реального времени.

4. Низкая стоимость распознавания по сравнению с распознаванием через Google Speech API (меньше 1.44$ за минуту распознавания)

В задачи проекта входит написание ТЗ на программное обеспечение для сервера, поддерживающего пользовательский интерфейс в виде сайта.

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

1. Преобразование файлов от пользователей в формат, поддерживаемой выбранным решением для распознавания речи (далее «S2T решение»)

2. Непосредственно распознавание речи, что включается в себя:

a. Разделение входного файла на сегменты

b. Отправку сегментов на распознавание бесплатным S2T решением

c. Повторную отправку на распознавание платным S2T решением

d. Разбор результатов распознавания и подготовка файлов результатов

3. Связь с сервером пользовательского интерфейса для получения новых задач на распознавание.

3. Методология

3.1 Архитектура

Серверы распознавания и веб интерфейса разделены для возможности расширения. При повышенной нагрузке на сервер возможно развертывание второго сервера распознавания (далее «воркер») для обслуживания большего количества клиентов.

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

3.2 Программная часть

Программное обеспечение было решено писать на языке программирования Python 3. Данное решение было связано с тем, что одна из моих прошлых курсовых работ частично затрагивала тему данной выпускной квалификационной работы и уже были достигнуты некоторые наработки и получен опыт программирования на языке Python 3.

3.3 Описание решения поставленной задачи

3.3.1 Исследование, тестирование и выбор решений для распознавания речи

Во время исследования рынка решений для распознавания речи оказалось, что у каждого есть свои недостатки, и ни одно из них не подходит идеально для разработки сервиса. Были исследованы и протестированы такие S2T решения как: Google Speech API, Yandex SpeechKit, Nuance Dragon, Vocapia REsearch, Microsoft Bing Speech API, Wit.ai и Speechmatics Speech Made Simple. Главными проблемами этих решений оказались отсутствие поддержки русского языка, не подходящие режимы работы для создания сервиса, ограничения на длину распознаваемого аудио и высокая цена распознавания.

Таблица 1

Исследованные решения для распознавания речи

Название

Языки

Длительность записи / поддержка аудиостримов

Стоимость

1

Google Speech API

Ru/En

Потоковый режим, 1 минута Записи - до 80 минут

0.006$(0.4р) за 15 сек0.026р/сек

2

Yandex SpeechKit Cloud

Ru/En

Потоковый режим без ограничений Короткие записи

В среднем 400 рублей за 1000 запросов, что равно при запросе - 20 сек:0,02р/сек 1.2р/мин72р/час

4

Nuance Dragon SDK Server Edition

En/Ru(?)

Только предварительно записанные данные

Оговаривается (платно)

5

Vocapia REsearch (VoxSigma)

Ru/En

Потоковый режим(?), длинные записи

Оговаривается (платно)

6

Microsoft Bing Speech API

En

Короткие записи, потоковый режим

0-10 часов - $9/час10-100 часов - $7.50/час Больше 100 часов - $5.50/час

7

Speechmatics Speech Made Simple

Ru/En

Только предварительно записанные данные

0.006Ј/мин

8

Wit.ai Speech

Ru/En

Короткие записи (1.5-2Mb, до 50 сек)

Бесплатно

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

? требование производить вычисления на графических ускорителях либо мощных процессорах

? необходимость в создании собственного словаря для поддержки русского язык

? направленность на распознавания коротких фраз и команд, а не длинных речей

...сделали невозможным пользование такими решениями в целях проекта.

Для дальнейшей разработки программного обеспечения было решено выбрать два сервиса, предоставляющих свои API для распознавания речи: Google Speech API [2] и Wit.ai [3].

3.3.2 Обработка входных данных

Проблема возможности преобразования большого количества входных форматов медиа-данных в форматы, поддерживаемые S2T решениями, была решена с помощью использования FFmpeg [4], программного обеспечения для преобразования и изменения медиа данных. При изначальном тестировании также рассматривался вариант использования GStreamer [5], однако при тестировании этого решения оказалось, что такое вариант намного более сложен и неудобен в реализации, а также имеет ряд технических проблем, например утечку памяти, появляющуюся при использовании GStreamer через Python [6]. Так же во время тестирования решения с использование Gstreamer был найден критический баг, связанный с некорректным чтением поврежденных заголовков файла формата wav [7]. Об ошибке было сообщено на багтрекер разработчиков Gstreamer, и вскоре она была исправлена.

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

Рис. 1. Разделение первичной аудиозаписи на фрагменты

3.3.3 Создание алгоритма распознавания

Для решения проблемы создания алгоритма для быстрого и дешевого распознавания речи было выбрано использовать два решения для распознавания речи. Google Speech API используется как самое неприхотливое к качеству звука, а Wit.Ai как самое дешевое в применении. Комбинация этих S2T API позволила снизить стоимость распознавания минуты речи на 50-100% в зависимости от качества записи в оригинальной аудиодорожке. Параллельное распознавание в 12 потоков было использовано для достижения быстроты распознавания. Это решение позволило достичь средней скорости распознавания в 10 раз быстрее реального времени.

Использование Wit.ai в качестве S2T решения бесплатно даже для коммерческого пользования, однако его разработчики просят выполнять 2 условия - не более 1 запроса к серверам Wit.ai в секунду и условие «честного использования» [8][9] - запросы к Wit.ai должны быть изначально происходить от человека. В то время как второе условие напрямую выполняется, первое условие обязывает алгоритм не делать более 1 запроса к Wit.ai в секунду.

Рис. 2. Диаграмма процесса распознавания речи по сегментам

В результате при тестировании алгоритма оказалось, что скорость распознавания зависит от качества аудиозаписи. Если речь слабо различима от фонового шума, есть большое количество эха или голоса перебивают друг друга - время распознавания будет больше из-за повторной попытки распознавания “плохих” участков с помощью Google Speech API.

В ходе тестирования открылась главная проблема данного решения - при наличии в аудиозаписи пустых отрезков длиной более 45 секунд Wit.ai не возвращал результатов, и отрезок автоматически посылался на распознавание с помощью платного Google Speech API. Для решения этой проблемы было решено использовать технологию VAD (англ. Voice Activity Detection - обнаружение голосовой активности).

Примером такой технологии является часть кода проекта с открытым исходным кодом под названием WebRTC [10], предназначенным для организации передачи потоковых данных между браузерами или другими поддерживающими его приложениями по технологии точка-точка.

Для языка Python 3 есть несколько классов оберток и интерфейсов с открытым кодом, позволяющих использовать данную технологию. Одним из примеров такой обертки стал python-vad [11], который и было решено использовать для решения выше обозначенной проблемы.

Рис. 3. Пример работы технологии обнаружения голосовой активности

Данное решение позволило получать временные метки, позволяющие различить периоды аудиозаписи в которых есть речь, а в которых нет. При условии игнорирования очень коротких сегментов аудио длиной до одной секунды, в которых чаще всего нет речи (ошибки работы алгоритма) и делении больших по длине сегментов речи (более 45 секунд) на более короткие получилось достичь решения проблемы перепосылки аудио сегментов без речи на платный сервис распознавания Google Speech API.

3.3.4 Разработка HTTP Request API

Flask - веб фреймворк [12], был использован для реализации обмена данными между частями сервиса. Было создано HTTP Request API [13] для взаимодействия между воркером - сервером что распознает файлы от пользователей и сервером, обслуживающим сайт для пользователей.

Так как архитектура сервиса подразумевает возможность быстрого расширения вычислительной мощности сервер, обслуживающий сайт хранит в своей базе данных очередь задач с их статусами и при обращении любого воркера по заданному адресу выдает ему информацию о том, по какой ссылке скачать файл для распознавания, идентификационный номер задачи, язык речи в файле и статус «бесплатности» распознавания. В случае если флаг бесплатного распознавания True - перед разделением исходного файла на части подлежащие распознавания файл не будет распознаваться больше, чем на 10 минут аудио дорожки.

GET http://127.0.0.1:5100/api/tasks

Типичный ответ (JSON):

{

"status": "ok",

"id": <id>,

"uri": <uri>,

"language": <language>,

"trial": <trial>,

"trial_length": <trial_length>

}

Во время распознавания воркер посылает серверу сайта обновления статуса задачи с помощью POST запроса и query string в адресе запроса. Поле статуса данного запроса может принимать значения "creating", "in_progress", "failed", "complete". Данный запрос позволяет серверу сайта сбросить статус задачи при произошедшей ошибке во время распознавания воркером.

POST http://127.0.0.1:5100/api/tasks/<id>/

set_status?status=<status>

Типичный ответ: 200

Рис. 4. Внешний вид тестовой страницы

программный распознавание речь аудио текст

В момент, когда воркер завершает распознавание задачи, он отправляет multipart POST запрос, содержащий в своем теле два файла результатов - результат с текстом, разделенным на строки с временными метками и без них.

POST http://127.0.0.1:5100/api/tasks/<id>/result

Типичный ответ: 200

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

3.4 Описание структуры и рабочего процесса программного обеспечения

Исходный код разработанного программного обеспечения содержится в двух файлах - app_namespace.py (512 строк) и recognition_wit.py (687 строк).

3.4.1 Работа app_recognition.py

Первый файл содержит исходный код, отвечающий за получение задач, обновление их статуса на сервере очереди задач с помощью HTTP запросов, отправку результатов распознавания. Еще одна задача кода, содержащегося в app_namespace.py - обслуживание тестовой страницы и запросов, приходящих с нее.

При запуске данный скрипт запускает две главных параллельных фоновых функции:

? task_request_loop() отвечающую за запрос задач от сервера с очередью задач. Период цикла данной функции - 5 секунд в режиме дебата и 20 секунд в обычном режиме работы.

? task_send_status_loop() отвечающую за запросы обновления статуса задач на сервере очереди и отправку результатов, полученных по окончанию задач распознавания. Период цикла данной функции - 1 секунда.

При получении задачи task_request_loop() создает новый объект класса Task(), который при инициализации парсит json, полученный от сервера очереди задач и создает класс WitRecognition, импортированный из файла recognition_wit.py, а также содержит главные параметры задачи и очереди для обмена данных с дочерним классом WitRecognition. Важно заметить, что класс WitRecognition наследует стандартный класс языка Python 3 Threading.thread() и поэтому работает в отдельном потоке. Это необходимо для параллельного распознавания нескольких задач одновременно и одновременного функционирования тестовой страницы и поддержки HTTP API.

3.4.2 Работа wit_recognition.py

Основными классом в файле wit_recognition.py является класс WitRecognition. В его задачи входит:

1. конвертирование исходного аудиофайла в формат, поддерживаемый главным сервисом распознавания Wit.ai

2. анализирование полученного аудиофайла с помощью VAD, «нарезание» аудиофайла на куски с речью и фильтрация ошибок VAD

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

4. анализирование, склейка, и сохранение полученных результатов и логов работы в текстовые файлы

Рис. 5. Диаграмма работы задачи распознавания

Сначала полученный файл конвертируется в MP3 128 Кбит/с. В ходе тестирования оказалось, что Wit.ai поддерживает MP3 файлы и больших битрейтов, например 320 Кбит/с, однако ограничение накладывается на размер файла (до 5.5 Мб или до 55 секунд), то есть на длину распознанного аудио за один запрос. Битрейт 128 Кбит/с был выбран так как он не сильно отличается по качеству и точности передачи речи от 320 Кбит/с, но дает преимущество в длине распознанного аудио за один запрос к Wit.ai.

После конвертирования файл «отправляется» на анализ с помощью Voice Activity Detection. Для этого файл делится на куски по 10 минут и результаты анализов собираются воедино после полной обработки всего файла. Это сделано для того, чтобы избежать переполнения памяти, так как процесс анализирования на нахождение речи в файле переполнял 2Гб оперативной памяти удаленного виртуального сервера при анализе аудиозаписей длиной более 50-60 минут.

После получения временных меток начала и конца фрагментов, содержащих речь, аудиозапись «нарезается» на фрагменты с длиной каждого фрагмента +30% относительно результатов VAD. Это сделано для того, чтобы распознанный из фрагментов текст можно было склеить воедино, найдя максимальное совпадение. Фрагменты длиной более 45 секунд разрезаются пополам (см. выше - ограничения Wit.ai)

Конвертирование и нарезка аудиофайла выполняется с помощью создания подпроцесса FFmpeg с помощью стандартного модуля Python - subprocess [14].

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

Следующим шагом работы программы является непосредственно распознавание полученных фрагментов аудио. Для этого используется пул потоков [15], в аргументы которым передаются фрагменты для распознавания. В один и тот же момент может работать только 12 потоков. Это связано с тем, что длина самого большого фрагмента равна 45 секундам, а среднее скорость распознавания такого фрагмента с помощью Wit.ai и Google Speech API - около 12 секунд. Таким образом, при условии того, что Wit.ai просит не делать более одного запроса к их серверам в секунду получается полная «загруженность канала».

Распознавание с помощью Wit.ai может быть нестабильно. Во время тестирования оказалось, что при посылке аудио с плохим качеством в первую попытку Wit.ai может не возвратить результатов, но при попытке отправить повторно ту же самую аудиозапись на распознавание сервис может вдруг вернуть результаты, чаще всего во время третьей попытки, поэтому, прежде чем любая аудиозапись будет отправлена на распознавание платным сервисом Google Speech API будет 3 раза отправлена на сервис распознавания речи Wit.ai.

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

Последним шагом в работе класса WitRecognition является сохранение результатов и логов работы в соответствующие файлы на диске.

3.5 Описание алгоритма работы разрабатываемого сервиса

При разработке программного обеспечения задумывался следующий алгоритм работы сервиса в целом:

1. Пользователь заходит на сайт, вводит свой электронный адрес и выбирает язык из выпадающего списка.

2. С помощью диалога выбора файла или используя drag-n-drop загружает файл на сервис.

3. Сервер, обслуживаемый веб интерфейс и очередь задач вносит новую задачу с ее параметрами в базу данных.

4. При запросе воркером новой задачи сервер очереди задач помечает ее флагом «в работе»

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

6. Как только распознавание заканчивается, воркер делает HTTP запрос, содержащий файлы результатов в своем теле, сервер очереди задач сохраняет результаты и отправляет письмо пользователю о том, что распознавание завершено с ссылками на скачивание результатов.

Рис. 6. Диаграмма обмена информацией между частями сервиса

3.6 ТЗ на создание сервера веб интерфейса и очереди задач

Описание сервиса:

Сервис Transcript предназначен для преобразования загружаемых в него медиафайлов (видео, звук в любых доступных форматах любой длины) в текст при помощи Google Speech API и Wit.ai

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

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

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

? Важный момент: если файл занимает меньше 10 (+1 на нечеткую обрезку) минут и за текущие сутки не было загрузок с указанной электронной почты (возможна проверка по email / browser user agent + IP, простой фильтр типичных временных email/алиасов email), то вместо платежки показывается уведомление, что результаты распознавания скоро придут на почту. Если лимит превышен или это уже не первый файл, то показывается окно платежной системы с предложением оплатить заказ, а после принятия платежа показывается то же сообщение о том, что результат скоро придет на электронную почту. Подтвердив это сообщение, пользователь попадает на стартовую страницу сервиса.

? Сохранение истории задач распознавания (email - id задачи - количество минут - путь к исходному файлу - пути к результатам - загружены ли файлы на gdrive)

Описание рабочего процесса:

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

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

3. По нажатию кнопки “распознать” происходит переход на платежную систему или сообщение о успешном создании задачи.

4. С помощью FFmpeg из медиафайла вырезается видеодорожка, исходный медиафайл удаляется.

5. Воркер(ы) каждые N секунд запрашивает с сервера, обслуживающего создание задач новую задачу.

6. При наличии задачи ответом являются параметры задачи, включающие ссылку на скачивание файла без видеодорожки, данные о языке в аудиозаписи и статус бесплатности распознавания.

7. Во время работы воркер посылает POST запросы со статусом задачи.

8. По выполнению задачи, воркер посылает POST запрос с прикрепленными файлами результатов.

9. После получения результатов распознавания, сервер, обслуживающий задачи, посылает email с результатами распознавания пользователю.

Языки разработки предпочтительно Ruby on Rails.

Технические детали:

? При успешной загрузке файла пользователю показывается оповещение на странице и отправляется оповещение в почту.

? Если файл, присланный пользователем содержит (ffprobe -i <in>) видеопоток, то нужно сохранить копию файла без видеопотока (ffmpeg -i <in> -nv -c:a copy <out>). Изначальный файл должен быть удален.

? Общение с распознающей программой происходит через API. Каждый раз, когда воркер получает возможность взять на выполнение еще одно задание, он посылает запрос, в ответ на который отправляется либо сообщение о том, что заданий нет (в этой ситуации воркер ждет N минут до новой попытки получить задание), либо новое задание с указанием имени файла, языка и флагом обрезания записи по прошествии 10 минут.

? При отправке (status=in_progress) файла на расшифровку, надо оповестить пользователя об этом по электронной почте.

Как только расшифровка файла завершена (status=complete), необходимо отправить пользователю письмо со ссылками на все результирующие файлы.

Рис. 7. Макет главной страницы веб интерфейса

Детали общения с воркерами:

? Используется HTTP Request API

? Воркер скачивает обработанные файлы для распознавания по ссылке, которую предоставляет в ответе с параметрами задачи сервер сайта.

? Результаты работы воркеры загружают в заданную папку через HTTP запрос.

4. Полученные результаты и тестирование полученной технологии

Для тестирования полученного программного обеспечения используется несколько подходов. Программная часть, взаимодействующая с HTTP API тестировалась с помощью скрипта на языке Python, эмулирующего выдачу задания на распознавание от сервера очереди задач. Таким образом, удалось убедиться в полном соответствии работы разработанного программного обеспечения по описанному ранее API HTTP запросов.

Для тестирования полученной технологии распознавания файлов использовалось 4 заранее приготовленные аудиозаписи.

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

В случаях если речь в записи произносится с орфографической ошибкой, неправильное распознавание слова, его окончаний или предлогов не считается ошибкой работы программного обеспечения.

Результаты тестирования:

1. Запись голоса с лекции на конференции (5 минут анализа ошибок, 20 минут 26 секунд статистики)

Количество неверных окончаний или букв в словах: 49 знаков из 4022. 1.22% ошибки

Количество неверно распознанных или пропущенных слов: 27 слов из 646. 4.17%

Время распознавания: 3 минуты (на 20 минут 26 секунд полной аудиозаписи конференции)

Примечание: хорошо записанная речь с переодическими оговорками, без эха и посторонних шумов.

2. Новостной сюжет с телеканала (4 минуты)

Количество неверных окончаний или букв в словах: 38 знаков из 3991 знака. 0.95% ошибки.

Количество неверно распознанных или пропущенных слов: 42 слова из 638. 6.58% ошибки.

Время распознавания: 1 минута 7 секунд.

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

3. Запись телефонного разговора из колл-центра (3 минуты)

Количество неверных окончаний или букв в словах: 17 из 1795 знаков. 0.95% ошибки.

Количество неверно распознанных или пропущенных слов: 61 слово из 333. 18.3% ошибки.

Время распознавания: 1 минута 20 секунд.

Примечание: некачественно записанный звук, голоса «глухие» и нечетко записанные, перебивающие друг друга. Очень много сбитой, сумбурной речи.

4. Запись телефонного разговора с мобильного телефона (3G, 2 минуты)

Количество неверных окончаний или букв в словах: 30 знаков из 1623. 1.8% ошибки.

Количество неверно распознанных или пропущенных слов: 33 слова из 263. 12.5% ошибки.

Время распознавания: 1 минута 30 секунд.

Примечание: звонок записан в сетях 3G. Голоса записаны четко, но с сильным искажением, фоновых шумов нет или слабо выражены. Иногда присутствует сбитая, сумбурная речь.

При тестировании этих четырех аудиозаписей было совершено 106 запросов распознавания к Wit.ai и лишь 3 запроса к платному Google Speech API. Так как количество обращений к Google Speech API сильно зависит от качества аудиозаписи, точное метрику экономности разработанного программного обеспечения сложно рассчитать. На примере 4 аудиозаписей, протестированых ранее можно утверждать, что в большинстве случаев экономия составит как минимум 80%.

Заключение

В результате данной работы было разработано программное обеспечение, полностью отвечающее изначальным целям технического задания. Полученная технология получает результаты распознавания в районе 98.77% процентов знаков и 89.6% процентов правильно распознанных слов при скорости распознавания намного превышающей скорость решений Google Speech API и Wit.ai на которых построено разработанное программное обеспечение. Цена распознавания также была снижена на 80-95% относительно использования решения на базе исключительно платного сервиса Google Speech API.

Похожие решения, предлагающие аналогичную скорость и цену распознавания для длинных аудиозаписей, еще не существуют на рынке.

Однако у проекта есть направления, в которых еще можно сделать улучшения, например - дальнейшее улучшение качества распознавания. Как исполнителю проекта мне очень хочется изучить как работают технологии шумоподавления, их выбор и понять, даст ли использование подобной технологии улучшение качества распознавания.

Еще один вектор развития проекта - решения по распознавания речи в «оптовом» варианте, например, используя Google Drive. Такие запросы неоднократно приходили от пользователей во время тестирования разработанной технологии распознавания. Также возможна дальнейшая аналитика полученного текста, но это уже совсем другой вопрос и другая тематика исследования.

В дополнение хочется отметить, что в связи с тем, что русский язык грамматически очень сложный, его распознавание -- это очень сложная задача в сравнении с английским языком. Я бы очень хотел увидеть улучшения в качестве распознавания таких сервисов как Google Speech API и Wit.ai, используемых в проекте.

Перечень сокращений, условных обозначений, символов и терминов

1. Воркер - в контексте данной работы употребляется в смысле программного обеспечения, выполняющее главную работу сервиса - распознавание речи.

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

Список используемых источников

1. T. Klosowski "Use YouTube for Instant Transcription"

2. "Google Cloud Speech API Documentation"

3. "Wit.ai API Documentation"

4. "FFmpeg Documetation"

5. В.Супрун "Знакомство с GStreamer: Введение"

6. J.Persson, R.Gonzalez, Brett.Viren "Python GStreamer Tutorial", 2014

7. "wavparse: Processing wav file with blank tag in metadata causes SIGSEGV"

8. "Wit.ai. Frequently Asked Questions"

9. "Commercial usage of Wit.Ai"

10. "What is WebRTC?"

11. "py-webrtcvad wrapper for Easy to use of Voice activity detection in python"

12. "Flask Documentation"

13. L.Fischer "A Beginner's Guide to HTTP and REST", 2013

14. "subprocess -- Subprocess management"

15. "threading -- Thread-based parallelism"

Размещено на Allbest.ru


Подобные документы

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

    курсовая работа [116,9 K], добавлен 20.07.2012

  • Проектирование Web-сервиса учебного процесса кафедры физкультуры. Анализ существующих решений и построение моделей предметной области. Разработка базы данных Web-сервиса для обеспечения функциональности работы. Архитектура, интерфейс, взаимодействие с БД.

    дипломная работа [1,9 M], добавлен 05.04.2017

  • Анализ существующего программного обеспечения эмпирико-статистического сравнения текстов: сounter оf сharacters, horos, graph, advanced grapher. Empirical-statistical comparison of texts: функциональность, процедуры и функции тестирование и внедрение.

    дипломная работа [4,4 M], добавлен 29.11.2013

  • Характеристика форматов для хранения аудиоданных: Microsoft Wave, Windows Media Audio, MPEG Audio. Особенности программно-аппаратного комплекса записи звука Degidesign Session 8. Этапы технологической цепочки подготовки звукового мультимедиа компонента.

    доклад [1,8 M], добавлен 30.04.2009

  • Общая характеристика видео-аудио конференции, основные сферы ее использования, режимы и способы проведения. Характеристика средств групповой обработки информации. Системы передачи данных в сети Интернет. Проведение аудио-видео конференции и криптозащита.

    дипломная работа [2,7 M], добавлен 17.07.2013

  • Архитектура интерактивного сервиса Internet; программное обеспечение, применяющее протоколы передачи данных в глобальных сетях; аудио- и видеоконференции, сервисы для общения; принципы IP-телефонии. Формирование ведомости зарплаты средствами MS Excel.

    курсовая работа [408,0 K], добавлен 23.04.2013

  • Суть MIDI-технологии и типы музыкальных программ. Основные возможности программ: редакторов цифрового аудио, секвенсоров (программ для написания музыки), анализаторов и реставраторов аудио, трекеров. Копирование и сжатие цифрового звука с компакт-дисков.

    реферат [21,1 K], добавлен 27.02.2009

  • Визуальный компонент, используемый для создания главного меню на форме, создание закладки и добавление в список воспроизведения музыкального файла. Определение повторения воспроизведения и отображение списков строк, проигрывание аудио и видео файлов.

    лабораторная работа [128,7 K], добавлен 27.03.2012

  • Основная возможность Adobe Premiere – обработка одних видео и аудио файлов и последующий их экспорт в другие видео и аудио файлы. Стандартные эффекты в Adobe Premiere. Дополнения к программе (дополнительные спецэффекты), позволяющие работать с клипами.

    реферат [1,9 M], добавлен 26.05.2009

  • Система управления базой данных - программный инструмент создания БД и приложений пользователя. Проект СУБД "ИС Продажа видео и аудио продукции". Разработка иерархической, сетевой и реляционной моделей, таблиц и схемы базы данных, форм, отчетов, запросов.

    курсовая работа [1,6 M], добавлен 17.06.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.