Odezwała się do mnie koleżanka, która chciała swoje podcasty i filmy na YouTube wzbogacić o transkrypcję (zamiana słowa mówionego na tekst pisany). Oczywiście mogłaby komuś to zlecić, ale nie dość, że to oznacza spory koszt, to jeszcze dochodzi kwestia czasu (każda godzina nagrania, to nawet kilka godzin pracy). A do tego ta transkrypcja, choć powinna być przyswajalna dla ludzi, to – przynajmniejw  tym przypadku – ma głównie zainteresować roboty wyszukiwarek (SEO). Tak więc trzeba było postawić na automatyzację, szumnie zwaną czasem sztuczną inteligencją (AI).

Microsoft Azure Speech CLI (SPX)

Koleżanka z takich, co coś tam kumają, więc na start podrzuciła mi link do usługi Google Speech-to-Text. I z zapytaniem, jak się do tego dobrać, bo demo może odpalić, ale nie wie gdzie wgrać plik, by go “przerobić”. Po krótkim wyjaśnieniu, że to jest API, czyli coś, co można wykorzystać w swoim programie (lub skrypcie) przeszłą do kontrataku, i wysłała mi link do usługi Azure Speech od Microsoftu.

Tutaj niestety musiałem powtórzyć to co wcześniej, choć z zastrzeżeniem, że jest prosta możliwość konwertowania nagrań na tekst z wiersza poleceń, również w Windowsie, i nie jest to nic skomplikowanego. I było to coś, co zdecydowanie kupiło koleżankę, bo w końcu nie chodziło o to, bym ja jej te nagrania musiał konwertować – nawet przy wykorzystaniu zewnętrznej usługi – tylko by ona mogła robić to samodzielnie.

I tak, by skorzystać z konwersji audio na tekst – oczywiście w języku polskim – koleżanka musiała pobrać i zainstalować Microsoft Visual C++ Redistributable for Visual Studio 2019 (choć pewnie miała już zainstalowane) oraz oczywiście właściwe oprogramowanie, czyli Azure Speech CLI (SPX).

Kolejnym krokiem, zanim będzie można przystąpić do konwersji audio na tekst, jest uzyskanie klucza API w ramach usługi Azure (oraz kodu regionu). Nie będę opisywał krok po kroku jak uzyskać klucz API, bo jest to dość dobrze opisane w dokumentacji Azure.

Gdy klucz API już mamy (32 znaki, np. 6a43c7e62fb2jdc1dd03ca27f6c257ab), to można przejść do konfiguracji oprogramowania SPX. W tym celu wchodzimy do katalogu z aplikacją (np. spx-net471) i uruchamiamy z tego miejsca wiersz poleceń (plik -> otwórz wiersz poleceń) i wpisujemy polecenie:

spx config @key --set KLUCZ_API

Czyli np.:

spx config @key --set 6a43c7e62fb2jdc1dd03ca27f6c257ab

W kolejnym kroku ustawiamy region:

spx config @region --set REGION

Czyli np.:

spx config @region --set westeurope

Jeśli się pomylimy w kluczu API, możemy go usunąć za pomocą polecenia:

spx config @key --clear

W przypadku pomyłki w regionie :

spx config @region --clear

W tym momencie – po ustawieniu klucza i regionu – możemy przystąpić do konwersji:

spx recognize --file c:\ścieżkka\do\pliku\test.wav --source pl-PL

Przykładowy “ekran konwersji” wygląda tak:

Wave form audio format
Warto zaznaczyć, że za pomocą SPX (Azure Speech CLI) obecnie obsłużymy tylko pliki w formacie WAV, więc gdy mamy nagranie np. w formacie MP3, to wcześniej musimy skonwertować je właśnie na format WAV.

W rezultacie otrzymamy plik z rozszerzeniem “tsv”, znajdujący się w katalogu programu, np. “output.132550372779423044.tsv”, o np. takiej zawartości:

audio.input.id recognizer.session.started.sessionid recognizer.recognized.result.text
test 7baf5c26aa4e4a6ebf2846e50ec1d0gf To jest testowe nagranie audio.

