Jak funguje naše analýza tvaru obličeje
Přímá odpověď
Náš sken změří geometrii vašeho obličeje pomocí kamery ve vašem telefonu — 478 orientačních bodů, desítky rozměrů, medián z několika desítek snímků. Model natrénovaný na tisících fotografií z toho odvodí tvar obličeje a doporučí tvary obrouček. Celý výpočet běží ve vašem zařízení. Žádná fotka, žádné měření a žádný výsledek neopouští váš prohlížeč. Zdarma, bez registrace, bez nahrávání.
Proč jsme to postavili
Většina rad o výběru brýlí zní takhle: „Ke kulatému obličeji se hodí hranaté obruby." Je to pravda, jenže to nikomu nepomůže — protože skoro nikdo neví, jaký tvar obličeje vlastně má. Zrcadlo neodpoví, kamarádka odpoví jinak než prodavačka a na internetu najdete pět různých návodů, jak si měřit obličej krejčovským metrem.
Chtěli jsme z toho udělat něco měřitelného. Ne vzhled, ne vkus, ne dojem — geometrii. Tu spočítat umíme. A tam, kde ji spočítat neumíme dost přesně, to chceme říct nahlas, ne to schovat za sebevědomé procento.
Nástroj je zdarma a bez podmínek. Nechceme e-mail, nechceme registraci, nechceme, abyste něco kupovali. Provozujeme optiku — když vám sken pomůže vybrat brýle, které vám opravdu sednou, je to pro nás dobrý obchod i v případě, že si je nakonec koupíte jinde.
Krok 1: Jak kamera vidí obličej
Základem je MediaPipe Face Landmarker — otevřená technologie od Googlu pro detekci obličejových bodů. Rozeznává v obraze 478 orientačních bodů: obrys obličeje, čelist, bradu, lícní kosti, oči, obočí, nos, rty. Včetně okrajů duhovky, což je pro nás zásadní (viz dále).
Podstatné je, kde ta technologie běží. MediaPipe je zkompilovaný do WebAssembly a model si stáhneme na náš vlastní server. Když otevřete náš sken, prohlížeč si stáhne z naší domény kus programu a spustí ho u vás. Od té chvíle už neexistuje nic, co by odesílalo data ven — a to ne z dobré vůle, ale proto, že žádný takový endpoint na naší straně neexistuje. Není kam.
Krok 2: Od pixelů k milimetrům
Kamera vidí pixely, ne milimetry. Když jste blíž, obličej má víc pixelů — ale nezvětšil se.
Řešíme to kalibrací přes duhovku. Průměr lidské duhovky se napříč populací, pohlavími i věkem drží kolem 11,7 mm a patří k nejstálejším rozměrům na obličeji. MediaPipe okraje duhovky detekuje, takže z nich spočítáme převodní poměr „kolik milimetrů má jeden pixel" — a ten pak aplikujeme na všechno ostatní.
Takhle měříme: délku obličeje, šířku lícních kostí, šířku čelisti, šířku čela, úhel brady a PD (rozestup zornic) — údaj, který jinak potřebujete od optika.
Poctivá poznámka o přesnosti rozměrů: kalibrace duhovkou je odhad, ne kalibrovaný přístroj. Opakovatelnost jsme měřili: při opakovaném průchodu celým měřením na týchž snímcích se finální hodnoty liší typicky o desetiny milimetru, v nejhorším případě do zhruba jednoho a půl milimetru. K tomu se v reálném provozu přidávají faktory, které v laboratoři nezměříte — jiné světlo, jiná vzdálenost od kamery, jiný telefon. Proto rozměry berte jako orientační, s odchylkou v jednotkách milimetrů. PD z našeho skenu je dobrý pro představu; pro objednávku dioptrických brýlí ho nechte změřit v optice, kde se měří i centrovací výšky, které kamera nezjistí.
Krok 3: Proč neměříme jen jednou
Jeden snímek je nespolehlivý. Mrknete, otočíte hlavu o dva stupně, projede stín — a čelist je najednou o tři milimetry jinde. Změřili jsme to: jednotlivé snímky se mezi sebou liší i o vyšší jednotky milimetrů.
Proto sken nepracuje s jednou fotkou, ale sbírá desítky vzorků po dobu několika sekund a přitom je průběžně filtruje:
| Filtr | Co dělá |
|---|---|
| Frontalita | Vzorek se započítá, jen když je hlava opravdu rovně — náklon do 6°, minimální natočení do stran, symetrická geometrie. Natočená hlava deformuje přesně ty rozměry, na kterých tvar stojí. |
| Odlehlé snímky | Snímek, který se výrazně liší od dosavadního průběhu, se zahodí celý. |
| Znovunastavení | Když se odchýlí víc snímků za sebou, sken pochopí, že jste změnili polohu, zahodí staré měření a začne měřit novou. Nezasekne se. |
| Ustálení | „Hotovo" nepřijde po odpočtu, ale až když se hodnoty přestanou hýbat. |
Z toho, co projde, vezmeme medián — tedy prostřední hodnotu, ne průměr. Je to podstatný rozdíl: průměr by jeden vychýlený snímek dokázal odtáhnout stranou, medián ne. A funguje to: zatímco jednotlivé snímky kolísají o milimetry, finální hodnota po celém měření kolísá o desetiny milimetru — filtrace a medián srazí šum zhruba osmkrát. Výsledek je proto deterministický: stejný obličej za stejných podmínek dá stejné číslo.
Během měření vidíte, jestli stojíte dobře: síť na obličeji svítí zeleně, když měření běží, a zoranžoví, když se snímky zahazují — s pokynem, co upravit. Nechceme, abyste deset sekund koukali do kamery a netušili, že se nic neděje.
Krok 4: Jak z geometrie vznikne tvar
Původní verze našeho skenu používala ruční prahy — „když je poměr délky k šířce vyšší než X, je to oválný obličej". Fungovalo to na papíře a špatně na skutečných lidech. Zahodili jsme to.
Dnešní verze je natrénovaný model. Postup:
- Data. Veřejný dataset obličejů z Kaggle (Face Shape Dataset, autor Niten Lama — 5 000 fotografií olabelovaných podle tvaru). Vybrali jsme čtyři třídy, které odpovídají tomu, jak se brýle vybírají — oválný, kulatý, hranatý, srdcovitý — po 800 fotografiích na třídu. Dataset obsahuje ženské obličeje; co to znamená pro přesnost — a co jsme s tím udělali — rozebíráme níže.
- Rysy. Každou fotku jsme prohnali naším vlastním skenem (bez toho by model trénoval na něčem jiném, než na čem pak běží) a spočítali z ní ~46 geometrických rysů: šířky obličeje v mnoha výškách, úhly a zakřivení čelisti, poměry, tvar brady. Vše přepočtené do „obličejového rámce", takže je to nezávislé na velikosti hlavy i na náklonu.
- Výběr rysů. Ukázalo se něco, co jsme nečekali: čelo nenese téměř žádnou informaci. Rozlišující signál je v dolní třetině obličeje — čelist, brada, podlouhlost. Rysy z čela jsme z modelu vyřadili, protože přidávaly šum, ne přesnost.
- Model. Multinomiální logistická regrese — jednoduchý, ale plně transparentní model. Výsledek jsou váhy o velikosti asi 6 kilobajtů, které se pošlou spolu se stránkou a počítají se u vás. Žádné volání serveru, žádná fronta, žádná latence.
- Výstup. Pravděpodobnosti čtyř tvarů, které dávají dohromady 100 %.
Přesnost: čísla bez příkras
Náš model má na odděleném testovacím vzorku přesnost přibližně 61 %.
Napsat to takhle na produktovou stránku je proti všem marketingovým instinktům. Píšeme to schválně, protože bez kontextu je to číslo nesrozumitelné a s kontextem je poctivé.
Co to číslo znamená
Náhodné hádání ze čtyř možností má úspěšnost 25 %. Náš model je tedy zhruba dvaapůlkrát lepší než náhoda — z jediného frontálního pohledu, z geometrie, v reálném čase, na telefonu.
Proč to není 95 %
Čtyři důvody, všechny podstatné:
1. Tvar obličeje není objektivní fakt. Neexistuje jediná správná odpověď, kterou by šlo změřit metrem. Odborná literatura na toto téma je poměrně řídká právě proto, že jde o subjektivní klasifikaci — dva lidé olabelují stejnou fotku různě, a ruční labelování vyžaduje expertní úsudek. Když je „správná odpověď" v datech sama nejistá, žádný model se nedostane na 100 %, protože by musel trefit i cizí nekonzistenci.
2. Dvě z našich čtyř tříd se zepředu skoro nedají rozlišit. Oválný a srdcovitý obličej se liší hlavně poměrem čela k čelisti — a rozdíl je často menší než chyba měření. Když necháme model rozhodovat jen mezi těmito dvěma, dostane se na ~64 %. To není chyba modelu, to je vlastnost úlohy. Není to jen náš problém: i v cizích pracích na tomtéž typu dat bývá oválný obličej nejčastěji chybně zařazenou třídou.
3. Trénovací data jsou převážně ženská. Veřejně dostupné datasety pro tuhle úlohu obsahují většinou ženské obličeje a náš není výjimkou. Protože mužské obličeje mají v průměru širší a hranatější čelist — tedy přesně tam, kde model hledá signál — ověřovali jsme, jestli je model systematicky nezařazuje jako „hranaté". Prohnali jsme skenem šest set obličejů z nezávislého datasetu, polovinu mužských a polovinu ženských, a porovnali výsledky. Vychýlení se neprokázalo: rozdíl mezi muži a ženami vyšel v hranicích statistické chyby. Trénovací nerovnováha přesto zůstává omezením, které chceme časem odstranit — ale změřili jsme, že dnes nezpůsobuje systematickou chybu.
4. Jsme omezeni na to, co vidí kamera zepředu. Neměříme hloubku lebky, nevidíme obličej z profilu, nepracujeme s 3D modelem. Vybrali jsme jednoduchost a soukromí místo maximální přesnosti.
Jak jsme na tom proti světu
Tohle je nejzajímavější část a stojí za to ji přečíst celou, protože z ní plyne, proč naše číslo vypadá nízko a přitom nízko není.
V oboru existují dva zásadně odlišné přístupy:
A) Modely nad pixely. Velká neuronová síť dostane celou fotografii a naučí se z ní. Publikované výsledky se pohybují okolo 84–85 %. Například Adonis Emmanuel Tio ve své práci Face shape classification using Inception v3 (arXiv:1911.07916, 2019) dosáhl přeučením modelu Inception v3 celkové přesnosti kolem 84,4–84,8 % při klasifikaci do pěti tvarů. Podobná čísla hlásí i novější práce používající architekturu Xception s transfer learningem (~85 % na testovací sadě, 2023) nebo Inception v3 (T. Hidayat a kol., JOIV 7(4), 2023).
B) Modely nad geometrií — tedy náš přístup: neanalyzuje se obraz, ale vzdálenosti, poměry a úhly mezi orientačními body obličeje.
A teď to podstatné: táž Tiova práce srovnala oba přístupy na týchž datech. Zatímco Inception v3 nad pixely dosáhl 84 %, klasifikátory nad geometrickými rysy (lineární diskriminační analýza, SVM s lineárním i RBF jádrem, vícevrstvý perceptron, k-nejbližších sousedů) skončily na 36,4 až 64,6 % podle metody a velikosti trénovací sady.
Naše číslo — 61 % — tedy leží v horní části pásma, které publikované práce pro geometrický přístup uvádějí. Není to podprůměrný výsledek. Je to zhruba strop toho, co z geometrie obličeje jde vytěžit.
Kdo chce z geometrie víc, musí ji zkombinovat s pixely: Kitsuchart Pasupa, Wisuwat Sunhem a Chu Kiong Loo v práci A Hybrid Approach to Building Face Shape Classifier for Hairstyle Recommender System (Expert Systems with Applications, roč. 120, 2019) dosáhli kombinací ručně navržených rysů a hlubokých deskriptorů VGG-Face přesnosti 70,3 %. To je cesta, která vede přes odeslání fotografie na server — a tou jsme jít nechtěli.
Proč jsme si vybrali horší číslo
| Modely nad fotografií | Náš sken | |
|---|---|---|
| Vstup | celá fotografie (pixely) | geometrie ze 478 bodů |
| Kde běží | server, GPU | váš telefon |
| Velikost modelu | stovky MB | 6 kB |
| Data | studiové fotografie celebrit | živá kamera, běžné světlo |
| Tříd | většinou 5 | 4 (podlouhlý sloučen s oválným) |
| Soukromí | fotka odchází na server | nic neodchází |
Modely nad pixely mají navíc jednu nepříjemnou vlastnost: učí se i z účesu, make-upu, osvětlení a stylu fotografie — tedy z věcí, které s tvarem lebky nesouvisejí. Vypadají přesněji na testovací sadě a hůř se přenášejí na skutečné lidi v koupelně s protisvětlem. Publikované práce navíc trénují i testují na fotografiích celebrit — profesionální světlo, profesionální retuš, frontální póza.
Naše rozhodnutí bylo vědomé: raději nižší číslo, které vydrží v reálném provozu, než vyšší číslo z laboratoře, které vyžaduje poslat vaši tvář na cizí server.
Co když se sken splete?
Logická otázka po předchozí kapitole. Odpověď je uklidňující a stojí za vysvětlení.
Kdyby výsledkem byla jen nálepka („máte oválný obličej") a nic dalšího, byla by chyba v klasifikaci vážná věc. Jenže výsledkem je doporučení tvarů obrouček — a ta se u sousedních tvarů obličeje z velké části překrývají.
Tvary obličeje totiž netvoří čtyři ostře oddělené škatulky, ale spojité pole. Obličej, který model váhá zařadit mezi oválný a srdcovitý, leží někde mezi nimi — a obroučky, které sluší jednomu, sluší z velké části i druhému. Když se model splete, spletl se skoro vždy o sousední tvar, ne o protilehlý. Praktický dopad na to, co si nakonec nasadíte, je proto mnohem menší, než by se ze samotného čísla 61 % zdálo.
K tomu se přidávají dvě pojistky:
- U sporných výsledků neurčujeme jeden tvar, ale ukážeme kombinovaný typ a doporučení, které vyhovuje oběma (viz níže).
- Doporučení je žebříček, ne verdikt. Nabízíme několik tvarů obrouček, ne jeden jediný správný.
A pak je tu nejjednodušší kontrola ze všech: zkuste si je nasadit. Náš sken je vodítko, které zúží výběr z padesáti modelů na pět. Poslední slovo má zrcadlo.
Když si model není jistý, řekne to
Tohle považujeme za nejdůležitější věc na celém nástroji.
Když jsou dva nejsilnější tvary od sebe dál než 12 procentních bodů, ukážeme jeden tvar a žádné procento — protože doplňovat k jasnému výsledku číslo je jen předstírání vědeckosti.
Když jsou blíž, ukážeme kombinovaný typ: oba tvary i s procenty a vysvětlení, že spojujete rysy dvou tvarů. Není to výmluva. Je to pravda o zhruba každém pátém obličeji — a pro výběr brýlí je to dobrá zpráva, protože kombinovaný typ má větší volnost.
Stejný princip platí i o patro níž, u obrouček: když jsou doporučené tvary skoro rovnocenné, neřadíme je podle desetin procenta — řekneme rovnou, že vám sluší většina tvarů a máte volnou ruku. Rozdíly ukazujeme jen tam, kde je umíme doložit.
Alternativa by byla ukázat u sporného výsledku jeden tvar se sebevědomým „87 %". Vypadalo by to lépe a bylo by to nepravdivé. Nedůvěryhodný nástroj nemá cenu ani jako marketing — člověk, kterému poradíme špatně, se nevrátí.
Soukromí: co se opravdu děje
Tohle není odstavec o zásadách. Je to popis architektury.
- Snímek z kamery nikam neodchází. Zpracovává se v prohlížeči a zahazuje. Nikde se neukládá — ani dočasně na serveru, protože žádný server v procesu není.
- Neodcházejí ani odvozená data. Žádné rozměry, žádné procento tvaru, žádný otisk obličeje. Výsledek existuje jen ve vaší kartě na obrazovce a zmizí se zavřením záložky.
- Nepoužíváme cizí CDN pro jádro nástroje. Model, knihovny i fonty hostujeme na vlastním serveru. Váš prohlížeč tak během skenu nekontaktuje žádnou třetí stranu.
- Nechceme registraci ani e-mail. Sken funguje bez účtu.
- Kamera se zapne až na váš klik — nikdy sama při načtení stránky. A po skenu se okamžitě vypne (kontrolka na telefonu zhasne).
- Analytika je oddělená a dobrovolná. Měříme anonymní statistiku návštěvnosti — kolik lidí sken spustilo a dokončilo. Načte se až po vašem souhlasu; když souhlas odmítnete, nenačte se nic a nástroj funguje beze změny. Žádná cookie zeď.
- Nikoho nepoznáváme. Nevytváříme žádný otisk ani šablonu obličeje, nemáme databázi, se kterou by šlo cokoli porovnat, a nemáme technickou možnost vás při příští návštěvě poznat. Sken vás změří — a zapomene.
Nechceme, abyste nám tohle věřili na slovo. Otevřete si v prohlížeči vývojářské nástroje, záložku Síť, a spusťte sken. Uvidíte stažení modelu z naší domény — a pak už nic.
Na čem pracujeme dál
Nástroj považujeme za rozdělaný, ne hotový. Co chceme zlepšit:
- Ověřit chování modelu na datech z reálného provozu. Model je trénovaný na studiových fotografiích, ale běží na mobilní kameře v obývacím pokoji. Z anonymní statistiky (jen počty tvarů, nic osobního) chceme ověřit, jestli rozložení výsledků u skutečných uživatelů odpovídá očekávání — a pokud ne, model rekalibrovat.
- Vyrovnat trénovací data mezi pohlavími. Systematickou chybu jsme u mužů neprokázali (viz výše), ale nerovnováha v datech zůstává a chceme ji odstranit.
- Doporučení podle rozměrů, ne jen podle tvaru. Už dnes měříme šířku obličeje a PD. Chceme z toho odvodit doporučenou velikost obruby v milimetrech — tedy druhou polovinu problému, kterou tvar neřeší.
- Napojení na skutečné produkty. Dnes doporučujeme tvary obrouček. Cílem je ukázat konkrétní modely ze skladu, které tomu tvaru odpovídají.
- Stabilita na hranicích. Ladíme, aby se hraniční výsledky nepřeklápěly mezi dvěma podáními při opakovaném skenu.
Kdykoli se něco z toho posune, změní se i tato stránka. Datum poslední aktualizace najdete v patičce.
Shrnutí pro netrpělivé
| Otázka | Odpověď |
|---|---|
| Kdo to počítá? | Váš telefon, ne náš server |
| Odchází někam moje fotka? | Ne. Neexistuje kam. |
| Jak je to přesné? | ~61 % ze čtyř tvarů (náhoda = 25 %). Orientační vodítko, ne diagnóza. |
| Je to málo? | Ne. Publikované práce uvádějí pro geometrický přístup 36–65 %. |
| Funguje to i pro muže? | Ano — ověřili jsme na 600 obličejích, že model muže systematicky neznevýhodňuje. |
| Jak přesné jsou milimetry? | Opakovatelnost v desetinách mm; v reálných podmínkách počítejte s jednotkami mm. |
| Co když se to splete? | Sousední tvary mají z velké části stejná doporučení, takže dopad je malý. A poslední slovo má zrcadlo. |
| Co když si nástroj není jistý? | Řekne to a ukáže kombinovaný typ |
| Stojí to něco? | Ne. Bez registrace, bez e-mailu, bez podmínky nákupu. |
| Nahradí to optika? | Ne. U dioptrických brýlí si nechte změřit PD a centrovací výšky v optice. |
Zdroje
- A. E. Tio: Face shape classification using Inception v3. arXiv:1911.07916, 2019. — Srovnání modelu nad pixely (Inception v3) s klasifikátory nad geometrickými rysy na týchž datech; 500 fotografií, 5 tvarů.
- K. Pasupa, W. Sunhem, C. K. Loo: A Hybrid Approach to Building Face Shape Classifier for Hairstyle Recommender System. Expert Systems with Applications, roč. 120, 2019, s. 14–32.
- W. Sunhem, K. Pasupa: An Approach to Face Shape Classification for Hairstyle Recommendation. 8th International Conference on Advanced Computational Intelligence (ICACI), 2016, s. 390–394.
- T. Hidayat, I. Astuti, A. Yaqin, A. Tjilen, T. Arifianto: Grouping of Image Patterns Using Inceptionv3 for Face Shape Classification. JOIV: International Journal on Informatics Visualization, roč. 7, č. 4, 2023, s. 2336–2343.
- Dataset: Face Shape Dataset (Niten Lama), Kaggle — 5 000 fotografií, 5 tříd.
- Ověření na mužských obličejích: vzorek z datasetu FairFace (300 mužů + 300 žen), interní měření, červenec 2026.
- Technologie detekce bodů: MediaPipe Face Landmarker (Google, open source).
Poslední aktualizace: 18. 7. 2026