• Non ci sono risultati.

Sviluppo di un sistema sperimentale per la sonificazione di stream video per applicazioni museali

N/A
N/A
Protected

Academic year: 2021

Condividi "Sviluppo di un sistema sperimentale per la sonificazione di stream video per applicazioni museali"

Copied!
47
0
0

Testo completo

(1)

Studente/i

Mellace Simone

Relatore

Gambardella Luca Maria

Correlatore

Giusti Alessandro

Guzzi Jérôme

Committente

-Corso di laurea

C09921

Modulo

Progetto di diploma

Anno

2017-2018

Data

(2)
(3)

Abstract

Video2Sound è un progetto sviluppato inizialmente da IDSIA e poi da me ripreso, utile a trasformare delle immagini, acquisite attraverso una telecamera, in suono. Questo progetto mira a sviluppare un sistema solido e utilizzabile per delle dimostrazioni museali. L’appli-cazione si occupa di riconoscere dei soggetti presenti in determinati fotogrammi, attraverso tecniche di Machine Learning e di generare delle tracce audio, utilizzando un sintetizzatore granulare.

L’algoritmo prevede di identificare la similitudine fra il frame ripreso dalla telecamera e quelli provenienti da alcuni file video ricevuti in input. Attraverso questa associazione sarà pos-sibile, in un secondo momento, generare delle tracce audio inedite utilizzando l’audio dei video ricevuti in input.

Il tutto è stato sviluppato in Python 3, appoggiandosi a frameworks come TensorFlow, Keras e Imagenet: un grande dataset di immagini classificate. Mentre per la generazione del-l’audio è stata utilizza la libreria Pyo, la quale permette di plasmare dei suoni utilizzando sintetizzatori audio di diverso genere.

Video2Sound is a project developed initially by IDSIA and then took over by me, useful to convert images, acquired with a camera, into sounds. The aim of this project is to develop a grounded demonstrative system. The application takes care of recognising images, using Machine Learning techniques and generating audio tracks, via a Granular Synthesis. The algorithm recognizes the similarity between the frame obtained by the webcam and some others frames received through input videos. After that, it will be possible to create some new sounds using sound synthesizers.

Everything has been developed using Python 3 in accordance with frameworks like Ten-sorFlow, Keras and Imagenet: a huge images dataset. While for audio generations, it has been used Pyo library, which allows to generate audio through differents kinds of sound synthesizers.

(4)
(5)

Scheda descrittiva

(6)
(7)

Indice

Abstract i

Scheda descrittiva iii

1 Introduzione 1 2 Tecnologie utilizzate 3 2.1 TensorFlow . . . 3 2.2 Keras . . . 4 2.2.1 ImageNet . . . 4 2.2.2 ResNet50 . . . 4 2.3 Pyo . . . 6 2.3.1 Sintetizzatore granulare . . . 6 3 Stato dell’arte 9 3.1 Pubblicazioni affini . . . 9 3.2 Tecnologie simili . . . 10 4 Installazione e utilizzo 11 4.1 Scenari di utilizzo . . . 11 4.2 Installazione . . . 12 4.3 Utilizzo - Bash . . . 12 4.4 Utilizzo - Docker . . . 12 5 Algoritmi 15 5.1 Classificazione immagini . . . 15 5.2 Generazione suoni . . . 18

6 Miglioramenti, modifiche e analisi effettuate 21 6.1 Tuning dell’algoritmo . . . 21

6.2 Analisi della generazione del suono . . . 23

(8)

vi INDICE

6.2.2 Box mobile con un suono . . . 24

6.2.3 Probabilità uniforme con due suoni . . . 24

6.2.4 Probabilità miste con due suoni . . . 25

6.3 Analisi grafica . . . 25

6.4 Analisi della generazione delle probabilità di similitudine . . . 27

6.5 Rifattorizzazione e test . . . 28

7 Problematiche riscontrate 29 8 Lavori futuri 31 9 Conclusione 33 Appendices 35 .1 Analisi della generazione audio . . . 37

.1.1 Un audio con selezione casuale . . . 37

.1.2 Un audio con selezione lineare . . . 37

.1.3 Due audio con selezione casuale . . . 37

(9)

Elenco delle figure

1 Dettaglio progetto di studio. . . iii

2.1 Installazione TensorFlow. . . 3

2.2 Installazione Keras. . . 4

2.3 Dimensioni classificazione immagini . . . 5

2.4 Schema ResNet50. . . 5

2.5 Arturia MatrixBrute Sintetizzatore Analogico Step Sequencer - Modello SZT-MDARTMAT. . . 6

2.6 Procedimento di creazione audio con sintetizzatore granulare. . . 7

3.1 Esempio processo image-sound SonicPhoto. . . 10

4.1 Installazione moduli. . . 12

4.2 Esecuzione da bash. . . 12

4.3 Compilazione ed esecuzione con Docker. . . 13

5.1 Processo di analisi dei frame video ricevuti. . . 15

5.2 Selezione dei punteggi più vicini a quello obiettivo. . . 16

5.3 Diagramma processo classificazione video. . . 17

5.4 Diagramma processo generazione audio. . . 20

6.1 Dettagli dei frammenti audio - granuli -. . . 22

6.2 Nuova finestra programma video2sound. . . 26

(10)
(11)

Capitolo 1

Introduzione

Questo progetto si pone l’obiettivo di automatizzare un meccanismo spontaneo, ma non intuitivo, che il nostro cervello è in grado di compiere in pochi istanti: il passaggio di infor-mazioni tra più sensi, in questo caso fra la vista e l’udito. Lo scopo di questo progetto è infatti creare un sistema che sia in grado di trasformare delle immagini, acquisite tramite una telecamera, in suono. Il software prodotto avrà quindi il compito di analizzare ciò che l’utente sta inquadrando attraverso una webcam, e di trasformare questi dati in un suono inedito, il suono prodotto dovrà ricordare il contenuto semantico dell’immagine ripresa. Molti scienziati negli anni scorsi hanno sviluppato molteplici nuove tecniche1a questo scopo; la stimolazione transcranica a corrente diretta (tDCS), gli impulsi elettrici o le vibrazioni sono solo alcuni dei metodi che sono stati utilizzati. La tecnologia sviluppata cercherà però di associare suoni e immagini in modo nuovo e innovativo, poiché il suono generato sarà inedito e auto generato con un preciso algoritmo.

Il programma analizzerà continuamente i frame inquadrati attraverso un classificatore e li confronterà con i punteggi ottenuti dai video in memoria. Così facendo si potranno iden-tificare i frammenti simili e si potrà generare l’audio attraverso l’uso di un sintetizzatore granulare, il quale sarà fornito nella libreria Pyo.

Oltre alle migliorie da apportare alla logica e alla grafica del programma, si dovranno anche effettuare delle analisi sulla generazione audio e delle ricerche sui possibili aspetti che risul-tano migliorabili. I risultati ottenuti, come anche le problematiche riscontrate, dovranno poi essere riportate nel dettaglio e documentate.

1

(12)
(13)

Capitolo 2

Tecnologie utilizzate

Nelle seguenti sezioni verranno illustrate nel dettaglio le tecnologie e gli strumenti che so-no stati utilizzati per lo sviluppo del progetto. In genere, i Framework o le librerie scelte coincidono con quelle, al momento, più attuali e professionali sul mercato, ma anche con strumenti conosciuti nei semestri precedenti.

2.1

TensorFlow

TensorFlow1è una libreria open source2 che mette a disposizioni strumenti per lo sviluppo di applicazioni di Machine Learning. La libreria è stata sviluppata da Google, Google Brain team, e in seguito rilasciata sotto licenza open source Apache 2.0 nel 2015. Molto sem-plice da installare e da utilizzare, questa libreria offre strumenti professionali di sviluppo e monitoraggio delle risorse3.

$ pip3 install tensorflow # Python 3.n; CPU support (no GPU support) Figura 2.1: Installazione TensorFlow.

TensorFlow è utilizzabile sui principali sistemi operativi attualmente disponibili sul mercato, ovvero Windows, Linux e macOS. La libreria offre la possibilità di sviluppo computazio-nale attraverso diverse tecnologie, CPUs, GPUs, TPUs4, ed è disponibile nei linguaggi di programmazione più utilizzati, quali Java, C/C++, Go e Python.

La configurazione scelta per lo sviluppo del progetto prevede l’utilizzo diKeras, una libreria

Python che si basa su TensorFlow e permette lo sviluppo sotto Linux. 1

Più dettagli su: https://www.tensorflow.org/

2

Si veda: https://github.com/tensorflow/tensorflow

3Si veda TensorBoard su: https://www.tensorflow.org/programmers_guide/summaries_and_tensorboard 4

(14)

4 Tecnologie utilizzate

2.2

Keras

Keras5è la libreria scelta per lo sviluppo dei modelli usati dal software. Essa permette un’a-strazione di alto livello attraverso la quale si possono creare in modo efficiente ed efficace delle reti neurali, dei classificatori e altri tipi di strumenti per l’analisi dei dati. Questa libreria è infatti un’interfaccia open source6 di alto livello, la quale offre la possibilità di utilizzare tre tipi di engine differenti, vale a direTensorFlow, Theano o CNTK. Vista la facilità di

instal-lazione e di utilizzo, per questo progetto si è pensato di utilizzare la versione python basata su TensorFlow.

$ sudo pip install keras

Figura 2.2: Installazione Keras.

L’utilizzo di questa libreria sarà essenziale per riuscire a classificare i video ricevuti in input e i fotogrammi ripresi dalla telecamera. In questo modo sarà possibile processare rapidamente ogni frame al fine di poter riconoscere quali risultino più simili.

2.2.1

ImageNet

La rappresentazione delle immagini ad alto livello, verrà effettuata attraverso dellereti per la classificazione, le quali saranno pre-addestrate sul dataset ImageNet. ImageNet7 non

è altro che un grande database, con più di venti mila categorie di immagini classificate. Esso è destinato a sviluppatori, docenti e studenti che possono trarne beneficio utilizzandolo in simbiosi con tecniche di Machine Learning o di analisi dell’immagine. È inoltre possibile utilizzarlo scaricando l’intera catalogazione8, beneficiando dell’apposito servizio REST o utilizzando librerie che interpellano indirettamente il servizio esposto.

Imagenet ha 27 categorie di alto livello all’interno delle quali sono state catalogate più di 14’197’122 di immagini9. Le categorie principali sono:

amphibian, animal, appliance, bird, covering, device, fabric, fish, flower, food, fruit, fun-gus, furniture, geological formation, invertebrate, mammal, musical instrument, plant, reptile, sport, structure, tool, tree, utensil, vegetable, vehicle, person.

2.2.2

ResNet50

Il modello di rete neurale utilizzato nello sviluppo è il ResNet50 offerto da Keras, ovvero

un modello preaddestrato su Imagenet, che permette di catalogare i frame ripresi dalla 5Più dettagli su: https://keras.io/

6 Si veda: https://github.com/keras-team/keras 7 Si veda: http://www.image-net.org/ 8Si veda: http://image-net.org/download-API 9

(15)

sono delle coordinate in uno spazio x dimensionale, attualmente:

• Dimensioni [x] dell’ultimo layer:

x ≈ 1000

• Dimensioni [x] del penultimo layer:

x ≈ 2000

Figura 2.3: Dimensioni classificazione immagini

Al fine di ottenere delle classificazioni di alto livello e di riuscire a riconoscere elementi che

non sono presenti nelle classi finali di Imagenet, è stato essenziale utilizzare il penultimo

layer di questo classificatore.

ResNet50 è una rete a 50 livelli, ovvero una 50 layer Residual Network. La struttura della rete è studiata in modo tale da diminuire la saturazione e il degrado dei risultati offerti dalla rete neurale. Per fare questo le ResNet usano una struttura diversa dalle classiche reti10, la quale permette di saltare alcuni blocchi e di lavorare sui residui piuttosto che su nuove features.

Figura 2.4: Schema ResNet50.

10

La struttura della rete può essere osservata nel dettaglio attraverso la seguente pubblicazione: https://arxiv.org/abs/1603.05027

(16)

6 Tecnologie utilizzate

2.3

Pyo

La libreria utilizzata per processare segnali digitali è Pyo11, un modulo Python open

sour-ce12 scritto in C, il quale offre un’infrastruttura atta a processare segnali audio in tempo reale e in modo ottimale. Con questa libreria è possibile, infatti, campionare segnali audio ricevuti in input e mantenerli in memoria al fine di ottimizzare i processi di scrittura e lettura delle tracce audio. Oltre questo, Pyo offre la possibilità di utilizzare primitive matematiche o algoritmi più avanzati per generare e processare l’audio.

2.3.1

Sintetizzatore granulare

Nel campo della musica, dell’analisi o della generazione del suono, si sente spesso parlare di sintetizzatori musicali e sintetizzatori granulari. I sintetizzatori audio non sono altro che degli strumenti fisici, o dei programmi, in grado di generare autonomamente segnali audio, questi ultimi possono essere sia imitazioni di strumenti reali che suoni del tutto digitali13. Oltre alla generazione dei suoni, un sintetizzatore può essere utile per modulare il timbro del suono, sommare segnali, arricchire o sottrarre componenti sonore e per molte altre operazioni più specifiche, destinate a chi produce o mixa musica.

Figura 2.5: Arturia MatrixBrute Sintetizzatore Analogico Step Sequencer - Modello SZTMDARTMAT.15

La sintesi granulare del suono invece, permette di generare dei nuovi suoni combinando tanti piccoli granuli sonori derivati da delle tracce audio ricevute in input. Proprio per questo motivo il suono che verrà generato sarà un rumore inedito, ma comunque simile ai suoni ricevuti. Al fine di ottenere dei suoni analoghi a quelli iniziali, è essenziale trovare i parametri che meglio riescono a ricalcare la traccia audio iniziale. Questo tuning dei parametri e la possibilità di poter suonare contemporaneamente granuli audio derivanti da tracce audio

11

Più informazioni su: http://ajaxsoundstudio.com/software/pyo/

12

Disponibile al seguente indirizzo: https://github.com/belangeo/pyo

13Più informazioni su: https://www.soundonsound.com/techniques/granular-synthesis (sezione "Granular

Synthesis 101")

15

Fonte: https://www.sintetizzati.com/arturia/82-arturia-matrixbrute-sintetizzatore-analogico-step-sequencer.html

(17)

Figura 2.6: Procedimento di creazione audio con sintetizzatore granulare.17

Durante lo sviluppo del progetto sarà necessario generare dei suoni continui attraverso l’u-nificazione di più parti di file audio ricevuti inizialmente in input, proprio per questo motivo si è pensato di utilizzare un sintetizzatore granulare per ottenere delle tracce audio

on-demand. In questo modo sarà possibile produrre deisuoni inediti, autogenerati sulla base

di alcuni file audio ricevuti inizialmente in input. Per poter utilizzare il programma è infatti necessario fornire almeno un file video - ’nome.mp4’ - con il relativo audio - ’nome.wav ’ -. 16Questa problematica verrà affrontata in parte nel capitolo "Algoritmi - Generazione suoni" e "Miglioramenti,

modifiche e analisi - Analisi della generazione del suono"

17

Fonte: https://www.researchgate.net/figure/Simple-granular-synthesis-process-A-much-greater-number-of-grains-would-be-used-in-real_fig2_2571249

(18)

8 Tecnologie utilizzate

Proprio attraverso lasintesi granulare, le tracce audio iniziali sono campionate per

gene-rare delle nuove tracce, nel momento in cui l’utente inquadrerà un soggetto con la propria telecamera. Questa tecnica di produzione audio si discosta da quella più tradizionale, ov-vero la generazione di suoni attraverso degli oscillatori che creano onde sonore, in quanto fonde dei piccoli granuli per formare una nuova traccia audio, ottenendo comunque dei suoni naturali e vicini a quelli originali.

(19)

Capitolo 3

Stato dell’arte

In seguito alle prime ricerche effettuate si è scoperto che l’associazione immagine-suono impiega ingegneri biomedici, neuro scienziati e sviluppatori di tutto il mondo da ormai più di vent’anni. Nel seguente capitolo verranno illustrati alcuni progetti e alcune tecnologie utilizzate ancora oggi da altri ricercatori.

3.1

Pubblicazioni affini

Durante la ricerca e l’analisi di progetti simili1, i quali hanno affrontano il compito di crea-re un collegamento sensato fra immagine e suono, o viceversa, ci si è imbattuti in molte pubblicazioni interessanti.

Chi affronta questa problematica, generalmente si pone un grande dilemma, ovvero quale sia il senso che può meglio rimpiazzare la vista. Alcuni pensano che lo stimolo elettrico riesca, se allenato correttamente, a riprodurre molte varietà di oggetti nella mente di chi lo riceve2. Al contrario, altri ritengono che sia ottimale utilizzare il tatto e infine altri

an-cora credono che la strada giusta sia la riproduzione sonora di alcuni tratti significativi di un’immagine3.

La limitazione più grande nei progetti individuati è che i rumori o gli impulsi generati sono unasomma di segnali, i quali nell’insieme formano un rumore sporco che non si può

rico-noscere se non ci si esercita4. In questi progetti infatti, il contenuto delle immagini ricevute viene analizzato nel dettaglio e proprio per mezzo dei valori contenuti nei pixel vengono generate delle frequenze. Per questo motivo sia quando si parla di impulsi elettrici5, che an-che per quanto riguarda la generazione di audio6, per gli esempi trovati, risulta essenziale

1 Ad esempio: https://ieeexplore.ieee.org/document/4381143/ 2Si veda: http://hci.ucsd.edu/234/234ExtraReading/BachYRitaKercel2003SensorySubstitution.pdf 3 Si veda: https://www.seeingwithsound.com/voicebme.html 4 Si veda: http://journals.plos.org/plosone/article?id=10.1371/journal.pone.0033136 5Si veda: https://www.irjet.net/archives/V3/i3/IRJET-V3I3100.pdf 6

(20)

10 Stato dell’arte

praticare delle sedute durante le quali il cervello viene esercitato a riconoscere determinati impulsi o frequenze.

Contrariamente a quanto sostenuto da altri ricercatori, il progetto sviluppato mira ad essere utilizzabile da chiunque eimmediatamente, poiché esso riprodurrà dei suoni preconfigurati,

i quali sono identificabili da qualunque persona li abbia già sentiti in natura. L’aspetto inno-vativo è proprio la modalità con cui si riconoscono vari soggetti e si producono suoni affini all’immagine. A differenza dei progetti sopracitati, non si prevede al momento la funzionalità di identificare degli ostacoli o dei pericoli, bensì si cercherà di individuare dei soggetti in una scena reale. Il suono generato è infatti composto da frammenti audio reali, che identificano univocamente una categoria di oggetti simili.

3.2

Tecnologie simili

Al momento in commercio si possono trovare software in grado di trasformare ogni tipo di immagine in suono. Questi programmi agiscono leggendo ivalori contenuti nei bit

dell’im-magine e trasformando secondo alcuni pattern precisi, questi dati in somme di frequenze. Audiopaint7, ARSS8, SonicPhoto9 e Photosounder10 sono programmi in grado di creare questa associazione. Purtroppo però, il rumore ottenuto risulta molto artificioso ed essendo poco realistico non riesce a rappresentare l’essenza dell’immagine riprodotta. Questi tipi di strumenti, infatti, risultano utili se si vuole mostrare graficamente l’evoluzione di alcuni suoni nel tempo; in questo modo si riesce a dare l’idea di un suono che cresce, o decresce, e si velocizza, o rallenta, nel tempo.

Figura 3.1: Esempio processo image-sound SonicPhoto.11

7 Si veda: http://www.nicolasfournel.com/?page_id=125 8 Si veda: http://arss.sourceforge.net/ 9 Si veda: http://www.skytopia.com/software/sonicphoto/ 10Si veda. http://photosounder.com/ 11 Fonte: http://oukas.info/?u=SonicPhoto++Convert+pictures+to+sounds%21++Skytopia

(21)

Capitolo 4

Installazione e utilizzo

La logica del programma è contenuta principalmente in due file differenti. Il primo - src/vi-deo2sound/video.py - racchiude la logica di classificazione dei frame video ricevuti in input e di quelli ripresi dalla webcam. Il secondo - src/video2sound/audio.py - racchiude la logica di identificazione dei suoni ideali e di generazione di nuovi suoni.

Per avviare il programma è necessario fornire almeno un file video e uno audio sincroniz-zati. I file video verranno subito analizzati per mezzo di un classificatore, quest’ultimo avrà