Oczywiście jest to tylko i wyłącznie bardzo prosty przykład, i w rzeczywistym scenariuszu taka operacja wygeneruje dużo więcej linijek… ;-)

Przy okazji obserwacji działania konwersji fajnie widać, jak działa algorytm, który nie tylko rozpoznaje kolejne wyrazy, ale stara się zgadywać, jaka jest struktura zdania.

Stoi na stacji lokomotywa…

Ale nie ma co pracować na teorii, weźmy Lokomotywę Tuwima na warsztat i zobaczmy, jak Azure Speech API (SPX CLI) sobie z tym poradzi (tak, wiem, widać klucz API ;-)):

W wyniku konwersji mowy na tekst otrzymałem:

audio.input.id recognizer.session.started.sessionid recognizer.recognized.result.text
test2 dfd7675ad4984a4b9716b16b73cf2fa7 Stoi na stacji lokomotywa ciężka, ogromna i pot z niej spływa tłusta oliwa. Stoi i sapie dyszy i dmucha. Żar z rozgrzanego jej brzucha bucha cha buf jak gorąco uch jak gorąco. Jogo bolącą ucz ich o gurion. ZOO już ledwo sapie już ledwo zipie, a jeszcze palacz węgiel w nią sypie wagony do niej po do czepiali wielkiej ciężkie z żelaza stali i pełno ludzi w każdym wagonie AW jednym krowy AW 2 konie AW 3 siedzą same grubasy siedzą i jedzą tłuste kiełbasy. A 4 wagon pełen bananów AW 5 stoi 6 fortepianów w 6. Armata hu jako wielka pod każdym kołem żelazna belka 7 dębowe stoły i szafy w 8 słoń, niedźwiedź i 2 żyrafy w 9 same tuczone świnie w 10, kufry paki i skrzynie, a tych wagonów jest ze 40. Sam, nie wiem co się w nich jeszcze mieści, lecz choćby przyszło 1000 atletów i każdy zjadłby 1000 kotletów i każdy nie wiem jak się wytężał. To nie udźwigną. Taki to ciężar. Nagle gwizd. Nagle świst para buch koła w ruch najpierw powoli jak żółw ociężale ruszyła maszyna po szynach ospale szarpnęła wagony i ciągnie z mozołem. I kręci się, kręci się koło za kołem i biegu przyspiesza i gna coraz prędzej i dudni i stuka ło moce i pędzi. A dokąd dokąd? A dokąd na wprost po torze po torze po torze, przez most przez góry, przez tunel, przez pola, przez Las i spieszy się spieszy, by zdążyć na czas do taktu turko ci puka i stuka. To tak to to tak to to tak to to tak to to gładko tak lekko tak toczy się w dal jak gdyby to była piłeczka nie stal nie ciężka maszyna zziajana zdyszana lecz fraszka igraszka, zabawka blaszana skądże to jakże to czemu tak gna co to to co to to kto to tak pcha że pędzi że wali że bucha bucha to para gorąca wprawiła to w ruch to para co z kotła rurami do tłoków. A tłoki kołami ruszają z 2 boków i gnają i pchają i pociąg się toczy, bo para te tłoki wciąż tłoczy i tłoczy i koła tour kocą i puka i stuka to tak to to tak to to tak to to tak to to tak to to tak.

Idealnie może nie jest, ale przypominam, że to nie tylko automat, nie tylko na potrzeby SEO, nie tylko można poddać korekcie (oczywiście za dodatkową kasę, bo cena automatu to dolar za godzinę, a do tego pierwsze 5 godzin w każdym miesiącu jest bezpłatne), ale też Lokomotywa Tuwima jest specyficznym dziełem… ;-)

(!) Zgłoś błąd na stronie | Lub postaw nam kawę :-)
LUTy dla D-Cinelike (DJI Mini 3 Pro, DJI Avata, OSMO Pocket) od MiniFly
Wdrożenie Omnibusa w sklepie na WooCommerce
Jak (legalnie) latać dronem w Kategorii Otwartej
Patryk