[megoldva] Hangzó szöveg legépelésének automatizálása (Google Speech API)

 ( szz | 2012. szeptember 9., vasárnap - 7:52 )

A közelmúltban komoly emberi energiát igénylő feladat volt egy-egy előadás vagy más (mondatokból álló) hanganyag szövegének legépelése. Most azonban többfelé is lehet látni, hogy magyarul elhangzó szavakat képes értelmezni pl. a Google kereső.

Erre indultam, http://mikepultz.com/2011/03/accessing-google-speech-api-chrome-11 alapján:
wget --post-file=filename.flac --header=”Content-Type: audio/x-flac; rate=16000″ -O result.txt \
“https://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=en-US”

Ha ennek egy rendes angol szöveget adunk át, akkor szépen legépeli: "here's a simple interface to play with at converting speech to text at this point","confidence":0.8885919

Ám a magyar mondatok számára igen arrogánsan válaszol; próbálkoztam lang=hu, lang=hu-HU beállítással, de így válaszolt a kedves Google a flac fájl küldésekor:
"google translation fuck you groupama kim sam soon sn1 hu" vagy később: "ashampoo mushroom u r so fucked my love is a pain new age","confidence":0.67345536

--

A megoldás abban állt, hogy megfelelően kellett paraméterezni a szkriptet (a tényleges bemeneti fájlnak megfelelően):

wget --post-file=proba1.flac --header="Content-Type: audio/x-flac; rate=44100" -O proba1.txt "https://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=hu-HU"

Az eredményt lásd lentebb, itt.
====

ELAVULT:
Pedig léteznie kell magyar változatnak, hisz ez is jól működik: http://support.google.com/chrome/bin/answer.py?hl=hu&answer=1407892

Egy barátom javasolta: "Ha Chrome-ban működik a magyar nyelvű szövegfelismerés, akkor mentsd le (valamilyen extensionnel, első körben a Ctrl-Shift- is megteszi) a Chrome és a Google szerverei közötti kommunikációt, amikor magyar szöveget ismer fel. Ezután küldd ugyanazt szkriptből, mint amit a Chrome küld."

...

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Mondjuk flac helyett megprobalhatnad plain wav-val, asszem azzal is mennie kellene. Lehet, hogy a flac dekodere szar.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal

Próbáltam; egyelőre valószínűleg áll a szolgáltatás, mert üres fájl jön vissza.

Vagy olyan plugin tesztje megy, ami a blablát filterezi, és csak a lényeget adja textben.
Ha beválik, a portálok politika rovata a jelenlegi méretének töredékére eshet vissza.

B+, majdnem lekoptem a kepernyot :-)

Szeretném újra felpörgetni ezt a kérdést, mert felbuzdultam az alábbi tényen:

A http://support.google.com/chrome/bin/answer.py?hl=hu&answer=1407892 webhelyet Chromium (vagy Google Chrome) böngészővel megnyitva, ha lejátszom a gépem (beépített) hangszóróján ezt: http://web2.osb.hu/z/proba1.mp3, akkor (megfelelő mikrofon-beállításnál) a felső keresőmezőben megjelenik a pontos szöveg, amit most onnan másolok ki:
isten hozott benneteket nagyon köszöntök mindenkit

Ez a tény eléggé felvillanyozó.

Elvileg járható az az út is, hogy feldaraboljuk a hangzó anyagot mondatokra, és ezeket a darabkákat adjuk át a böngészőnek hangszórós lejátszás révén, amit valamilyen tesztautomatizációs szkript mindig kimásol... De kell lennie ennél intelligensebb útnak is, ami kihagyja a hangszóró/mikrofon szükségességét.

A múltkor megrekedtem ennél az ötletnél; ezt szeretném most nektek újra felvetni:
Ha Chrome-ban működik a magyar nyelvű szövegfelismerés, akkor mentsd le (valamilyen extensionnel, első körben a Ctrl-Shift-C is megteszi) a Chrome és a Google szerverei közötti kommunikációt, amikor magyar szöveget ismer fel. Ezután küldd ugyanazt szkriptből, mint amit a Chrome küld."

Tudnátok ebben segíteni, hogy ezt hogyan lehetne kipróbálni (azaz mit kell nézni), és milyen tanulságot tudnánk levonni?

A chrome és a Google közötti kommunikációt tcpdump-pal / wireshark-kal tudod lementeni. Ez nem extension, hanem hálózati forgalom analizáló tool. A lementett forgalomból szépen összerakható az eredeti stream (ez a wireshark pl. grafikus felületen automatikusan megcsinálja neked)

