STT nepodporovaného jazyka na iPhone – 1. díl
Autor: Pavel Stančík · 2026-10-04
Úvod
Společnost Apple před dvěma lety vytvořila pro iOS možnost provozovat lokální jazykový model (LLM) přímo na zařízení macOS, iOS a iPadOS. Jmenuje se Apple Intelligence a k jeho provozování musíte splnit tyto tři věci:
- iOS 18 nebo novější,
- iPhone 15 Pro nebo novější,
- nastavit si podporovaný jazyk a oblast; jazyk zařízení (Jazyk a oblast) i jazyk Siri přitom musí být nastaveny na stejný podporovaný jazyk.
Bydlím v EU v České republice, takže i když splním první a druhý bod, stále mám smůlu, pokud chci podporovat svůj rodný jazyk.
Když jsem si koupil k narozeninám hodinky, zajímalo mě, jak mohu využít Apple Intelligence a nejlépe tak, abych vytěžil z tohoto propojení maximum. A jelikož jsem si psal deník, rozhodl jsem se, že si deník budu namlouvat do hodinek, které mi ho pak v iPhonu přepíšou na text a AI mi bude dělat mentora mých nálad. Chci tedy jeden obecný model, podporující STT a k tomu nějakou obecnou inteligenci, která porozumí vstupním údajům, to znamená textu samotné zprávy doplněné o metadata, jako je například tepová frekvence, variabilita tepové frekvence, čas na slunci, denní doba a další, ze kterého poskládá strukturovanou odpověď a vybere odpovídající náhledovou ikonu.
Přepis nahrávky: Apple SpeechTranscriber vs. Whisper jako vlastní model
S češtinou je ten problém, že to není světový jazyk. Hovoří jím kolem 10 milionů lidí, takže Apple češtinu do Apple Intelligence nezahrnul. Apple Intelligence se ani pro přepis zvukového záznamu nepoužívá, používá se od iOS 26 Apple SpeechTranscriber a i ten češtinu zatím nepodporuje. Češtinu by sice dokázalo přepsat starší rozpoznávání řeči od Apple (SFSpeechRecognizer), jenže odesláním nahrávky na servery Apple, a to jsme nechtěli. Apple však umožňuje provozovat na iOS vlastní model, který češtinu podporuje. Vyzkoušel jsem jich mnoho, od Qwen3-ASR 1.7B, NVIDIA Parakeet TDT 0.6B v3, Voxtral Mini Transcribe V2 až jsem nakonec zůstal u WhisperKit large-v3-turbo. Tento model totiž podporuje 99 jazyků a má v komprimované variantě jen 632 MB, češtině opravdu rozumí a neleze z něj hatmatilka nebo ruština, jako například z Voxtralu. Na Voxtral jsem víceméně sázel, jelikož jsem se snažil provozovat vše v EU, což se ale nakonec nepovedlo.
Co se týče technických detailů, těm se budu věnovat v příštím textu, nyní jen shrnu základní problémy.
Základní problémy
Jedním z nich je zaručit, aby anglicky mluvící uživatel mohl využívat Apple Intelligence a Apple SpeechTranscriber a nemusel stahovat a nahrávat do paměti malý, ale přesto objemný AI model, který je potřeba pro nepodporovaný jazyk. Jako první musí být tedy detekce, zda je telefon již schopný využívat Apple Intelligence, a pokud ano, zda má stažený model již nainstalován, nebo teprve čeká na stažení. On totiž i Apple Intelligence musí svůj LLM model nejprve stáhnout a následně obsadí pro něj určené místo v úložišti.
Jakmile není přítomnost Apple Intelligence detekována, stahujeme WhisperKit large-v3-turbo, který jsem pro jistotu nahrál na úložiště R2 od Cloudflare, aby bylo stahování celosvětově velmi rychlé. Stahovat model ze serveru v ČR by bylo pro uživatele v zahraničí zdlouhavé, je to stále 632 MB. Až se model ve formátu Core ML stáhne, je potřeba ho ještě připravit pro daný iPhone a načíst do paměti. Bohužel tato příprava trvá velmi dlouho, řádově minuty, ale jakmile se iOS model převede do podoby, kterou umí spustit právě Neural Engine vašeho iPhonu (ANE), už se pak nahrává do paměti do 5 sekund.
Kompilace se ovšem někdy zopakuje, protože iOS mezipaměť občas zahodí, například po aktualizaci iOS, po aktualizaci aplikace z TestFlightu nebo App Storu, nebo když dochází místo v úložišti. Pak se znovu čeká pár minut. Kompilace ovšem potřebuje, aby byla aplikace v popředí. Pokud se uspí, hodinky mohou ukazovat „Zpracovává se“ déle, než by měly. To znamená že audio z hodinek sice příjde do telefonu, ale ten nemá model, který by ho zpracoval, takže hodinkám nepošle potvrzení o zpracování.
Toto se samozřejmě u jazyka podporovaného systémem Apple neděje, jelikož SpeechTranscriber je součástí systému (jazykový model se jen jednorázově stáhne) a Apple ho má pro ANE připravený předem, proto se spouští hned. Whisper je model „zvenku“, takže si ho musí každý iPhone připravit sám. Na druhou stranu Whisper běží na pozadí a je schopen obsloužit hodinky i v případě, že je iPhone zamknutý.
Pokud by někdo chtěl místo stahování, nahrávání a využívání on-device LLM volat nějaké LLM externě pomocí API, nemusí se ke klíči dostat, protože klíč uložený v Keychainu s ochranou „dostupné jen při odemčeném zařízení“ není při zamknuté obrazovce přístupný.
Stejně tak ukládat klíč k LLM v zařízení není bezpečné, pomocí cracknutého iOS by se vám mohl někdo ke klíči dostat.
Výsledkem přepisu zvukového záznamu z iPhonu nebo Apple Watch je tedy čistý text v češtině, nebo jiném podporovaném jazyce. Aby byl jazyk správně rozpoznán, snažím se využít přepínač v aplikaci, ukazující jazyk daného přepisu. A jelikož je čeština i velmi různorodá, rod mluvčího kromě detekce ještě podpořím přepínačem "Jsem muž / Jsem žena / Nechci uvádět".
Ten Whisper model pro češtinu ale také není všespasitelný, byl trénován na titulcích filmů a tak jsem musel dodělat filtraci ukončovacích vět typu: „Titulky přeložil Johny K.“

AI Mentor
Deník potřebuje mentora, který vidí uživatelovy zápisy v širším kontextu, porovnává je s údaji o srdečním tepu a variabilitě, denní době, době na slunci a s kalendářem. Všechny tyto vstupy se z hodinek a telefonu odesílají jako textové údaje, anonymizované a nekonkrétní. Například zda uživatelův tep je nízký, stejný, vyšší atd., než je jeho medián v rámci dané části dne, zda měl naplánovaný meeting, naplánovaný telefonní hovor či událost v kalendáři a mnoho dalšího. Výsledkem z AI jsou pak strukturovaná data, jejichž velkou část pak uživatel vidí jak v záznamu v telefonu, tak i na svých hodinkách.
Tady ale nastalo rozhodování, zda zvolit jeden univerzální model pro přepis i analýzu, nebo více modelů a systém rozdělit. Zkoušel jsem na iPhonu spouštět dva modely, ale často se stávalo, že systém za běhu odstranil ten druhý model, jen aby ušetřil paměť. Pro nepodporovaný jazyk Apple Intelligence bylo potřeba najít jinou schůdnou variantu.
V příštím díle: proč jsem se rozhodl pro model přímo v telefonu, jak celé řešení vypadá v praxi a co se stane při prvním spuštění.