• Ülikiire kõnetuvastus ilma serveriteta tõelisel näitel. Parim vene keele kõnetuvastustarkvara võrguühenduseta kõnetuvastuse androidile

    12.12.2021

    ) tõelisel Hello Worldi näitel kodumasinate juhtimisest.
    Miks kodumasinad? Jah, sest tänu sellisele eeskujule saab seda hinnata kiirust ja täpsust, mida on võimalik saavutada kasutades täiesti kohalik kõnetuvastus ilma tüübiserveriteta Google ASR või Yandex SpeechKit.
    Lisan artiklile ka kõik programmi lähtekoodid ja komplekti enda Androidi jaoks.

    Miks äkki?

    Hiljuti komistanuna ütlesin autorile, miks ta soovib oma programmis kasutada serveripoolset kõnetuvastust (minu arvates oli see üleliigne ja tõi kaasa probleeme). Mis sellest, kas ma saaksin täpsemalt kirjeldada alternatiivsete meetodite kasutamist projektide puhul, kus pole vaja midagi ära tunda ja sõnastik koosneb lõplikust sõnade hulgast. Lisaks praktilise rakenduse näitel ...

    Miks vajame peale Yandexi ja Google'i midagi muud?

    Selle väga "praktilise rakendusena" valisin teema nutikas kodu hääljuhtimine.
    Miks selline näide? Sest sellel näete neid väheseid täiesti lokaalse kõnetuvastuse eeliseid pilvelahenduste abil tuvastamise ees. Nimelt:
    • Kiirus- me ei sõltu serveritest ega sõltu seetõttu nende saadavusest, ribalaiusest jne. tegurid
    • Täpsus- meie mootor töötab ainult sõnastikuga, millest meie rakendus huvitab, suurendades seeläbi äratundmise kvaliteeti
    • Hind- me ei pea maksma iga serveri päringu eest
    • Hääl aktiveerimine- lisaboonusena esimestele punktidele - saame pidevalt "eetrit kuulata" ilma liiklust raiskamata ja serverit laadimata

    Märge

    Teen kohe reservatsiooni, et neid eeliseid võib pidada eelisteks ainult teatud tüüpi projektidele, Kus me oleme me teame kindlalt, millise sõnastiku ja grammatikaga kasutaja töötab. See tähendab, kui me ei pea ära tundma suvalist teksti (näiteks SMS-sõnumit või otsingupäringut). Vastasel juhul on pilvetuvastus hädavajalik.

    Nii et Android suudab kõne ära tunda ka ilma Internetita!
    Jah, jah ... Ainult JellyBeanis. Ja ainult poole meetri pealt, mitte rohkem. Ja see äratundmine on sama diktaat, ainult kasutades palju väiksemat mudelit. Seega ei saa me seda ka hallata ega konfigureerida. Ja mida ta järgmine kord meile tagasi toob, pole teada. Kuigi SMS-i jaoks-ok just paras!

    Mida me siis teeme?

    Rakendame kodutehnika häälpuldi, mis töötab täpselt ja kiiresti, mõne meetri kauguselt ja isegi odava pidurirämpsu pealt väga soodsatele Android nutitelefonidele, tahvelarvutitele ja kelladele.
    Loogika on lihtne, kuid väga praktiline. Aktiveerime mikrofoni ja ütleme ühe või mitu seadme nime. Rakendus tunneb need ära ja lülitab need olenevalt hetkeolekust sisse või välja. Kas ta saab neilt oleku ja hääldab selle meeldiva naisehäälega. Näiteks ruumi hetketemperatuur.

    Palju praktilisi rakendusi

    Hommikul lõid nad silmi avamata nutitelefoni ekraani öökapile ja käskisid "Tere hommikust!" - stsenaarium käivitub, kohvimasin lülitub sisse ja sumiseb, kostab mõnus muusika, kardinad nihkuvad lahku.
    Riputage odav (2 tuhat, mitte rohkem) nutitelefoni igas toas seinale. Läheme pärast tööd koju ja kamandame tühjusesse “Tark kodu! Valgus, telekas! - Mis edasi saab, ma arvan, et pole vaja öelda.

    Transkriptsioonid



    Grammatika kirjeldab mida mida kasutaja saab öelda. Et Pocketsphinx teaks nagu ta hääldab seda, on vaja, et iga sõna grammatikast kirjutaks, kuidas see vastavas keelemudelis kõlab. St transkriptsioon iga sõna. Seda nimetatakse sõnavara.

    Transkriptsioone kirjeldatakse spetsiaalse süntaksi abil. Näiteks:
    tark uu m n ay j maja d oo m

    Põhimõtteliselt pole midagi keerulist. Topeltvokaal transkriptsioonis tähistab stressi. Topeltkonsonant on pehme kaashäälik, millele järgneb täishäälik. Kõik võimalikud kombinatsioonid kõigi vene keele helide jaoks.

    On selge, et me ei saa oma rakenduses kõiki transkriptsioone eelnevalt kirjeldada, sest me ei tea ette, mis nimesid kasutaja oma seadmetele annab. Seetõttu genereerime sellised transkriptsioonid käigu pealt vastavalt mõnele vene foneetika reeglile. Selleks saab rakendada sellise PhonMapperi klassi, mis saab stringi sisendiks vastu võtta ja genereerida sellele õige transkriptsiooni.

    Hääl aktiveerimine

    See on kõnetuvastusmootori võime "kuulata õhku" kogu aeg, et vastata etteantud fraasile (või fraasidele). Kõik muud helid ja kõne jäetakse kõrvale. See ei ole sama, mis grammatika kirjeldamine ja lihtsalt mikrofoni sisselülitamine. Ma ei esita siin selle ülesande teooriat ja selle toimimise mehaanikat. Lubage mul lihtsalt öelda, et hiljuti on Pocketsphinxi kallal töötavad programmeerijad sellise funktsiooni juurutanud ja nüüd on see API-s saadaval.

    Üks asi väärib kindlasti mainimist. Aktiveerimisfraasi jaoks peate mitte ainult määrama transkriptsiooni, vaid ka valima sobiva tundlikkuse läviväärtus. Liiga väike väärtus toob kaasa palju valepositiivseid tulemusi (see on siis, kui te ei öelnud aktiveerimisfraasi, kuid süsteem tunneb selle ära). Ja liiga kõrge - immuunsusele. Seetõttu on see seadistus eriti oluline. Ligikaudne väärtuste vahemik - 1e-1 kuni 1e-40 olenevalt aktiveerimisfraasist.

    Läheduse aktiveerimine

    See ülesanne on meie projekti spetsiifiline ega ole otseselt seotud tunnustamisega. Koodi on näha otse põhitegevuses.
    Ta mõistab SensorEventListener ja lähenemise hetkel (anduri väärtus on väiksem maksimaalsest väärtusest) käivitab taimeri, kontrollides teatud viivituse järel, kas andur on ikka blokeeritud. Seda tehakse valepositiivsete tulemuste vältimiseks.
    Kui andurit uuesti ei blokeerita, peatame tuvastamise ja tulemuse hankimise (vt kirjeldust allpool).

    Alustame tunnustamist

    Pocketsphinx pakub mugavat API-d tuvastamisprotsessi konfigureerimiseks ja käitamiseks. Need on klassid SpechRecognizer ja SpeechRecognizerSetup.
    Tuvastamise konfigureerimine ja käivitamine näeb välja järgmine:

    PhonMapper phonMapper = new PhonMapper(getAssets().open("dict/ru/hotwords")); Grammatika grammatika = new Grammar(named, phonMapper); grammatika.addWords(hotword); DataFiles andmefailid = new DataFiles(getPackageName(), "ru"); Fail hmmDir = new Fail(dataFiles.getHmm()); Fail dict = new Fail(dataFiles.getDict()); Fail jsgf = new Fail(dataFiles.getJsgf()); copyAssets(hmmDir); saveFile(jsgf, grammar.getJsgf()); saveFile(dict, grammar.getDict()); mRecognizer = SpeechRecognizerSetup.defaultSetup() .setAcousticModel(hmmDir) .setDictionary(dict) .setBoolean("-remove_noise", false) .setKeywordThreshold(1e-7f) .getRecognizer(); mRecognizer.addKeyphraseSearch(KWS_SEARCH, hotword); mRecognizer.addGrammarSearch(COMMAND_SEARCH, jsgf);

    Siin kopeerime esmalt kõik vajalikud failid kettale (Pocketpshinx nõuab kettal akustilist mudelit, grammatika- ja transkriptsioonisõnastikku). Seejärel konfigureeritakse tuvastusmootor ise. Määratud on mudeli- ja sõnastikufailide teed ning mõned parameetrid (aktiveerimisfraasi tundlikkuslävi). Järgmisena konfigureeritakse grammatikafaili tee ja aktiveerimisfraas.

    Nagu sellest koodist näha, on üks mootor konfigureeritud korraga nii grammatika kui ka aktiveerimisfraaside tuvastamiseks. Miks seda tehakse? Et saaksime kiiresti lülituda selle vahel, mida me praegu ära tundma peame. Aktiveerimisfraasi tuvastamise protsessi käivitamine näeb välja järgmine:

    MRecognizer.startListening(KWS_SEARCH);
    Ja nii - kõnetuvastus antud grammatika järgi:

    MRecognizer.startListening(COMMAND_SEARCH, 3000);
    Teine argument (valikuline) on millisekundite arv, mille järel tuvastamine lõpeb automaatselt, kui keegi midagi ei ütle.
    Nagu näete, saate mõlema probleemi lahendamiseks kasutada ainult ühte mootorit.

    Kuidas saada tunnustust

    Tuvastamistulemuse saamiseks tuleb määrata ka liidest rakendav sündmustekuulaja RecognitionListener.
    Sellel on mitu meetodit, mida pocketsphinx kutsub ühe sündmuse ilmnemisel:
    • onBeginningOfSpeech- mootor kuulis heli, võib-olla on see kõne (või võib-olla mitte)
    • onEndOfSpeech- heli lõppes
    • onPartialResult- on vahepealsed tunnustamise tulemused. Aktiveerimisfraasi puhul tähendab see, et see töötas. Argument Hüpotees
    • onResult- tunnustamise lõpptulemus. Seda meetodit kutsutakse pärast meetodi väljakutsumist peatus juures SpeechRecognizer. Argument Hüpotees sisaldab tuvastusandmeid (string ja skoori)

    Rakendades meetodeid onPartialResult ja onResult ühel või teisel viisil, saate muuta tuvastusloogikat ja saada lõpptulemuse. Meie rakenduse puhul toimitakse järgmiselt.

    @Override public void onEndOfSpeech() ( Log.d(TAG, "onEndOfSpeech"); if (mRecognizer.getSearchName().equals(COMMAND_SEARCH)) ( mRecognizer.stop(); ) ) @Alista public void onPartialResult(thesispothes)is ( if (hüpotees == null) return; String text = hypothesis.getHypstr(); if (KWS_SEARCH.equals(mRecognizer.getSearchName())) ( startRecognition(); ) else ( Log.d(TAG, text); ) ) @Override public void onResult(Hypothesis hypothesis) ( mMicView.setBackgroundResource(R.drawable.background_big_mic); mHandler.removeCallbacks(mStopRecognitionCallback); String text = hüpotees != null ? hypothesis.d:TAG; , "onResult" + tekst); if (COMMAND_SEARCH.equals(mRecognizer.getSearchName())) ( if (tekst != null) ( Toast.makeText(this, text, Toast.LENGTH_SHORT).show(); protsess(tekst) ); ) mRecognizer.startListening(KWS_SEARCH); ) )

    Kui saame sündmuse onEndOfSpeech ja tunneme samal ajal ära täidetava käsu, peame tuvastamise peatama, mille järel kutsutakse kohe välja onResult.
    OnResultis peate kontrollima, mis just tuvastati. Kui see on käsk, peate selle täitmiseks käivitama ja aktiveerimisfraasi äratundmiseks mootori lülitama.
    OnPartialResultis huvitab meid ainult aktiveerimisfraasi äratundmine. Kui me selle tuvastame, alustame kohe käsu tuvastamise protsessi. See näeb välja järgmine:

    Privaatne sünkroniseeritud void startRecognition() ( if (mRecognizer == null || COMMAND_SEARCH.equals(mRecognizer.getSearchName())) return; mRecognizer.cancel(); new ToneGenerator(AudioManager.STREAM_MUSIC, ToneGenerator.MAX_Tone(To).startGener.VOLUME). TONE_CDMA_PIP, 200); post(400, new Runnable() ( @Override public void run() ( mMicView.setBackgroundResource(R.drawable.background_big_mic_green); mRecognizer.startListening(COMMAND_SEARCH, 3000,); "Listen (TAG) käsud"); post(4000, mStopRecognitionCallback); ) )); )
    Siin esitame esmalt väikese signaali, et anda kasutajale teada, et oleme teda kuulnud ja oleme tema käsuks valmis. Selle aja jooksul peab mikrofon olema välja lülitatud. Seetõttu alustame tuvastamist pärast väikest ajalõpu (pisut kauem kui signaali kestus, et mitte kuulda selle kaja). Samuti käivitab see lõime, mis sunnib tuvastamise peatuma, kui kasutaja liiga kaua räägib. Sel juhul on see 3 sekundit.

    Kuidas muuta äratuntud string käskudeks

    Noh, kõik on juba konkreetse rakenduse jaoks spetsiifiline. Palja näite puhul tõmbame lihtsalt realt välja seadmete nimed, otsime soovitud seadme ja kas muudame selle olekut HTTP päringu abil nutika kodu kontrollerile või teatame selle hetkeoleku (nagu termostaat). Seda loogikat saab näha Controlleri klassis.

    Kuidas kõnet sünteesida

    Kõnesüntees on äratundmise pöördoperatsioon. Siin, vastupidi, peate muutma tekstirea kõneks, et kasutaja seda kuuleks.
    Termostaadi puhul peame panema oma Android-seadme ütlema hetketemperatuuri. API kasutamine TextToSpeech seda on üsna lihtne teha (tänan Google'it kauni vene keele TTS-i eest):

    Privaatne tühine kõne (stringi tekst) (sünkroonitud (mSpeechQueue) (mRecognizer.stop(); mSpeechQueue.add(tekst); HashMap params = uus HashMap (2); params.put(Kõnetekst.Mootor.KEY_PARAM_UTTERANCE_ID, UUID.randomUUID().toString()); params.put(TextToSpeech.Engine.KEY_PARAM_STREAM, String.valueOf(AudioManager.STREAM_MUSIC)); params.put(TextToSpeech.Engine.KEY_FEATURE_NETWORK_SYNTHESIS, "true"); mTextToSpeech.speak(tekst, TextToSpeech.QUEUE_ADD, params); ) )

    Ma ilmselt ütlen, et see on banaalne, aga enne sünteesiprotsessi on vaja äratundmine keelata. Mõnes seadmes (näiteks kõik Samsungid) on üldiselt võimatu samal ajal mikrofoni kuulata ja midagi sünteesida.
    Kõnesünteesi lõppu (st süntesaatori poolt teksti kõnelemise protsessi lõppu) saab kuulajas jälgida:

    Privaatne lõplik TextToSpeech.OnUtteranceCompletedListener mUtteranceCompletedListener = new TextToSpeech.OnUtteranceCompletedListener() ( @Override public void onUtteranceCompleted(String utteranceId) ( sünkroonitud (mSpeechQuech) (Lecognich.mppeechpeiskeue)(l KWS_OTSING) ; ) ) ) );

    Selles kontrollime lihtsalt, kas sünteesijärjekorras on midagi muud, ja lülitame sisse aktiveerimisfraasituvastuse, kui muud pole.

    Ja see on kõik?

    Jah! Nagu näete, pole tänu selliste suurepäraste projektide nagu Pocketsphinx olemasolule keeruline kõnet otse seadmes kiiresti ja täpselt ära tunda. See pakub väga mugavat API-d, mida saab kasutada häälkäskluste tuvastamisega seotud probleemide lahendamiseks.

    Selles näites keerasime tuvastamise täiesti õigele ülesandele - nutikodu seadmete hääljuhtimine. Tänu kohalikule äratundmisele oleme saavutanud väga suure kiiruse ja minimeerinud vead.
    On selge, et sama koodi saab kasutada ka muude häälega seotud ülesannete jaoks. See ei pea olema tark kodu.

  • hääljuhtimine
  • häälemootor
  • Lisa märksõnu

    Tooted ja tehnoloogiad:

    Visual Studio, C#, .NET kõneteegid

    Artikkel käsitleb:

    • kõnetuvastuse toe lisamine konsoolirakendusele;
    • äratuntav kõnetöötlus;
    • kõnetuvastuse teekide paigaldamine;
    • Microsoft.Speech ja System.Speech võrdlemine;
    • kõnetuvastuse toe lisamine Windows Formsi rakendusele.

    Kõnega aktiveeritava isikliku abistaja Windows Phone Cortana (nagu ka puuviljafirma kolleegi, mida ei tohiks asjata mainida) tulekuga on kõnetoega rakendused muutunud tarkvaraarenduses üha olulisemaks. Selles artiklis näitan teile, kuidas alustada kõnetuvastuse ja sünteesiga Windowsi konsoolirakendustes, Windows Formsi rakendustes ja Windows Presentation Foundationis (WPF).

    Pange tähele, et saate lisada kõnevõimalusi ka Windows Phone'i rakendustele, ASP.NET-i veebirakendustele, Windows Store'i rakendustele, Windows RT-le ja Xbox Kinectile, kuid need tehnikad erinevad selles artiklis käsitletutest.

    Hea viis mõista, mida selles artiklis täpselt käsitletakse, on vaadata kahe erineva demoprogrammi ekraanipilte aadressil riis. üks ja 2 . Pärast konsoolirakenduse käivitamist riis. üksütleb kohe lause "olen ärkvel". Loomulikult ei kuule te seda artiklit lugedes demorakendust, seega kuvab see arvuti öeldu teksti. Seejärel ütleb kasutaja käsu "Speech on". Demorakendus vastab tuvastatud tekstiga ning seejärel kuulab ja vastab kahe numbri lisamise taotlustele.

    Riis. 1. Kõnetuvastus ja süntees konsoolirakenduses


    Riis. 2. Kõnetuvastus Windows Formsi rakenduses

    Kasutaja palus rakendusel lisada üks ja kaks, seejärel kaks ja kolm. Rakendus tundis häälkäsklused ära ja andis vastuseid häälega. Hiljem kirjeldan kasulikumaid kõnetuvastuse kasutamise viise.

    Seejärel ütles kasutaja "Speech off" – häälkäsklus, mis deaktiveerib numbrite lisamise käskude kuulamise, kuid ei lülita kõnetuvastust täielikult välja. Pärast seda suulist käsku eirati järgmist käsku lisada üks ja kaks. Lõpuks lubas kasutaja uuesti käskude kuulamise ja ütles mõttetu käsu "Klatu barada nikto", mille rakendus tundis ära kui käsku kõnetuvastuse täielikuks deaktiveerimiseks ja enda lõpetamiseks.

    peal riis. 2 näitab Windowsi vormide rakendust, kus näivkõne on lubatud. See rakendus tunneb ära häälkäsklused, kuid ei vasta neile häälväljundiga. Rakenduse esmakordsel käivitamisel ei märgitud ruut Speech On märgitud, mis näitab, et kõnetuvastus ei olnud aktiivne. Kasutaja märkis selle kasti ja ütles siis "Tere". Rakendus vastas, kuvades tuvastatud teksti akna allosas asuvas loendikasti juhtelemendis.

    Seejärel ütles kasutaja "Määra tekstikast 1 punaseks". Rakendus tundis kõne ära ja vastas "Määra tekstikast 1 punaseks", mis on peaaegu (kuid mitte päris) täpselt see, mida kasutaja ütles. Kuigi edasi riis. 2 te ei näe seda, akna ülaosas olevas TextBox juhtelemendis on tekst tõesti punane.

    Seejärel ütles kasutaja: "Palun määrake tekstikast 1 valgeks". Rakendus tuvastas selle kui "tekstikasti 1 valgeks määramine" ja tegi just seda. Lõpuks ütles kasutaja "Good-bye" ja rakendus kuvas selle teksti, kuid ei teinud Windows Formsiga midagi, kuigi see võib näiteks kustutada lipu Speech On.

    Süntesaatori objekti kasutamine on üsna lihtne.

    Järgmistes jaotistes tutvustan teile mõlema demoprogrammi loomise protsessi, sealhulgas vajalike .NET-i kõneteekide installimist. See artikkel eeldab, et teil on programmeerimisoskused vähemalt kesktasemel, kuid kõnetuvastuse ja sünteesi kohta pole midagi.

    Kõnetuvastuse toe lisamine konsoolirakendusele

    Näidatud demo loomiseks riis. üks, käivitasin Visual Studio ja lõin uue C# konsoolirakenduse nimega ConsoleSpeech. Olen kõnetööriistu edukalt kasutanud Visual Studio 2010 ja 2012 puhul, kuid iga suhteliselt värske versioon peaks töötama. Pärast malli koodi laadimist redaktorisse nimetasin Solution Exploreri aknas faili Program.cs ümber kirjeldavamaks ConsoleSpeechProgram.cs ja Visual Studio nimetas programmi klassi minu jaoks ümber.

    Järgmisena lisasin viite failile Microsoft.Speech.dll, mis asub kaustas C:\ProgramFiles (x86)\Microsoft SDKs\Speech\v11.0\Assembly. See DLL oli minu arvutist puudu ja ma pidin selle alla laadima. Rakendusele kõnetuvastuse ja sünteesi lisamiseks vajalike failide installimine pole nii triviaalne. Selgitan installiprotsessi üksikasjalikult järgmises jaotises, kuid oletame praegu, et teie süsteemis on Microsoft.Speech.dll.

    Lisades viite kõne-DLL-ile, eemaldasin koodi ülaosast kõik kasutavad laused, välja arvatud ülataseme avaldused, mis viitavad süsteemi nimeruumile. Seejärel lisasin, kasutades avaldusi nimeruumide Microsoft.Speech.Recognition, Microsoft.Speech.Synthesis ja System.Globalization jaoks. Esimesed kaks nimeruumi vastendatakse kõne DLL-iga. Pange tähele, et on ka nimeruume, nagu System.Speech.Recognition ja System.Speech.Synthesis, mis võivad segadust tekitada. Selgitan peagi nende erinevust. Globaliseerumise nimeruum oli vaikimisi saadaval ega vajanud projektile uue viite lisamist.

    Demokonsoolirakenduse kogu lähtekoodi leiate aadressilt riis. 3 ja see on saadaval ka selle artikliga kaasas olevas lähtepaketis. Eemaldasin kogu standardse veakäsitluse, et mitte varjata peamisi ideid nii palju kui võimalik.

    Riis. 3. Demokonsooli rakenduse lähtekood

    süsteemi kasutamine; kasutades Microsoft.Speech.Recognition; kasutades Microsoft.Speech.Synthesis; kasutades System.Globalization; nimeruum ConsoleSpeech ( klass ConsoleSpeechProgram ( staatiline SpeechSynthesizer ss = new SpeechSynthesizer(); staatiline kõnetuvastusmootor sre; staatiline bool tehtud = vale; staatiline bool speakOn = tõene; staatiline void Main(string args) ( proovigeLWAudiodevice. ("\n(Rääkimine: olen ärkvel)"); ss.Speak("Ma olen ärkvel"); CultureInfo ci = new CultureInfo("en-us"); sre = new SpeechRecognitionEngine(ci); sre.SetInputToDefaultAudioDevice( sre.SpeechRecognized += sre_SpeechRecognized; Valikud ch_StartStopCommands = new Choices(); ch_StartStopCommands.Add("speech on"); ch_StartStopCommands.Startnikl.Add("Speech_Startnikla"Bmarttunik"Grabtomptnikklad(Bmarttuklad"Bmarttuklad"Bmarttuklad"Bmarttundikla"Bmarttummand" = new GrammarBuilder(); gb_StartStop.Append(ch_StartStopCommands); Grammatika g_StartStop = new Grammar(gb_StartStop); Valikud ch_Numbers = new Choices(); ch_Numbers.Add("1"); ch_Numbers.Add_"2"); Add("3"); ch_Numbers.Add("4"); GrammarBuilder gb_WhatI sXplusY = uus GrammarBuilder(); gb_WhatIsXplusY.Append("Mis on"); gb_WhatIsXplusY.Append(ch_Numbers); gb_WhatIsXplusY.Append("pluss"); gb_WhatIsXplusY.Append(ch_Numbers); Grammatika g_WhatIsXplusY = new Grammatika(gb_WhatIsXplusY); sre.LoadGrammarAsync(g_StartStop); sre.LoadGrammarAsync(g_WhatIsXplusY); sre.RecognizeAsync(RecognizeMode.Multiple); while (done == false) ( ; ) Console.WriteLine("\nTabamus< enter >kesta sulgemiseks\n"); Console.ReadLine(); ) püüdmine (Erand va) ( Console.WriteLine(ex.Message); Console.ReadLine(); ) ) // Peamine staatiline void sre_SpeechRecognized(objekti saatja, SpeechRecognizedEventArgs e ) ( string txt = e.Result.Text; ujuv usaldus = e.Result.Confidence; Console.WriteLine("\nTunnustatud: " + txt); if (usaldus< 0.60) return; if (txt.IndexOf("speech on") >= 0) ( Console.WriteLine("Kõne on nüüd SEES"); voiceOn = tõene; ) if (txt.IndexOf("kõne väljas") >= 0) ( Console.WriteLine("Kõne on nüüd VÄLJAS"); voiceOn = false; ) if (speechOn == false) return; if (txt.IndexOf("klatu") >= 0 && txt.IndexOf("barada") >= 0) (((SpeechRecognitionEngine)sender).RecognizeAsyncCancel(); done = true; Console.WriteLine("(Rääkimine: Hüvasti)"); ss.Speak("Hüvasti"); ) if (txt.IndexOf("Mis") >= 0 && txt.IndexOf("pluss") >= 0) ( stringwords = txt.Split(" "); int arv1 = int.Parse(sõnad); int arv2 = int.Parse(sõnad); int summa = arv1 + arv2; Console.WriteLine("(Rääkimine: " + sõnad + " pluss " + sõnad + " võrdub " + summa + ")"); ss.SpeakAsync(sõnad + " pluss " + sõnad + " võrdub " + summa); ) ) // sre_SpeechRecognized ) // Programm ) // ns

    Pärast lausete kasutamist algab demokood järgmiselt:

    nimeruum ConsoleSpeech ( klass ConsoleSpeechProgram ( staatiline SpeechSynthesizer ss = new SpeechSynthesizer(); staatiline kõnetuvastusmootor sre; staatiline bool tehtud = vale; staatiline bool speakOn = tõene; static void Main(string args) ( ...

    SpeechSynthesizer objekt klassi tasemel võimaldab rakendusel kõnet sünteesida. SpeechRecognitionEngine objekt võimaldab rakendusel kuulata ja ära tunda öeldud sõnu või fraase. Boolean muutuja done määrab, millal rakendus tervikuna lõpeb. Tõeväärtuse muutuja voiceOn määrab, kas rakendus kuulab muid käske peale programmi väljumise käsu.

    Idee seisneb selles, et konsoolirakendus ei aktsepteeri klaviatuuri sisendit, seega kuulab see alati käske. Kui aga voiceOn on väär, tuvastatakse ja täidetakse ainult programmist väljumise käsk; teised käsud tuvastatakse, kuid neid ignoreeritakse.

    Peamine meetod algab järgmiselt:

    try ( ss.SetOutputToDefaultAudioDevice(); Console.WriteLine("\n(Räägib: ma olen ärkvel)"); ss.Speak("Ma olen ärkvel");

    SpeechSynthesizer objekti eksemplar loodi selle deklareerimisel. Süntesaatori objekti kasutamine on üsna lihtne. SetOutputToDefaultAudioDevice meetod saadab väljundi arvutiga ühendatud kõlaritesse (väljundit saab saata ka faili). Rääkimismeetod võtab stringi ja räägib selle seejärel välja. Nii lihtne see ongi.

    Kõnetuvastus on palju keerulisem kui selle süntees. Põhimeetod jätkub tuvastusobjekti loomisega:

    CultureInfo ci = new CultureInfo("en-us"); sre = uus SpeechRecognitionEngine(ci); sre.SetInputToDefaultAudioDevice(); sre.SpeechRecognized += sre_SpeechRecognized;

    Objekt CultureInfo määrab esmalt ära tuvastatava keele, antud juhul Ameerika Ühendriikide inglise keele. CultureInfo objekt asub Globaliseerumise nimeruumis, millele viitasime käsuga use. Seejärel, pärast SpeechRecognitionEngine'i konstruktori väljakutsumist, määratakse häälesisend vaikeheliseadmele, enamasti mikrofonile. Pange tähele, et enamikul sülearvutitel on sisseehitatud mikrofon, kuid lauaarvutid vajavad välist mikrofoni (seda tänapäeval sageli kombineeritakse kõrvaklappidega).

    Tuvastajaobjekti põhimeetod on SpeechRecognized sündmuste töötleja. Kui sisestate Visual Studio kasutamisel "sre.SpeechRecognized +=" ja ootate sekundi murdosa, lõpetab IntelliSense teie avaldise automaatselt sündmusekäitleja nimega - sre_SpeechRecognized. Soovitan teil vajutada tabeldusklahvi, et nõustuda pakutud valikuga ja kasutada seda nime vaikimisi.

    Valikud ch_Numbers = new Valikud(); ch_Numbers.Add("1"); ch_Numbers.Add("2"); ch_Numbers.Add("3"); ch_Numbers.Add("4"); // tehnilisest aspektist, // see on Add(new string ( "4" )); GrammarBuilder gb_WhatIsXplusY = new GrammarBuilder(); gb_WhatIsXplusY.Append("Mis on"); gb_WhatIsXplusY.Append(ch_Numbers); gb_WhatIsXplusY.Append("pluss"); gb_WhatIsXplusY.Append(ch_Numbers); Grammatika g_WhatIsXplusY = new Grammatika(gb_WhatIsXplusY);

    Siin on kolm põhiobjekti valikute komplekt, GrammarBuilderi mall ja kontrolliv grammatika. Kui ma koostan äratundmiseks grammatikat, loen alustuseks mõned konkreetsed näited selle kohta, mida ma pean ära tundma. Öelge: "Mis on üks pluss kaks?" ja "Mis on kolm pluss neli?".

    Seejärel määratlen sobiva üldise mustri, näiteks "Mis on pluss ? Mall on GrammarBuilder ja konkreetsed väärtused, mis mallile edastatakse, on valikud. Grammatikaobjekt kapseldab malli ja valikud.

    Demos piiran lisamist 1-le 4-le ja lisan need stringidena valikute komplekti. Tõhusam lähenemine:

    string numbrid = new string( "1", "2", "3", "4" ); Valikud ch_Numbers = new Valikud(numbrid);

    Tutvustan teile vähem tõhusat lähenemisviisi valikute komplekti loomiseks kahel põhjusel. Esiteks oli ühe rea kaupa lisamine ainus lähenemine, mida olen näinud teistes kõnetuvastuse näidetes. Teiseks võite arvata, et ühe rea korraga lisamine ei peaks üldse toimima; Visual Studio IntelliSense näitab reaalajas, et üks lisamisülekoormustest võtab params stringfraaside tüüpi parameetri. Kui te märksõna params ei märganud, võisite arvata, et meetod Add aktsepteerib ainult stringide massiive, kuid mitte ühtki stringi. Kuid see pole nii: ta aktsepteerib mõlemat. Soovitan teil massiivi läbida.

    Järjestikustest numbritest valikute komplekti loomine on mõnevõrra erijuhtum ja võimaldab teil kasutada programmilist lähenemist, näiteks:

    string numbrid = uus string; jaoks (int i = 0; i< 100; ++i) numbers[i] = i.ToString(); Choices ch_Numbers = new Choices(numbers);

    Pärast valikute loomist GrammarBuilderi pesade täitmiseks loob demo GrammarBuilderi ja seejärel kontrolliva grammatika:

    GrammarBuilder gb_WhatIsXplusY = new GrammarBuilder(); gb_WhatIsXplusY.Append("Mis on"); gb_WhatIsXplusY.Append(ch_Numbers); gb_WhatIsXplusY.Append("pluss"); gb_WhatIsXplusY.Append(ch_Numbers); Grammatika g_WhatIsXplusY = new Grammatika(gb_WhatIsXplusY);

    Demoprogramm kasutab käivitamise ja lõpetamisega seotud käskude grammatika loomisel sarnast mustrit:

    Valikud ch_StartStopCommands = new Valikud(); ch_StartStopCommands.Add("kõne sisse"); ch_StartStopCommands.Add("kõne väljas"); ch_StartStopCommands.Add("klatu barada nikto"); GrammarBuilder gb_StartStop = new GrammarBuilder(); gb_StartStop.Append(ch_StartStopCommands); Grammatika g_StartStop = new Grammar(gb_StartStop);

    Grammatikat saab defineerida väga paindlikult. Siin on käsud "kõne sisse", "kõne välja" ja "klatu barada nikto" paigutatud ühte grammatikasse, kuna need on loogiliselt seotud. Need kolm käsku võiks olla defineeritud kolmes erinevas grammatikas või panna käsklused "kõne sisse" ja "kõne välja" ühte grammatikasse ning käsklus "klatu barada nikto" teise.

    Pärast kõigi grammatikaobjektide loomist paned need kõnetuvastajasse ja kõnetuvastus aktiveeritakse:

    sre.LoadGrammarAsync(g_StartStop); sre.LoadGrammarAsync(g_WhatIsXplusY); sre.RecognizeAsync(RecognizeMode.Multiple);

    Argumenti RecognizeMode.Multiple on vaja siis, kui teil on rohkem kui üks grammatika, mis kehtib kõigis programmides, välja arvatud kõige lihtsamad. Peamine meetod lõpeb järgmiselt:

    While (done == false) ( ; ) Console.WriteLine("\nTabamus< enter >kesta sulgemiseks\n"); Console.ReadLine(); ) püüdmine (Erand va) ( Console.WriteLine(ex.Message); Console.ReadLine(); ) ) // Peamine

    Veider näiv tühi, while-tsükkel hoiab konsoolirakenduse kesta töös. Silmus lõpeb, kui kõnetuvastuse sündmuste töötleja määrab klassitaseme tõeväärtuse tehtud väärtuseks Tõene.

    Kõnetuvastuse töötlemine

    Kõnetuvastusega seotud sündmuste käsitlemise kood algab järgmiselt:

    staatiline void sre_SpeechRecognized(objekti saatja, SpeechRecognizedEventArgs e) ( string txt = e.Result.Text; ujuv usaldus = e.Result.Confidence; Console.WriteLine("\nTunnustatud: " + txt);< 0.60) return; ...

    Tuvastatud tekst salvestatakse objekti SpeechRecognizedEventArgs atribuuti Result.Text. Teise võimalusena võite kasutada komplekti Result.Words. Atribuut Result.Confidence salvestab väärtuse vahemikus 0,0 kuni 1,0, mis on ligikaudne hinnang selle kohta, kui hästi kõneldud tekst vastab tuvastajaga seotud grammatikatele. Demoprogramm käsib sündmuste käitlejal teksti ignoreerida ja tuvastatud teksti suhtes on madal usaldusväärsus.

    Usaldusväärtused sõltuvad suuresti teie grammatika keerukusest, mikrofoni kvaliteedist ja muudest teguritest. Näiteks kui demo peab tuvastama ainult numbreid 1 kuni 4, on minu arvuti usaldusväärtused tavaliselt umbes 0,75. Kuid kui grammatika peaks ära tundma numbreid vahemikus 1 kuni 100, langevad usaldusväärtused umbes 0,25-ni. Lühidalt, heade kõnetuvastustulemuste saamiseks peate tavaliselt katsetama usaldusväärtustega.

    if (txt.IndexOf("kõne sisse") >= 0) ( Console.WriteLine("Kõne on nüüd SEES"); voiceOn = true; ) if (txt.IndexOf("kõne väljas") >= 0) ( Konsool .WriteLine("Kõne on nüüd VÄLJAS"); speakOn = false; ) if (speechOn == false) return;

    Kuigi see ei pruugi alguses täiesti ilmne olla, peaks see loogika olema mõttekas, kui sellele järele mõelda. Seejärel töödeldakse salajast väljumiskäsku:

    if (txt.IndexOf("klatu") >= 0 && txt.IndexOf("barada") >= 0) (((SpeechRecognitionEngine)sender).RecognizeAsyncCancel(); done = true; Console.WriteLine("(Rääkimine: Hüvasti)"); ss.Speak("Hüvasti"); )

    Pange tähele, et kõnetuvastusmootor suudab tegelikult ära tunda mõttetuid sõnu. Kui grammatikaobjekt sisaldab sõnu, mida objekti sisseehitatud sõnastikus pole, proovib grammatika neid sõnu igal võimalusel semantilise heuristika abil tuvastada ja see on tavaliselt üsna edukas. Seetõttu kasutasin õige "klaatu" (vanast ulmefilmist) asemel "klatu".

    Samuti pange tähele, et te ei pea töötlema kogu grammatika poolt äratuntavat teksti ("klatu barada nikto") – teil peab lihtsalt olema piisavalt teavet, et grammatiline fraas ("klatu" ja "barada") üheselt tuvastada.

    If (txt.IndexOf("Mis") >= 0 && txt.IndexOf("pluss") >= 0) ( stringwords = txt.Split(" "); int num1 = int.Parse(words); int num2 = int.Parse(sõnad);int summa = arv1 + arv2;Console.WriteLine("(Rääkimine: " + sõnad + " pluss " + sõnad + " võrdub " + summa + ")"); ss.SpeakAsync(words + " pluss " + sõnad + " võrdub " + summa); ) ) // sre_SpeechRecognized ) // Programm ) // ns

    Pange tähele, et jaotises Results.Text olev tekst on tõstutundlik ("Mis" ja "mis"). Olles fraasi ära tundnud, saab selle konkreetseteks sõnadeks lahti võtta. Sel juhul on tuvastatud tekst kujul "Mis on x pluss y", nii et "Mis" pannakse sõnadesse ja kaks lisatud numbrit (stringidena) salvestatakse sõnadesse ja sõnadesse.

    Teekide installimine

    Demoprogrammi selgitus eeldab, et arvutisse on installitud kõik vajalikud kõneteegid. Demoprogrammide loomiseks ja käitamiseks tuleb installida neli paketti: SDK (pakkub võimalust luua Visual Studios demosid), käitusaeg (käitab demosid pärast nende loomist), tuvastatud ja sünteesitud (programmi poolt hääldatud) keeled.

    SDK installimiseks otsige veebist sõna "Speech Platform 11 SDK". See viib teid Microsofti allalaadimiskeskuses õigele lehele ( riis. 4). Klõpsates nuppu Laadi alla, näete kuvatavaid valikuid riis. 5. SDK on saadaval 32- ja 64-bitistes versioonides. Soovitan tungivalt kasutada 32-bitist versiooni, olenemata teie süsteemi bitidusest. 64-bitine versioon ei suhtle mõne rakendusega.


    Riis. 4. SDK installimise põhileht Microsofti allalaadimiskeskuses


    Riis. 5. Speech SDK installimine

    Teil pole vaja midagi peale ühe .msi-faili x86 all (32-bitiste süsteemide jaoks). Valides selle faili ja klõpsates nuppu Edasi, saate installija käivitada otse siit. Kõneteegid ei anna installimise lõppemise kohta palju tagasisidet, seega ärge otsige eduteateid.


    Riis. 6. Käitusaja installimine

    Äärmiselt oluline on valida SDK-ga sama platvormi versioon (11 demos) ja bitisügavus (32 või 64). Jällegi soovitan soojalt 32-bitist versiooni, isegi kui kasutate 64-bitist süsteemi.

    Seejärel saate määrata tuvastuskeele. Allalaadimisleht asub aadressil riis. 7. Demo kasutab MSSpeech_SR_en-us_TELE.msi (inglise-USA) faili. SR tähistab kõnetuvastust ja TELE telefonikõnet; see tähendab, et tuvastatav keel on loodud töötama madala kvaliteediga helisisendiga, näiteks telefoni või lauamikrofoniga.


    Riis. 7. Tunnustatud keele määramine

    Lõpuks saate määrata kõnesünteesi keele ja hääle. Allalaadimisleht asub aadressil riis. kaheksa. Demoprogramm kasutab faili MSSpeech_TTS_en-us_Helen.msi. TTS (text-to-speech) on sisuliselt kõnesünteesi sünonüüm. Pange tähele kahte saadaolevat häält inglise, USA. On ka teisi ingliskeelseid hääli, kuid mitte USA hääli. Sünteesikeelefailide loomine on väga raske ülesanne. Siiski saate osta ja installida muid hääli paljudelt ettevõtetelt.


    Riis. 8. Hääle ja sünteesi keele seadistamine

    Kummalisel kombel on kõnetuvastuskeel ja kõne/kõne sünteesi keel tegelikult üsna erinevad asjad, kuid mõlemad paketid on samal allalaadimislehel valikud. Allalaadimiskeskuse kasutajaliides võimaldab märkida nii tuvastuskeele kui ka sünteesikeele, kuid nende samaaegne installimine osutus minu jaoks hukatuslikuks, seega soovitan need eraldi installida.

    Microsoft.Speechi võrdlemine System.Speechiga

    Kui olete Windowsi rakenduste kõnetuvastuse ja sünteesiga uustulnuk, võite dokumentatsioonist kergesti segadusse sattuda, kuna kõneplatvorme on mitu. Eelkõige on lisaks käesolevas artiklis demodes kasutatavale teegile Microsoft.Speech.dll olemas ka System.Speech.dll teek, mis on osa Windowsi operatsioonisüsteemist. Need kaks teeki on sarnased selles mõttes, et nende API-d on peaaegu, kuid mitte täiesti identsed. Nii et kui otsite Internetist kõnetöötluse näiteid ja näete koodijuppe, mitte terviklikke programme, pole sugugi ilmne, kas see näide kehtib süsteemi kohta System.Speech või Microsoft.Speech.

    Kui te pole kõnetöötluses uus, kasutage oma .NET-rakendusele kõnetoe lisamiseks System.Speechi asemel teeki Microsoft.Speech.

    Kuigi mõlemal teegil on ühine põhikoodibaas ja sarnased API-d, on need kindlasti erinevad. Mõned peamised erinevused on kokku võetud sakk. üks.

    Tab. 1. Peamised erinevused funktsioonide Microsoft.Speech ja System.Speech vahel

    System.Speech DLL on OS-i osa, seega installitakse see igasse Windowsi süsteemi. Microsoft.Speechi DLL (ja sellega seotud käitusajad ja keeled) tuleb alla laadida ja süsteemi installida. Tuvastamine System.Speech abil nõuab tavaliselt kasutajapõhist õppimist, kui kasutaja loeb teksti ja süsteem õpib mõistma sellele kasutajale iseloomulikku hääldust. Tuvastamine Microsoft.Speechi abil toimib kohe iga kasutaja jaoks. System.Speech suudab ära tunda peaaegu iga sõna (seda nimetatakse vabaks dikteerimiseks). Microsoft.Speech tuvastab ainult need sõnad ja fraasid, mis on programmis määratletud grammatikaobjektis.

    Kõnetuvastuse toe lisamine Windowsi vormide rakendusele

    Kõnetuvastuse ja sünteesi toe lisamine Windowsi vormidele või WPF-rakendusele on sarnane konsoolirakendusele. Näidatud demoprogrammi loomiseks riis. 2, käivitasin Visual Studio, lõin uue C# Windows Forms rakenduse ja nimetasin selle ümber WinFormSpeech.

    Pärast malli koodi laadimist redaktorisse lisasin Solution Exploreri aknasse viite failile Microsoft.Speech.dll – täpselt nagu tegin konsooliprogrammis. Lähtekoodi ülaosas eemaldasin mittevajalikud laused, jättes alles vaid viited nimeruumidele System, Data, Drawing ja Forms. Seejärel lisasin kaks lauset Microsoft.Speech.Recognition ja System.Globalization nimeruumide jaoks.

    Windows Formsil põhinev demo ei kasuta kõnesünteesi, seega ei linkita ma teeki Microsoft.Speech.Synthesis. Kõnesünteesi lisamine Windows Formsi rakendusse on sama, mis kõnesünteesi lisamine konsoolirakendusele.

    Visual Studios kujundusrežiimis lohistasin juhtelemendid TextBox, CheckBox ja ListBox vormile. Topeltklõpsasin märkeruudul ja Visual Studio genereeris automaatselt sündmuste käitleja meetodi CheckChanged.

    Tuletage meelde, et demokonsooli programm hakkas kohe kuulama häälkäsklusi ja jätkas seda kuni lõpetamiseni. Seda lähenemist saab rakendada ka Windows Formsi rakenduses, kuid selle asemel otsustasin lubada kasutajal kõnetuvastuse sisse ja välja lülitada, kasutades märkekasti juhtelementi (st märkeruutu).

    Demofaili Form1.cs lähtekood, kus osaline klass on määratletud, on näidatud riis. üheksa. Kõnetuvastusmootori objekt deklareeritakse ja instantseeritakse vormi liikmena. Vormi konstruktoris ühendan SpeechRecognized sündmuste töötleja ning seejärel loon ja laadin kaks grammatikaobjekti:

    avalik vorm1 () (intiinizecomponent (); sre.setInputTodefaultAudioDiodevice (); SRE.SPEACHRECOGNISED += SRE_SPEACHECOGNITED; GRAMMAR G_HELLOGOODBYE = gethellogByEGRAMMAR (); GRAMMAR G_STTEXTXBOBBOBBOBBOBBOBBOBBOBBOBBOBBOBBY. / sre.RecognizeAsync() on // CheckBoxi sündmuste töötlejas)

    Riis. 9. Kõnetuvastuse toe lisamine Windowsi vormidele

    süsteemi kasutamine; kasutades System.Data; kasutades System.Drawing; kasutades System.Windows.Forms; kasutades Microsoft.Speech.Recognition; kasutades System.Globalization; nimeruum WinFormSpeech ( avalik osaline klass Vorm1: Vorm ( static CultureInfo ci = new CultureInfo("en-us"); staatiline SpeechRecognitionEngine sre = new SpeechRecognitionEngine(ci); public Form1() ( InitializeComponent(); sre.SetInputToDevice(AudioDefault); .SpechECHECGNIED += SRE_SPEACHECOGNIED; käsitleja Grammar GetHelloGoodbyeGrammar() ( valikud ch_HelloGoodbye = new Choices(); ch_HelloGoodbye.Add("tere"); ch_HelloGoodbye.Add("hüvasti"); GrammarBuilder gb_result = GrammarBuilder = GrammarchmarbyH_uil = GrammarchmarbyH_uil = GrammarchmarbyH_uil return g_result; ) static Grammar GetTextBox1TextGrammar() ( Valikud ch_Colors = new Choices(); ch_Colors.Add(new string ( "punane", "valge", "sinine" )); GrammarBuilder gb_r tulemus = new GrammarBuilder(); gb_result.Append("set tekstikast 1"); gb_result.Append(ch_Colors); Grammatika g_tulemus = new Grammatika(gb_tulemus); tagasta g_tulemus; ) privaatne void checkBox1_CheckedChanged(objekti saatja, EventArgs e) ( if (checkBox1.Checked == true) sre.RecognizeAsync(RecognizeMode.Multiple); else if (checkbox1.Checked == false) //tuvastus keelatud(sync)Czel void sre_SpeechRecognized(objekti saatja, SpeechRecognizedEventArgs e) ( string txt = e.Result.Text; float conf = e.Result.Confidence; if (conf< 0.65) return; this.Invoke(new MethodInvoker(() =>( listBox1.Items.Add("Ma kuulsin sind ütlemas: " + txt); ))); // WinFormi spetsiifika if (txt.IndexOf("text") >= 0 && txt.IndexOf("box") >= 0 && txt.IndexOf("1")>= 0) ( stringwords = txt.Split( " "); this.Invoke(new MethodInvoker(() => ( textBox1.Text = sõnad; ))); // WinFormi spetsiifiline ) ) ) // Vorm ) // ns

    Võiksin luua otse kaks grammatikaobjekti, nagu konsooliprogrammis, kuid selle asemel, et kood oleks veidi selgem, defineerisin kaks abimeetodit (GetHelloGoodbyeGrammar ja GetTextBox1TextGrammar), mis seda tööd teevad.

    staatiline grammatika GetTextBox1TextGrammar() ( Valikud ch_Colors = new Choices(); ch_Colors.Add(new string ( "punane", "valge", "sinine" )); GrammarBuilder gb_result = new GrammarBuilder(); Append("result text. kast 1"); gb_result.Append(ch_Colors); grammatika g_tulemus = new Grammar(gb_result); tagasta g_tulemus; )

    See abistamismeetod tunneb ära fraasi "määra tekstikast 1 punaseks". Siiski ei pea kasutaja seda fraasi täpselt hääldama. Näiteks võib ta öelda: "Palun määrake tekstikasti 1 tekst punaseks" ja kõnemootor tuvastaks fraasi endiselt kui "seadista tekstikast 1 punaseks" – ehkki madalama usaldusväärtusega kui täpse vaste korral Grammatika mall. Teisisõnu, grammatikaobjektide loomisel ei pea te fraasi kõiki variatsioone arvesse võtma. See lihtsustab oluliselt kõnetuvastuse kasutamist.

    Märkekasti sündmuste töötleja on määratletud järgmiselt:

    private void checkBox1_CheckedChanged(objekti saatja, EventArgs e) ( if (checkbox1.Checked == true) sre.RecognizeAsync(RecognizeMode.Multiple); else if (checkbox1.Checked == false) // keelatud sre.CheckedAsync)RecognizeA);

    Kõnetuvastusmootori objekt sre (kõnetuvastusmootor) on alati olemas Windows Formsi rakenduse eluea jooksul. See objekt aktiveeritakse ja deaktiveeritakse meetodite RecognizeAsync ja RecognizeAsyncCancel kutsumisega, kui kasutaja märgib kasti vastavalt.

    SpeechRecognized sündmuste töötleja definitsioon algab järgmisega:

    void sre_SpeechRecognized(objekti saatja, SpeechRecognizedEventArgs e) ( string txt = e.Result.Text; float conf = e.Result.Confidence; if (conf< 0.65) return; ...

    Lisaks enam-vähem levinud omadustele Result.Text ja Result.Confidence on objektil Result veel mitmeid kasulikke, kuid keerukamaid omadusi, mida võiksite uurida; näiteks homofonid ja asendussõnaühikud. Lisaks pakub kõnetuvastusmootor mõningaid kasulikke sündmusi, nagu SpeechHypothesized.

    this.Invoke((Action)(() => listBox1.Items.Add("Ma kuulsin sind ütlemas: " + txt)));

    Teoreetiliselt on MethodInvokeri delegaadi kasutamine selles olukorras veidi tõhusam kui Action-delegaadi kasutamine, kuna MethodInvoker on osa Windows.Formsi nimeruumist ja on seetõttu spetsiifiline Windows Formsi rakendustele. Actioni delegaat on mitmekülgsem. See näide näitab, et saate Windows Formsi rakendust kõnetuvastusmootori kaudu täielikult manipuleerida – see on uskumatult võimas ja kasulik funktsioon.

    Järeldus

    Selles artiklis esitatud teave peaks teid kohe alustama, kui soovite uurida kõnesünteesi ja kõnetuvastust .NET-i rakendustes. Tehnoloogia enda omandamine pole keeruline, kui olete esmase koolituse ja komponentide paigaldamise konarustest üle saanud. Kõnesünteesi ja kõnetuvastuse tõeline väljakutse on aru saada, millal see tõesti kasulik on.

    Konsooliprogrammide puhul saab luua huvitavaid omavahelisi dialooge, kus kasutaja esitab küsimuse ja programm vastab, mille tulemuseks on sisuliselt Cortana-laadne keskkond. Peate olema veidi ettevaatlik, sest kui teie arvuti kõlaritest kostab kõne, võtab mikrofon selle üles ja selle saab uuesti ära tunda. Olen ise olnud üsna naljakates olukordades, kus esitasin küsimuse, rakendus tundis selle ära ja vastas, aga suuline vastus vallandas järgmise äratundmissündmuse ja mul tekkis naeruväärne lõputu kõnesilmus.

    Teine võimalik kõne kasutamine konsooliprogrammis on selliste käskude tuvastamine nagu "Käivita Notepad" ja "Käivita Word". Teisisõnu saab sellist konsooliprogrammi kasutada arvutis selliste toimingute tegemiseks, mis muidu nõuaksid palju klaviatuuri ja hiirega manipuleerimist.

    James McCaffrey(Dr James McCaffrey) töötab Microsoft Researchis Redmondis, Washingtonis. Osalenud mitmete Microsofti toodete, sealhulgas Internet Exploreri ja Bingi loomisel. Temaga saab ühendust võtta aadressil [e-postiga kaitstud].

    Tahaksin tänada Microsoft Researchi eksperte Rob Grueni, Mark Marronit ja Curtis von Vehi selle artikli läbivaatamise eest.

    Sellel telefonil on kõnetuvastus või häälsisend, kuid see töötab ainult Interneti kaudu, luues ühenduse Google'i teenustega. Aga telefoni saab õpetada kõnet ära tundma ka ilma internetita, vaatame, kuidas sisse lülitada vene keele tuvastamine võrguühenduseta. Selle meetodi toimimiseks peab teil olema installitud kaks rakendust. Häälotsing ja Google otsing, kuigi need programmid on juba tehase püsivaras olemas.

    Püsivara jaoks

    Minge telefoni seadetesse ja valige

    Valime vene keele ja laadime selle alla.

    Püsivara 2.8B jaoks

    Uues püsivaras on menüüelement " Võrguühenduseta kõnetuvastus" puudub.

    Kui enne püsivara värskendamist olid teil installitud võrguühenduseta paketid ja te ei tühjendanud (lähtestanud sätteid) värskenduse ajal, oleks pidanud need salvestama. Vastasel juhul peate pöörduma tagasi püsivara juurde 2.2 , installige häälepaketid ja alles seejärel värskendage süsteemi versioonile 2.8B.

    Rev.B seadmete jaoks

    Installime värskenduse taastamise kaudu ja naudime oyline'i hääletuvastust.

    2. Laadige alla vene keele kõne alus ja kopeerige see SD-kaardile

    Laadige alla Russian_offline.zip 1301

    3. Sisestage taastamine, hoides all (helitugevus + ja sees), kui telefon on välja lülitatud.

    4. Valige Rakenda värskendus välisest salvestusruumist ja valige allalaaditud arhiiv.

    Ükski programm ei saa täielikult asendada käsitsi tööd salvestatud kõne transkribeerimisel. Siiski on lahendusi, mis võivad oluliselt kiirendada ja hõlbustada kõne tõlkimist tekstiks ehk lihtsustada transkriptsiooni.

    Transkriptsioon on heli- või videofaili salvestamine teksti kujul. Internetis on tasulised tasulised ülesanded, kui teksti transkribeerimise eest makstakse esitajale teatud summa.

    Kõnest tekstiks tõlkimine on kasulik

    • õpilased tõlkida salvestatud heli- või videoloenguid tekstiks,
    • blogijad, kes juhivad veebisaite ja ajaveebe,
    • kirjanikud, ajakirjanikud, kes kirjutavad raamatuid ja tekste,
    • infoärimehed, kes vajavad pärast veebiseminari, kõnet vms teksti,
    • inimesed, kellel on raske tippida - nad saavad dikteerida kirja ja saata selle sugulastele või sõpradele,
    • muud võimalused.

    Kirjeldame kõige tõhusamaid tööriistu, mis on saadaval arvutis, mobiilirakendustes ja võrguteenustes.

    1 Sait speakpad.ru

    See on võrguteenus, mis võimaldab teil Google Chrome'i brauseri kaudu kõnet tekstiks tõlkida. Teenus töötab mikrofoni ja valmisfailidega. Muidugi on kvaliteet palju kõrgem, kui kasutada välist mikrofoni ja ise dikteerida. Teenus teeb aga head tööd isegi YouTube'i videotega.

    Klõpsake "Luba salvestamine", vastake küsimusele "Mikrofoni kasutamine" - selleks klõpsake "Luba".

    Pika teenuse kasutamise juhise saab ahendada, klõpsates joonisel fig. 3. Reklaamidest saate lahti lihtsa registreerimise kaudu.

    Riis. 3. Kõnepuldi teenindus

    Valmis tulemust on lihtne redigeerida. Selleks peate esiletõstetud sõna käsitsi parandama või uuesti dikteerima. Töö tulemused salvestatakse teie isiklikule kontole, neid saab ka arvutisse alla laadida.

    Kõnepadjaga töötamise videoõpetuste loend:

    Saate videoid transkribeerida Youtube'ist või arvutist, kuid selleks on vaja mikserit, täpsemalt:

    Video "heli transkriptsioon"

    Teenus töötab seitsmes keeles. Väike miinus on. See seisneb selles, et kui teil on vaja valmis helifaili transkribeerida, jaotatakse selle heli kõlaritesse, mis tekitab täiendavaid häireid kaja kujul.

    2 Teenuse dikteerimine.io

    Suurepärane võrguteenus, mis võimaldab teil kõnet tasuta ja hõlpsalt tekstiks tõlkida.

    Riis. 4. Teenuse dikteerimine.io

    1 joonisel fig. 4 - Vene keele saab valida lehe lõpus. Google Chrome'i brauseris on keel valitud, kuid Mozillas see võimalus millegipärast puudub.

    Tähelepanuväärne on see, et rakendatakse valmis tulemuse automaatse salvestamise võimalust. See hoiab ära juhusliku kustutamise vahekaardi või brauseri sulgemise tagajärjel. See teenus ei tuvasta valmis faile. Töötab mikrofoniga. Dikteerimisel peate määrama kirjavahemärgid.

    Tekst tuvastatakse üsna õigesti, kirjavigu pole. Saate ise sisestada kirjavahemärke klaviatuurilt. Valmis tulemuse saab salvestada oma arvutisse.

    3 RealSpeaker

    See programm võimaldab teil lihtsalt tõlkida inimkõne tekstiks. See on loodud töötama erinevatel süsteemidel: Windows, Android, Linux, Mac. Selle abiga saate teisendada kõlavat kõnet mikrofoniks (selle saab näiteks sülearvutisse sisse ehitada), aga ka helifailidesse salvestatud kõne.

    Ta tajub 13 maailma keelt. Programmil on beetaversioon, mis töötab võrguteenusena:

    Peate järgima ülaltoodud linki, valima vene keele, laadima oma heli- või videofaili võrguteenusesse ja maksma selle transkriptsiooni eest. Pärast transkribeerimist saate vastuvõetud teksti kopeerida. Mida suurem on transkriptsioonifail, seda rohkem aega selle töötlemiseks kulub, rohkem üksikasju:

    2017. aastal oli RealSpeakeri abil tasuta transkriptsiooni võimalus, 2018. aastal seda võimalust pole. On väga piinlik, et transkribeeritud fail on kõigile kasutajatele allalaadimiseks saadaval, võib-olla saab see lõplikult valmis.

    Programmi arendaja kontaktid (VKontakte, Facebook, Youtube, Twitter, e-post, telefon) leiate tema veebisaidi lehelt (täpsemalt saidi jalusest):

    4 Kõnelogija

    Alternatiiv eelmisele rakendusele Androidis töötavatele mobiilseadmetele. Rakenduste poes tasuta saadaval:

    Teksti redigeeritakse automaatselt, sinna pannakse kirjavahemärgid. Suurepärane märkmete dikteerimiseks või loendite koostamiseks. Selle tulemusel osutub tekst väga korraliku kvaliteediga.

    5 Draakoni dikteerimine

    See on Apple'i mobiilseadmete jaoks tasuta levitatav rakendus.

    Programm võib töötada 15 keelega. See võimaldab teil tulemust redigeerida, valida loendist soovitud sõnad. Kõiki helisid on vaja selgelt hääldada, mitte teha tarbetuid pause ja vältida intonatsiooni. Mõnikord on sõnade lõppudes vigu.

    Dragon Dictationi rakendust kasutavad omanikud näiteks poes ostunimekirja dikteerimiseks korteris ringi liikudes. Tulen kohale, seal on võimalik sedelist teksti vaadata ja kuulata pole vaja.

    Ükskõik, millist programmi oma praktikas kasutate, olge valmis tulemust uuesti üle kontrollima ja teatud kohandusi tegema. See on ainus viis veatu ja vigadeta teksti saamiseks.

    Samuti kasulikud teenused:

    Hankige ajakohased artiklid arvutioskuse kohta otse oma postkasti.
    Juba rohkem 3000 tellijat

    .

    Uuendatud: esmaspäev, 31. juuli 2017

    Mida on pooleldi fantastilisel arvutiga rääkimise ideel pistmist professionaalse fotograafiaga? Peaaegu mitte ükski, kui te pole kogu inimese tehnilise keskkonna lõputu arengu idee fänn. Kujutage korraks ette, et annate oma kaamerale häälkäsklusi fookuskauguse muutmiseks ja särituse kompenseerimiseks poole sammu võrra plussis. Kaamera kaugjuhtimispult on juba rakendatud, kuid seal tuleb vaikselt nuppe vajutada ja siin on kuulmisfotik!

    Traditsiooniks on saanud tuua mõne fantastilise filmi näitena inimhäälega suhtlemisest arvutiga, no vähemalt Stanley Kubricku lavastatud "Kosmoseodüsseia 2001". Seal ei pea pardaarvuti mitte ainult astronautidega sisukat dialoogi, vaid suudab lugeda huultelt nagu kurt. Teisisõnu õppis masin inimkõnet vigadeta ära tundma. Võib-olla tundub keegi, et kaamera kaugjuhtimine on üleliigne, kuid see fraas meeldiks paljudele "Võtke meid maha, beebi" ja ongi valmis pilt kogu perest palmipuu taustal.

    Noh, siin ma austasin traditsioone, veidi fantaseerides. Kuid südamest rääkides oli seda artiklit raske kirjutada ja kõik sai alguse kingitusest Android 4 OS-iga nutitelefoni näol. Sellel mudelil HUAWEI U8815 on väike neljatolline puuteekraan ja ekraanil kuvatav klaviatuur. Sellele trükkimine on mõnevõrra ebatavaline, kuid see ei osutunud eriti vajalikuks. (pilt01)

    1. Android OS-i nutitelefoni hääletuvastus

    Uut mänguasja proovides märkasin otsinguribal mikrofoni graafikat. Google ja Märkmete klaviatuuril. Varem ma ei huvitanud, mida see sümbol tähistab. Mul olid vestlused Skype ja trükitud tähti klaviatuuril. Seda teeb enamik Interneti-kasutajaid. Aga nagu nad mulle hiljem otsingumootoris selgitasid Google lisandus venekeelne häälotsing ja ilmusid programmid, mis võimaldavad brauserit kasutades lühisõnumeid dikteerida Chrome.

    Ütlesin kolmesõnalise fraasi, programm tuvastas need ja näitas sinise taustaga lahtris. Oli, mida üllatada, sest kõik sõnad olid õigesti kirjutatud. Kui klõpsate sellel lahtril, ilmub see fraas Androidi märkmiku tekstiväljale. Nii ütles ta paar fraasi ja saatis assistendile SMS-iga sõnumi.


    2. Hääletuvastusprogrammide lühiajalugu.

    Minu jaoks polnud avastus, et tänapäevased saavutused hääljuhtimise vallas võimaldavad anda käsklusi kodumasinatele, autole, robotile. Käsurežiim võeti kasutusele Windowsi, OS/2 ja Mac OS-i varasemates versioonides. Olen näinud kõnelejaprogramme, aga mis kasu neist on? Võib-olla on see minu eripära, et mul on lihtsam rääkida kui klaviatuuril tippida ja mobiiltelefoniga ei oska ma üldse midagi kirjutada. Kontaktid tuleb salvestada sülearvutisse tavalise klaviatuuriga ja edastada USB-kaabli kaudu. Aga lihtsalt mikrofoni rääkida ja arvuti ise kirjutas teksti vigadeta - see oli minu jaoks unistus. Lootusetuse õhkkonda toetasid arutelud foorumites. Igal pool oli neil selline kurb mõte:

    "Praktikas aga seniajani päris kõnetuvastuse programme (ja isegi vene keeles) praktiliselt ei eksisteeri ja ilmselt ei hakata neid niipea looma. Veelgi enam, isegi äratundmise pöördülesanne - kõnesüntees, mis näib olevat palju lihtsam kui äratundmine, pole täielikult lahendatud. (ComputerPress №12, 2004)

    "Tavalisi kõnetuvastusprogramme (mitte ainult vene keeles) pole tänaseni, kuna arvuti jaoks on ülesanne üsna keeruline. Ja kõige hullem on see, et inimese poolt sõnade äratundmise mehhanism on realiseerimata, mistõttu pole tuvastusprogrammide loomisel millestki lähtuda. (Teine arutelu foorumis).

    Samal ajal näitasid ingliskeelsete tekstisisestusprogrammide ülevaated selgeid edusamme. Näiteks, IBM ViaVoice 98 Executive Edition neil oli 64 000 sõnast koosnev põhisõnastik ja võimalus lisada sama palju oma sõnu. Sõnade äratundmise protsent ilma programmi väljaõppeta oli umbes 80% ja edasise tööga konkreetse kasutajaga jõudis see 95% -ni.

    Vene keele äratundmise programmidest väärib märkimist "Gorynych" - täiendus ingliskeelsele Dragon Dictate 2.5-le. Otsingust ja seejärel "lahingust viie Gorynychiga" räägin ülevaate teises osas. Esimesena leidsin "Inglise draakoni".

    3. Programm pideva kõne tuvastamiseks "Lohe loomulikult kõnelemine"

    Ettevõtte programmi kaasaegne versioon Nüanss osutus mu vana sõbraga Minski Võõrkeelte Instituudist. Ta tõi selle välisreisilt ja ostis selle, arvates, et temast võiks saada "arvutisekretär". Kuid midagi ei töötanud ja programm jäi sülearvutisse peaaegu ununema. Arusaadava kogemuse puudumise tõttu pidin ise sõbra juurde minema. Kogu see pikk sissejuhatus on vajalik minu tehtud järelduste õigeks mõistmiseks.

    Minu esimese draakoni täisnimi oli: . Programm on inglise keeles ja kõik selles sisalduv on selge ka ilma juhendita. Esimene samm on luua konkreetse kasutaja profiil, et määrata kindlaks sõnade kõla omadused tema esituses. Mida ma ka tegin – oluline on kõneleja vanus, riik, häälduse iseärasused. Minu valik on: vanus 22-54, inglise UK, standardhääldus. Järgmisena tulevad mõned aknad, kus seadistate mikrofoni. (pilt04)

    Tõsiste kõnetuvastusprogrammide järgmine etapp on konkreetse inimese konkreetse häälduse treenimine. Olete kutsutud valima teksti olemust: minu valik on lühike dikteerimise õpetus, kuid võite "tellida" ka humoorika loo.

    Selle programmiga töötamise etapi olemus on äärmiselt lihtne - tekst kuvatakse aknas, selle kohal on kollane nool. Õige häälduse korral liigub nool läbi fraaside ja allosas on treeningu edenemise riba. Inglise keele vestlus oli mul üsna unustatud, nii et liikusin vaevaliselt. Ka aeg oli piiratud - arvuti ju polnud minu oma ja pidin trenni katkestama. Kuid sõber ütles, et tegi testi vähem kui poole tunniga. (pilt05)

    Keeldudes programmi oma hääldusega kohandamast, läksin peaaknasse ja käivitasin sisseehitatud tekstiredaktori. Ta rääkis mõnest arvutist leitud tekstist eraldi sõnu. Need sõnad, mis ta ütles õigesti, programm trükiti välja, need, mis ta ütles halvasti, asendati millegi "ingliskeelsega". Olles hääldanud selgelt inglise keeles käsu "kustuta rida", täitis programm selle. See tähendab, et loen käske õigesti ja programm tunneb need ära ilma eelneva koolituseta.

    Aga mulle oli oluline, kuidas see "draakon" vene keeles kirjutab. Nagu eelmisest kirjeldusest aru saite, saate programmi treenides valida ainult ingliskeelse teksti, venekeelset teksti seal lihtsalt pole. Selge on see, et venekeelse kõne äratundmise treenimine ei toimi. Järgmisel fotol näete, millise fraasi programm venekeelse sõna "Tere" hääldamisel sisestas. (pilt06)

    Esimese draakoniga suhtlemise tulemus osutus kergelt koomiliseks. Kui loete hoolikalt ametlikul veebisaidil olevat teksti, näete selle tarkvaratoote ingliskeelset "spetsialiseerumist". Lisaks loeme laadimisel programmi aknast "inglise". Miks siis seda kõike vaja oli? On selge, et süüdi on foorumid ja kuulujutud ...

    Kuid on ka kasulik kogemus. Mu sõber palus näha oma sülearvuti seisukorda. Kuidagi aeglaselt hakkas ta tööle. See pole üllatav - süsteemisektsioonil oli ainult 5% vaba ruumi. Mittevajalikke programme kustutades nägin, et ametlik versioon võttis üle 2,3 GB. Seda numbrit vajame hiljem. (pilt.07)



    Vene kõne äratundmine, nagu selgus, polnud tühine ülesanne. Minskis õnnestus mul leida sõbra käest "Gorynych". Ta otsis plaati kaua oma vanade rusude vahelt ja tema sõnul on tegemist ametliku väljaandega. Programm installiti koheselt ja sain teada, et selle sõnastik sisaldab 5000 venekeelset sõna pluss 100 käsku ja 600 ingliskeelset sõna pluss 31 käsku.

    Kõigepealt peate seadistama mikrofoni, mida ma ka tegin. Seejärel avasin sõnastiku ja lisasin selle sõna "eksam" sest seda programmi sõnastikus polnud. Üritasin rääkida selgelt, monotoonselt. Lõpuks avasin programmi Gorynych Pro 3.0, lülitasin sisse dikteerimisrežiimi ja sain selle loendi sõnadest, mis kõlavad sarnaselt. (pilt.09)

    Tulemus tekitas minus hämmingut, kuna see erines selgelt Android-nutitelefoni tööst ja otsustasin proovida teisi programme saidilt " Google Chrome'i veebipood". Ja ta lükkas "gorynych madudega" tegelemise hilisemaks. ma arvasin seda edasilükkamine tegevus algupärases vene vaimus

    5. Google'i häälfunktsioonid

    Tavalises OS Windowsiga arvutis häälega töötamiseks peate installima brauseri Google Chrome. Kui töötate selles Internetis, saate paremas alanurgas klõpsata tarkvarapoe lingil. Sealt leidsin tasuta kaks programmi ja kaks laiendust häälteksti sisestamiseks. Programmid on nn "Häälmärkmik" ja "Voysnot – hääl tekstiks". Pärast installimist leiate need vahekaardilt "Rakendused" teie brauser "Chromium". (pilt.10)

    Laiendusi nimetatakse "Google Voice Search Hotword (beeta) 0.1.0.5" ja "Häälsisestuse tekst – Speechpad.ru 5.4". Pärast installimist saab need vahekaardil välja lülitada või kustutada "Laiendused".(pilt.11)

    VoiceNote. Topeltklõpsake Chrome'i brauseri rakenduste vahekaardil programmiikoonil. Avaneb dialoogiboks, nagu on näidatud alloleval pildil. Mikrofoniikoonil klõpsates räägite mikrofoni lühikesi fraase. Programm saadab teie sõnad kõnetuvastusserverisse ja tipib teksti aknasse. Kõik illustratsioonil näidatud sõnad ja fraasid trükiti esimesel katsel. Ilmselgelt töötab see meetod ainult aktiivse Interneti-ühenduse korral. (pilt.12)

    Häälmärkmik. Kui käivitate programmi rakenduste vahekaardil, avaneb Interneti-lehe uus vahekaart Speechpad.ru. Seal on üksikasjalik juhend selle teenuse kasutamiseks ja kompaktne vorm. Viimane on näidatud alloleval joonisel. (pilt.13)

    Häälsisend tekst võimaldab täita Interneti-lehtede tekstivälju oma häälega. Näiteks läksin oma lehele Google+. Paremklõpsake uue sõnumi sisestusväljal ja valige "Speechpad". Roosa värvi sisestuskast ütleb, et saate oma teksti dikteerida. (pilt.14)

    Google Voice Search võimaldab teil otsida hääle järgi. Selle laienduse installimisel ja aktiveerimisel kuvatakse otsinguribale mikrofoni sümbol. Kui vajutate seda, kuvatakse sümbol suures punases ringis. Öelge lihtsalt otsingufraas ja see kuvatakse otsingutulemustes. (pilt.15)

    Oluline märkus: et mikrofon töötaks koos Chrome'i laiendustega, peate lubama brauseri seadetes juurdepääsu mikrofonile. Turvakaalutlustel on see vaikimisi keelatud. Minge sisse Seaded → Isiklikud andmed → Sisu seaded. (Kõigile loendi lõpus olevatele sätetele juurdepääsuks klõpsake nuppu Kuva täpsemad seaded). Avaneb dialoogiboks Lehe sisu seaded. Valige loendist üksus Multimeedium → mikrofon.

    6. Vene kõnetuvastusprogrammidega töötamise tulemused

    Väike kogemus tekstisisestusprogrammide häälega kasutamisel näitas selle funktsiooni suurepärast rakendamist Interneti-ettevõtte serverites Google. Ilma eelneva koolituseta tuntakse sõnu õigesti ära. See näitab, et vene keele kõnetuvastuse probleem on lahendatud.

    Nüüd võib öelda, et arengu tulemus Google on uueks kriteeriumiks teiste tootjate toodete hindamisel. Tahaks, et tuvastussüsteem töötaks võrguühenduseta ilma ettevõtte serveritega ühendust võtmata – nii on mugavam ja kiirem. Kuid millal tuleb välja iseseisev programm pideva venekeelse kõnega töötamiseks, pole teada. Siiski tasub eeldada, et selle "loomingu" treenimise võimalus on tõeline läbimurre.

    Venemaa arendajate programmid "Gorynych", "Diktograaf" ja "Võitlus" Ma käsitlen üksikasjalikult selle ülevaate teises osas. See artikkel on kirjutatud väga aeglaselt põhjusel, et originaalplaatide otsimine on nüüd keeruline. Hetkel on mul juba kõik venekeelse "häälest tekstiks" äratundmise versioonid, välja arvatud "Combat 2.52". Ühelgi mu sõbral ega kolleegil pole seda programmi ja mul endal on foorumites vaid mõned kiitvad arvustused. Tõsi, oli selline kummaline variant - laadige SMS-iga alla "Combat", aga see mulle ei meeldi. (pilt16)


    Lühike videoklipp näitab teile, kuidas kõnetuvastus töötab Android OS-iga nutitelefonis. Häälvalimise funktsiooniks on vajadus luua ühendus Google'i serveritega. Seega peaks Internet teie heaks töötama



    Sarnased artiklid