il compito di estrarre delle features semantiche da ogni frame presente in ciascun video; i file audio invece serviranno successivamente.

Il passo successivo consiste nell’inquadrare con una telecamera un obiettivo, in questo modo il programma analizzerà il frame ripreso, utilizzando lo stesso classificatore e otterrà delle nuove features semantiche, che verranno chiamate "features obiettivo". In questo modo si potranno poi confrontare questi valori e calcolare quale frame presente nei video assomiglia maggiormente a quello ripreso. Quando verrà identificato un frame dai video iniziali si terrà traccia del relativo suono, presente nei file audio forniti inizialmente.

Al fine di creare un suono che ricorda quello originale, le porzioni di audio ritenute più simili verranno miscelate attraverso l’uso di un sintetizzatore granulare. Il sintetizzatore sarà quindi in grado di riprodurre suoni simili a quelli presenti nei file audio forniti, qualora si inquadrassero dei soggetti simili a quelli presenti nei video.

Nei seguenti capitoli verrà spiegato nel dettaglio come utilizzare e installare il programma.

4.1

Scenari di utilizzo

Un software di questo tipo è pensato al momento per scopi dimostrativi, ma non si esclude che a lungo termine, dopo alcuni sviluppi più approfonditi, esso possa essere utile a per-sone con disabilità visive. Si prospettano comunque buone aspettative qualora si riesca a migliorare l’algoritmo di ricostruzione del suono e di riconoscimento delle immagini. Se si affinassero questi aspetti il progetto potrebbe risultare più utile di una semplice esposizione

(22)

12 Installazione e utilizzo

museale, si potrebbe pensare di farlo testare a persone ipovedenti attraverso l’uso di appo-siti caschetti dotati di webcam, in grado quindi di processare immagini in tempo reale e di dare un feedback immediato all’utente.

4.2

Installazione

Il software prodotto è stato allegato alla documentazione tramite l’apposito CD, cionono-stante prima di poter eseguire il programma è necessario installare i componenti richiesti. Questo può avvenire da Linux 17.03, digitando i seguenti comandi:

$ sudo apt install -y --fix-missing python3-dev python3-pip python3-pyo python3-opencv

$ pip3 install --upgrade -r ./requirements.txt Figura 4.1: Installazione moduli.

Il file requirements.txt contiene una serie di dipendenze, fra cui TensorFlow e Keras, che verranno installate dopo aver digitato i comandi sopra citati. Una volta installati tutti i compo-nenti sarà possibile eseguire il programma in due diversi modi. È infatti plausibile utilizzarlo direttamente dal terminale oppure attraverso Docker.

4.3

Utilizzo - Bash

Il metodo più veloce e intuitivo è quello di eseguire il programma direttamente da linea di comando, ovvero digitando il seguente comando dalla root dello stesso:

$ python3 script/main.py --config=NomeConfigFile Figura 4.2: Esecuzione da bash.

Il file config/NomeConfigFile.yaml deve contenere i path assoluti dei file video e audio, co-me anche alcune configurazioni per la corretta esecuzione del programma. Si può trova-re la cortrova-retta impaginazione del documento, come i possibili parametri con le spiegazioni dettagliate, nel file README.md del progetto.

4.4

Utilizzo - Docker

Un altro modo che permette di eseguire il programma è quella di utilizzare Docker1: una piattaforma per la virtualizzazione di sistemi operativi tramite dei container. Attraverso l’uso

1

(23)

$ docker-compose up

(24)
(25)

Capitolo 5

Algoritmi

5.1

Classificazione immagini

L’algoritmo di classificazione delle immagini si occupa in primo luogo di analizzare i video ricevuti in input attraverso un classificatore e in seguito di salvare il risultato in alcuni file di cache, in modo da velocizzare il processo per le esecuzioni successive. Così facendo, si classificheranno i frame dei video ricevuti in input ogni secondo. La classificazione di questi frame avviene mediante un classificatore di tipoResNet50.

Figura 5.1: Processo di analisi dei frame video ricevuti.

In una seconda fase l’algoritmo calcolerà la distanza Euclidea fra le features ottenute dalla classificazione dell’immagine ripresa dalla telecamera in quell’istante (in rosso nella se-guente immagine) e le features dei frame video in cache (punti verdi e blu). A tal punto risulterà semplice andare a individuare i frame più simili a quello ripreso. In questo caso vengono selezionati solamente i frame all’interno del percentile specificato nel file config/fi-leConfig.yaml, ovvero i punti verdi dentro la circonferenza. I frame all’interno del cerchio, e

(26)

16 Algoritmi

quindi i più simili a ciò che la telecamera inquadrerà, saranno quindi identificati. Si potranno in seguito calcolare le probabilità di similitudine fra questi ultimi e quello ripreso.

Figura 5.2: Selezione dei punteggi più vicini a quello obiettivo.

Come meglio esplicitato nel capitolo successivo, le probabilità calcolate saranno essenziali per generare l’audio e aggiornare i plot. La peculiarità dell’array contenente queste pro-babilità è che esso racchiuderà dei punteggialti nelle posizioni in cui sono stati identificati

dei frame simili a quello ripreso, mentre dei punteggiuguali a zero, nelle posizioni in cui

il frame in memoria non è ritenuto simile a quello ripreso. Questo vettore di probabilità di similitudine deve sommare a uno ed è lungo quanto la somma della durata dei video

ri-cevuti, in secondi. Perciò ad ogni posizione di questo array corrisponde il punteggio di un determinato frame che risulta facilmente rintracciabile.

Riassumendo:

• lettura dei video in input, campionamento ogni secondo e classificazione dei frame risultanti. I risultati sono salvati in file di cache per velocizzare i processi;

• classificazione del frame ripreso dalla telecamera;

• ricerca dei K valori più vicini a quello identificato tramite la webcam. K varia in funzione del percentile accettato;

(27)

17 Figura 5.3: Diagramma processo classificazione video.

per la sonificazione di stream video per applicazioni m use ali

(28)

18 Algoritmi

5.2

Generazione suoni

L’algoritmo di generazione dei suoni produce alcuni segnali audio attraverso un sintetizzato-re granulasintetizzato-re. Come spiegato in psintetizzato-recedenza il sintetizzatosintetizzato-re utilizzato si occupa di riprodursintetizzato-re nel tempo molteplici estratti di una traccia audio iniziale, in questo modo vengono generati dei nuovi suoni in tempo reale. L’algoritmo sviluppato si basa sulle probabilità di similitudine calcolate in precedenza: più esse saranno attendibili, più si riusciranno a generare dei suoni che ricordano ciò che si sta inquadrando.

Di seguito un esempio per permettere maggiormente la comprensione del funzionamneto dell’algoritmo. Si suppone di dare in pasto all’algoritmo due file video con le relative tracce audio, sincronizzate in modo adeguato, il file A della durata di 3 secondi e il file B lungo 2 secondi. lunghezza [secondi] 0 1 2 video_A X X X audio_A X X X video_B X X audio_B X X

L’array delle probabilità ricevuto è stato calcolato analizzando i frame video dei file ricevuti in modo sequenziale. Esso contiene, dunque, ad ogni posizione la probabilità di somiglianza fra un determinato frame in memoria e il frame inquadrato.

frames_A frames_B numero_frame 0 1 2 3 4

Come ben raffigurato nella tabella sovrastante i frame dei file, indicizzati in questo modo, sono facilmente ricollegabili alla loro posizione originaria all’interno dei video. Si ricorda infatti che i video iniziali sono campionati ogni secondo, quindi il frame 1 del file A conterrà ciò che si può vedere al primo secondo di questo video.

Ammettiamo ora che i frame 3 e 4 siano i più simili a ciò che si sta inquadrando, allora l’array delle probabilità sarà il seguente:

frames_A frames_B

numero_frame 0 1 2 3 4

probabilità_similitudine 0 0 0 0.5 0.5

A questo punto vengono salvati, in un ulteriore array, 100 numeri selezionati dall’array ’nu-mero_frame’ con probabilità uguale a ’probabilità_similitudine’. Quello che si ottiene è quindi un array contenente 100 posizioni in secondi, nelle quali si può trovare l’audio o l’immagine del soggetto più simile a quello inquadrato dalla webcam.

Infine, campionando casualmente l’array, si ottiene un determinato secondo di un file video e audio, nel quale si potranno trovare dei frame e dei granuli audio, i quali richiamano ciò

(29)

Conoscendo la durata dei diversi video è quindi semplice risalire a quello selezionato e riprodurre il frammento audio desiderato.

0 1 2 ... 100

frame_simili 3 4 4 ... 3

frame_selezionato 4 durata_traccia_selezionata X X posizione_nella_traccia X

A questo punto però non si riproduce sempre lo stesso frammento audio alla posizione se-lezionata, bensì si aggiunge una deviazione casuale fra -lunghezza_granulo/2 e +lunghez-za_granulo/2, così facendo vengono generati dei suoni riproducendo piccoli frammenti audio vicini a una posizione dove si trovano contenuti simili, ma non necessariamente sempre alla stessa.

posizione_finale audio_B[posizione_nella_traccia±delta]

Aggiornando continuamente la posizione in cui leggere gli audio originali attraverso un gra-nulatore, si ottiene infine un suono continuo che varia in funzione di quello che la telecamera sta inquadrando.

Riassumendo:

• identificazione delle posizioni dei frammenti audio ritenuti simili, attraverso la probabi-lità ricevuta;

• selezione casuale di una di queste posizioni;

• aggiornamento della posizione in cui leggere i frammenti audio in base ai dati reperiti;

• generazione del suono attraverso l’unificazione dei frammenti di suono con un sinte-tizzatore granulare.

(30)

20

Algor

itmi

Figura 5.4: Diagramma processo generazione audio.

Sviluppo di un sistema sper imentale per la sonificazione di stream video per applicazio ni m useali

(31)

Capitolo 6

Miglioramenti, modifiche e analisi

effettuate

In una prima fase sono stati chiariti gli obiettivi e i requisiti del progetto, solo in seguito è stato investito del tempo per prendere confidenza con l’ambiente di sviluppo, per comprendere l’elaborazione ricevuta, la logica di generazione dei suoni e infine per prenderlo a carico. dopodichè si è passati allo sviluppo di nuove funzionalità e al miglioramento di quelle già presenti.

Non avendo alcuna conoscenza preliminare di Python e delle librerie utilizzate nello sviluppo ricevuto, la difficolta principale è stata l’acquisizione delle nozioni necessarie per l’uso di queste tecnologie. Ovvero, comprendere ciò che era già stato sviluppato, ciò che poteva migliorare la qualità del software e soprattutto l’utilizzo della demo finale.

Il programma iniziale era in fase di sviluppo, non ancora testato né ottimizzato, proprio per questa ragione uno dei primi compiti è stato il tuning dei parametri al fine di migliorare le prestazioni offerte dal software. In seguito si è impiegato del tempo per comprendere meglio il funzionamento della generazione del suono attraverso un sintetizzatore granulare, per sperimentare nuove tecnologie per la creazione del suono, per testare alcune classi e per migliorare l’interfaccia grafica introducendo dei grafici aggiornati in real-time. In fase conclusiva si sono ottimizzati i risultati ottenuti, in modo da rendere il funzionamento più fluido attraverso il multi-thread ; così facendo si sono limitati i tempi di risposta del software da cinque a circa un secondo.

Nei seguenti capitoli verranno descritti i principali compiti svolti e le migliorie più importanti apportate al software.

6.1

Tuning dell’algoritmo

Una volta compreso il funzionamento dell’algoritmo di generazione dell’audio, si sono variati i parametri dell’algoritmo di sintetizzazione granulare, al fine di ottenere dei risultati più

(32)

22 Miglioramenti, modifiche e analisi effettuate

soddisfacenti. Ci sono diversi fattori che hanno un ruolo importante nella generazione del suono attraverso un granulatore, tra questi: la durata dei granuli, la frequenza degli stessi e il tempo intercorrente tra un granulo e l’altro, il quale può essere fisso o mutevole1. Alcuni dei parametri modificati, sono ben illustrati dalla seguente immagine.

Figura 6.1: Dettagli dei frammenti audio - granuli -.2

La configurazione ottimale si è ottenuta nel seguente modo:

• la densità dei granuli è stata fissata a venti, in modo da non saturare il suono prodotto e da non creare degli echi o dei rimbombi;

• la durata del granulo in genere va dai dieci ai cento millisecondi, in questo caso però i granuli durano un secondo per poter mantenere la melodia del suono iniziale nella frequenza generata;

• la grain envelope, ovvero la finestra attraverso la quale si modula il suono è una Gaussiana;

• la deviazione nel tempo di campionamento è molto bassa (0.01), in quanto bisogna mantenere periodicità nei suoni;

• il pitch deve restare molto vicino a uno per mantenere le tonalità e le frequenze originali e quindi riprodurre un suono riconoscibile;

• la deviazione di campionamento non è necessaria in questo utilizzo, può dunque rima-nere a zero, in quanto è stata introdotta una deviazione manuale che verrà esplicitata meglio nei prossimi capitoli.

1Si veda: https://it.wikipedia.org/wiki/Sintesi_granulare 2

(33)

suoni ricorrenti. Ci sono però altri parametri come l’intonazione che si è preferito lasciare con valori standard per non distorcere il suono riprodotto, ma i quali risultano molto utili quando si mixa o si analizza musica.

6.2

Analisi della generazione del suono

Al fine di comprendere a fondo come dei singoli frammenti di audio possano essere unifi-cati per formare una nuova traccia audio e in che modo si possano ottimizzare i processi per ottenere dei risultati più soddisfacenti, sono state eseguite delle analisi auditive su dei campioni di audio ridotti. Le analisi effettuate sono state commentate e descritte in una documentazione approfondita attraverso dei file Jupyter notebook3.

I risultati ottenuti dalle simulazioni sono stati salvati in appositi file contenenti le tracce audio prodotte con vari parametri. Si possono, quindi, notare le differenze apportate dal sintetizzatore nella generazione di musica con parametri diversi.

Il tutto è stato allegato al progetto4. I documenti Jupyter notebook allegati5 permettono di ricreare le varie situazioni riprodotte durante le sperimentazioni e spiegano nel dettaglio cosa si desiderava ottenere e come si è agito. I file audio6 certificano i risultati ottenuti e ne permettono il loro confronto. Ogni nomenclatura indica differenti impostazioni nei parametri del sintetizzatore e nella logica di creazione audio:

• dig: indica l’utilizzo esclusivo di tracce audio generate dai sintetizzatori di Pyo;

• nome: illustra quali file audio sono stati usati o cosa si è testato;

• durata: la durata dei granuli in secondi [s];

• densità: la densità dei granuli del test;

• secondi: i secondi di pausa fra le riproduzioni dei frame.

6.2.1

Probabilità uniforme con un suono

Come prima analisi si è pensato di osservare quali effetti hanno la lunghezza e la densità dei granuli sulla generazione del suono, andando quindi a modificare questi, e altri parametri,

3

Si veda: http://jupyter.org/

4

Si veda: la cartella script/notebooks

5Si veda: la cartella script/notebooks/src 6

(34)

24 Miglioramenti, modifiche e analisi effettuate

sono stati memorizzati dei campioni al fine di poterli confrontare. Si è pensato quindi di assemblare i frammenti audio in modo casuale e di osservarne i risultati.

Generando un audio da un file che riproduce una scala musicale suonata al pianoforte, ci si accorge che dal sintetizzatore viene creato un suono misto che comprende più note di pia-noforte. Tenendo un solo granulo, lungo circa un secondo, si riconoscono integralmente le note dello strumento. Quando la durata dei granuli diminuisce, la nota iniziale si perde poi-ché i frammenti sono troppo brevi e non sono catturati in modo sequenziale, di conseguenza viene persa la melodia della traccia audio iniziale.

6.2.2

Box mobile con un suono

Successivamente, si sono pescati frame audio in modo sequenziale dalla traccia iniziale. In questo modo è stato possibile ricostruire il suono iniziale campionandolo. Per le prime prove è stato ricostruito il suono tenendo dei granuli lunghi un secondo, i quali riuscivano a catturare al meglio l’intonazione e la melodia delle note. Si è riusciti, infatti, a riprodurre un suono molto affine a quello iniziale. In un secondo momento si è diminuita la durata dei granuli a 0.2 secondi, questo però ha portato alla creazione di suoni più digitali, che ricordano l’intonazione delle note suonate al pianoforte. Per generare dei suoni continui è stato necessario aumentare la densità di granuli riprodotti, da 1 a 50 e poi a 100, così facendo il suono generato è risultato simile, nell’intonazione, a quello iniziale.

Infine si è provato a far variare la velocità del brano riprodotto, accorciando o allungando i tempi vuoti fra le riproduzioni.

La più grande problematica è stata riscontrata nel campionamento del file audio. In un file di questo tipo, all’interno del quale vengono riprodotte delle note a intervalli regolari, può capi-tare che il brano venga campionato nell’esatto istante in cui la nota suonata dal pianoforte decresce o termina. Quello che si ottiene quando si genera un audio campionando questi momenti vuoti, è un suono che scompare o che ha un’intonazione diversa rispetto a quella che si voleva riprodurre inizialmente. Nel caso peggiore si possono avere dei granuli che non hanno alcun suono.

6.2.3

Probabilità uniforme con due suoni

Un’ulteriore analisi è servita per capire come si comportano due audio differenti nella ge-nerazione di un nuovo suono. Per fare ciò, sono stati presi in considerazione due suoni strutturalmente molto diversi. Il primo7, un audio con alcuni rumori derivati da una gara di

Formula 1, contiene suoni di lunga durata, che variano nel tempo. Al contrario, il secondo8 riproduce il cinguettio di diverse specie di uccelli, quest’ultimo risulta quindi una sequenza di suoni brevi e continui.

7file: sources/f1.wav 8

(35)

Mixando questi due file in modo casuale quindi si deve trovare un compromesso per otte-nere dei suoni riconoscibili. Il compromesso risiede fra la scelta di molti granuli corti che inquadrano al meglio il cinguettio o la scelta di pochi granuli di lunga durata, i quali rico-struiscono il suono del passaggio di un’autovettura. La scelta non è semplice poiché i video utilizzati per il training contengono diverse serie di suoni misti, perciò il tuning dei parame-tri avviene accordando dei valori adeguati per questi ultimi attraverso l’ascolto di svariate prove.

6.2.4

Probabilità miste con due suoni

Per evitare le limitazioni individuate nelle precedenti prove, ovvero che brani strutturalmente diversi necessitano di parametri di granularizzazione molto differenti, si è pensato di adottare delle distribuzioni più sofisticate rispetto a quella random o lineare. In primo luogo sono stati esaminati i risultati ottenuti dall’analisi di due brani campionati ciascuno con un box mobile con stessa probabilità di selezione. In seguito si è pensato di utilizzare delle probabilità che ricordano l’andamento delle distribuzioni Gaussiane, per selezionare i frammenti dalla traccia audio iniziale. Questi aspetti, come anche quelli precedenti, sono meglio spiegati nei documenti Notebook Jupyter allegati.

Attraverso l’utilizzo di queste distribuzioni si è scoperto che purtroppo non si riesce a ripro-durre dei suoni migliori con queste tecniche. Nel caso del rombo di un’automobile, quindi un suono lungo e variabile nel tempo, si riesce a riconoscere il rumore provocato dal passaggio di una vettura, ma spesso capita che il suono venga spezzato o brevemente interrotto da dei cinguettii.

6.3

Analisi grafica

Per facilitare la comprensione dell’algoritmo che si occupa di riconoscere frame simili e di generare il conseguente audio, è stato pensato di rimpiazzare la schermata iniziale con una più sofisticata e dettagliata.

Inizialmente infatti veniva solamente mostrato a schermo ciò che la webcam inquadrava, ora invece, sono state aggiunte alcune parti grafiche che semplificano la comprensione del funzionamento dell’algoritmo e mostrano i risultati in modo più efficace e comprensibile. La grafica che espone inreal-time i frame ritenuti simili e la loro posizione esatta, è

suddi-visa principalmente in tre righe orizzontali. Come si può notare nell’immagine sottostante, la prima riga mostra quattro frame casuali scelti fra quelli più simili a ciò che l’utente sta

(36)

26 Miglioramenti, modifiche e analisi effettuate

inquadrando. Sulla seconda è possibile visualizzare in real-time ciò che l’utente inquadra attraverso la propria telecamera. Infine, in calce alla finestra vengono rappresentati, in mo-do sequenziale, i frame di tutti i file video ricevuti. Si può inoltre vedere quali frame sono stati riconosciuti e a quale video iniziale appartengono, attraverso questo istogramma.

