1 Muzikale controller aan de hand van videobeelden Jaan Claeys Promotor: prof. dr. ir. Wilfried Philips Begeleiders: Rik Bellens, Werner Goeman Master...
Muzikale controller aan de hand van videobeelden Jaan Claeys
Promotor: prof. dr. ir. Wilfried Philips Begeleiders: Rik Bellens, Werner Goeman Masterproef ingediend tot het behalen van de academische graad van Master in de toegepaste informatica
Vakgroep Telecommunicatie en informatieverwerking Voorzitter: prof. dr. ir. Herwig Bruneel Faculteit Ingenieurswetenschappen Academiejaar 2007-2008
Ontwikkeling van een muzikale controller aan de hand van videobeelden door Jaan CLAEYS
Masterproef ingediend tot het behalen van de academische graad van Master na Master toegepaste informatica
Academiejaar 2007-2008
Promotor: Prof. Dr. Ir. W. PHILIPS Begeleider: Ir. R. BELLENS, Ir. W. GOEMAN Faculteit Ingenieurswetenschappen Universiteit Gent
Vakgroep Telecommunicatie en informatieverwerking Voorzitter: Prof. Dr. Ir. W. PHILIPS Samenvatting Een muzikale controller wordt ontwikkeld die aan de hand van videobeelden muziek controleert In de inleiding wordt de problematiek uitgelegd. Hoofdstukken 2 tot en met 5 behandelen de methode vanuit een musicologisch kader Hoofdstukken 6 tot en met 8 behandelen de ontwikkeling van de software Hoofdstuk 9 behandelt enkele mogelijke toepassingen. Het besluit bevat enkele verdere evoluties in de software Trefwoorden: muzikale controller, videoanalyse, interactief systeem
ii
Toelating tot Bruikleen “De auteur geeft de toelating deze masterproef voor consultatie beschikbaar te stellen en delen van de masterproef te kopiëren voor persoonlijk gebruik. Elk ander gebruik valt onder de beperkingen van het auteursrecht, in het bijzonder met betrekking tot de verplichting de bron nadrukkelijk te vermelden bij het aanhalen van resultaten uit deze masterproef.”
iii
A Musical Controller with video images Jaan Claeys Supervisor: Wilfried Philips I. INTRODUCTION A low-cost multi-useable realtime musical controller for Microsoft Windows was made that enhances musical expressiveness for performers, musicians and physically disabled people. With a simple webcam, a musical controller was developed. A framework from musical science was used for developing this controller. II. FRAMEWORK The structure of Claeys’ thesis was used for constructing and evaluating a gestual controller [1]. Benford et al was used for deciding on the movements used [2]. Desirable, Sensable, and Sensible movements for the interface where evaluated for the development for the software. The mapping of musical parameters to physical movements followed the structure of Hunt [3]. He describes a distinction between explicit parameters and generative mechanisms. A two-layer mapping was used, where the data from the input was separated from the musical output. The generation of music hereby lies with the user.
III. STRUCTURE A. Input A webcam was used because of the widespread commercial availability. Microsoft Windows DirectShow was used to get the input for the webcam
B. Image analysis The open source library OpenCv was used to analyze images. A non-recursive method was used for fast realtime background extraction. After evaluation a median difference method was used for extracting the background. A median filter was used to minimize unwanted noise in the resulting image. The user has the ability to draw rectangles on the screen that can be manipulated as a slider or as a trigger for musical events. In addition, a bounding rectangle was drawn around the user, and the parameters of this rectangle where stored for sending to an external application. C. Output Two protocols where used for sending parameters to an external application, or external device. OpenSound Control by Matt Wright was used for sending parameters of the bounding recatnle, and the drawn rectangles [4]Error! Reference source not found.. The protocol can be send through a network to other systems or the Internet in a UDP packet. MIDI was used for sending parameters of the drawn rectangles to external devices. D. Musical generation The controller can be used to control external devices or a wide range of musical software applications. Max/MSP was used to illustrate the usefulness of the controller. Three applications where made, these include • A sampler controlled by fingers
•
An analysis of movements that implements the theory of effort from Rudolf Laban [5][5]. • A controller for a synthesizer Other applications for physical disabled people where suggested. IV. CONCLUSION A low-cost musical controller was made that can be used in many ways, through a simple interface. Algorithms were evaluated for speed. Because of the support for wide used musical protocols, the software can interact with the most common musical applications and devices. Many applications can be thought of for the controller. It can be a tool for musicians with instrument, for laptop musicians and for disabled people. REFERENCES [1]
[2]
[3]
[4]
[5]
Claeys, J. (2006). Gestuele interactieve systemen. Naar een technisch analysekader voor extractie van expressieve bewegingen. Unpublished Thesis, Universiteit Gent, Gent. Benford, S., Schnadelbach, H., Koleva, B., Gaver, B., Schmidt, A., Boucher, A.,Steed, A., Anastasi, R., Greenhalgh, C., Rodden, T., and Gellersen, H. (2003). Sensible, Sensable and Desirable: a Framework for Designing Physical Interfaces, Technical Rapport Equator-03-2003, Equator. Hunt, A., Kirk, R. (2000). Mapping Strategies for Musical Performance. In M. M. Wanderley, M. Battier (Eds.), Trends in Gestural Control of Music, [CDROM]. Parijs: Ircam. . Wright, M., Freed, A., Momeni, A. (2003). OpenSound Control: State of the Art 2003. In Proceedings of the 2003 Conference on New Interfaces for Musical Expression (NIME-03) (pp. 153-159). Montreal: McGill University Laban, R., Lawrence F. C. (1974). Effort (2nd Edition). London: MacDonald and Evans.
5. Opbouw Systeem.................................................................................................................. 14 5.1. De Webcam............................................................................................................................... 14 5.2. Verwerking van de gegevens ................................................................................................... 15 5.3. Output van de gegevens........................................................................................................... 15 5.4. Muziekgeneratie ....................................................................................................................... 16
Institue de Recherche et Coordination Acoustique/Musique
ISPW
IRCAM Signal Processing Workstation
MCI
Media Control Interface
MFC
Microsoft Foundation Classes
MIDI
Musical Instrument Digital Interface
MIT
Massachusetts Institute of Technology
MOG
Mixture of Gaussians
MSP
Max Signal Processing
MTU
Maximum Transfer Unit
OpenGL
Open Graphics Library
OSC
OpenSound Control
RGB
Red Green Blue
RS232
Recommended Standard 232
RTP
Real Time Protocol
SIMD
Single Instruction Multiple Data
SQL
Structured Query Language
SSE2
Streaming SIMD Extensions 2
TCP
Transmission Control Protocol
UDP
User Datagram Protocol
UML
Unified Modelling Language
vi
URL
Uniform Resource Locator
USB
Universal Serial Bus
vii
1. Inleiding De komst van de computer in de tweede helft van de twintigste eeuw heeft alle aspecten van het dagelijks leven beïnvloed. De laatste twintig jaar zijn computers sterk genoeg om digitale media te verwerken en te produceren. Technologische verbeteringen op audiovisueel vlak, zoals grafische kaarten en geluidskaarten maken van de computer een hulpmiddel bij de verwerking en de productie van zintuiglijke signalen. Kunstenaars maken dankbaar gebruik van deze technieken om nieuwe kunst te produceren. Interactieve kunst is daar een onderdeel van. Waar de hoofdzakelijk via muis en keyboard gebeurt in de metafoor van een bureau, zoekt men in de interactieve kunst naar meer natuurlijke methodes om computers kunst te laten produceren. De industrie van muzikale controllers breidt zich dan ook uit. Met de komst van muziekproductie programma’s als Ableton, Cubase, Reason en vele andere, zoeken muzikanten ook steeds meer een houvast in hun optredens. Enerzijds om een fijnere controle te hebben over de muziekproductie, waar aanslaggevoeligheid van een controller essentieel is, en anderzijds om bij optredens het publiek een visueel spektakel te bezorgen. Laptop performances zijn dan ook heel statisch en zonder visuele projecties of lichten zijn ze betrekkelijk eentonig om naar te kijken. De eerste muzikale controllers voor computer waren MIDI keyboards (Musical Instrument Digital Interface). Het MIDI protocol is een standaard in de muziekindustrie die informatie bevat over de aanslaggevoeligheid en de toonhoogte. Vele
controllers
uit
de
jaren
‘80
en
‘90
werken
met
dit
protocol.
Geluidseffectenmodules, snaarinstrumenten en zelfs blaasinstrumenten werden vervaardigd die dit protocol ondersteunen. Het voordeel was dat apparaten aan elkaar gekoppeld konden worden. Een viool kan het geluid voortbrengen van een synthesizer, een blaasinstrument van een drum enzovoort. Het nadeel was echter dat het MIDI protocol toonhoogte gericht is, het beslaat tien octaven, omgerekend 128 verschillende noten. De grote kritiek is uiteraard dat dit nooit kan instaan voor de subtiliteit van een akoestisch instrument. Het beslaat nooit de totale dynamiek die een muzikant kan vormen, het kan ook geen tonen produceren die niet in het octaaf
1
liggen, toch niet rechtstreeks. Als trigger van geluiden is het echter een voldoende protocol en kent het nu nog altijd een groot succes in de muziekindustrie. In de academische wereld ging er meer aandacht naar alternatieve controllers. Sensorische input was hier de meest gebruikte vorm van muzikale interactie. Radar, sonar, infrarood, biometrie, capaciteit, druksensoren, zelfs warmte en vochtigheid werden gebruikt om exotische controllers of gehele instrumenten te bouwen voor muzikanten. Deze creaties zien echter alleen het daglicht op conferenties, gespecialiseerde evenementen, of performances. Uiteraard heeft dit veel te maken met de kostprijs van de ontwikkeling en ook met de gebruikte sensoren. Dit weerhoudt de modale muzikant om deze controllers daadwerkelijk te gaan gebruiken. De laatste vijf jaar zijn er echter bedrijven gesprongen op het vervaardigen van controllers die tevens dienen als interface. De monome, de ReacTable en de lemur zijn
multi-touch
interfaces
die
moduleerbaar
zijn
en
samenwerken
met
muziekproductiesoftware. De monome bestaat uit een matrix van knoppen die licht kunnen geven en waarvan iedere knop instelbaar is. De ReacTable is een multitouch tafel, waarop men objecten kan plaatsen die een specifieke functie krijgen, bijvoorbeeld een oscillator. De lemur is een scherm waarop men controls kan zetten die je normaal in software met de muis aanstuurt. Het scherm is een multi-touch interface en aanpasbaar naar de noden van de gebruiker. Deze apparaten geven een aangenamere manier om muziek te controleren, maar met uitzondering van de ReacTable, die met fysische objecten werkt zijn het controllers die voor een kijkend publiek minder interessant zijn. Ze combineren software en hardware in één interface. Uiteindelijk zijn deze producten duur en vervangbaar. Zoals een waakzame muzikant opmerkt kun je dezelfde resultaten bekomen voor 40 dollar, met gebruik van een infrarode sensor en een Nintendo wii controller (op voorwaarde dat je deze bezit uiteraard). Hier begint dan ook de zoektocht naar een muzikale controller die kosteloos is, visueel interessant is, moduleerbaar is, samenwerkt met andere software, met meerdere personen bespeelbaar is en zelfs personen met een fysieke handicap toelaat om muziek te spelen. De goedkoopste sensor, naast het keyboard en de muis, die wijd ondersteund is voor de computer is de webcam. Voor 15 tot 20 euro is een webcam beschikbaar in de winkel. Het wordt veelvuldig gebruikt bij instant messenger toepassingen. Het laat 2
mensen toe visueel te communiceren, zonsopgangen te zien in andere landen en meer. Deze masterproef behandelt het vervaardigen van een softwarematige muzikale controller aan de hand van bewegingen geregistreerd door een webcam. Hoofdstukken 2 tot 5 beschrijven de noden van het project vanuit enkele musicologische kaders en de praktische keuzes die hierbij gemaakt zijn. Hoofdstukken 6 tot 8 behandelen de ontwikkeling van de software. Hoofdstuk 9 behandelt enkele van de mogelijke toepassingen.
3
2. Interactief muzieksysteem Mijn onderzoek tijdens mijn studie musicologie hield een technisch analysekader in voor gestuele interactieve systemen (Claeys 2006). Computersystemen zijn in staat gegevens van de buitenwereld te ontvangen, te interpreteren, te verwerken, en deze gegevens terug uit te sturen naar de wereld. Muzikale mens-machine interactie is dan ook een lus die start bij de mens. De mens verricht een handeling vanuit zijn geheugen en cognitie. Hij voert dit uit via musculaire arbeid. Deze handeling wordt dan door sensoren opgenomen en omgezet naar een digitale gegevens. Deze gegevens worden op hun beurt door software verwerkt en terug omgezet naar analoog geluid. Dit zijn de noodzakelijke voorwaarden voor muzikale interactie tussen mens en machine. Er moet opgemerkt worden dat mijn systeem geen totaal interactief systeem zal zijn. Doordat enkel een controller vervaardigd wordt, ligt de muziekcreatie enigszins open. Men kan kiezen voor een interactief systeem, door over langere tijd informatie te verzamelen, en beslissingen te laten nemen, of men kan reactief werken, zodoende dat elke input een nieuwe muzikale input geeft. De weg ligt enigszins open voor de gebruiker van het programma, alsmede zijn rol in het interactief proces. De reden voor het ontbreken van een totaal systeem is in de eerste plaats om de artistieke vrijheid te waarborgen voor de gebruikers van de controller. Op technisch gebied laat het ook toe de analyse en synthese te splitsen op meerdere systemen. Vele instanties van de controller kunnen één muzikaal systeem beïnvloeden.
4
3. Relevante bewegingen Het onderzoek naar relevante data voor muzikale expressie werd onderzocht in mijn masterproef musicologie. Een interactief systeem wordt geëvalueerd vanuit zijn mogelijkheden. Benford heeft onderzoek gedaan om te komen tot een zinvolle fysieke interactie met interfaces (Benford et al. 1993). Hij onderscheidt sensible, sensable en desirable types bewegingen voor interfaces. Sensible movements zijn alle bewegingen die verwacht worden van mensen in de context van de interface. Het zijn natuurlijke bewegingen voor de combinatie van de gebruiker, interface en omgeving. Bijvoorbeeld de muis horizontaal bewegen op een oppervlak is sensible, de muis opheffen en verplaatsen naar een ander deel van de tafel is ook sensible. Minder sensible is er constant mee in de lucht zwaaien. De bewegingen die niet sensible zijn, zijn de bewegingen die fysiek onmogelijk zijn met de interface. Sensable movements zijn bewegingen die kunnen gedetecteerd worden door de interface. Alhoewel bijvoorbeeld de muis opheffen en ze verplaatsen zinvol is voor de gebruiker is deze echter niet detecteerbaar door de controller zelf, en dus niet sensable. Desirable movements zijn bewegingen die nodig zijn om specifieke taken uit te voeren. De bewegingen die zowel sensible, sensable en desirable zijn, zijn de bewegingen die instaan voor de muziekcreatie (zie figuur 1).
5
Figuur 1 De eerste vraag is dan wat sensable en sensible is met een webcam. Een alleenstaande webcam is uiteraard beperkt door een tweedimensionale representatie van de werkelijkheid. Diepte kan niet gezien worden met een enkele camera. De camera heeft ook de limiet van zijn kader, en het aantal beelden per seconde. Omdat de webcam gebruikt zal worden voor het traceren van bewegingen moet de lichtgevoeligheid vermeld worden. Snelle veranderingen in lichtomstandigheden kunnen verstoring geven van het gebruikte algoritme. Wat overblijft is een representatie van verticale en horizontale verplaatsing en de snelheid van de beweging over tijd. Door het verschil tussen twee frames kan de verticale versnelling en horizontale versnelling berekend worden. Naast deze elementaire berekeningen zijn er ook geavanceerde technieken om dingen te traceren. Objecten kunnen getraceerd en gevolgd worden, of specifieke objecten, bijvoorbeeld ogen of gezichten kunnen herkend worden. Hieruit kunnen we desirable movements extraheren. Uit wat we kunnen traceren zinvolle bewegingen halen voor de creatie van muziek. De beste opstelling voor de interace is een webcam juist boven of onder het scherm. De gebruiker beweegt dan met het gezicht en lichaam recht voor het scherm of projectie en gebruikt ledematen
6
om te bewegen in twee dimensies. Doordat hij zijn eigen persoon en enkele getekende objecten of indicaties ziet kan hij zichzelf corrigeren. Het beeld dat getoond wordt fungeert dus als spiegel voor de bewegende persoon. De gebruiker zal dus het inkomende beeld kunnen spiegelen als hij dat nodig acht. De beperking van de webcam wordt zo enigszins gereduceerd. Globaal gezien kunnen we stellen dat als de persoon beweegt er sprake is van actie en ook van muzikaal geluid en omgekeerd is er bij volledige stilstand geen muzikaal geluid. Het eerste wat we nodig hebben is dus een afdruk van het bewegend lichaam. Hiervoor moeten we alles wat sensable is en niet desirable elimineren. In een eerste instantie is dit de kleur van het beeld. Kleuren brengen trouwens weinig zinvolle informatie voor bewegingsinteractie. In een tweede instantie bevat de statische achtergrond geen zinvolle informatie. Een kleurloos beeld van de bewegende persoon is de informatie die desirable is voor deze toepassing. Uit dit beeld moeten nu parameters gehaald worden voor controle van muziek. Hier staan we voor een moeilijke kwestie op artistiek vlak. Er moeten namelijk bewegingsparameters verbonden worden met muzikale parameters. De controller moet veel kunnen toelaten om de artistieke vrijheid van zijn gebruiker niet te beknotten,
maar
eveneens
genoeg
informatie
verschaffen.
Er
zijn
echter
verschillende mogelijkheden om parameters op mekaar af te stellen. Hunt et al. (Hunt, Kirk, 2000) geven een goed overzicht van de problematiek. Mapping wordt in deze context omschreven als de verbinding of correspondentie tussen parameters van controle en parameters van geluidssynthese. Hij onderscheidt twee grote strategieën voor de mapping: •
Expliciete mappingsstrategieën
•
Generatieve mechanismen
Het eerste type is een directe controle. Parameters worden rechtstreeks aan mekaar verbonden. Onderscheid wordt hierbij gemaakt met het aantal parameters aan beide zijde (Rovan et al 1997). •
Een naar een: één gestuele parameter aan één muzikale parameter
•
Divergentie: één gestuele parameter aan vele muzikale parameters
•
Convergentie: vele gestuele parameters aan één muzikale parameter
Elke soort heeft uiteraard zijn nadelen. Het eerste biedt weinig expressiviteit, maar is eenvoudig en sterk controleerbaar. Divergentie geeft nadelen voor intieme controle
7
van het instrument, maar vereenvoudigt de gestuele controle. Convergentie kan veel expressiviteit bieden maar bemoeilijkt het aanleren van het instrument. Een generatieve mappingsstrategie biedt het voordeel dat de mapping niet vaststaat. Met behulp van artificiële intelligentie kan ze veranderd of aangepast worden. Neurale netwerken kunnen bijvoorbeeld getraind worden, tot het gewenste resultaat bekomen is. Het onderzoek van Hunt kwam tot de conclusie dat twee-lagige mapping flexibiliteit creëert. Door twee lagen te introduceren wordt de input en dus het sensoriële gedeelte losgekoppeld van het synthese gedeelte. Dit is ook wat deze controller beoogt. Enerzijds velerlei toepassingen en uitvoeringen mogelijk te maken, en anderzijds zo zinvol mogelijke informatie meegeven om tot muzikale controle te komen. Voorbeelden van mappingsstrategieën zijn te vinden bij de toepassingen in deel 3. Er worden twee pistes bewandeld voor deze strategieën veel mogelijkheden te bieden. Voor de expliciete convergente en divergente mappingsstrategieën, alsook voor generatieve mechanismen zal er een snelle achtergrondextractie worden geïmplementeerd die zich snel aanpast, zodat bij stilstaande fases het lichaam als achtergrond beschouwd wordt. Daarboven wordt een omsluitende rechthoek getekend. Redenen hiervoor zijn de volgende: •
Een stilstaande fase kan makkelijk herkend worden. Het laatste bewegend beeld kan beschouwd worden als stilstaande fase.
•
Het biedt ledematen de kans om individueel te reageren. Zo kan een arm en bewegende hand gebruikt worden voor controle, terwijl andere delen van het lichaam niet bewegen.
•
Een algoritme dat snel verandert is minder rekenintensief dan die over lange tijd, ook een omsluitende rechthoek tekenen vergt weinig rekenkracht. Cf. Infra in deel twee onder testen
Voor één naar één mappingsstrategieën zal er een tekenmodule geïmplementeerd worden, waar rechthoeken getekend kunnen worden, die dienst doen als controle over een zelf in te vullen muzikale parameter. De rechthoeken kunnen ofwel schuifbalken zijn met een bepaalde oriëntatie, of gewoon triggers. De tekeningen kunnen opgeslagen worden in een bestand met type drw.
8
4. Verwante programma’s Uiteraard is er software op de markt die webcam beelden analyseert. Sommige zijn zelf specifiek toegeënt op interactieve media. Ik beschrijf hier enkele van die programma’s en ook de motivering waarom ik deze niet gebruik.
4.1. Visuele Dataflow programmeertalen De meeste programma’s die speciaal ontwikkeld zijn voor interactieve systemen te bouwen zijn visuele dataflow programmeertalen. Het dataflow model werd uitgevonden door William Robert Sutherland in 1966 (Sutherland 1966). Hij stelde een interactieve grafisch systeem voor als tweedimensionale programmeertaal. Hij ontwikkelde dit op een TX-2 computer. Het is een natuurlijke manier om parallelle processen uit te drukken. In zekere zin bouwt hij voort op aspecten van de HCI (Human Computer Interaction), zoals Sketchpad van Ivan Sutherland (Sutherland 1963). Maar hij past dit toe in een visualisatie van procedures. Het
dataflow
programmeermodel
gaat
lijnrecht
in
tegen
het
imperatief
programmeren. Waar een series van opdrachten worden gegeven bij imperatief programmeren, en de data onzichtbaar is, brengt men met het dataflow model de data op de voorgrond. Opdrachten worden vervangen door objecten die een functie voorstellen met input en output. Van zodra ze genoeg data ontvangen voeren ze hun functie uit en geven ze de output door naar een andere functie. We hebben bijvoorbeeld deze simpele functie in een imperatieve programmeertaal:
A = X +Y B =Y −9 C = A* B
Het is meteen duidelijk dat de twee eerste opdrachten simultaan kunnen uitgevoerd worden. Opdracht B moet in feite niet wachten totdat opdracht A zijn bewerking gedaan heeft. Ze kunnen simultaan gebeuren want ze beschikken al over de nodige data. In dataflow programmeertaal ziet de opdracht er als volgt uit (zie figuur 2)
9
X
Y
9
-
+
* C Figuur 2
De twee eerste opdrachten worden nu parallel uitgevoerd. Voor parallelle processen is dit handig, om dat de status van verschillende condities die in het systeem aanwezig zijn, niet moet worden bijgehouden. Alle functies zijn klaar om data te verwerken op hetzelfde moment. De praktijk is natuurlijk anders dan de theorie. Waar men in theorie oneindige parallelle processen kan creëren, is dit natuurlijk onmogelijk op hardware gebied. Meeste computers hebben slechts één tot vier processoren. Men moest in de jaren ’80 constateren dat het dataflow model, waarbij telkens één en slechts één instructie werd uitgevoerd per functie, een inefficiënt model was. Een hybride model, tussen het dataflow model, en een sequentieel model was veel efficiënter. De functies zelf konden zo enkele sequentiële codes bevatten, zodoende werd het parallelle aspect op grotere schaal toegepast (Johnston et al 2004). In de beginjaren van het dataflow model werd deze niet visueel gerepresenteerd, maar via speciale hardware tekstueel werd ingebracht. In de jaren ’90 was er dan een opkomst van visuele dataflow programmeertalen. Hierbij werd de programmeertaal visueel voorgesteld, en de muis werd hierbij gebruikt om objecten met elkaar te verbinden. In praktijk zijn deze programma’s handig bij signaalverwerking, en metingen. Ze werken op een intuïtieve, grafische manier en er is een minieme kennis van programmeren nodig. Het meest gekende programma is ongetwijfeld LabView
10
van National Instruments. De hardware van National Instruments ontvangt data aan hoge bitsnelheden. Met de LabView programmeeromgeving wordt die data verwerkt. Geluidssynthese, of verwerking is vergelijkbaar met de signalen die LabView ontvangt, hierdoor was er een steile opkomst van visuele dataflow programmeertalen eind jaren ’80.
4.2. EyesWeb EyesWeb is een open software platform dat de ontwikkeling van realtime multimodale gedistribueerde interactieve applicaties ondersteunt. Met andere woorden, een platform om aan interactie met de computer te doen. Het werd ontwikkeld door het InfomusLab in Genoa, Italië. Het leunt sterk aan bij mijn project, omdat er een grote focus is op videoanalyse. Het programma zelf is een visuele dataflow programmeertaal. Blokjes die een functie voorstellen kunnen met mekaar verbonden worden. Deze blokjes hebben enkele parameters die aangepast kunnen worden. De parameters kunnen aangepast worden door de parameters te verbinden met andere functies of door in het eigenschappenvenster van de blokjes wijzigingen uit te voeren. Nadat je een aantal blokjes met mekaar verbonden hebt kan je het programma doen lopen. Het programma is echter niet aanpasbaar vanaf dat het loopt in tegenstelling tot sommige andere visuele programmeertalen. Het aanvaardt enkel externe input of output, gedurende de periode dat het programma loopt. Het programma laat input toe via de webcam en kan vele bewerkingen doen op het inkomend beeld. Het gebruikt de OpenCV bibliotheek voor videobewerking. Met een beetje oefening kan veel bereikt worden met EyesWeb. Het grote probleem is echter de snelheid van de verwerking. Alleen al bij het tonen van het beeld is er tot 100 ms vertraging. Wat zeer onbruikbaar is voor realtime controle. Voor het bespelen van een instrument is dit veel te traag. In andere projecten kan dit echter wel van nut zijn. Bijvoorbeeld als de muziek over de lange duur verandert, door de analyse van grote buffers van beeldmaterialen. Om bijvoorbeeld als drummachine te kunnen gebruiken is het systeem zeer onpraktisch, maar om grote muzikale parameters over tijd te doen veranderen kan dit programma zeker dienst doen.
4.3. Vvvv Vvvv is een software programma voor realtime video synthese. Het werd ontworpen voor de behandeling van grote media omgevingen met fysieke interfaces, 11
gegenereerde
visuals
en
audio.
Het
is
eveneens
een
visuele
dataflow
programmeertaal. Het draait onder Windows en gebruikt de DirectX bibliotheek. Het is gratis beschikbaar voor niet commercieel gebruik. Indien je professioneel bezig bent met videosynthese is een licentie wel vereist. Het bevat heel wat methodes om de grafische kaart rechtstreeks aan te spreken, en zo objecten te tekenen. In tegenstelling tot EyesWeb gebeurt alles in realtime. Er is geen startknop voorzien. Vvvv voorziet video input en enkele standaard videoanalyse algoritmes. Deze zijn echter ook geschreven met behulp van OpenCV en Freeframe. Freeframe is een standaard voor video-plugins, die op vele platformen en in vele programmeertalen gebruikt kan worden. Op zich laat Vvvv niet toe om externe objecten te maken, maar dus wel deze Freeframe plugins. Daardoor ben je weer aangewezen om te programmeren in C++ indien je aan videoanalyse wil doen met behulp van OpenCV. Het programma is bedoeld voor mooie bewegende beelden te genereren aan de hand van de videokaart. Zou dit programma echter zich meer toeleggen op videoanalyse, dan zou het een groot succes worden bij mensen die realtime beelden willen analyseren. Het werkt veel sneller dan EyesWeb en is veel intuïtiever om mee te werken. Daarenboven ondersteunt het vele protocollen en talen: TCP, UDP, MIDI, OSC, DMX, HTTP, SQL en meer. Spijtig genoeg dient dit programma meer de VJ gemeenschap dan de muzikant.
4.4. Andere Naast deze twee visuele dataflow programmeertalen bestaan er nog andere kleine programma’s die een open bron hebben. Zo is er Peripheral Midi Controller, een leuk programma van Ben X Tan. Het is zijn bedoeling om meerdere externe apparaten te kunnen verbinden en zijn input om te zetten naar MIDI-signalen. Hij is begonnen met de input van een webcam. Het algoritme berekent de positie van het meest witte punt. Dit kan dus een lichtje zijn of een witte handschoen. Het scherm kan je verdelen in vier gelijke delen. Naargelang dit punt in één van de vier delen zit, kan je tot vijf MIDI signalen uitzenden. Een andere modus, is het berekenen van drie dimensies. De x en y coördinaat van het punt, en de lichtsterkte van het punt Het programma is geschreven in C++ met behulp van OpenCV. Alhoewel het programma heel eenvoudig is, is dit programma het meest gebruiksvriendelijk. Je installeert het programma en dan kun je al aan de slag. Iedereen is vertrouwd met de
12
windowsomgeving en zijn interface, zodat een gebruiker snel weet wat ieder object doet.
4.5. Evaluatie Het programma dat geschreven wordt is bedoeld voor de modale muziekgebruiker. Het werken met EyesWeb of Vvvv is gespecialiseerd in het maken van performances voor individuen, het geeft hen wijde mogelijkheden. Eenmaal dat zij dit programma, en de manier van programmeren onder de knie hebben kunnen ze het aanwenden. Het is echter een visuele programmeertaal, dus enige kennis is toch vereist. Echter voor totale controle is men toch hier en daar aangewezen op het programmeren van externe objecten voor deze programmeertalen. Alhoewel dit in EyesWeb kan, is het programma zelf te traag voor realtime video analyse. In Vvvv kunnen enkel Freeframe plugins geschreven worden. Er kunnen dus geen andere externe objecten geschreven worden. De twee programmeeromgevingen zijn dus beide insufficiënt voor het project. Daarenboven kan voor de gebruiker van het programma het nogal verwarrend zijn om met deze programma’s direct aan het werk te gaan. Daarom gaat de keuze ook naar een project dat met behulp van de OpenCV bibliotheek geprogrammeerd wordt. Het laat totale controle toe voor het implementeren van een goede videoanalyse, en aan de hand van een gebruikersinterface raakt iedereen er snel mee vertrouwd.
13
5. Opbouw Systeem Om keuzes te kunnen maken in het gebruik van de programmeertaal en eventueel externe bibliotheken beschrijf ik een stap voor stap proces. Dus van de webcam tot het uiteindelijk muzikale resultaat.
5.1. De Webcam De webcam is een ingeburgerde apparaat bij de modale computergebruiker. Het bestaat meestal uit een CMOS lens ingebouwd in een behuizing, die toelaat de camera ergens op aan te hechten. De eerste webcam stamt uit 1991, en zond beelden uit van een koffiepot aan de Universiteit van Cambridge. Een USB connectie laat toe om met het apparaat met de computer te verbinden. Andere modellen van hogere prijsklasse bieden een snellere FireWire verbinding aan of een draadloze verbinding. De standaard webcam heeft typisch een snelheid van 15 beelden per seconde, en een resolutie van 320x240. Duurdere exemplaren bieden meer beelden per seconde en hogere resoluties. De registratie van beelden van een webcam wordt op verschillende platformen anders behandelt. De drivers die geleverd worden bij de webcam zijn bijna altijd voor Windows, soms voor Macintosh en geen voor Linux. Enkele van de grote verdelers van commerciële webcams zijn Logitech, Creative, Microsoft en LabTec. Creative, LabTec en Microsoft hebben geen webcams die compatibel zijn met Macintosh platform. De MacBook en IMac hebben echter standaard een ISight camera ingebouwd op het scherm. Deze was ook apart verkrijgbaar voor andere Apple computers tot 2006. Logitech heeft één product momenteel beschikbaar voor Apple: De Quickam Vision Pro. In vele gevallen werkt de webcam echter zonder aangepaste drivers, en desnoods zijn er sites die oplossingen aanbieden voor het ontbreken van drivers. Het project Macam distribueert gratis een driver voor webcams voor het Macintosh platform. Ze ondersteunen een breed gamma van verschillende fabrikanten. Webcams uitsluitend voor Linux zijn niet te vinden. Maar ook hier hebben mensen drivers ontwikkeld voor verschillende webcams. Het vertalen van de data naar het scherm gebeurt op alle platformen ook anders. Windows gebruikt de DirectShow bibliotheek om beelden te tonen op het scherm, Linux gebruikt Video 4 linux en Macintosh gebruikt Quicktime Capture, een
14
onderdeel van Quicktime. Een programma maken dat op alle platformen zou kunnen werken is dus al een moeilijke start. Er moeten minimum drie verschillende interfaces geprogrammeerd worden om de webcams te doen werken op alle drie de platformen. Mijn keuze ligt dan ook bij de keuze van een webcam onder microsoft Windows.
5.2. Verwerking van de gegevens Om bruikbare data te halen uit de beelden van een webcam is beeldverwerking nodig. Een standaard in de verwerking van beelden is OpenCV. Deze bibliotheek van Intel werd ontwikkeld om commerciële gebruiken van computer visie bij mensmachine interactie, robotica of biometrie bij te staan, door een gratis en open infrastructuur te bezorgen aan de gemeenschap. De bibliotheek bestaat uit algoritmes gecodeerd in C++ die allerlei beeldverwerkingstechnieken toepassen. De algoritmes zijn gecodeerd met de instructieset van Intel processoren in het achterhoofd. De bibliotheek is gratis te downloaden via Sourceforge. De bibliotheek heeft een DirectShow filter die de beelden omzet van een externe camera naar het formaat dat OpenCV hanteert.
5.3. Output van de gegevens Een protocol was nodig om de verwerkte data om te zetten naar andere programma’s. MIDI heeft veel beperkingen, die te wijten zijn aan de seriële verbinding die het gebruikt. Hierdoor kunnen er slechts 10 bits verzonden worden met 8 bits waardevolle informatie aan een snelheid van 31,250 bits per seconde. Ook de lengte is beperkt tot 15 meter afstand. Doorheen de jaren zijn er echter wel wat verbeteringen en aanpassingen gekomen aan het MIDI protocol. De 7bits toonhoogte, die voor de beperking zorgt van 128 verschillende waarden kan verhoogt worden door twee MIDI protocollen te laten lopen zodat men 128² verschillende waarden krijgt. De snelheid van het MIDI protocol werd verhoogt door USB te gebruiken. Verschillende MIDI-interfaces zijn verkrijgbaar op de markt die de seriële verbinding omzetten naar een USBverbinding. Een andere mogelijkheid is het transporteren via netwerk. RTP-MIDI (Real Time Protocol Midi) is zo een protocol beschreven in RFC4695. Het verpakt MIDI in het RTP-protocol en wordt verstuurd door ethernet verbindingen via UDP. Het grote voordeel van MIDI is zijn ondersteuning sinds het ontstaan van het protocol. Bijna elk elektronisch muzikaal instrument voorziet MIDI ondersteuning. 15
Een nieuwer protocol is OSC, OpenSound Control ontwikkelt door Matt Wright aan het CMNAT (The Center for New Music and Audio Technologies) in de Universiteit van California, Berkeley (Wright et al 2003). Het werkt via ethernet, met TCP of UDP en geeft enkele grote voordelen ten opzichte van MIDI. Het laat enorme flexibiliteit toe aan de gebruiker om zijn data door te zenden. Enkele voordelen van OSC:
•
Verschillende data kan doorgezonden worden. Van 32 bit gehele getallen tot 64 bit zwevende komma getallen.
•
Een grote troef is ook de adressering. Men stuurt data door naar een adres bijvoorbeeld: ‘/parameter6’. Door toevoeging van jokers en wildcards kunnen meerdere adressen aangesproken worden. ‘/parameter?’ Komt dan aan bij het adres ‘/parameter5 /parameter6’ enzovoort.
•
Bijkomend voordeel is het zenden van een tijdswaarde bij ieder pakket. Op die manier weet de ontvanger wanneer een pakket verzonden is. Voor realtime toepassingen kan dit handig, zoniet onmisbaar zijn.
•
Daarnaast bestaat er ook bundeling van data. Zodoende dat data die bij mekaar hoort ook op hetzelfde moment toekomt. Bundels kunnen ook bundels bevatten.
Het protocol wint veld bij professionele en vooral interactieve muzieksoftware. De grote applicaties ondersteunen het echter nog niet. Er zal dus naast ondersteuning van OpenSound Control, ook nog ondersteuning van MIDI moeten zijn. Dit laat toe om samen te werken met alle muzieksoftware en alle externe muziekhardware die voorhanden is op de markt.
5.4. Muziekgeneratie Uiteindelijk wordt deze output verzonden naar een muziekprogramma naar keuze, of een extern apparaat dat MIDI of OSC ondersteunt. Dit kan een sequencer zijn, zoals Ableton Live, waardoor je samples kunt aansturen. Een externe synthesizer kan via MIDI aangestuurd worden. Of men kan een heel orkest van gebruikers laten interageren op hun eigen systeem en dan via een netwerk de bewegingsdata doorsturen naar een centrale computer, die de muziek genereert. De mogelijkheden zijn dan ook eindeloos. Persoonlijk houd ik nog van het programma Pure Data en het programma Max/MSP, het commercieel broertje van Pure Data. De geschiedenis van Max/MSP en Pure Data begint in 1957 bij Max Matthews, naar wie het programma
16
genoemd is. Manning beschrijft de geschiedenis van programmeertalen voor muziek (Manning 2004). Matthews ontwikkelde MUSIC I in 1957 aan Bell Labs. Het was het eerste computerprogramma voor het genereren van digitaal geluid door synthese. MUSIC I kon enkel sinustonen produceren. Een verdere versie, MUSIC IV was een uitbreiding, en het eerste volwaardige muziekprogramma voor synthese in assembler code. Het programma kon drie soorten sinustonen creëren: zaagtandgolven, vierhoeksgolven en driehoeksgolven, en het kon vibrato, reverb, band pass filters, en envelope aan. Dit is de basis van wat een synthesizer tegenwoordig kan. Een hele reeks adaptaties van MUSIC werden gemaakt voor andere programmeertalen zoals Fortran en Algol. Het programma kreeg vaste vorm wanneer Barry Vercoe CSound ontwikkelde aan het MIT. De implementatie in C maakte het bruikbaar tot op vandaag. MUSIC en CSound waren echter niet realtime. De computerkracht was in die tijd ook nog te beperkt. Het was pas sinds de jaren ’80 dat systemen krachtig genoeg werden om geluidssynthese realtime te laten verlopen. Miller S. Puckette ontwikkeld in 1986 Max aan het IRCAM (Institue de Recherche et Coordination Acoustique/Musique) in Parijs (Winkler 1997). Max verwerkte MIDI-gegevens die hij uitstuurde naar externe apparaten. Hij voegde er wat later FTS (Faster Than Sound) aan toe, die de synthesizer ISPW (IRCAM Signal Processing Workstation) rechtstreeks aanstuurde. De toevoeging van MSP kan aanzien worden als de eerste realtime toepassing voor muziek synthese, met de grondslagen van MUSIC en CSound erin verwerkt. Het laat muzieksynthese toe op via de CPU. Het is ondertussen een standaard geworden voor interactieve muziektoepassingen. Het is net zoals EyesWeb en Vvvv een visuele dataflow programmeertaal. Net als MUSIC is de grote troef van het programma het genereren van geluid op wiskundige basis. Men kan vertrekken vanuit sinustonen voor de generatie van het geluid, en aan de hand van verschillende oscillatoren kan men een synthesizer opbouwen. Het werkt ook met vele protocollen, zodat er heel wat externe apparaten mee kunnen interageren. Het verschil tussen Pure Data en Max/MSP is qua programma verwaarloosbaar. Max/MSP is iets gebruiksvriendelijker, maar er moet voor betaald worden. Pure Data is kosteloos, open bron, en werkt op ieder platform, maar is ietwat minder gebruiksvriendelijk en heeft een moeizame grafische interface. Ze hebben dezelfde basisobjecten aangezien ze ontwikkeld zijn door dezelfde persoon. Een groot voordeel aan Max/MSP en Pure Data is dat er externe objecten vervaardigd kunnen worden voor het programma in C. Dus als er ergens iets niet lukt met de 17
objecten voorhanden kan je nog altijd extern programmeren. Naast de grote focus op muziek, zijn later pakketten bijgekomen voor grafische objecten te maken. Pure Data heeft hiervoor GEM (Graphics Environment for Multimedia), dat met OpenGL werkt en Max/MSP heeft Jitter, wat werkt met DirectX, OpenGL en Quicktime. Door de ongekende groei in de interactieve wereld van dit programma heeft het collectief GOTO10, een Linux distributie ontwikkeld op basis van de dyne:bolic Linux Live CD distributie. Het project pure:dyne, heeft speciale optimalisaties op niveau van de kernel voor realtime audio en video. Hierdoor is het zeer geschikt voor interactieve performance. Het kan gestart worden vanaf Cd-rom, en bevat onder andere Pure Data, CSound en SuperCollider. Dit zijn allemaal gespecialiseerde muziek synthese programma’s.
Uiteraard
kan
via
netwerk
ook
met
dit
besturingssysteem
gecommuniceerd worden vanuit de applicatie die ik zal ontwikkelen. Aan de hand van Max/MSP of Pure Data kan er interactief gewerkt worden. De gegevens die het van de controller krijgt kunnen geïnterpreteerd worden zoals de gebruiker wilt. Alhoewel ontwikkeling in Max/MSP betalend is, voorziet het een Max/MSP Runtime applicatie, die gratis verspreid mag worden. Ontwikkelde programma’s kunnen dus gebruikt worden door deze versie.
18
6. Behoeftenanalyse en architectuur 6.1. Behoeftenanalyse 6.1.1. Operationele Scenario’s A. Scenario 1: Camera Instellingen aanpassen 1. De gebruiker kiest in het menu Options, Select Camera Een venster verschijnt met de volgende controls • Combobox met keuze camera • Checkbox met keuze Background Difference ernaast een checkbox met keuze Fullscreen • Checkbox met keuze Drawing Module ernaast een checkbox met keuze Fullscreen • Checkbox met keuze Render Original ernaast een checkbox met keuze Fullscreen • Checkbox met keuze Bounding Rectangle • Checkbox met keuze Mirror • Checkbox met keuze Flip • Editbox met width • Editbox met Framerate • DShow Properties drukknop • OK drukknop • Cancel drukknop 2. De gebruiker klikt op een item in de combobox camera De camera wordt geselecteerd 3. De gebruiker klikt op één van de checkboxes Drawing Module of Render Original De checkbox verandert van status, de corresponderende checkbox Fullscreen wordt uit het grijs gehaald als de checkbox aan staat, en wordt in het grijs gezet als de checkbox uit staat. 4. De gebruiker klikt op checkbox Background Difference De checkbox verandert van status, de corresponderende checkboxes Fullscreen en Bounding Rectangle worden uit het grijs gehaald als de checkbox aan staat, en wordt in het grijs gezet als de checkbox uit staat. 5. De gebruiker klikt op een andere checkbox De checkbox verandert van status. 6. De gebruiker klikt op een editbox De gebruiker kan iets invoeren 7. De gebruiker klikt op de knop Dshow Properties Een venster verschijnt met de eigenschappen van de geselecteerde camera
19
8. De gebruiker klikt op de knop OK Het venster sluit 9. De gebruiker klikt op de knop Cancel Het venster sluit B. Scenario 2: Externe connecties instellen 1. De gebruiker kiest in het menu Options, External Connections Een venster verschijnt met de volgende controls • Checkbox met keuze Connect to OSC • Radioknopgroep met keuze IP-Address en URL • Editbox voor Port • Editbox voor IP address • Editbox voor URL address • Checkbox met keuze MIDI Out • Combobox met keuze Select MIDI Device • OK drukknop • Cancel drukknop 2. De gebruiker klikt op de checkbox Connect to Osc of MIDI Out checkbox verandert van status 3. De gebruiker klikt op de radioknop IP- Address of URL De radioknop wordt aangevinkt, de andere wordt uitgevinkt 4. De gebruiker vult port,URL, IP-Address in 5. De gebruiker maakt een keuze in de combobox Select MIDI Device 6. De gebruiker klikt op drukknop OK Het venster sluit 7. De gebruiker klikt op drukknop Cancel het venster sluit C. Scenario 3: Rechthoeken tekenen 1. De gebruiker kiest in het menu Options, Draw Module Een dialoogvenster verschijnt met de volgende controls • Pick Color drukknop • Save drukknop • Open drukknop • Undo drukknop • Clear Drawing drukknop • Combobox met optie Type • Combobox met optie Channel • Checkbox met optie Midi Control • Editbox met optie Value • Editbox met optie Range • Editbox met optie Offset • OK drukknop • Cancel drukknop • Een vierkantje met een gekozen kleur
20
• Een tekenvenster verschijnt waarin met de muis rechthoeken kunnen getekend worden 2. De gebruiker klikt en sleept met de muis in het tekenvenster en laat dan los Een niet gevulde rechthoek wordt getekend, in het tekenvenster, in dezelfde kleur als het vierkantje 3. De gebruiker klikt op Pick Color Een dialoogvenster verschijnt waarin men een kleur kan kiezen 4. De gebruiker klikt op Undo De laatst getekende rechthoek verdwijnt 5. De gebruiker klikt op Clear Drawing Alle getekende rechthoeken verdwijnen 6. De gebruiker klikt op Open Een dialoogvenster verschijnt waarin de gebruiker een bestand kan openen 7. De gebruiker klikt op Save Een dialoogvenster verschijnt waarin de gebruiker een bestand kan opslaan 8. De gebruiker klikt op Type De gebruiker kan een keuze maken uit vijf verschillende types rechthoeken 9. De gebruiker klikt op Midi Control Channel, Value, Range en Offset worden in het grijs gezet 10. De gebruiker klikt op Channel De gebruiker kan een keuze maken uit nummers 1 tot 16 11. De gebruiker klikt op Value, Range, of Offset De gebruiker kan een getal invoeren 12. De gebruiker klikt op OK Het dialoogvenster en het tekenvenster sluiten 13. De gebruiker klikt op Cancel Het dialoogvenster en het tekenvenster sluiten D. Scenario 4: Parameters instellen 1. De gebruiker kiest in het menu Options, Parameters Een venster verschijnt met volgende controls • Checkbox met Weight of Non-Moving Pixels • Checkbox met Horizontal position • Checkbox met Horizontal size • Checkbox met Vertical position • Checkbox met Vertical size • Checkbox met Size of rectangle relative to whole frame
21
• Checkbox met Drawed Rectangles • Naast iedere checkbox een editbox • Editbox met Root address • Drukknop OK • Drukknop Cancel 2. De gebruiker klikt op één van de checkboxes De checkbox wordt aan- of uitgevinkt de aanpalende editbox wordt respectievelijk uit het grijs gehaald of in het grijs gezet 3. De gebruiker klikt op één van de editboxes die uit het grijs zijn De gebruiker kan iets invoeren 4. De gebruiker klikt op OK Het venster sluit 5. De gebruiker klikt op Cancel Het venster sluit E. Scenario 5: De analyse starten 1. De gebruiker kiest in het menu Run, Run Een venster verschijnt met de volgende controls • Run drukknop • Stop drukknop • Exit drukknop • Tekst met keuzes van scenario 1 tot 4 komt te voorschijn 2. De gebruiker klikt op de knop Run Vensters verschijnen met beeld van het oorspronkelijke beeld en mogelijks het bewerkte beeld 3. De gebruiker klikt op de knop Stop De vensters met de camerabeelden verdwijnen 4. De gebruiker klikt op de knop Exit Het dialoogvenster met de controls verdwijnt alsook de vensters met de camerabeelden
22
6.1.2. UML case Diagram
«uses»
Parameters Instellen 1
«uses»
«uses» Rechthoeken tekenen
«uses»
1 Harddisk «uses» «uses» Analyse Starten 1 1
Register
«uses»
«uses»
OpenCV
1 «uses»
1
1
Open Sound Control
1
«uses»
DirectShow «uses»
Gebruiker
1
Camera Selecteren
1 Externe connecties instellen
«uses»
23
6.1.3. Use-Case beschrijving Use-Case 1 Use-case titel: Camera Instellingen aanpassen Main Succes Scenario: 1. Programma nummert de gevonden camera’s en toont deze in een Combobox, selecties worden uit het register gehaald en aangepast in het venster. De camera wordt geselecteerd die in het register opgeslagen was, indien geen waarde gevonden in het register zet de selectie zich op de eerst gevonden camera. 2. Gebruiker selecteert een camera 3. Gebruiker klikt op OK 4. Het nummer van de camera wordt opgeslagen in het register 5. De status van alle checkboxen worden opgeslagen in het register 6. De tekst van alle editboxen worden opgeslagen in het register 7. Het Venster sluit Extensies 1. Er worden geen camera’s gevonden alles wordt in het grijs gezet behalve de drukknop cancel 2. [Gebruiker selecteert één van de checkboxes Drawing Module of Render Original] 1. Checkbox verandert van status 2. De corresponderende checkbox Fullscreen wordt uit het grijs gehaald als de status aangevinkt staat, en in het grijs gezet als de status uitgevinkt staat [Gebruiker selecteert checkbox Background Difference] 1. checkbox verandert van status 2. De corresponderende checkbox Fullscreen wordt uit het grijs gehaald als de status aangevinkt staat, en in het grijs gezet als de status uitgevinkt staat 3. De checkbox Bounding Rectangle wordt uit het grijs gehaald als de status aangevinkt staat, en in het grijs gezet als de status uitgevinkt staat [Gebruiker klikt op één van de editboxes] 1. Er verschijnt een blinkende cursor in de editbox 2. De gebruiker vult iets in, eventueel wordt de input op geldigheid getest [Gebruiker drukt op OK] 1. Ga naar stap 4 [Gebruiker drukt op Cancel] 1. Ga naar stap 7 3. [Gebruiker selecteert DShow Properties] 1. Venster verschijnt met de eigenschappen van de camera 2. Gebruiker doet instellingen 3. Gebruiker klikt op OK 24
4. Instellingen worden opgeslagen in de filtereigenschappen van DirectShow [Gebruiker drukt op Cancel] 1. Ga naar stap 7 Pre-condities 1. De analyse is niet aan het lopen Post-condities 1. Het nummer van de geselecteerde camera is mogelijk opgeslagen in het register, zoniet behoudt ze de vorige waarde 2. De status van alle checkboxes zijn mogelijk opgeslagen in het register, zoniet behouden ze hun vorige waarde. Triggers 1. Gebruiker selecteert Options, Select Camera
25
Use-Case 2 Use-case Titel: Externe Connecties Instellen Main Succes Scenario 1. Selecties worden uit het register gehaald en aangepast aan het venster, het venster wordt getoond 2. Gebruiker klikt op Connect to Osc [Gebruiker vinkt Connect to Osc aan] 1. De radioknopen IP-Address en URL en bijhorende tekst, en de editbox Port die in het grijs staan worden uit het grijs gehaald 2. Gebruiker vinkt één van de radioknoppen aan 3. [Gebruiker selecteert IP-Address radioknop] 4. 1. De URL radioknop en bijhorende Editbox worden grijs gemaakt 5. 2. De gebruiker vult IP adres in 6. [Gebruiker selecteert URL radioknop] 7. 1. De IP-Address radioknop en bijhorende Editbox worden grijs gemaakt 8. 2. Gebruiker vult URL adres in 9. Gebruiker vult poort nummer in 10. 1. De input wordt gecontroleerd op een geldig poort nummer [Gebruiker vinkt Connect to Osc uit] 1. De radioknopen IP-Address en URL en bijhorende tekst, en de editbox Port worden in het grijs gezet 3. Gebruiker klikt op MIDI Out [Gebruiker vinkt MIDI Out aan] 1. De combobox Select MIDI Device en bijhorende tekst worden uit het grijs gehaald 2. De gebruiker selecteert een MIDI apparaat [Gebruiker vinkt MIDI Out uit] 1. De combobox Select MIDI Device en bijhorende tekst worden in het grijs gezet. 3. Gebruiker klikt op OK 4. Het poort nummer wordt op geldigheid gecontroleerd, zoniet verschijnt er een foutbericht 5. Het IP adres de URL, het poort nummer, de status van Connect to Osc , het nummer van het gekozen MIDI apparaat en de status van MIDI Out worden opgeslagen in het register 6. Venster sluit Extensies 2. [Gebruiker drukt op Cancel] 1. Ga naar stap 6 [Gebruiker drukt op OK] 1. Ga naar stap 5 3. 26
[Gebruiker drukt op Cancel] 1. Ga naar stap 6 [Gebruiker drukt op OK] 1. Ga naar stap 5 Post-Condities 1. Het IP-adres, de URL, het poortnummer, en het nummer van het MIDIapparaat zijn mogelijks opgeslagen in het register 2. De status van Connect to Osc, van MIDI Out en van de radioknopgroep IP-Address en URL zijn mogelijks opgeslagen in het register Triggers 1. Gebruiker selecteert Options, External Connections
27
Use-case 3 Use-Case Titel: Rechthoeken tekenen Main Succes Scenario 1. Selecties worden uit het register gehaald en aangepast aan het venster, een ander venster verschijnt waarin men kan tekenen 2. Gebruiker kiest een type uit de combobox Type 3. Gebruiker tekent enkele rechthoeken 4. Stap 2 en 3 worden enkele keren herhaald 5. Gebruiker drukt op OK 6. De rechthoeken en hun types worden opgeslagen in een tijdelijk bestand temp.drw in de temp directory van de gebruiker. 7. Het venster sluit Extensies 2. [Gebruiker klikt op Pick Color] 1. Er verschijnt een dialoogvenster met kleuren voor te kiezen 2. De gebruiker kiest een kleur 3. Gebruiker drukt op OK in het dialoogvenster met kleuren 4. Het dialoogvenster sluit 5. Het kleur wordt getoond in een vierkantje op het dialoogvenster 6. De volgende rechthoeken zullen in dit kleur getekend worden 7. Ga naar stap 2 of stap 5 [Gebruiker klikt op Open] 1. Een dialoogvenster verschijnt waarin men bestanden kan openen van type drw 2. De gebruiker kiest een bestand 3. De gebruiker klikt op Openen 4. Het dialoogvenster verdwijnt 5. De rechthoeken opgeslagen in het bestand worden getekend in het venster 6. Ga verder met stap 2 of stap 5 [Gebruiker klikt op Midi Control] 1. Value, Range, Offset en Channel worden in het grijs gezet als de checkbox uitgevinkt wordt, of uit het grijs gehaald als de checkbox aangevinkt wordt 2. de volgende getekende rechthoeken krijgen midi code 0 als de checkbox uitgevinkt staat 3. Ga verder met stap 2 of stap 5 [Gebruiker klikt op Channel] 1. De gebruiker kiest uit één van de 16 getallen 2. De volgende rechthoeken krijgen een MIDI-boodschap mee, uit het getal gekozen in Channel, de waarde van Value, Range, en Offset 3. Ga verder met stap 2 of stap 5 [Gebruiker klikt op Value] 1. De gebruiker vult een waarde in
28
2. De volgende rechthoeken krijgen een MIDI-boodschap mee, uit het getal gekozen in Channel, de waarde van Value, Range, en Offset 3. Ga verder met stap 2, of stap 5 [Gebruiker klikt op Range] 1. De gebruiker vult een waarde in 2. De volgende rechthoeken krijgen een MIDI-boodschap mee, uit het getal gekozen in Channel, de waarde van Value, Range, en Offset 3. Ga verder met stap 2 of stap 5 [Gebruiker klikt op Offset] 1. De gebruiker vult een waarde in 2. De volgende rechthoeken krijgen een MIDI-boodschap mee, uit het getal gekozen in Channel, de waarde van Value, Range, en Offset 3. Ga verder met stap 2 of stap 5 9. [Gebruiker klikt op Undo] 1. De laatst getekende rechthoek wordt gewist 2. Ga verder met stap 2 of stap 5 [Gebruiker klikt op Clear Drawing] 1. Alle rechthoeken worden gewist 2. Ga verder met stap 2 of stap 5 [Gebruiker klikt op Save] 1. Een dialoogvenster verschijnt waar men bestanden kan opslaan van het type drw 2. De gebruiker vult een bestand in, of kiest een bestand 3. De gebruiker klikt op Opslaan 4. Het dialoogvenster verdwijnt 5. De rechthoeken worden opgeslagen in het bestand 6. Ga verder met stap 2 of stap 5 10. [Gebruiker klikt op Cancel] 1. Ga naar stap 7 Post-Condities 1. De rechthoeken en hun types zijn mogelijks opgeslagen in temp.drw in de lokale temp directory van de gebruiker Triggers 1. Gebruiker selecteert Options, Draw Module
29
Use-Case 4 Use-Case Titel: Parameters instellen Main Succes Scenario 1. Selecties worden uit het register gehaald en aangepast aan het venster, het venster wordt getoond. 2. [Gebruiker vinkt een parameter aan] 1. De bijhorende editbox wordt uit het grijs gehaald 2. De gebruiker kan een naam invullen 3. De naam wordt gecontroleerd op correctheid [Gebruiker vinkt een parameter uit] 1. De bijhorende editbox wordt in het grijs gezet 3. De gebruiker herhaalt stap 2 een aantal keer 4. De gebruiker drukt op OK 5. De parameters worden getest op correctheid 6. De inhoud van de editboxes en de status van de checkboxes worden opgeslagen in het register. 7. Het venster sluit Extensies 2. [Gebruiker drukt op Cancel] 1. Ga naar stap 7 [Gebruiker drukt op OK] 1. Ga naar stap 5 Post-Condities 1. De namen van de parameters en het al of niet berekenen van de parameters tijdens de analyse zijn mogelijks opgeslagen in het register Triggers 1. De gebruiker kiest menu Options, Parameters
30
Use-Case 5 Use-Case Titel: De analyse starten Main Succes Scenario 1. Selecties worden uit het register gehaald en getoond in het venster in de vorm van tekst 2. Gebruiker drukt op Run 3. Cameranummer wordt opgehaald 4. De netwerkconnectie indien geselecteerd wordt opgezet 5. Eén tot drie vensters verschijnen met het oorspronkelijke beeld, het verwerkte beeld, en de tekenmodule naargelang de renderopties, geheugen wordt vrijgemaakt voor de berekeningen 6. De knop Stop wordt uit het grijs gehaald 7. De knop Run wordt in het grijs gezet 8. Gebruiker drukt op Stop 9. Vensters verdwijnen, de netwerkconnectie wordt stopgezet, geheugen wordt vrij gemaakt 10. De knop Stop wordt in het grijs gezet 11. De knop Run wordt uit het grijs gehaald 12. Terug naar stap 2 Extensies 2. [Gebruiker drukt op Exit] 1. Alle vensters sluiten 4. [Er werd geen cameranummer gevonden in het register] 1. Een foutbericht verschijnt 2. Use-case 1 wordt opgestart 3. Terug naar 2 5. [De connectie met het netwerk faalt] 1. Een foutbericht verschijnt 2. Ga verder met stap 6 Pre-Condities 1. Indien er geen camera geselecteerd is of in het systeem aanwezig is kan de analyse niet van start gaan 2. Indien er een ongeldig URL adres of IP adres ingegeven werd, of er geen netwerkconnectie aanwezig is kunnen er geen parameters verzonden worden door het netwerk Post-Condities 1. Alle berekeningen zijn stopgezet 2. Het geheugen is vrij gemaakt 3. De netwerkconnectie is stopgezet Triggers 1. De gebruiker kiest menu Run,Run
31
6.2. Architectuur: statische analyse 6.2.1. Projectbeschrijving Bedoeling is een applicatie te vervaardigen die in staat is bewegingen van een gebruiker te analyseren en zinvolle informatie voor de generatie van muziek door te zenden naar een andere applicatie via OSC, of via MIDI. De gebruiker kan hiervoor enkele instellingen doen, deze worden opgeslagen in het register. Hij kan een videocamera kiezen uit een lijst van beschikbare camera’s. Hij kan instellingen doen rondom externe connecties. Er wordt het volgende bijgehouden: - een IP-adres of URL - een poortnummer - een MIDI apparaat De gebruiker kan ook rechthoeken tekenen op een scherm met de muis. Deze rechthoeken representeren een instrument. Hij kan rechthoeken wissen, en de lijn van kleur veranderen. Hij kan de rechthoeken opslaan in een bestand, of openen uit een bestand. De rechthoek kan als trigger, of schuifbalk geïdentificeerd worden. Indien de getekende rechthoek als schuifbalk geïdentificeerd is, kan ze een MIDIboodschap meekrijgen. De eigenschappen van de rechthoeken wordt tijdelijk opgeslagen in een bestand op de harde schijf. Er wordt ook een omsluitende rechthoek rondom het totaal bewegende deel getekend. Hij kan kiezen welke parameters van die rechthoek worden doorgezonden. De parameters zijn: - de grootte (zowel horizontaal als verticaal) van een rechthoek die de beweging omsluit - de positie (zowel horizontaal als verticaal) van de rechthoek die de beweging omsluit - de hoeveelheid beweging in de rechthoek die de beweging omsluit - De status en waarde van de getekende rechthoek Bij het starten van de analyse wordt de camera geïnitialiseerd eerst overbodige informatie weggehaald. Een aantal opeenvolgende frames worden vergeleken met elkaar om niet bewegende delen er uit te halen, met andere woorden de achtergrond weg te halen. Er wordt eventueel een rechthoek getekend rondom het bewegende deel om een indruk te krijgen van de grootte en positie van het bewegende deel ten opzichte van het gehele beeld. De parameters van de rechthoek rondom het bewegende deel worden verzonden. De rechthoeken die getekend werden door de gebruiker worden getoond op het scherm, en doen dienst naargelang hun initialisatie als trigger of schuifbalk. De parameters worden verzonden doorheen een netwerk met het protocol OpenSound Control naar een andere toepassing die in staat is deze parameters te ontvangen, of ze worden verzonden met het protocol MIDI naar een MIDI apparaat.
Toont instellingen van de camera, externe instellingen en van OSC, laat de analyse starten Verzorgt instellingen omtrent het netwerk gedeelte
De camera zelf, en analyse onderdelen
Slaat variabelen op in een OSC buffer en verzendt ze naar socket Schrijft instellingen in het Windows register
Berekent Verschil tussen een aantal opeenvolgende frames Socket zendt bytes naar een Client Berekent een rechthoek omheen het bewegende deel, en berekent gegevens van die rechthoek
getPropertiesCamera venster wordt getoond met directShow instellingen gebruiker doet instellingen en drukt op OK
Dit is een externe toepassing met minimale controle
doet instellingen SetObjectInt(state)
gebruiker klikt op OK GetLocation:=GetLocation() return location GetObjectInt:=GetObjectInt() return state WriteDataInt(state, location)
Voor iedere knop aanwezig: hier dus: GUIObject renderBackgroundDifference GUIObject renderBoundingRect GUIObject mirror GUIObject flip 3 x GUIObject fullscreen GUIObject width GUIObject framrate GUIObject cameraCombobox
<<destroy>>
36
Scenario 2: Externe connecties Instellen
External Connections
GUIobject
Register
Gebruiker menu externe connecties instellen <> GetLocation:=GetLocation()
Voor ieder GUIObject
return location getDataInt:=getDataInt(location) return state SetObjectInt(state)
Voor iedere knop aanwezig, hier dus: isConnected ipAddressSelected urlSelected midiOut midiDevice
getDataString:=getDataString(location) Voor iedere EditBox aanwezig, hier dus: ipAddress urlAddress portNumber
return text SetObjectText(text)
alle keuzes worden getoond instellingen worden gedaan SetObjectInt(state)
Voor iedere knop aanwezig, hier dus: isConnected ipAddressSelected urlSelected midiOut midiDevice
SetObjectText(text) Voor iedere EditBox aanwezig, hier dus: ipAddress urlAddress portNumber Gebruiker klikt op OK GetLocation:=GetLocation() return location GetObjectInt:=GetObjectInt() return state WriteDataInt(state, location)
GetObjectText:=GetObjectText() return text WriteDataString(text, location)
<<destroy>>
37
Scenario 3: Rechthoeken tekenen DrawModule
GUIobject
Register
DrawWindow
RectangleInstrument
list
ColorDialog
FileDialog
menu draw module <> GetLocation() Voor ieder GUIObject return location getDataInt(location) Voor GUIObject Combobox Type Combobox Channel Checkbox MidiControl
return state SetObjectInt(state)
getDataString(location) Herhalen voor GuiObjecten Editbox Value Editbox Range Editbox Offset(
Elk GuiObject verandert de MIDI status GuiObjecten zijn Editbox Value Editbox Range Editbox Offset Combobox Channel (hier SetObjectInt(state) in plaats van SetObjectText(text)
Gebruiker kiest kleur <> Gebruiker kiest kleur en drukt ok return color SetObjectInt(color) <<destroy>> SetColor(color)
38
Draw Module
GUIobject
Register
DrawWindow
RectangleInstrument
list
ColorDialog
FileDialog
Gebruiker drukt Open <> Gebruiker kiest file en drukt op OK return file
Verantwoordelijkheden - De instellingen die door de gebruiker bepaald worden door de grafische omgeving worden opgeslagen in het register - Voorziet in een grafische omgeving
- Geeft enkele algoritmen beelden te analyseren
om
- Zendt parameters naar een externe toepassing of apparaat via het OpenSound Control protocol en MIDI - Laat toe rechthoeken te tekenen
Opmerkingen: De Grafische omgeving zal uiteraard bestaan uit meerdere vensters en knoppen. Maar de specifieke naam van die objecten zal afhangen van het bestaande raamwerk dat zal gebruikt worden. De volgende objecten zullen zeker aanwezig zijn: - Een hoofdvenster - Een menubalk Dialoogvensters voor CameraSettings, ExternalConnect, Parameters, Analysis, en DrawModule
Aangezien de klassen camera, externe connecties, parameters en teken module enkel
grafische
objecten
vertegenwoordigen
worden
ze
hernoemd
tot
CameraSettingsDialog, ExternalConnectDialog, en ParametersDialog, RunDialog, en 44
DrawModuleDialog. DrawWindow hoort hier niet bij omdat het een venster is dat gebruik maakt van de OpenCV bibliotheek.
Externe bibliotheken of code is nodig voor sommige onderdelen: - Bij de analyse zal OpenCV gebruikt worden - Bij de instellingen van de camera zal DirectShow gebruikt worden - DrawWindow gebruikt OpenCV voor rechthoeken te tekenen - Bij het Netwerk zal de OpenSound Control broncode gebruikt worden
45
7.1.2. Packagediagram
Analyse
Rechthoeken tekenen
ExterneCon necties
Instellingen
GUI
46
7.1.3. Contracten tussen subsystemen Name Type Collaborators Classes Operations NetwerkContract CS ExterneConnecties Register GetHost Instellingen Socket Register GetPort Socket Register GetRootAddress Sender Register GetMidiDevice Sender Name Type Collaborators Classes AnalyseContract CS Analyse Register Instellingen BoundingRect Register BoundingRect Register Camera Register Camera Register Camera Register Camera Register Camera Register Camera Register Camera Register Camera Register Camera
Name Type Collaborators Classes Operations MessageFormat ZenderContract CS Analyse Camera StoreFloat StoreFloat ExterneConnecties Sender (list) Camera Sender Camera Sender
1 Socket -ConnectToClient(in host : string, in port : int) +SendBytes(in buffer : const char *OSCBuf, in length : int)
Algoritmen en datastructuren: Datastructuren OSCbuf is een buffer voor het verzenden van data gecodeerd in het OpenSound Control protocol Algoritmen StoreFloat verpakt een lijst van zwevend komma getallen, en hun adressen in de OpenSound Control gegevensstructuur en verzendt deze naar een socket. StoreInt verpakt een lijst van gehele getallen, en hun adressen in de OpenSound Control gegevensstructuur en verzendt deze naar een socket. SendMidi zal MIDI verzenden naar een extern apparaat ConnectToClient initieert een verbinding tussen de applicatie en opgegeven host en poort. SendBytes verzendt de data als karakters naar de cliënt.
49
7.2.2. Subsysteem: UML klassendiagram
Algoritmen en datastructuren Datastructuren boundingRect zorgt voor een berekening van alle relevante parameters
van
een
omsluitende
rechthoek,
die
kunnen
doorgezonden worden. sender verzorgt interactie met het netwerk. originalDrawing is de lijst met getekende rechthoeken door de gebruiker processedDrawing is de lijst met rechthoeken die na analyse van het beeld moet getekend worden
50
valueDrawing is een lijst met parameters van de getekende rechthoeken, na analyse. hun x of y waarde, naargelang hun oriëntatie en type statusDrawing is een lijst met parameters van de getekende rechthoeken na analyse, de parameter is 1 of 0. Respectievelijk beweging in de rechthoek of geen beweging in de rechthoek Algoritmen CalculateBoundingRect berekent alle parameters uit één frame Analyse is de functie die iedere frame analyseert rekening houdend met de instellingen die gemaakt zijn. Update past een buffer met achtergrondbeelden aan. Difference haalt de achtergrond weg. GetRectangleList is een functie die de getekende rechthoeken uit een tijdelijk bestand halen en opslaan in originalDrawing DrawRectangleList tekent rechthoeken op het scherm ProcessRectangleList
analyseert
als
er
beweging
is
in
de
rechthoeken, en waar
51
7.2.3. Subsysteem: UML klassendiagram
Subsysteem:Instellingen
Register +getDataInt(in location : string) : int +WriteDataInt(in state : int, in location : string) +getDataString(in location : string) : string +WriteDataString(in text : string, in location : string) +getParamName(in number : int) : BOOL +getBgRender() : BOOL +getBoundingRender() : BOOL +getOSCConnect() : BOOL +getIPorURLSelected() : BOOL +getCameraName() : string +getCameraSelect() : int
Algoritmen en datastructuren Datastructuren Het register levert enkel services, het bevat geen datastructuren. Opmerking hierbij is wel dat BOOL een type is dat een boolean verpakt als een integer waarbij TRUE identiek is aan de integer 1 en FALSE identiek is aan 0. Algoritmen De methodes zijn implementaties van GetDataInt en WriteDataInt op specifieke locaties die vast staan. Elke grafisch object dat manipuleerbaar is krijgt zo een specifieke hiërarchische locatie of pad. GetCameraName zal bijvoorbeeld dezelfde methode als GetDataString oproepen met de locatie ingevuld. In die zin kunnen we de locatie beschermen. Ze worden hier niet allemaal getoond, omdat de lijst veel te lang zou zijn
52
7.2.4. Subsysteem: UML klassendiagram
Subsysteem:GUI Dialog
Frame RunDialog
DrawDialog
ParametersDialog
CameraSettingsDialog
NetworkDialog
+GetCameras() +GetPropertiesCamera()
MainWindow
Algoritmen en datastructuren Datastructuren De datastructuren van de dialoogvensters zullen uiteindelijk grafisch manipuleerbare objecten zijn. De namen zijn nog niet gekend omdat pas later voor een raamwerk gekozen wordt. In combinatie met instellingen zullen de luister objecten ervoor zorgen dat het register bijgewerkt wordt. Typisch wordt het register bijgewerkt bij opstarten en afsluiten.
53
Algoritmen GetCameras spreekt DirectShow functies aan die in de eerste plaats een nummer geeft aan alle video input die beschikbaar is op het systeem van de gebruiker. Hij toont deze apparaten in een kader. GetPropertiesCamera toont een venster op het scherm met de instellingen die voorhanden zijn voor het specifiek apparaat. Dit verschilt van apparaat tot apparaat. Bij het maken van DirectShow filters zullen deze instellingen in acht genomen worden.
Algoritmen en datastructuren Datastructuren Een lijst van de klassen RectangleInstrument worden bijgehouden om op te slaan en te tekenen Algoritmen On_mouse voorziet het tekenen van rechthoeken in een venster en luistert naar berichten van de muis. Het slaat in principe de linkerbovenhoek en rechterbenedenhoek van de rechthoek op. SetType stelt het type van de rechthoek in
55
SetMidi stelt de MIDI-boodschap die verbonden is aan de rechthoek in SetColor zet de kleur van de lijn van de rechthoek SaveFile zal de lijst van rechthoeken opslaan in een bestand, al dan niet tijdelijk, om zo beschikbaar te zijn voor de analyse. OpenFile haalt rechthoeken op uit een bestand met de extensie drw
56
8. Implementatie 8.1. Implementatie en integratie 8.1.1. Naam De naam MovementAnalyzer werd gekozen voor de toepassing.
8.1.2. Programmeertaal Aangezien de klant mezelf is en andere gebruikers die eventueel willen beschikken over dit programma is de keuze voor de programmeertaal vrij. Het programma is echter aangewezen op bestaande bibliotheken die het programmeerwerk aanzienlijk vergemakkelijken, maar ook de keuzes beperken. In die mate dat ik bijna geen keuze meer had. Ik behandel kort de gebruikte bibliotheken: OpenCV OpenCV staat voor Open Computer Vision Library en is een open bron bibliotheek die bedoeld is voor onderzoekers, softwareontwikkelaars en camera verkopers. De gedachte achter de bibliotheek is snelle code te ontwerpen die voornamelijk bedoeld is voor Intel processoren. Gebruiksdomeinen zijn HCI of Human Computer Interaction, videobewaking en robotica. De