Cookies op Tweakers

Tweakers maakt gebruik van cookies, onder andere om de website te analyseren, het gebruiksgemak te vergroten en advertenties te tonen. Door gebruik te maken van deze website, of door op 'Ga verder' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie

Door , , 51 reacties

Google heeft een applicatie gemaakt voor iOS die de foto's van Apple Live Photo's zo aan elkaar plakt dat er een vloeiend bewegende gif ontstaat. Daarvoor maakt het lokaal op de iPhone gebruik van een algoritme om de foto's te stabiliseren, waardoor geen internetverbinding nodig is.

Om tot een techniek te komen waarbij de berekening op het apparaat zelf plaatsvindt, gebruikt het algoritme lineair programmeren om een virtueel pad te berekenen dat de camera afgelegd zou hebben alsof er een stabilisatiesysteem gebruikt werd tijdens het filmen. Daarbij moet het beeld op de achtergrond rustiger zijn dan op de voorgrond, waardoor het beeld als geheel rustiger lijkt.

Googles uitdaging was om technieken die normaal via distributed computing toegepast worden, op een mobiele telefoon te laten draaien. Daarbij wist het bedrijf door optimalisaties een snelheidswinst van veertig keer te halen. Ook gebruikt de app de gpu alsof er realtime-textures voor een game gerenderd moeten worden.

Om loops mooier te maken, waarbij de voorgrond wel beweegt, maakt Motion Stills verschil tussen voor- en achtergrond, iets wat volgens Googles Research Blog lastig is als de voorgrond een groot deel van het beeld inneemt. De methode classificeert bewegingsvectoren tussen voor- en achtergrond, waarna verschillende bewegingsmodellen schatten wat de belangrijkste resultaten zijn

De app is te krijgen via de App Store voor iOS-apparaten.

Links: origineel met virtuele camerapad en classificatie van de beweging: voorgrond rood, achtergrond groen. Rechts: het eindresultaat.

Moderatie-faq Wijzig weergave

Reacties (51)

Dat vind ik nou eens een prachtig stukje programmeer werk. Tegenwoordig word er weinig meer geoptimaliseerd omdat er zat cpu power voorhanden is. Computers hebben 4 cores @ 3GHz of meer en anders "processen we het wel gewoon in de cloud".

Hier hebben ze dus weer eens echt kritisch naar de algoritmen gekeken en de boel 40 maal versneld waardoor het op een mobieltje draait!

Geweldig _/-\o_ . Zou vaker moeten gebeuren zodat we ook weer van die cloud-hype afzijn }> .

PS: Dit is eigenlijk "old school" programmeren waarbij je rekening moet houden met de beperkingen van de hardware. Veel leuker :)
Zoals HooksForFeet al zegt: het is onzin dat er tegenwoordig nog maar weinig geoptimaliseerd zou worden. Het blijft belangrijk. Zo wordt er tegenwoordig veel geoptimaliseerd op energieverbruik. Vooral op mobiele apparaten is dat niet hetzelfde als cpu gebruik, het gaat veel meer op wakeups. En ik heb recent nog een verhaal gehoord (ik kan zo snel even geen bron vinden) dat er bij bedrijven als Facebook en Amazon grote bounties te verdienen zijn met optimalisaties die maar procentpunten performancewinst opleveren. Dat vertaalt zich daar namelijk al direct in miljoenen aan bespaarde kosten.
Je kunt het ook andersom bekijken: ze hadden een werkend algoritme dat prima werkte op een server, maar niet op een telefoon. Na maanden werk met een compleet onderzoeksteam hebben ze het voor elkaar gekregen om diezelfde functionaliteit op een mobiele telefoon te laten draaien. Dat heeft dus bakken met geld gekost, waardoor het waarschijnlijk veel goedkoper was om een extra servertje aan te schaffen.

Ik weet dat ik wat aannames doe (ik weet niet hoeveel mensen er aan gewerkt hebben, of hoe lang het geduurd heeft), maar dit is wel de realiteit. Ik ben software ontwikkelaar, maar er zijn vaak zat dingen die ik niet optimaliseer omdat het niet uit kan. Een ding waar ik vorig jaar tegenaan liep: we wisten dat we ongeveer 100 klanten op 1 server konden laten draaien, maar zoveel klanten hadden we nog niet. Ik wist al waar ik performancewinst kon halen en verwacht dat ik dan tot ongeveer 200 klanten per server aan zou kunnen, maar dat levert voor niemand winst op. Die optimalisatie zou maanden werk kosten, dus we hebben er voor gekozen om in die tijd extra functionaliteit te bouwen. Het wordt een ander verhaal als we 2000 klanten hebben, dan kun je ineens de helft van de servers weg doen en daarmee enorm kosten besparen. Tot dat moment kost de optimalisatie alleen maar geld en krijgt de klant nog minder functionaliteit ook.
Na maanden werk met een compleet onderzoeksteam hebben ze het voor elkaar gekregen om diezelfde functionaliteit op een mobiele telefoon te laten draaien. Dat heeft dus bakken met geld gekost, waardoor het waarschijnlijk veel goedkoper was om een extra servertje aan te schaffen.

Ik weet dat ik wat aannames doe (ik weet niet hoeveel mensen er aan gewerkt hebben, of hoe lang het geduurd heeft), maar dit is wel de realiteit. Ik ben software ontwikkelaar, maar er zijn vaak zat dingen die ik niet optimaliseer omdat het niet uit kan.
Zie mijn reactie op Amikaal. Ik zie hetzelfde in mijn omgeving ook gebeuren.
Ook leuk dat hij niet voor android te krijgen is. Naar mijn weten is dat juist een onderdeel van Google.
Ik heb dit ooit ook voor een projectje gedaan. Kudo's voor Google! Is knap lastig om zoiets te doen! Maarja, die mensen bij Google kunnen wellicht een stuk beter codekloppen dan dat ik dit kan...
Dit is onzin: er wordt nog steeds ontzettend veel geoptimaliseerd, het verschil is alleen dat we door al die snelle cores en cloudprocessing nog véél meer in die superefficient geoptimaliseerde processen kunnen doen. En rekening houden met beperkingen is van alle tijden: dat is immers nooit weggegaan. Of denk je dat je voor cloud processing geen rekening hoeft te houden met latency, of voor een soepele UI niet hoeft te denken aan geheugengebruik, wat wanneer op welke threads draait, enzovoort? :)
of voor een soepele UI niet hoeft te denken aan geheugengebruik, wat wanneer op welke threads draait, enzovoort? :)
Ach, een Amiga uit 1985 bijv draaide best een soepele UI op een 7Mhz 68000. Mijn autoradio met ongetwijfeld een dikke ARM erin moet eerst 10 seconden opstarten en doet er seconden over om tussen de radio en de navi te wisselen. Ik gok dat de UI nog best wel wat verder geoptimaliseerd had kunnen worden :)
Ach, als je Plasmatech heet en je hebt een sterke mening dan verkondig je onzin en als je Elon Musk heet en je hebt een sterke mening dan ben je een visionair. Such is life ;) .

Maar on topic;
Natuurlijk geloof ik best dat er nog geoptimaliseerd word, de genoemde voorbeelden zijn natuurlijk hartstikke interessant. Ik denk dat in de embedded hoek ook nog wel aardig wordt geoptimaliseerd.

Maar toch, ik zie in mijn eigen werk omgeving dat iedereen ontwikkelt op de dikste i7 die er te koop is en dat time-to-market vaak een belangrijk criterium is. Er is dan simpelweg geen tijd om de code te optimaliseren. En het is ook niet nodig want de i7 draait het toch wel acceptabel snel.

Dat ze bij Google een algoritme 40 maal hebben kunnen versnellen zal gegarandeerd de nodige moeite hebben gekost maar het geeft ook aan dat het originele algoritme niet echt optimaal was.

PS Ik heb zelf vele embedded systemen ontwikkelt, zowel hard- als software variërend van 4-bit (Samsung) processoren tot 32bit ARM926 en alles daar tussen in. Ik heb in mijn leven dus al aardig wat software en algoritmen geoptimaliseerd en ik weet ondertussen wel een beetje waarover ik praat.

[Reactie gewijzigd door Plasmatech op 8 juni 2016 19:28]

Net even geprobeerd op iPhone 6 maar werkt alleen op de iPhone 6s.
Jep, het vereist de Live Photos feature en die is pas sinds de 6s aanwezig.
Zo ver ik weet is Live Photo's vanaf iPhone 6s, dus de iPhone 6 ondersteund het niet.
Joh. Je moet natuurlijk wel live photos kunnen maken.
Dat slaat echt nergens op, alleen de nieuwste iPhone :|
Ik snap de titel voor geen meter... en wat heeft het omzetten naar een GIF te maken met het stabiliseren van een filmpje?

plaatje maakt ook vrij weinig duidelijk

[Reactie gewijzigd door dakka op 8 juni 2016 07:48]

Ik snap de titel voor geen meter... en wat heeft het omzetten naar een GIF te maken met het stabiliseren van een filmpje?

plaatje maakt ook vrij weinig duidelijk
Als je naar het linkerplaatje kijkt zie je dat de camera beweegt. Het rode kader is het "gestabiliseerde" beeld, rechts wordt het resultaat in de uiteindelijke .gif weergegeven.
Het is dus eigenlijk gewoon een kromme titel.

"maakt gifs van bewegende foto's".

Een "bewegende foto" bestaat natuurlijk niet. Dat is al een animatie (format doet er dan niet toe).

Het komt er dus op neer dat Google een app heeft gemaakt die van de standaard "bewegende foto's" van de iPhone een gestabiliseerde versie kan maken.

Dat is wel netjes, dat dat kan met de rekenkracht van je telefoon ipv een serverpark.
dat dat kan met de rekenkracht van je telefoon ipv een serverpark.
Wat onzin, bovenstaand is allemaal marketing praat. Dit is gewoon SIFT (of b.v. SURF) met daarna een perspectief warp, wat al jaren word gebruikt voor video stabilization en tracking op b.v. foto camera's.
https://en.wikipedia.org/wiki/Speeded_up_robust_features

[Reactie gewijzigd door djexplo op 8 juni 2016 08:40]

Het "knappe" hiervan is (bij het voorbeeld iig) dat het meerendeel van de bewegingsvectoren tot de bewegende voorgrond behoort. Ze hebben toch een manier gevonden om de stabiele achtergrond eruit te halen, ook al bestaat die uit de minderheid van de features.
. Ze hebben toch een manier gevonden om de stabiele achtergrond eruit te halen,
Voorgrond van achtergrond key-points onderscheiden is ook simpel.

Het hele algoritme:
1. Voer SIFT uit op de eerste foto, deze detecteerd automatisch key-points (einde van lijnen, hoekjes etc). Van elk key-point word een "feature vector" gemaakt. Simpel weg een rotatie en schaling invariante beschrijving van de omgeving van de key-point, in een rijtje van getallen.
2. Pas SIFT toe op de tweede foto
3. Match, zoek voor elke feature vector van de nieuwe gevonden punten de feature vector in het eerste beeld, met ongeveer de zelfde getallen. (B.v. kleinste kwadratische fout)
4. Nu de key-points gematched zijn, geeft het verschil in coordinaten tussen de 2 beelden een bewegings vector.
5. Selecteer een random sub-set van bewegings vector en fit een "Perspectief Transformatie". Pak daarna alle bewegings vectoren en kijk welke passen bij deze transformatie. Bereken nu met de punten die goed passen bij de transformatie (inliers) een nauwkeurige transformatie uit. (oftewel RANSAC)
6. Herhaal stap 5, tot een perspectief transformatie is gevonden die goed klopt voor een grote gedeelte van de punten.Deze set van punten is de achtergrond.
7. Nu je van het eerste beeld weet, welke keypoints voor en achtergrond zijn. Kan je simpel weg SIFT toepassen op elke nieuw beeld, en kijken welke keypoints matchen, met de achtergrond keypoints in het eerste beeld. Deze keypoints geven dan de perspectief-transformatie
8. Daarna is het een kwestie van de gevonden (inverse) perspectief-transformaties toepassen op foto's. Waarna je van het resultaat iets cropt omdat je anders aan de zijkanten wat beeld mist.

