informace ze zákulisí vývoje

Rekurze

16. 2. 2014 16:30
Rubrika: Pod pokličkou

Programuji zajímavou novinku - nový způsob pro postování do vaší nástěnky - nově uvidíte náhledy z postovaného odkazu na album/fotku, samozřejmostí zůstanou videa a blogy. Do budoucna mnohem víc. Aktuálním cílem je přepsání celé architektury tohoto vkládacího políčka. Proč o tom ale píšu? Protože jsem se dostal do docela zajímavého rekurzivního chování, kdy musím řešit věci stále hloub a hloub, nesouvisející již z původním problémem.

Tak předně, chce to vylepšit grafiku tohoto vkládacího políčka. Tím, jak testuji kód, tak samozřejmě potřebuji velmi rychle provádět komplikace LESS stylů a Javascriptu. Ktomu slouží grunt. Aby to jelo trochu lépe, musel jsem ho přepsat. Když jsme u těch stylů, tak zároveň jsem se začal věnovat změně vzhledu formulářových prvků. Ten aktuální mě už trochu omrzel, hodilo by se ještě konečně aktualizovat na Bootstrap 3.1, ale toto necháme až na později.

Dalším nořícím problémem jsou náhledy z fotek. Protože chceme ukazovat náhledy, tak jsem se dostal i k tomuto. No a protože aktuálně to nemáme na signálech úplně nejlepší, fotky na výšku jsou rozmazané, při řešení vkládacího pole mi došla trpělivost a začal jsem řešit nový systém dělání náhledů z fotek.

Náhledy z fotek budou nyní uloženy zvláště a jejich cachování bude mít na starost server nginx. Jenže ono takové oříznutí foky do čtverce není tak jednoduché, protože většinou fotka na výšku má to zajímavé "nahoře", nicméně dost často to někdo blbě vyfotí a je to uprostřed, a pak se vám může stát, že oříznete na spodní hraně obličej. A to opravdu nevypadá hezky. Je tedy třeba implementovat systém detekce obličeje.

Nějaké podrobnější ořezání na základě pozice obličeje už nejde dělat v nginxu, takže je třeba onen ořez proxyovat na nějaký skript, ideálně PHP skript.

Detekce v PHP není taková sranda, jak by se mohlo zdát. Detekce probíhá na základě ověřených vzorců, které jsou např. definovány v XML. Tento XML soubor má 26 tisíc řádek, takže jak jistě tušíte, takovýto parser není v PHP moc efektivní a detekce obličejů z fotky trvá třeb 15 sekund - to je prakticky nepoužitelné.

Dalším možným způsobem je z tohoto skriptu daná data delegovat na jiný program, ať už extension v PHP, nebo samostatný exáč. Po několikahodinových pokusech zprovoznit nějaké extension pro PHP 5.5 raděj volím způsob aplikace napsané v C++, který využívá OpenCV knihovny.

Ha, jak zkompilovat aplikaci v C++, když OpenCV není nainstalováno. Tedy, novým úkolem je na virtuální vývojový server Debian Wheezy dostat správné knihovny. Ruční instalace není uplně úspěšná, protože neumím prioritizovat balíčky pro jessie. Jdu to tedy udělat přes náš Puppet instalační skript a zjišťuji, že s ním je to 10× jednodušší.

Nyní mám C++ skript, který umí v obrázku detektovat obličeje. Nyní zbývá naprogramovat skript, který bude data z exáče parsovat a podle nich správně ořízne obrázek.

Ještě by se hodilo, kdybychom tyto naparsovaná data o pozicích obličejů uložili do databáze, abychom později mohli na signálech implementovat štítkování osob ve fotkách.

Mj., je třeba vyřešit ještě instalaci OpenCV na serveru, kde Puppet nemáme a je to třeba ručně nainstalovat podle priorit.

Závěr? No, s tímto přístupem opravdu nevím, kdy to bude =)

Zobrazeno 936×

Komentáře

ObiSkyWalker

Dobrá myšlenka a pěkná mapa, těším se :-)

Ferenc

Připomíná mi to práci na diplomce. Napřed jsem klouzal po povrchu a postupně se nabalovaly další věci...

Honyczek

@hrach hezky, Hrachu! Tak už to prostě chodí. Důležitý je se toho neleknout a začít to rozplétat. Třeba ti s tím i někdo pomůže ;-)

Zobrazit 3 komentáře »

Pro přidání komentáře se musíš přihlásit nebo registrovat na signály.cz.

Autor blogu Grafická šablona Ondřej Válka