– fordi tiden kræver et MODSPIL

09. Mar 2008

Fri software og multimedier: Matte painting med Python, OpenCV og Cinelerra

 
- af Rene Jensen

Modspil.dk kan i denne artikel holde en slags forsmag på en verdenspremiere på et nyt redskab. Det er måske ikke så meget en rigtig artikel som the ballad of a FOSS-programmer and his adventures into the world of motion tracking, men forhåbentlig stadig spændende læsning...

Mattepainting-eksempel Uden at skulle gøre mig klog på filmindustrien eller filmteknik generelt, så vil jeg påstå, at matte painting er en fundamental teknik til at realisere det miljø, som filmen foregår i. Matte painting handler om at fjerne en del af optagelsen, og erstatte den med et billede eller en optagelse af et billede. Rent budgetmæssigt er det nok lidt billigere at kunne nøjes med et maleri af en slagmark fremfor at afbrænde hundrede kvadratkilometer mark og strø lig og udbombede kampvogne ud over den svedne jord ved håndkraft. Denne artikel kommer til at gøre forsøget med at udskifte baggrunden i ganske lille målestok. Det er fascinerende at prøve at eftergøre en teknik, der er omtrent hundrede år gammel, specielt hvis man er en nostalgisk anlagt hobbymand som mig.

Muligvis er det en ren leg for Hollywood at ændre baggrunden på filmoptagelser, muligvis er det ubeskrivelig dyrt. Jeg har bogstavelig talt intet kendskab til de programmer, der anvendes, end ikke Adobe After Effects, Flame eller Smoke, som vist er foretrukket af mange store og små firmaer. På Cg society eller fxForums kan findes flere navne på programmer i de forskellige budgetområder.

Med fri software er det ikke ligetil! Atter engang er det video tracking, der skiller fårene fra bukkene. Hvis fans af fri software vil føle sig ydmygede og underlegne, så kast et blik på featurelisten i Adobe Flame, og fortæl så omverdenen, med hvilke pinefulde metoder, man kan eftergøre bare den simpleste af disse features med fri software.

Eksisterende applikationer

I en senere artikel vil vi gøre lidt ud af at karakterisere miljøet, så man har en chance for at begå sig. I denne omgang nøjes vi med at konstatere, at antallet af applikationer, der kan opfylde vores ønsker, er begrænset:
Cinelerra
Cinelerra kan tracke punkter, men dels nægter jeg pure at anbefale et program til seriøs brug, når det har demonstreret evnen til både at crashe og smadre ens gemte filer, og dels er det ikke en funktion, der er særlig praktisk integreret i dens brugergrænseflade, efter min ydmyge mening.
Voodoo
Voodoo er et gratis program, men koden er ikke tilgængelig. Jeg tror ikke, at den slags er unormalt for "prestigefulde" researchprojekter. Ofte bliver man forbløffet over, hvor tilknappede universiterne er med deres projekter, men selvfølgelig er det en nødvendig konsekvens af den globale drejning vi oplever, hvor politikere og erhvervslivet lægger et fælles pres på anstændige universiteter om at mindske vejen "fra tanke til faktura" ved at true dem på deres finansielle eksistensgrundlag. Stemmeberettigede borgere er efterhånden så konditionerede til at "alting koster penge", at de uden tøven lader meningsdannerne fortsætte med at aflive de gamle dyder, efter hvilke den vandt hæder, som var først til at give til eftertiden snarere end først til at tage fra nutiden.
Programmet har sikkert gode features, i hvert fald hvis man læser beskrivelsen på deres side, men jeg har kun fundet den ene, at den kan forsøge at rekonstruere 3D model af en "statiske" scene som en sky af punkter i rummet omkring et flyvende kamera. Punktskyen og den beregnede kamerabevægelse kan indlæses i Blender, hvorefter man kan bygge en 3D-model, som bagefter kan placeres ovenpå den oprindelige filmoptagelse. Jeg har med held brugt Voodoo+Blender i dette eksperiment.
Omvendt skal der ikke meget til, for at en scene bliver misfortolket. F.eks. er tilstedeværelsen af en skuespiller i bevægelse højst skæbnesvanger for proceduren, hvilket gudskelov ikke er et problem i det fleste "talking heads" sort-hvide horrorfilm - findes der andet? Konklusionen blev så vidt jeg husker, at sommetider virker det, sommetider gør det ikke. Desværre crashede programmet, da jeg forsøgte at køre det for nylig. Uden sourcekode er jeg ikke i stand til at debugge, så indtil videre er Voodoo lagt på hylden.
Gør-det-selv-mandens redskabsskur: Freshmeat, Sourceforge og Google