Figura 6.2: Nuova finestra programma video2sound.

Per creare questo tipo di layout, è stata utilizzata MatplolLib9, una libreria molto utile per disegnare grafici e diagrammi. In questo modo, all’avvio vengono generati dei grafici aggior-nati in tempo reale, i quali mostrano ciò che la telecamera riprende e quali frame video sono riconosciuti.

La parte grafica è stata inoltre spostata in un apposito file10, in modo dalimitare l’accop-piamento e aumentare la coesione.

9Più dettagli su: https://matplotlib.org/ 10

(37)

Le features semantiche, ottenute dai vari frame video e da quello ripreso, attualmente ven-gono confrontate mediante la distanza Euclidea. Le distanze ottenute sono in seguito filtrate per tenere conto solamente dei risultati migliori, ovvero quelli presenti in un determinato per-centile. I frame simili, ovvero quelli appartenenti al percentile selezionato, vengono tenuti in considerazione con un valore pari all’inverso della loro distanza dalle features obiettivo; in seguito si dividono i valori per la somma dei punteggi, così da ottenere un array di proba-bilità che somma a uno e che attiva determinati sezioni audio in modo inverso rispetto alla distanza delle features ottenute.

Questo risulta essere l’approccio migliore e perciò quello attualmente in uso dall’algoritmo, ciò nonostante, sono stati testati altri metodi per generare queste probabilità.

Inizialmente si è provato ad utilizzare unicamente delle funzioni di probabilità, senza prima filtrare i risultati.

Le soluzioni ottenute da questi esperimenti non sono risultate utili, poiché in molti casi le di-stanze ottenute comprendono cifre relativamente alte ([50.3 51.2 49.9 . . . 43.2 43.5 42.6]). Tenendo in considerazione l’inverso della distanza o la seconda funzione usata e avendo molti frame, la probabilità che se ne selezioni uno si abbassa inesorabilmente ([0.043 0.041 . . . 0.021]). Le probabilità che si ottengono sono quindi troppo basse per influenzare cor-rettamente la generazione dell’audio e di conseguenza l’audio creato risulta un mix di suoni casuali. Questo accade semprese non si limita il numero di frame simili da prendere in

considerazione.

Proprio per questo motivo in un secondo luogo si è provato a limitare il numero di valori presi in considerazione, attraverso la selezione di quelli in un percentile specifico. In seguito si sono applicate le seguenti funzioni mostrate di seguito, ai valori all’interno del percentile. Nelle seguenti funzioni, ’k’ rappresenta una costante preconfigurata.

p ' 1/distanza

p ' 1/(distanzak)

p ' e−distanza/k

(38)

28 Miglioramenti, modifiche e analisi effettuate

Limitando il numero di risultati simili e utilizzando queste funzioni per trasformare i punteggi in probabilità, si ottengono dei risultati soddisfacenti. In particolare, utilizzando l’inverso della distanza si ottenengono dei buoni risultati.

Un’ulteriore soluzione potrebbe essere quella di calcolare le distanze fra le features seman-tiche utilizzando dei nuovi metodi, diversi da quello Euclideo; questa soluzione non è però stata esplorata. Se si trovasse un metodo alternativo per definire la distanza fra le coordinate multidimensionali, si potrebbe forse evitare di filtrare i risultati utilizzando dei percentili.

6.5

Rifattorizzazione e test

Oltre allo sviluppo di nuove funzionalità e di analisi, si è pensato di rendere più stabile il software prodotto. A questo scopo è stata praticata una rifattorizzazione del codice e una pulizia generale, la quale mira a snellire alcune parti o riorganizzarne altre. Ad esempio alcu-ni aspetti degli algoritmi sono stati riscritti in modo più esteso e comprensibile. Attualmente il programma comprende quattro file differenti, di seguito elencati:

• main.py: gestisce il flusso del programma;

• audio.py: gestisce la generazione e l’aggiornamento dei suoni;

• video.py: gestisce la parte di analisi dei frame e di calcolo delle probabilità di similitu-dine;

• plot.py: gestisce la grafica real-time.

Tutti i file sopraelencati, con le relative funzionalità, sono inoltre stati verificati attraverso dei

(39)

Capitolo 7

Problematiche riscontrate

Quando è stato introdotto il grafico aggiornato in tempo reale, l’esecuzione del programma e i suoi tempi di risposta sono rallentati notevolmente; passando da due, a circa cinque se-condi, per aggiornare la grafica al nuovo frame. Inoltre, si è notato un ritardo fra il momento in cui il frame ripreso dalla telecamera veniva mostrato a schermo e il momento in cui l’audio corrispondente veniva generato.

Inizialmente si è pensato di utilizzare una Deque per leggere e memorizzare i frame in-quadrati dalla telecamera, in quanto si supponeva che la lettura continua dalla telecamera potesse creare una coda d’attesa per i frame che venivano letti, ma che non si riusciva a mo-strare immediatamente. Questo potenzialmente generava un ritardo fra la visualizzazione del frame ripreso e la generazione del suo audio.

Successivamente, si sono aumentati gli fps del programma, in primo luogo limitando le chiamate al metodo imshow(); metodo utile per il plot dei dati con Matplotlib, il quale si è però rilevato particolarmente dispendioso.

La scelta di utilizzare una Deque è avvenuta poiché si aveva l’intenzione di sviluppare una versione Multi-Thread del programma e la Deque garantisce infatti di essere thread-safe. È stato in seguito creato un thread che ha il compito di leggere continuamente i frame della telecamera e memorizzarli nella coda.

Infine, i valori di tutti i frame video ricevuti sono stati salvati in dei file di cache, così da limitare i tempi di selezione e caricamento dei frame che vengono mostrati a schermo. Così facendo i tempi di risposta che inizialmente si sono estesi a cinque secondi, sono diminuiti notevolmente, ottenendo un risultato complessivo di circa 2 fps.

• tre secondi rimpiazzando le chiamate a imshow() con quelle a set_data() e salvando il contenuto dei frame in dei file di cache;

• due secondi utilizzando una coda per leggere i frame della webcam;

(40)
(41)

Capitolo 8

Lavori futuri

Il progetto è al momento funzionante e riesce a rispondere correttamente al bisogno ri-scontrato inizialmente. Tuttavia, sono stati identificati alcuni punti migliorabili e delle nuove logiche o tecnologie che si possono adottare per rendere il programma più efficace ed effi-ciente. Di seguito viene riportata una lista di spunti riflessivi che potranno venire analizzati in futuro.

• L’addestramento attuale è ritenuto migliorabile. Con una quantità di immagini e di clas-si maggiori, clas-si potrebbero clas-sicuramente avere dei risultati migliori nel riconoscimento delle immagini. Si potrebbe dunque pensare di utilizzare unamemoria esterna, che

contenga molteplici video e audio di training, in questo modo si riuscirebbe a snellire e velocizzare il procedimento di analisi e ricerca dei frame;

• La parte di analisi dei video è al momento macchinosa, poiché tutti i video analizzati dall’algoritmo per la prima volta vengono salvati in file di cache. In questi file sono memorizzati sia i valori esatti di ogni frame, che anche il valore ottenuto attraverso il classificatore. Nelle esecuzioni successive i dati potranno essere accessibili più rapi-damente poiché verranno caricati in memoria, ma lo spazio su una macchina rimane comunque limitato. Allargando il training non sarà quindi sempre possibile mantenere in memoria i valori di tutti i frame su un PC con RAM limitata.

• Attualmente la creazione dell’audio avviene mediante un sintetizzatore granulare. Que-sta scelta potrebbe essere messa in discussione, ricercandonuove tecnologie per

la generazione o la riproduzione dell’audio e valutando il loro funzionamento rispetto all’implementazione attuale;

• Il plot viene eseguito utilizzando il main thread, si potrebbe pensare di utilizzare un apposito thread per velocizzare l’esecuzione e disaccoppiare maggiormente il co-dice. Si è provato ad implementare questa soluzione, ma Matplotlib non permette che venga chiamato il metodo set_data da un thread esterno al main e perciò lancia un’eccezione e blocca l’esecuzione;

(42)

32 Lavori futuri

• L’algoritmo, al momento, è pensato per girare su un Computer fisso o portatile, il quale sia dotato di webcam e altoparlanti. Si potrebbe pensare di installare l’algoritmo su di un dispositivo portatile, dotato di telecamera e altoparlanti, ad esempio uncaschetto1

o undrone. In questo modo si testerebbe il suo funzionamento in modo mirato, magari

anche con persone aventi disabilità visive.

1

(43)

Capitolo 9

Conclusione

L’obiettivo principale di questo progetto era creare un sistema in grado di riconoscere delle immagini e di associare ad esse un audio generato in real-time. Per riuscire a produrre delle tracce audio in modo sensato, è quindi necessario fornire all’algoritmo almeno una coppia di file al suo avvio. Questi file devono essere sincronizzati fra loro e devono contenere un video - ’videoA.mp4’ - e una traccia audio - ’ tracciaA.wav’ -.

I frame dei video sono catalogati con un classificatore ResNet50 preaddestrato con Ima-genet, così come il frame ripreso dalla telecamera1. Fra questi punteggi viene calcolata la distanza Euclidea ed è possibile ottenere delle probabilità di similitudine fra il frame ripreso e quelli in memoria.

Oltre a questo, in memoria sarà possibile tenere traccia della posizione di un determinato frame video; proprio in questo modo sarà possibile, in seguito, campionare le tracce audio a determinate posizioni, ottenendo dei granuli audio, i quali verranno infine unificati e riprodotti attraverso un sintetizzatore granulare.

Per comprendere a fondo come funzioni e quali siano i parametri ottimali per il sintetizzatore sono stati generati anche dei file Jupyter Notebook. Attraverso questi documenti si sono potuti esplorare nuovi metodi per generare suoni e metodi che utilizzano nuove distribuzioni per la selezione dei frammenti audio da riprodurre, quali le distribuzioni lineari, uniformi e Gaussiane. Questo ha permesso di comprendere che la configurazione ideale del sinte-tizzatore va effettuata in base ai suoni che si vogliono riconoscere e che non esiste una configurazione ottimale e adatta a tutti i tipi di suono. Ad esempio per suoni più brevi sono necessari diversi granuli corti, mentre per suoni più duraturi sarebbe meglio utilizzare pochi granuli più estesi nel tempo.

Inoltre, il sistema attuale è stato reso più solido, documentandolo e testandolo.

Al fine di migliorare la velocità di esecuzione, la parte di lettura dei frame provenienti dalla telecamera, come quella di generazione audio, avviene in alcuni thread specifici.

1

(44)

34 Conclusione

Il sistema attuale è quindi in grado di riconoscere dei soggetti e di conseguenza generare un suono che li ricordi.

Un aspetto sorprendente è che spesso con grande facilità, il programma riconosce il sog-getto inquadrato, sebbene questo provenga da una sequenza in movimento.

Un’altra particolarità da notare è l’utilizzo dei dati provenienti dal penultimo layer del clas-sificatore, che permette, a differenza di quelli ottenuti dall’ultimo, un’identificazione di carat-teristiche di livello superiore. Questo meccanismo permette l’identificazione di soggetti che non sono presenti fra le classi di addestramento del classificatore utilizzato, ovvero le classi presenti in ImageNet.

Come già esplicitato in precedenza, il software prodotto presenta alcuni aspetti da migliora-re, uno fra tutti è la fase di addestramento. Qual’ora si riuscisse a far riconoscere più classi e quindi ad incrementare il dataset utilzzato, si potrebbe utilizzare il programma con dei ca-schetti dotati di cuffie e telecamera. I caca-schetti sarebbero facilmente indossabili, rilevandosi utili sia per le dimostrazioni museali che anche in fase di testing, poiché potrebbero essere indossati da persone ipovedenti, le quali ne trarrebbero beneficio e sarebbero in grado di dare un feedback immediato.

(45)
(46)
(47)

.1.1

Un audio con selezione casuale

Questo documento è disponibile al seguente path:

video2sound/codice/script/notebooks/src/OneAudioRandom.ipynb

.1.2

Un audio con selezione lineare

Questo documento è disponibile al seguente path:

video2sound/codice/script/notebooks/src/OneAudioMovingBox.ipynb

.1.3

Due audio con selezione casuale

Questo documento è disponibile al seguente path:

video2sound/codice/script/notebooks/src/TwoAudioRandom.ipynb

.1.4

Due audio con selezioni elaborate

Questo documento è disponibile al seguente path:

Riferimenti

Documenti correlati

Emit a copy of the input data = Local top-k list emitted by a reducer of Job #1 (NullWritable, (“product_x,product_y”, num. Occurrences_xy)

Realizzare un software che gestisca la migrazione dei file dai vari dispositivi di storage nelle nuove area documentale.. Realizzare un software che gestisca la migrazione dei

o uno stream può essere collegato a una sorgente dati diversa dal file. o nell’esempio lo stream in input fa riferimento a una pagina html che viene letta

Conforme con lo expresado hasta ahora, Suárez elige la novela de Stevenson, centrada en el mito del doble, sobre todo porque es posible destacar en su estructura varios elementos

So, teachers play an important role in the classroom environment because they give students the input they need in order to learn a language and they should create

L’importanza assunta negli anni dai fasci radioattivi, sia per la ricerca teorica che applicata, ha spinto la comunità scientifica internazionale a costruire numerose facility per

Il Seminario ha l’obiettivo di presentare agli operatori del settore le attività di ricerca e di trasfe- rimento tecnologico in fase di svolgimento nell’ambito del Progetto

• Nelle funzioni che accedono a interi array attraverso funzioni di libreria (bcopy, bcmp, e simili), non è necessario ricopiare i dati, in quanto tali funzioni