Whisperowa transkrypcja w C++

Możliwość transkrypcji audio rozpala ostatnio wyobraźnię wielu osób, a jakość rezultatów zaprezentowanego już pół roku temu Whispera wzbudza co najmniej podziw. Niestety, zarówno "oryginalny" Whisper, jak i jego okienkowa wariacja sprawiają nieco problemów. A to trzeba zainstalować Pythona, język programowania, a to pościągać sterowniki, a to - o zgrozo! - napisać jakiś skrypt. Na dodatek wydajność przy przetwarzaniu samym procesorem komputera jest dla lepszych modeli językowych (large i medium) zazwyczaj mało satysfakcjonująca, wymuszając zastosowanie wydajnej karty graficznej z dużą ilością pamięci (no i równie dużą ceną).

Dzisiaj natknąłem się na wpis kolegi Rafała Bielawskiego, który wyszukał nowe cudo: Const-me Whisper, czyli port do Whispera, napisany w C++. Ma to swoje wymierne korzyści: po pierwsze, zwiększoną wydajność, po drugie, łatwość użycia. Ładujemy się zatem na stronę projektu i z grupy Releases pobieramy odpowiednie archiwum. Jeśli ktoś lubi linię poleceń (ja!), pobiera archiwum cli.zip, wielbiciele okienek pobierają WhisperDesktop.zip. Wypakowujemy gdzieś pobrane archiwum i teraz jeszcze ściągamy odpowiedni model, np. ggml-large.bin czy ggml-medium.bin. Model wrzucamy do katalogu z rozpakowanym wcześniej archiwum.

Tryb okienkowy

Uruchamiamy WhisperDesktop.exe i w pierwszym okienku wskazujemy, z jakiego modelu będziemy korzystać (czyli wskazujemy plik modelu):

Przechodzimy dalej i tutaj już wybieramy język transkrypcji oraz wskazujemy plik audio i wybieramy, co chcemy dostać w wyniku (tekst, plik ze znacznikami czasowymi srt itp.):

I to już. Wystarczy kliknąć na Transcribe, a program zrobi wszystko, co trzeba.

Tryb linii poleceń

W trybie linii poleceń wchodzimy do katalogu z rozpakowanym programem main.exe (w tym samym katalogu wrzucamy także model, dla uproszczenia). Wpisujemy komendę:

main -m ggml-large.bin -l pl -osrt sciezka_do_pliku_mp3

gdzie, naturalnie, stosujemy odpowiednią nazwę pliku modelu (tutaj ggml-large.bin) i właściwą ścieżkę do pliku audio (zamiast sciezka_do_pliku_mp3). Zatwierdzamy klawiszem Enter i czekamy na wynik.

Rzecz jasna, wywołanie można sobie dowolnie skonfigurować, tu podałem moje ustawienia. Pełną listę opcji można przeczytać, jeśli wywołamy program main.exe bez żadnych parametrów.

Wydajność

Z moich pomiarów na paru przetwarzanych wcześniej plikach wynikło tyle, że faktycznie ta wersja Whispera jest szybsza i są to różnice znaczące. Trwający 8 minut odcinek, transkrybowany wcześniej Whisperem "pythonowym", zajął mojej maszynie z kartą RTX3060 3:20. Obecna wersja to już zaledwie 1:32. Kawałek 18 minutowy poprzednio zajmował prawie 10 minut, teraz trzy i pół, więc zysk jest niemal trzykrotny, a ponad dwukrotny. Dla kogoś obrabiającego godzinne i więcej pliki audio będzie to zatem spory zysk.

No coż, idziemy do przodu!

Komentarze