Men gå ikke i panik - we're the fearless, og Open Source er verdens største garage. Der være noget derude i en overset værktøjskasse, der kan bruges, thi der trives i FOSS-miljøet i dag en betragtelig underskov, der er åben for folk med en skruetrækker i hånden. Det svarer meget godt til vores billede af fri software som værende en "nørd-ting", men forhåbentlig kan disse artikler åbne vejen op for det kunstneriske miljø bare en lille smule.

Det starter med at man Googler lidt om emnet, indtil man har en samling nøgleord: Motion tracking, computer vision og lignende. Dernæst vil en søgning på Freshmeat.net oftest afsløre de reelle muligheder. Her er listen af muligheder, når man søger på "computer vision". Lidt læsning kan berige selv lægmand. Nederst i den teoretiske pyramide foregår grundlæggende billedbehandlinger, som vi kender fra tegneprogrammer; fremhævelse af kanter og konturer. Højere oppe findes der algoritmer til at afsøge området omkring et punkt efter en given forandring i nære billedpunkter, så man f.eks. kan spore vandringen af et hjørne af en bygning fra frame til frame ved at prøve at finde matchende forandringer i konturer osv. Det er her vi kommer ind.

Jeg kastede en dartpil mod min monitor, og valget faldt på OpenCV fra Intel. Der var andre kandidater, og jeg skal ikke udelukke, at jeg vil kunne finde på at skifte på et tidspunkt. Men OpenCV var ikke så svær at få installeret, og der var acceptable Python-bindings klar (til hurtig eksperimentalkode gider jeg ikke at bruge C/C++).

Bevæbnet med Python+PyGTK+Cairo og en grov idé om hvordan brugergrænsefladen skulle fungere, samt en teori om at jeg kunne opbygge et panoramabillede ved at følge horisontpunkter fra billedframe til billedframe, så forsvandt jeg kort sagt bag en lukket dør en hel dag, og kom skuffet og deprimeret ud om aftenen: Jeg havde lavet al det nødvendige, men resultatet blev ikke godt. En hel dag, og så virkede det ikke... Hvad ligner det? Okay, efter et par uger fik jeg tid igen, og i mellemtiden havde jeg revideret min matematik for at matche horisontpunkterne, denne gang ved at prøve at finde den totale mængde punkter og danne en horisont af disse feature-punkter. At placere en frame på et sådant punkt-panorama kunne gøres ved at lave det bedst mulige match mellem placeringen af feature-punkterne på denne frame og på horisonten. Det er ikke så vigtigt præcist hvad programmet gør, og sikkert heller ikke særlig genialt. Pointen er bare, at man finder på en strategi på papiret, og så følger man den.



Da jeg kom ud fra mit arbejdsværelse denne gang var mit humør en hel del bedre - lortet virkede. Faktisk var jeg lettere forbløffet, fordi det virkede rigtigt godt. Okay, rent faktisk løb jeg omkring i cirkler af bar neurotisk colaaccelereret ophidselse. På under tre fulde arbejdsdage havde jeg fået et redskab på hånden, som bragte muligheder inden for rækkevide, som havde været meget vanskelige og tidskrævende at opnå førhen, så krævende, at de reelt var uopnåelige. Og jeg kunne tilpasse koden, brugergrænsefladen og arbejdsforløbet efter egne behov, når lysten skulle melde sig.



Det er den fighting chance, som fri software handler om: At der altid er en udvej, en mulighed for at bore sig frem til sit mål, uden at man behøver at blive bundet på hænder og fødder af den kommercielle maskine.

For en god ordens skyld skal jeg sige, at programmet efter sølle tre dages intensivkodning langt fra er klar til prime time brug. Fremfor at vedhæfte koden til artiklen, kan man følge udviklingen på denne side på AtomicMonsterGirls.net. Giv det en måneds (fritids)udvikling, så skal det nok tage form. Når brugergrænsefladen er faldet lidt til ro, kommer der et blogindlæg mere om hvordan man bruger programmet, samt proceduren for forbehandling- og efterbehandling af materialet.

Følgende to eksempler er lavet ganske hurtigt, omtrent en times tid per eksempel. Jeg har brugt ovenstående lille program til at lave panoramabilledet og generere en stribe billeder, som skal lægges oven på de originale frames. GIMP blev brugt til at mikse selve baggrundsbilledet ud fra fotografisk materiale, og til lejligheden tog jeg Cinelerra til nåde for at mikse optagelse og baggrund sammen samt at foretage simple farve- og kontrastjusteringer.


En pløjemark...



.. En ødemark i en bjergfyldt ørken



Bramslev bakker...



... En ø i et tåget ocean
(med en ganske lille grafikfejl)

Kommentarer: