Er staat geen cameraman langs het veld bij FocuZ, en toch beweegt het beeld mee met het spel: inzoomen bij een aanval, rustig terugzakken bij balbezit achterin. Dat werk doet de virtuele cameraman, en in dit artikel leggen we uit hoe die werkt. Inclusief de dingen die misgingen tijdens het bouwen, want die zijn minstens zo leerzaam als wat er lukte. Dit is het eerste artikel in ons bouwlog: het eerlijke verhaal achter de techniek.
Eerst het principe: één breed beeld, een bewegende uitsnede
De camera's zelf bewegen bij ons nooit; dat is een bewuste keuze waar een eigen artikel over gaat. Twee vaste camera's leggen samen het hele veld vast in één breed panorama, en de "cameraman" is software die binnen dat panorama een uitsnede kiest: een virtueel kader dat over het veld glijdt, alsof er iemand pant en zoomt. Het grote voordeel: de regie kan achteraf én live, en er gaat nooit iets verloren, want buiten het kader bestaat het volledige beeld gewoon.
De cameraman bestaat uit twee delen, en dat is essentieel
De verleiding is om te zeggen "de AI volgt de bal", maar zo bouwen we het bewust niet. Ons systeem heeft twee gescheiden lagen. De eerste laag is detectie: een neuraal netwerk kijkt vele keren per seconde naar het beeld en zegt wáár het spel zich afspeelt: de bal, de spelers, de dichtheid van de actie. Dat is het AI-deel, en het wordt getraind op sportbeelden. De tweede laag is de regie, en die is juist géén AI: het zijn regels die we kunnen uitleggen, testen en bijstellen. Hoe snel mag het kader bewegen? Hoeveel voorsprong neemt het op de speelrichting? Wanneer negeert het een uitschieter?
Waarom die scheiding? Omdat een neuraal netwerk dat rechtstreeks het kader zou besturen, onnavolgbaar gedrag geeft: prachtig in negen wedstrijden, onverklaarbaar zenuwachtig in de tiende, en niemand die kan aanwijzen waarom. Met een deterministische regielaag kunnen we elke camerabeweging herleiden tot een regel, en elke klacht ("hij zoomt te vroeg uit bij corners") vertalen naar een concrete aanpassing.
De twee regels die het verschil maken
In de regielaag doen twee mechanismen het meeste werk. De eerste is de dode zone: een gebied rond het midden van het kader waarbinnen de actie mag bewegen zónder dat de camera reageert. Zonder dode zone jaagt het kader achter elke pass aan en wordt de kijker zeeziek; met dode zone beweegt het beeld alleen als het spel echt verplaatst. De tweede is demping: het kader beweegt nooit abrupt naar zijn doel, maar glijdt er met een gewogen vertraging naartoe, zoals een echte cameraman zijn statiefkop draait. Vrijwel alles wat kijkers "rustig beeld" noemen, is de som van die twee regels, met per situatie andere instellingen.
Wat er misging (en wat we ervan leerden)
Het eerlijke deel. Tijdens de validatie van onze testopstelling liep een van ons door het beeld terwijl het systeem meekeek, en de eerste rapportages klopten van geen kant. Het systeem meldde doodleuk een auto in een ruimte waar geen auto stond: een kast die er voor het model blijkbaar genoeg op leek, elke meting opnieuw. Les één: een detectie die vaak voorkomt is niet automatisch waar; we filteren nu op zekerheid én consistentie, niet op frequentie alleen.
Nog leerzamer was de tweede fout: het systeem zag iemand "lopen" die gewoon stilstond te gebaren. Wie dichtbij de camera staat, is groot in beeld, en zwaaiende armen verplaatsen het gedetecteerde middelpunt genoeg om als beweging te tellen. De oplossing bleek de drempel niet in pixels te leggen maar in lichaamsbreedtes: pas als iemand zich meer dan een bepaald deel van zijn eigen breedte per seconde verplaatst, telt het als lopen. Kalibreren deden we op echte beelden, met de werkelijkheid ernaast. Les twee: elke drempel die je op gevoel instelt, stel je later opnieuw in op data.
Waarom we hierop durven te bouwen
Dit soort fouten hoort niet ondanks maar dankzij de aanpak bij het proces: omdat de regielaag uitlegbaar is, is elke fout een aanwijsbare regel die beter kan, geen mysterie in een zwart doosje. En omdat de detectielaag los staat, kunnen we die blijven verbeteren (van generiek model naar sport-getraind model, van persoon naar bal) zonder de regie opnieuw uit te vinden. De beelden die dit oplevert zie je in het beta-portaal: de witte kader-uitsnede in de speler ís de virtuele cameraman aan het werk.
In het volgende bouwlog-artikel: waarom er überhaupt twee camera's hangen, en wat er gebeurt als je hun beelden aan elkaar naait. Spoiler: binnen testen was de zwaarst denkbare test.