Voice
macOS meniu juostos diktavimas su vietiniu Whisper — kalba į tekstą bet kur, įrenginyje.
Dev-storyIššūkis
OS ar debesų diktavimas siunčia balsą už įrenginio ribų ir dažnai nepataiko techninių terminų; norėjome greito, privataus diktavimo bet kurioje programoje.
Ką darėme
WebEdge Voice — Swift macOS meniu juostos programa, paleidžianti Whisper vietoje: pasirenki mikrofoną ir kalbą, paspaudi spartųjį klavišą diktuoti, o transkribuotas tekstas įterpiamas ten, kur rašai — niekas nesiunčiama į serverį.
Rezultatas
Kalba į tekstą bet kur Mac'e, įrenginyje ir privačiai, su kalbos bei mikrofono nustatymais tiesiai iš meniu juostos.
Dev-story straipsnis
Kaip buvo kuriamas projektas: Voice
Debesijos diktavimas greitas, bet siunčia jūsų balsą už kompiuterio ribų; vietinis diktavimas išlaiko privatumą, bet dažniausiai būna toks lėtas, kad atrodo sugedęs. Ši programa renkasi antrąjį kelią ir atsisako lėtumo: paspaudžiate spartųjį klavišą, kalbate, ir transkripcija atsiranda tame lauke, kuris yra aktyvus, o Whisper dekodavimą atlieka tame pačiame Mac. Didžioji inžinerijos dalis yra ne pati transkripcija, o milisekundės aplink ją ir macOS mechanizmas, leidžiantis įklijuotam tekstui pasiekti kitas programas.
Skyriai
05
Moduliai
05
Stackas
Swift + Whisper
Kodėl projektas atsirado
OS ar debesų diktavimas siunčia balsą už įrenginio ribų ir dažnai nepataiko techninių terminų; norėjome greito, privataus diktavimo bet kurioje programoje.
Debesijos diktavimas greitas, bet siunčia jūsų balsą už kompiuterio ribų; vietinis diktavimas išlaiko privatumą, bet dažniausiai būna toks lėtas, kad atrodo sugedęs. Ši programa renkasi antrąjį kelią ir atsisako lėtumo: paspaudžiate spartųjį klavišą, kalbate, ir transkripcija atsiranda tame lauke, kuris yra aktyvus, o Whisper dekodavimą atlieka tame pačiame Mac. Didžioji inžinerijos dalis yra ne pati transkripcija, o milisekundės aplink ją ir macOS mechanizmas, leidžiantis įklijuotam tekstui pasiekti kitas programas.
Ką sukūrėme
WebEdge Voice — Swift macOS meniu juostos programa, paleidžianti Whisper vietoje: pasirenki mikrofoną ir kalbą, paspaudi spartųjį klavišą diktuoti, o transkribuotas tekstas įterpiamas ten, kur rašai — niekas nesiunčiama į serverį.
macOS 14+ meniu juostos diktavimo programa Apple Silicon procesoriams, sukurta ant whisper.cpp su Metal, paleidžiama Ctrl+Shift+Space. Whisper modelis nėra įtrauktas - jį pasirenkate pirmą kartą paleidę kaip atskirą ~1,6 GB atsisiuntimą - ir viskas nuo mikrofono įrašymo iki dekodavimo ir įterpimo veikia vietoje. Ji pateikiama sąmoningai tik rusų kalbai, o ne apsimeta aptarnaujanti kalbas, kurias modelis transkribuoja prastai.
Pagrindiniai moduliai ir vartotojo kelias
Įšildantis dekodavimas paleidžiant: pirmasis diktavimas kainuodavo 407 ms kuriant Metal konvejerius ir skaičiavimo grafą, todėl vienos sekundės tylus dekodavimas paleidimo užduotyje perkelia šią kainą nuo pirmųjų vartotojo žodžių, sumažindamas pirmąjį diktavimą iki ~104 ms.
Įklijavimo kelio atblokavimas: insertText du kartus miegojo pagrindinėje gijoje (~56 ms realios kainos); iškarpinės atkūrimas perkeltas į asyncAfter su changeCount apsauga, kad antras diktavimas neužterštų pirmojo, ir įklijavimas dabar trunka 1-6 ms.
Prieinamumo leidimo pasirašymo istorija: macOS susieja Prieinamumo leidimą su programos kodo pasirašymo identifikatoriumi ir cdhash, todėl ad-hoc pasirašytos naujos versijos atrodė kaip nauja programa ir kaskart prarasdavo leidimą - išspręsta persignuojant fiksuotu identifikatoriumi ir stabiliu savarankiškai pasirašytu vietiniu sertifikatu, kuris susieja reikalavimą su sertifikatu, o ne su kintančiu dvejetainiu failu.
Haliucinacijų ir tuščio srauto filtravimas: atmesti mikrofono srautus, kurie yra vien nulinė tyla, prieš dekodavimą, pritaikyti audioCtx ir žetonų ribas prie klipo ilgio, kad būtų sustabdytas ilgų klipų nukirpimas ir kartojimosi kilpos, ir po dekodavimo pašalinti žinomus subtitrų korpuso artefaktus (patikrinta 53/53 pagauti, nulis klaidingų teigiamų per 2439 įrašus).
Pasirinktinis Silero VAD, pagal nutylėjimą išjungtas ir sąžiningas dėl to: bevertis trumpiems klipams, kuriems programa skirta (~2 ms sutaupoma), bet ilgo diktavimo metu jis pašalina tylą, kad klipas vėl tilptų į Whisper 30 s langą ir perpus sumažintų enkoderio praėjimus - 92 s įrašas nuo dviejų praėjimų sumažėjo iki vieno.
Architektūra ir technologiniai sprendimai
Sukurta su Swift, Whisper, macOS.
Swift su ranka atkurtu tiltu į whisper.cpp (pririštą prie v1.9.1), veikiantį ant Metal, tik Apple Silicon, su teksto įterpimu per Prieinamumo API ir iškarpinę; run.sh tvarko vietinį savarankiško pasirašymo kelią, o notarizuoto DMG leidimo scenarijai skirti platinimui.
Rezultatas ir pamokos
Kalba į tekstą bet kur Mac'e, įrenginyje ir privačiai, su kalbos bei mikrofono nustatymais tiesiai iš meniu juostos.
Privatus, vietoje veikiantis diktavimo įrankis, kuriame pats Whisper trunka ~90 ms nuo pradžios iki pabaigos, o kelias nuo paspaudimo iki įklijavimo atrodo momentinis - sąžiningai vienas kompiuteris, vienas modelis, viena kalba, o ne užmaskuota debesijos paslauga.
Susiję straipsniai
Toliau skaityti
Susijusios projektų istorijos
Šie projektai turi artimų technologinių arba produkto sprendimų, todėl padeda matyti, kaip tas pats principas veikia kitame kontekste.
Dev-storyMac GPU Checker
macOS GPU testas tikrais TFLOPS (fp16 GEMM) — ir ar chipas išlaiko skaičių po apkrova.
Dev-storyFableVita
FableVita — DI fitneso treneris su lygomis, užduotimis ir nuo sukčiavimo apsaugota apdovanojimų ekonomika.
Dev-storyCMS
Dinaminis CMS ant webedge-db — turinio tipai, medija, rolės ir vieša skaitymo API, maitinanti mūsų svetaines ir straipsnius.
Turite panašią idėją?
Aptarti projektą