Oftewel, dit verhaal is 100% marketing, en heeft niks met distributed computing of zo van doen. De basis is iets voor een student projectje.
Dit is zo ongeveer het tegenovergestelde binnen de ICT als waar ik me op specialiseer, dus ik ga er niet inhoudelijk op reageren. Wel weet ik dat in de praktijk als ik stabilisatie software gebruikte dat het resultaat bijna altijd verre van perfect was, dat Youtube's algoritmes waar ze dit op hebben gebaseerd beter waren dan van veel concurrentie, en dat de resultaten die ik nu overal op het internet zie opduiken van Motion Stills er beter uit zien dan wat dan ook wat ik tot nu toe heb gezien op dit vlak.

Ik heb de indruk - alhoewel ik me zou kunnen vergissen - dat dit weer zo'n gevalletje is waar 80% kwaliteit een student projectje is, maar waar 99% kwaliteit iets is wat bijna niemand voor elkaar weet te krijgen.
Dat snap ik, maar ze zeggen zelf ook dat dit "lastig is als de voorgrond een groot deel van het beeld inneemt." en ik ben er niet van overtuigd dat bovenstaande hier een oplossing voor is.

Sws in stap 6&5: "herhaal net zo vaak random subsets tot het werkt" is niet echt elegant.
Ik heb hem ook ff geprobeerd. De foto's worden ineens een heel stuk rustiger. De iOS live foto's zijn hel erg schokkerig vergeleken met het eindresultaat van motion stills. Je kunt ook heel gemakkelijk een aantal live foto's achter elkaar plakken met deze app waardoor je een leuk filmpje kan maken. De app blinkt in mijn ogen ook uit in simpelheid van de interface. Daar kunnen veel apps een puntje aan zuigen.

[Reactie gewijzigd door tomskio op 8 juni 2016 08:03]

Dit zit al sinds de Galaxy S4 in Touchwiz met 'geanimeerde foto'. je foto/videootje wordt gestabiliseerd kan je zelf de bewegende delen kiezen, de lengte en het soort loop. Werkt echt prachtig. Ze noemen het ook wel eens cinemagraphs.

Op de S4 zoom van mijn vrouw alsook mijn eigen S4 kunnen het allebei, en het werkt razendsnel.

[Reactie gewijzigd door musback op 8 juni 2016 09:19]

De toevoeging is dat ze zo'n kort "geanimeerde foto" filmpje inlezen en de verschillende beeld componenten stabiliseren. Een beetje zoals Microsoft's Hyperlapse, maar zonder dat daar zware servers voor nodig zijn.

Edit: Lijkt er op dat 'Hyperlapse Mobile' ook al 'offline' direct op de mobiel werkt.

[Reactie gewijzigd door Henk Poley op 8 juni 2016 09:13]

Dat doet de module van samsung ook, je foto wordt gestabiliseerd, en je kan kiezen welke delen je geanimeerd wilt houden. Mijn bibberhanden zijn zo steeds weggewerkt en je creëert eindeloze loops van bvb je kinderen die kerstballen in de boom hangen :-)
Ik probeer vanavond een voorbeeld te plaatsen :-)

Het zal wellicht minder geavanceerd zijn, hyperlapse-technieken gaat idd een stuk verder dan beeldstabilisatie

[Reactie gewijzigd door musback op 8 juni 2016 09:15]

Ik kan anders zonder problemen exact hetzelfde op mijn l950xl zonder Microsoft hyperlapse. Het zit al enige tijd ingebakken in Windows 10 mobile, waardoor je geen losse app hoeft te gebruiken.

Mooie aan de techniek die Microsoft heeft toegevoegd (oorspronkelijk Nokia), is dat er wordt gedetecteerd of er iets beweegt of niet. Anders wordt er gewoon een foto gemaakt en zodoende opslag bespaard.