Köszönöm az ötletet! Ki is próbáltam, a
sudo tcpdump -lnni eth0 -w dump -s 65535 host support.google.com
paranccsal ezt a dumpot kaptam, amit meg is emésztett a wireshark, de nem látom a fától az erdőt. :-) Lehet, hogy nem kell megadni a hostot, mert esetleg máshová is kommunikál?

Megnéztem a dumpot, azért nem kátod, mert https felett megy, titkosított a stream. Ha kiváncsi vagy, hogy mi megy a https streambe, akkor egy kicsit hackelni kell:
- Kell installálj egy mitmproxy-t (http://mitmproxy.org/)
- Kell csinálnod egy self-signed CA-t, amivel a mitmproxy majd aláírja a fake google-ös tanusítványt - régen használtam, lehet hogy a mitmproxy ezt megcsinálja neked.
- A CA certificate-et be kell importálni a böngészőbe, mint trusted CA-t
- Ezután a böngészőnek meg kell adni a mitmproxy-t, mint proxyt.

A böngésző így a mitmproxy-n keresztül "beszélget", aki "hamisítja" a google certificate-jét, így a plain text kommunikáció megjelenik / log fájlba mentődik.

Köszi! :-) Feltettem a mitmproxy-t (ohó, ez tehát egy man-in-the-middle proxy!)...
A különféle igazolványok az első indítás után ott vannak a .mitmproxy könyvtárban:
mitmproxy-ca-cert.cer mitmproxy-ca-cert.p12 mitmproxy-ca-cert.pem mitmproxy-ca.pem
S nézem a továbbiakat.

Kukk meg a lentebbi linket. Korrekt leiras a Google Speech Recongition API-rol, valaki mar visszafejtette. Spoiler: FLAC formatum kell hozza.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal

Köszi, próbálom átrágni (tényleg vannak benne új infók a régi állapothoz képest). Egyelőre továbbra is csak en-US megoldást látok, ami nem túl releváns, mert ezt már a témafelvető szkript is tudta. Engem a magyar érdekelne :-)

- torolve, elolvastam a legutolso kommentet -
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal

Itt van valami a speech recognition API-rol.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal

Az én gépeim csak beszélni tudnak espeak-kel és festivallal.
Bájcsevegést kinyomtatható szöveggé még nem tudnak konvertálni, bár ez inkább offline üzemmódban érdekelne.

Remek naplóíró scriptet lehetne írni vele.

---
--- A gond akkor van, ha látszólag minden működik. ---
---

És?

Ez egy nagyon kemény téma és a magyar nyelv egyedisége és bonyolultsága miatt sem egyszerű dolog olyan felismerést létrehozni ami kapcsolatban áll az elhangzottakkal.
Nálunk a mindroom nevű magyar szoftver volt tesztelve egy jó darabig. A tapasztalat szerint a Bartók és Kossuth rádió beszélgetős része volt a legjobban felismerhető, vagyis számunkra szinte csak az lett volna használható, amik cd minőségű felvételek, stúdióban felvettek, beszédtechnikailag helyesek. Nem tudom milyen előadást szeretnél a googlival megetetni, de ott feltételezem ezek a lehetőségek nem adottak. Szurkolok, hogy sikerüljön, talán a googlinál vannak már az itteni mérnökök és megoldják a nagy problémát, de még lehet, hogy elég sokat kell majd javítanod utána, mert nem mindegy, hogy fás tajga vagy f*sz taliga.

+1, tudtommal a BME TMIT tanszéke aktívan foglalkozik a témával.

Köszönök mindenkinek minden megjegyzést!

A megoldás abban állt, hogy megfelelő paraméterezést kell adni a szkripteknek:
proba_angol.flac: FLAC audio bitstream data, 16 bit, stereo, 16 kHz, 118127 samples
proba_magyr.flac: FLAC audio bitstream data, 16 bit, stereo, 44.1 kHz, 186624 samples

Az angolra jó volt ez: ...rate=16000...
A magyarra azonban ez kellett: ...rate=44100...

S erre meg is jött a kívánt válasz:
{"status":0,"id":"202ef534252266f55b53e2b296c52a54-1","hypotheses":[{"utterance":"isten hozott benneteket nagyon köszöntök mindenkit","confidence":0.937295}]}

sub

sub

Úgy látszik, a Google hangfelismerőnek szelektív hallása van.
Ezt a hanganyagot ("...nem a csúnya amerikaiak - mi magyarok...") így értelmezte:

{"status":0,"id":"9a32e0ddec4d42fb57e406f857c4f4ef-1","hypotheses":[{"utterance":
"nem a csúnya a mexikóiak sle magyarok","confidence":0.82789284}]}

(Bárki kipróbálhatja a wget --post-file=peldahanganyag.flac --header="Content-Type: audio/x-flac; rate=22050" -O eredmeny.txt "https://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=hu-HU" paranccsal.)

:D
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant.