Nedávno mi od klienta opäť prišla netypická požiadavka - naprogramovať aplikáciu pre jeho eshop, v ktorej sa po zapnutí kamery a nasnímaní zákazníka zobrazia okuliare a bude si ich tak môcť jednoducho vyskúšať. “Jednoducho”
Ako prvú som si pripravil analýzu a klientovi som navrhol dve možnosti:
- statické virtuálne zrkadlo, kde sú okuliare na pevnom mieste na obraze zachytenom kamerou a zákazník sa musi nasmerovať tak, aby mal oči presne tam, kde sú okuliare. Povedzme si narovinu - toto bolo dosť nešťastné riešenie nehodné názvu domény tohoto webu.
- pomocou api na rozpoznávanie tváre naprogramovať zrkadlo tak, aby okuliare automaticky umiestnilo na pozíciu zákazníkových očí - ako bude hýbať hlavou, tak sa budú pohybovať aj okuliare. Oveľa sofistikovanejšie riešenie.
PRVÉ KROKY
Najprv som musel nájsť knižnicu v javascripte, ktorú som mohol použiť. Natrafil som na jednu, ktorá vedela rozoznať len pozíciu očí a úst. Keď som ju použil, pri pozíciovaní okuliarov som musel veľmi improvizovať, pretože algoritmus používaný knižnicou bol dosť nepresný. Občas započítal kus nosa ako tretie oko alebo vyčnievajúce vlasy. To ma nezastavilo a po implementácii niekoľkých upresňujúcich algoritmov som problém vyriešil.
Po následnom testovaní sme sa aj s klientom rozhodli túto aplikáciu nepoužiť, lebo aj napriek mojej obrovskej snahe sa občas stalo, že okuliare získali nesprávnu orientáciu.
NEVZDAŤ SA
Už-už chcel klient od druhej možnosti odstúpiť a vrátiť sa tak k prvému riešeniu, ktorým malo byť statické virtuálne zrkadlo.Ja som sa ale nemienil len tak vzdať. Celý kód som teda zahodil, otvoril som Google a hľadal niečo lepšie. Našiel som knižnicu “face api”, ktorá už v dokumentácii sľubovala skvelé výsledky. Táto knižnica používala natrénované neurónové siete postavené na technológii TensorFlow od Googlu. Okrem detekcie očí napríklad vedela odhadnúť, či je tvár na obraze šťastná alebo nie.
PROTI MÚRU
Naprogramoval som teda aplikáciu celkom odznova, tentoraz postavenú na novom api. Všetko fungovalo perfektne. Teda, to som si aspoň myslel.
Dal som riešenie odskúšať klientovi a ten mi hlásil, že mu vôbec nefunguje. Keď som ho odskúšal na viacerých mobilných zariadeniach a webkamerách, nie na každej moje riešenie fungovalo. S tým som už ale, nanešťastie, nemohol ja nič urobiť, pretože to bola vlastnosť použitej technológie. Nie každé zariadenie podporovalo grafické funkcie, ktoré api vyžadovalo.
Klient sa znova zľakol a naladil sa na strunu, že použijeme predsa len prvú možnosť. A ja som mu už nemohol oponovať. Vyskúšal som ešte ďalšie a ďalšie knižnice na rozpoznávanie tváre, no ani jedna nebola pre naše účely použiteľná.
Dal som klientovi ale návrh - čo tak použiť obe možnosti? Zobrazíme zákazníkovi statické zrkadlo, a pokiaľ vyhodnotíme, že zariadenie podporuje aj dynamicke zrkadlo, tak mu ho zobrazíme.