edit:
Het gaat blijkbaar hier om het maken van gifjes, niet het proces van het maken van een bewegend beeld bij het maken van een foto. Hier moet je Cinemagraph gebruiken dat meegeleverd is met het OS. Daarmee kan je living images offline omzetten naar gifjes

[Reactie gewijzigd door vali op 8 juni 2016 10:38]

Ik snap hem ook niet helemaal? Is dit niet gewoon een export tool van de apple live photo (of hoe die ook heet) functie? En waarom als gif en niet gewoon een standaard film formaat?
Fotos worden een stuk rustiger EN je kan ze ook omzetten in film formaat. Waarbij de livefoto functie naar ik meen 3 seconden is, is een filmpje ongeveer 8 seconden.

Het werkt erg goed en ik vindt het wel grappig. Nu nog ff een foto zien te maken met een eindeloze loop die goed klopt.
Je kunt ook als film exporteren.
"Google Motion Stills voegt stabilisatie toe aan post processing van gif-bestanden"

Op zich een mooi stukje programmeerwerk. Het onderscheid maken tussen voor- en achtergrond is niet eenvoudig.

Ik denk bijvoorbeeld aan de dieptecamera in de HTC One M8. Zelfs met de diepte-informatie lukt het niet goed om het onderscheid te maken en dat resulteert in rare bokeh effecten op delen van het onderwerp in de voorgrond. Nu kan bij een gif de relatieve beweging van objecten tov elkaar worden gebruikt om onderscheid te maken. Je ziet bijvoorbeeld dat het haar goed wordt bewerkt, iets waar die HTC duocam veel moeite mee heeft.

Desondanks is de beweging in de gif hierboven nog steeds erg verwarrend voor het brein. Ook na bewerking. Ook zijn de contrasten in deze situatie heel groot: een bijna vlak witte achtergrond en een donker/fel groen object op de voorgrond.

[Reactie gewijzigd door bilgy_no1 op 8 juni 2016 08:19]

Toch grappig dat Google nodig is om een Apple product beter te maken...

En opmerkelijk dat Google daar überhaupt energie in wil steken. Op zich wel een mooie ontwikkeling als dit vaker en wederzijds zou gebeuren. En ook in combinatie met andere bedrijven.
Wat ik raar vind is dat het bewegende foto's word genoemd. Als ik de definitie van een foto opzoek krijg ik dit: "fotografische opname, een beeld in de werkelijkheid dat op een bepaald moment met een camera is vastgelegd" Dus het is een momentopname. Ik begrijp dat het gewoon een gifje zal worden, maar dit is geen 'bewegende foto'.
Kunnen ze op deze manier ook 3D genereren?
Snap de titel uberhaupt niet. Volgens mij is een foto per definitie niet-bewegend beeld ...
"Live Photos" is een ding merknaam van Apple, ze maken paar seconden film, en in het midden zit een hoge resolutie foto. Je kan heen en weer schakelen tussen de foto en het moment er omheen bekijken.

Net zoiets als dat een "woord" geen brief of boek is met hele zinnen. Je zou eigenlijk alleen een enkel woord per document moeten kunnen typen in Microsoft's tekstverwerkingsprogramma :+

[Reactie gewijzigd door Henk Poley op 8 juni 2016 08:58]

Geen ding van Apple, maar gewoon een feature die je ook op andere platforms ziet. Zo was het op Lumia's in midden 2014 al mogelijk om Living Images te maken. Ik snap er zelf alleen het nut niet van. Als ik een bewegende foto wil maak ik wel een filmpje, en anders een normale foto.
Sorry, merknaam van Apple.

[Reactie gewijzigd door Henk Poley op 8 juni 2016 08:54]

Op dit item kan niet meer gereageerd worden.



Apple iOS 10 Google Pixel Apple iPhone 7 Sony PlayStation VR AMD Radeon RX 480 4GB Battlefield 1 Google Android Nougat Watch Dogs 2

© 1998 - 2016 de Persgroep Online Services B.V. Tweakers vormt samen met o.a. Autotrack en Carsom.nl de Persgroep Online Services B.V. Hosting door True