110
Jaan Claeys Muzikale controller aan de hand van videobeelden Academiejaar 2007-2008 Faculteit Ingenieurswetenschappen Voorzitter: prof. dr. ir. Herwig Bruneel Vakgroep Telecommunicatie en informatieverwerking Master in de toegepaste informatica Masterproef ingediend tot het behalen van de academische graad van Begeleiders: Rik Bellens, Werner Goeman Promotor: prof. dr. ir. Wilfried Philips

Muzikale controller aan de hand van videobeelden Jaan Claeys...weerhoudt de modale muzikant om deze controllers daadwerkelijk te gaan gebruiken. De laatste vijf jaar zijn er echter

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

  • Jaan Claeys

    Muzikale controller aan de hand van videobeelden

    Academiejaar 2007-2008Faculteit IngenieurswetenschappenVoorzitter: prof. dr. ir. Herwig BruneelVakgroep Telecommunicatie en informatieverwerking

    Master in de toegepaste informaticaMasterproef ingediend tot het behalen van de academische graad van

    Begeleiders: Rik Bellens, Werner GoemanPromotor: prof. dr. ir. Wilfried Philips

  • 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 wide-

    spread 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] Claeys, J. (2006). Gestuele interactieve

    systemen. Naar een technisch analysekader voor extractie van expressieve bewegingen. Unpublished Thesis, Universiteit Gent, Gent.

    [2] 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.

    [3] 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.

    [4] . 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

    [5] Laban, R., Lawrence F. C. (1974). Effort (2nd Edition). London: MacDonald and Evans.

  • Inhoudstafel

    1. Inleiding................................................................................................................................. 1

    2. Interactief muzieksysteem ..................................................................................................... 4

    3. Relevante bewegingen ........................................................................................................... 5

    4. Verwante programma’s......................................................................................................... 9 4.1. Visuele Dataflow programmeertalen........................................................................................ 9 4.2. EyesWeb.................................................................................................................................... 11 4.3. Vvvv........................................................................................................................................... 11 4.4. Andere....................................................................................................................................... 12 4.5. Evaluatie ................................................................................................................................... 13

    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

    6. Behoeftenanalyse en architectuur ...................................................................................... 19 6.1. Behoeftenanalyse...................................................................................................................... 19

    6.1.1. Operationele Scenario’s..................................................................................................................... 19 6.1.2. UML case Diagram ........................................................................................................................... 23 6.1.3. Use-Case beschrijving ....................................................................................................................... 24

    6.2. Architectuur: statische analyse............................................................................................... 32 6.2.1. Projectbeschrijving ............................................................................................................................ 32 6.2.2. Klassenlijst ........................................................................................................................................ 33 6.2.3. UML klassendiagram ........................................................................................................................ 35

    6.3. Architectuur: dynamische analyse ......................................................................................... 36 6.3.1. Interactiediagrammen ........................................................................................................................ 36

    7. Systeem- en gedetailleerd ontwerp...................................................................................... 44 7.1. Systeemontwerp ....................................................................................................................... 44

    7.1.1. Subsystemen ...................................................................................................................................... 44 7.1.2. Packagediagram................................................................................................................................. 46 7.1.3. Contracten tussen subsystemen ......................................................................................................... 47

    7.2. Gedetailleerd ontwerp ............................................................................................................. 49 7.2.1. Subsysteem: .................................................................................................................... 49 7.2.2. Subsysteem: .................................................................................................................... 50 7.2.3. Subsysteem:................................................................................................................ 52 7.2.4. Subsysteem: .......................................................................................................................... 53 7.2.5. Subsysteem: .............................................................................................. 55

    8. Implementatie ...................................................................................................................... 57 8.1. Implementatie en integratie .................................................................................................... 57

    8.1.1. Naam ................................................................................................................................................. 57 8.1.2. Programmeertaal................................................................................................................................ 57 8.1.3. Module afhankelijkheid..................................................................................................................... 59 8.1.4. Testen ................................................................................................................................................ 87

    iv

  • 9. Toepassingen ....................................................................................................................... 89 9.1. Volledige lichaamsbeweging, convergente strategie ............................................................. 89 9.2. Hulpmiddel voor muzikanten met instrument ...................................................................... 92 9.3. Hulpmiddel voor elektronische muzikanten.......................................................................... 93 9.4. Muziek voor fysiek gehandicapte mensen.............................................................................. 94

    10. Besluit ................................................................................................................................ 95

    Bijlagen.................................................................................................................................... 97

    Referenties ............................................................................................................................... 98

    v

  • Gebruikte afkortingen en symbolen

    API Application Programming Interface

    CMNAT Center for New Music and Audio Technologies

    CMOS Complementary Metal Oxide Semiconductor

    COM Component Object Model

    CPU Central Processing Unit

    DMX Digital MultipleX

    GEM Graphics Environment for Multimedia

    GUI Graphical User Interface

    HCI Human Computer Interaction

    HTTP Hypertext Transfer Protocol

    IP Internet Protocol

    IRCAM 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 multi-

    touch 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:

    BACYB

    YXA

    *9

    =−=+=

    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

  • Y X 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 mens-

    machine 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 USB-

    verbinding. 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

    Gebruiker Camera Selecteren

    Analyse Starten

    ParametersInstellen

    Externe connectiesinstellen

    1

    1

    1

    1

    1

    1

    Register

    «uses»

    «uses»

    «uses»

    OpenCV

    DirectShow

    «uses»«uses»

    Open Sound Control

    1

    1

    «uses»

    Rechthoeken tekenen

    1

    1

    «uses»

    Harddisk

    «uses»

    «uses»

    «uses»

    «uses»

    «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 MIDI-

    apparaat 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 MIDI-boodschap 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.

    32

  • 6.2.2. Klassenlijst Klassenaam Attributen/Operaties Opmerkingen CameraSettings cameraName

    renderBackgroundDifference renderBoundingRect renderOriginal renderDrawing mirror flip fullscreen width framerate getCameras() getPropertiesCamera()

    Verzorgt instellingen rond de camera

    Run settingsCamera settingsParameters settingsExternalConnect Camera camera

    Toont instellingen van de camera, externe instellingen en van OSC, laat de analyse starten

    External Connections

    oscConnected ipAddressSelected urlSelected ipAddress urlAddress portNumber midiOut midiDevice

    Verzorgt instellingen omtrent het netwerk gedeelte

    Camera BoundingRect boundingRect Sender sender Background background Initialize() Analyse()

    De camera zelf, en analyse onderdelen

    Parameters calculateRectangleSize calculateRectangleHorizontalSize calculateRectangleVerticalSize calculateNonzeroPixels calculateHorizontalPosition calculateVerticalPostion

    Sender StoreInt() StoreFloat() SendMIdi() Socket oscClient

    Slaat variabelen op in een OSC buffer en verzendt ze naar socket

    Register getDataInt(string location) getDataString(string location) writeDataInt(string location, int state) writeDataString(string location, string text)

    Schrijft instellingen in het Windows register

    Background Difference() Update()

    Berekent Verschil tussen een aantal opeenvolgende frames

    Socket SendBytes() ConnectToClient()

    Socket zendt bytes naar een Client

    BoundingRect nonzeropixels rectanglesize; rectangleverticalposition; rectanglehorizontalposition; rectanglehorizontalsize; rectangleverticalsize; CalculateBoundingRect()

    Berekent een rechthoek omheen het bewegende deel, en berekent gegevens van die rechthoek

    OscParameterFloat parameter OpenSound Control

    33

  • address parameter voor zwevende komma getallen

    OscParameterInt parameter address

    Een OpenSound Control parameter voor gehele getallen

    DrawModule SaveFile() OpenFile() midiChannel midiValue midiRange midiOffset DrawWindow drawwindow

    Toont teken module, met aantal instellingen

    DrawWindow Showwindow() Destroywindow() On_mouse() Undo() ClearAll() SetColor() SetType() SetMidi() GetRectangles() SetRectangles()

    Het venster waarin getekend kan worden

    RectangleInstrument lefttop width height color type midi

    Een getekende rechthoek, die dienst kan doen als instrument

    34

  • 6.2.3. UML klassendiagram

    +SetObjectInt()+SetObjectText()+GetObjectInt()+GetObjectText()+GetLocation()+SetLocation()

    -location : CString-state : int-text : CString

    GUIobject

    CameraSettings

    Network

    Parameters

    Draw Module

    Start

    +GetDataInt()+WriteDataInt()+GetDataString()+WriteDataString()

    Register

    +Analyse()+Initialize()

    Camera

    +CalculateBoundingRect()

    BoundingRect

    +Update()+DifferenceMask()

    Background

    +StoreFloat()+StoreInt()

    Sender

    +ConnectToClient()+SendBytes()

    Socket

    1

    *

    1

    *

    1

    *

    1

    *

    1

    *

    1 1

    1

    1

    1 1

    1

    1

    11

    35

  • 6.3. Architectuur: dynamische analyse

    6.3.1. Interactiediagrammen

    Scenario 1: Camera Instellingen Aanpassen

    Gebruiker

    CameraSettings Register

    menu keuze camera instellen

    cameras en vorige instellingen worden getoond

    klikt op properties

    Voor iedere camera een entry in de combobox

    GuiObject

    GetLocation:=GetLocation()

    return location

    getDataInt:=getDataInt(location)

    return state

    SetObjectInt(state)

    getCameras

    getPropertiesCamera

    SetObjectText(text)

    SetObjectInt(state)

    gebruiker doet instellingen en drukt op OK

    venster wordt getoond met directShow instellingenDit is een externe toepassingmet 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 renderBackgroundDifferenceGUIObject renderBoundingRectGUIObject mirrorGUIObject flip3 x GUIObject fullscreenGUIObject widthGUIObject framrate

    Voor iedere knop aanwezig:hier dus:GUIObject renderBackgroundDifferenceGUIObject renderBoundingRectGUIObject mirrorGUIObject flip3 x GUIObject fullscreenGUIObject widthGUIObject framrateGUIObject cameraCombobox

    36

  • Scenario 2: Externe connecties Instellen

    Voor iedere EditBox aanwezig, hier dus:ipAddressurlAddressportNumber

    Gebruiker

    External Connections Register

    alle keuzes worden getoond

    GUIobject

    GetLocation:=GetLocation()

    return location

    getDataInt:=getDataInt(location)

    return state

    SetObjectInt(state)

    Voor ieder GUIObject

    getDataString:=getDataString(location)

    return text

    SetObjectText(text)

    instellingen worden gedaan

    SetObjectInt(state)

    SetObjectText(text)

    Gebruiker klikt op OK

    GetLocation:=GetLocation()

    return location

    GetObjectInt:=GetObjectInt()

    return state

    WriteDataInt(state, location)

    GetObjectText:=GetObjectText()

    return text

    WriteDataString(text, location)

    Voor iedere EditBox aanwezig, hier dus:ipAddressurlAddressportNumber

    menu externe connecties instellen

    Voor iedere knop aanwezig, hier dus:isConnectedipAddressSelectedurlSelectedmidiOutmidiDevice

    Voor iedere knop aanwezig, hier dus:isConnectedipAddressSelectedurlSelectedmidiOutmidiDevice

    37

  • Scenario 3: Rechthoeken tekenen

    38

    DrawModule

    menu draw module

    GUIobject

    GetLocation()

    return location

    Register

    getDataInt(location)

    return state

    SetObjectInt(state)

    getDataString(location)

    return text

    SetObjectText(Text)

    DrawWindow

    ShowWindow()

    SetType(state)

    SetColor(state)

    SetMidi(state)

    RectangleInstrument

    list

    SetObjectInt(state)

    type veranderen

    SetType(state)

    SetObject(Text)

    SetMidi(midi)

    ColorDialog

    Midi veranderen

    Gebruiker kiest kleur en drukt ok

    return color

    SetObjectInt(color)

    SetColor(color)

    Gebruiker kiest kleur

    Voor ieder GUIObject

    Herhalen voor GuiObjectenEditbox ValueEditbox RangeEditbox Offset(

    Elk GuiObject verandert de MIDI statusGuiObjecten zijnEditbox ValueEditbox RangeEditbox OffsetCombobox Channel (hier SetObjectInt(state) in plaats van SetObjectText(text)

    FileDialog

    Voor GUIObjectCombobox TypeCombobox ChannelCheckbox MidiControl

  • Draw Module GUIobject Register DrawWindow RectangleInstrument list ColorDialog

    Gebruiker drukt Open

    FileDialog

    Gebruiker kiest file en drukt op OK

    return file

    OpenFile(file)

    SetRectangleList(list)

    Clear()

    * add(RectangleInstrument)

    Gebruiker drukt op Save

    Gebruiker kiest file en drukt op OK

    return file

    SaveFile(file)

    GetRectangleList(list)

    return list

    39

  • 40

    Gebruiker tekent rechthoek

    add(RectangleInstrument)

    ColorDialoglistDraw Module GUIobject Register DrawWindow RectangleInstrument FileDialog

    Gebruiker drukt Undo

    Undo()

    Remove(RectangleInstrument)

    Clear()

    Gebruiker drukt op Clear

    Clear()

    RectangleInstrument(x,y,width,height,color,type,midi)

    Gebruiker drukt OK

    GetLocation()

    return location

    GetObjectInt()

    return state

    WriteDataInt(state, location)

    GetObjectText()

    return text

    WriteDataString(text,location)

    DestroyWindow()

    SaveFile(temp)

    GetRectangleList()

    return list

  • Scenario 4: De analyse starten

    41

    Actor1

    RunDialog GUIObject

    menu run run

    Register

    getDataString(location)

    return text

    getDataInt(location)

    return state)

    SetObjectText(text)

    Camera

    Background Sender BoundingRect

    Socket

  • 42

    RunDialog Camera Background Sender BoundingRect Socket

    Gebruiker drukt op Run

    Initialize()

    GetSettings()

    GetRectangleList()

    InitializeSender(host,port)

    Update(image* image)

    ProcessRectangleList(image *image)

    DrawRectangleList(image* image,list)

    StoreFloat(list OscParameterFloat)

    StoreInt(list OscParameterInt)

    SendMidi(list OscParameterFloat,list OscParameterInt, list)

    Difference(image* image)

    CalculateBoundingRect(image *image)

    StoreFloat(list OscParameterFloat)

    * Analyse(image *image)

    return *image

    SendBytes(oscBuffer,length)

    SendBytes(oscBuffer,length)

    SendBytes(oscBuffer,length)

  • RunDialog Camera BackgroundGUIObject Register

    Sender

    Release()

    Release()

    Release()

    Gebruiker klikt op Stop

    Gebruiker klikt op Exit

    43

  • 7. Systeem- en gedetailleerd ontwerp 7.1. Systeemontwerp

    7.1.1. Subsystemen Naam Relevante klassen Verantwoordelijkheden Instellingen Register - De instellingen die door de

    gebruiker bepaald worden door de grafische omgeving worden opgeslagen in het register

    GUI Dialog Frame MainWindow DrawModuleDialog DrawWindow CameraSettingsDialog ExternalConnectDialogParametersDialog RunDialog

    - Voorziet in een grafische omgeving

    Analyse Camera Background BoundingRect

    - Geeft enkele algoritmen om beelden te analyseren

    ExterneConnecties Sender Socket

    - Zendt parameters naar een externe toepassing of apparaat via het OpenSound Control protocol en MIDI

    Rechthoeken tekenen

    DrawWindow - 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

    GUIInstellingenExterneConnecties

    Rechthoeken tekenen

    46 46

  • 7.1.3. Contracten tussen subsystemen

    Name Type Collaborators Classes Operations MessageFormat RegisterSocket

    GetHost

    String GetHost()

    RegisterSocket

    GetPort String GetPort()

    RegisterSender

    GetRootAddress String GetRootAddress()

    NetwerkContract CS ExterneConnectiesInstellingen

    RegisterSender

    GetMidiDevice BOOL GetMidiDevice()

    Name Type Collaborators Classes Operations MessageFormat

    Register BoundingRect

    GetParamName String GetParamName(int)

    Register BoundingRect

    GetParamCalculate BOOL GetParamCalculate(int)

    Register Camera

    GetMidiOut BOOL GetMidiOut()

    Register Camera

    GetOscConnect BOOL GetOscConnect()

    Register Camera

    GetFlip BOOL GetFlip()

    Register Camera

    GetMirror BOOL GetMirror()

    Register Camera

    GetWidth String GetWidth()

    Register Camera

    GetFramerate String GetFramerate()

    Register Camera

    GetCameraSelect Int GetCameraSelect()

    Register Camera

    GetRenderOriginal BOOL GetRenderOriginal()

    AnalyseContract CS Analyse Instellingen

    Register Camera

    GetFullscreen BOOL GetFullscreen()

    Name Type Collaborators Classes Operations MessageFormat

    Register Dialog

    GetData void GetData() GUIContract PP GUI Instellingen

    Register Dialog

    SetData void SetData()

    Name Type Collobarators Classes Operations MessageFormat TekenContract CS Analyse

    Rechthoeken tekenen

    Camera DrawWindow

    GetRectangleList void GetRectangleList()

    47

  • Name Type Collaborators Classes Operations MessageFormat Camera Sender

    StoreFloat

    StoreFloat (list)

    Camera Sender

    StoreInt StoreInt (list)

    ZenderContract CS Analyse ExterneConnecties

    Camera Sender

    SendMidi SendMidi (list ,list ,list

    48

  • 7.2. Gedetailleerd ontwerp

    7.2.1. Subsysteem:

    UML klassendiagram

    1

    1

    Subsysteem:Netwerk

    +StoreFloat(in OscParameterFloat : list)+StoreInt(in OscParameterInt : list)+SendMidi(in oscParameterInt : list, in oscParameterFloat : list, in rectangleInstrument : list)

    -oscClient : Socket

    Sender

    -ConnectToClient(in host : string, in port : int)+SendBytes(in buffer : const char *OSCBuf, in length : int)

    Socket

    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

    +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+getCam