Мегапроект: расшифровщик аудио в текст… через облако Яндекса!
Мегапроект: расшифровщик аудио в текст… через облако Яндекса!
Переводим аудио в текст. Часть 2

Мы уже исполь­зо­ва­ли ней­ро­се­ти Яндек­са, когда дела­ли свой орфо­ней­ро­кор­рек­тор — он авто­ма­ти­че­ски исправ­ля­ет все ошиб­ки и опе­чат­ки, когда вы наби­ра­е­те текст. Теперь перей­дём на уро­вень выше — исполь­зу­ем искус­ствен­ный интел­лект для рас­по­зна­ва­ния голо­са в ауди­о­за­пи­сях. И для это­го мы вос­поль­зу­ем­ся облач­ным сер­ви­сом Яндек­са, пото­му что можем. Вы тоже.

Для чего это нужно

Смысл такой: если нуж­но пере­ве­сти ауди­о­за­пись в текст, мож­но это сде­лать очень быст­ро с помо­щью ней­ро­се­тей. Яндекс в этом вся­ко пре­успел, и мы теперь можем этим вос­поль­зо­вать­ся в своё удо­воль­ствие.

Если вы редак­тор или автор, вам нуж­но часто общать­ся с экс­пер­та­ми, что­бы полу­чить необ­хо­ди­мую инфор­ма­цию для сво­ей рабо­ты. Мож­но всё кон­спек­ти­ро­вать на ходу, а мож­но запи­сать на дик­то­фон и потом пере­ве­сти в текст за 10 минут.

Если кол­ле­га вам оста­вил длин­ное голо­со­вое сооб­ще­ние, текст кото­ро­го нуж­но раз­ме­стить на сай­те, то мож­но набрать всё рука­ми или отдать эту зада­чу ком­пью­те­ру.

Если вы сту­дент и не хоти­те кон­спек­ти­ро­вать лек­ции по гума­ни­тар­ным нау­кам, запи­ши­те их на теле­фон, и ней­рон­ка пере­ве­дёт их в текст. У вас будут самые пол­ные лек­ции, и вся груп­па будет бегать за вами перед экза­ме­ном.

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

Что будем использовать

Возь­мём сер­вис Yandex SpeechKit — он поз­во­ля­ет рас­по­знать или озву­чить любой текст на несколь­ких язы­ках. Имен­но на этом движ­ке рабо­та­ет голо­со­вой помощ­ник «Али­са»: она исполь­зу­ет его, что­бы пони­мать, что вы гово­ри­те, и гово­рить что-то в ответ.

SpeechKit — часть «Яндекс.Облака», боль­шо­го ресур­са, кото­рый уме­ет решать мно­го задач. Напри­мер, кро­ме рабо­ты с тек­стом и голо­сом «Обла­ко» может предо­ста­вить вир­ту­аль­ную вычис­ли­тель­ную маши­ну и хра­ни­ли­ще дан­ных, рабо­тать с Docker-образами, защи­щать от хакер­ских атак, управ­лять база­ми дан­ных и мно­го чего ещё.

Так как всё это — серьёз­ные тех­но­ло­гии для про­грам­ми­стов и IT-спецов, мно­гое нуж­но будет делать в команд­ной стро­ке. Для это­го мы сей­час пока­жем каж­дый шаг и объ­яс­ним, для чего имен­но мы это дела­ем. В резуль­та­те научим­ся отправ­лять фай­лы в «Обла­ко» и полу­чать отту­да гото­вый текст.

Вся пер­вая часть про­ек­та у нас как раз и будет про настрой­ку «Яндекс.Облака» и под­го­тов­ку к рабо­те.

Условия и ограничения

Рас­по­зна­ва­ние речи — плат­ная услу­га, но Яндекс даёт 60 дней и 3000 ₽ для тести­ро­ва­ния. За эти день­ги мож­но рас­по­знать 83 часа аудио — боль­ше трёх суток непре­рыв­но­го раз­го­во­ра. Это очень мно­го: за вре­мя под­го­тов­ки этой ста­тьи и тести­ро­ва­ния тех­но­ло­гии мы потра­ти­ли 4 руб­ля за 3 дня.

Если отправ­лять фай­лы с запи­сью боль­ше мину­ты, то одна секун­да аудио сто­ит одну копей­ку. Что­бы рас­по­знать запись дли­ной в час, нуж­но 36 руб­лей. Это при­мер­но в 20 раз дешев­ле, чем берут транс­кри­ба­то­ры — люди, кото­рые сами наби­ра­ют текст на слух, про­слу­ши­вая запись.

Ней­ро­сеть часто пони­ма­ет, когда текст нуж­но раз­бить на абза­цы, но дела­ет это не все­гда пра­виль­но.
Ещё она не ста­вит запя­тые, тире и двое­то­чия. Мак­си­мум, что она дела­ет — ста­вит точ­ку в кон­це пред­ло­же­ния и начи­на­ет новое с боль­шой бук­вы. Но при этом почти все сло­ва рас­по­зна­ют­ся пра­виль­но, и отре­дак­ти­ро­вать такой текст намно­го про­ще, чем наби­рать его с нуля.

Послед­нее — из-за осо­бен­но­стей нашей речи и про­из­но­ше­ния SpeechKit может путать сло­ва, кото­рые зву­чат оди­на­ко­во (код — кот) или ста­вить непра­виль­ное окон­ча­ние («сла­ва обру­ши­лось на него неожи­дан­но»). Реше­ние про­стое: про­го­ня­ем такой текст через орфо­ней­ро­кор­рек­тор и всё в поряд­ке. Одна ней­рон­ка исправ­ля­ет дру­гую — реаль­ность XXI века 🙂

Всё, при­сту­па­ем.


Ино­гда резуль­тат полу­ча­ет­ся вот таким, но на пони­ма­ние тек­ста это не силь­но вли­я­ет.

Регистрация в «Облаке»

Для это­го нам пона­до­бит­ся Яндекс-аккаунт: заве­ди­те новый, если его у вас нет, или вой­ди­те в него под сво­им логи­ном.

Если акка­унт уже есть — пере­хо­дим на стра­ни­цу сер­ви­са cloud.yandex.ru и нажи­ма­ем «Под­клю­чить­ся»:


На сле­ду­ю­щем шаге под­твер­жда­ем согла­сие с усло­ви­я­ми, и мы у цели:

На глав­ной стра­ни­це «Обла­ка» акти­ви­ру­ем проб­ный пери­од, что­бы бес­плат­но исполь­зо­вать все воз­мож­но­сти сер­ви­са, в том чис­ле и SpeechKit:

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


Когда под­клю­чи­те кар­ту — нажми­те «Акти­ви­ро­вать».

Когда всё будет гото­во, вы попа­дё­те на глав­ную стра­ни­цу сер­ви­са, где уви­ди­те что-то подоб­ное:


Вме­сто ста­ту­са Active вы уви­ди­те ста­тус «Проб­ный пери­од» и баланс в 3000 ₽ без кре­дит­но­го лими­та.

Командная строка Яндекса

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

Весь про­цесс уста­нов­ки мы опи­шем для Windows. Если у вас Mac OS или Linux, то всё будет то же самое, но с поправ­кой на опе­ра­ци­он­ную систе­му. Поэто­му если что — читай­те инструк­цию.

Для уста­нов­ки и даль­ней­шей рабо­ты нам пона­до­бит­ся PowerShell — это про­грам­ма для рабо­ты с команд­ной стро­кой, но с рас­ши­рен­ны­ми воз­мож­но­стя­ми. Запус­ка­ем PowerShell и пишем там такую коман­ду:

iex (New-Object System.Net.WebClient).DownloadString('https://storage.yandexcloud.net/yandexcloud-yc/install.ps1')

Она ска­ча­ет и запу­стит уста­нов­щик команд­ной стро­ки Яндек­са. В сере­дине скрипт спро­сит нас, доба­вить ли путь в систем­ную пере­мен­ную PATH, — в ответ пишем Y и нажи­ма­ем Enter:

Команд­ная стро­ка Яндек­са уста­нов­ле­на в систе­ме, закры­ва­ем PowerShell и запус­ка­ем его зано­во. Теперь нам нуж­но полу­чить токен авто­ри­за­ции — это такая после­до­ва­тель­ность сим­во­лов, кото­рая пока­жет «Обла­ку», что мы — это мы, а не кто-то дру­гой.

Пере­хо­дим по спе­ци­аль­ной ссыл­ке, кото­рая даст нам нуж­ный токен. Сер­вис спро­сит у нас, раз­ре­ша­ем ли мы доступ «Обла­ка» к нашим дан­ным на Яндек­се — нажи­ма­ем «Раз­ре­шить». В ито­ге видим стра­ни­цу с токе­ном:


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

yc init

Когда скрипт попро­сит — вво­дим токен, кото­рый мы толь­ко что полу­чи­ли:


Сна­ча­ла отве­ча­ем «1», затем «Y» и «4».

Настраиваем доступ

Есть два спо­со­ба рабо­тать с сер­ви­сом SpeechKit: через IAM-токен, кото­рый нуж­но запра­ши­вать зано­во каж­дые 12 часов, или через API-ключ, кото­рый посто­ян­ный и менять его не нуж­но. Мы будем рабо­тать через ключ, пото­му что так удоб­нее.

Что­бы его полу­чить, нам нужен сер­вис­ный акка­унт в «Обла­ке». Созда­дим его так.

1. Захо­дим в кон­соль управ­ле­ния и нажи­ма­ем на един­ствен­ную пап­ку в нашем обла­ке:


2. Выби­ра­ем «Сер­вис­ные акка­ун­ты» → «Создать»:


3. Вво­дим имя (какое понра­вит­ся), затем нажи­ма­ем «Доба­вить роль» и выби­ра­ем «editor»:


4. Захо­дим в сер­вис­ный акка­унт, кото­рый толь­ко что созда­ли:


5. Нажи­ма­ем на кноп­ку «Создать новый ключ» и выби­ра­ем пункт «Создать API-ключ»:


Сер­вис спро­сит про опи­са­ние — мож­но ниче­го не запол­нять.

6. Сохра­ня­ем отдель­но сек­рет­ный ключ — он выда­ёт­ся толь­ко один раз и вос­ста­но­вить его нель­зя. Выде­ля­ем, копи­ру­ем и сохра­ня­ем в без­опас­ное место:


Что дальше

Поздрав­ля­ем — самое слож­ное поза­ди. Даль­ше будет про­ще: мы напи­шем про­грам­му на Python, кото­рая будет отправ­лять на сер­вер запрос на рас­шиф­ров­ку и полу­чать в ответ гото­вый текст. Ту би кон­ти­ньюд.