SlideShare a Scribd company logo
1 of 35
Download to read offline
UNIVERSITÀ DEGLI STUDI DI TRIESTE
Dipartimento di Ingegneria e Architettura
Tesi di laurea triennale in Ingegneria
Elettronica e Informatica
Rilevamento di Anomalie Urbane
attraverso il Riconoscimento Audio
basato su SVM
Relatore
Prof. Sylvio Barbon Junior
Candidato
Pradeep Aroulmoji
Anno Accademico 2022/2023
Indice
1 Introduzione 2
2 Analisi e Ricerca Preliminare 4
2.1 Caratteristiche del suono rilevanti a fini predittivi . . . . . . . 4
2.2 Digitalizzazione del suono . . . . . . . . . . . . . . . . . . . . 6
2.3 Filtraggio del Suono . . . . . . . . . . . . . . . . . . . . . . . 7
2.4 Introduzione al Machine Learning . . . . . . . . . . . . . . . . 9
2.5 Machine Learning nell’analisi audio . . . . . . . . . . . . . . . 12
2.6 Introduzione alle SVM . . . . . . . . . . . . . . . . . . . . . . 13
3 Progettazione 15
3.1 Progettazione dell’Algoritmo SVM . . . . . . . . . . . . . . . 15
3.2 Progettazione della pipeline . . . . . . . . . . . . . . . . . . . 16
3.3 Diagramma UML delle classi e della Pipeline . . . . . . . . . . 17
4 Realizzazione 20
4.1 Installazione e Configurazione . . . . . . . . . . . . . . . . . . 20
4.2 Software e Moduli Utilizzati . . . . . . . . . . . . . . . . . . . 20
4.3 Preparazione al Training del Modello . . . . . . . . . . . . . . 21
4.4 Funzionamento del Sistema . . . . . . . . . . . . . . . . . . . 21
4.5 Analisi del codice . . . . . . . . . . . . . . . . . . . . . . . . . 28
5 Conclusione 30
6 Riferimenti bibliografici 31
1
1 Introduzione
Negli ultimi anni la crescente complessità delle sfide legate alla sicurezza ha
richiesto l’adozione di sistemi e approcci sempre più innovativi che possano
fare uso delle potenzialità legate al settore delle tecnologie dell’informazione.
È proprio in questo contesto attuale che il presente lavoro di tesi si propone
di affrontare la tematica della sicurezza urbana attraverso la progettazione e
la implementazione di un sistema basato su Machine Learning, in grado di
rilevare anomalie, come ad esempio urla o richiami di aiuto, in registrazioni
audio provenienti da contesti urbani. La videosorveglianza è un sistema di
sicurezza che utilizza telecamere e microfoni per controllare e gestire le atti-
vità in una determinata area di interesse. In ambiente urbano le informazioni
provenienti da tali telecamere e microfoni vengono trasmesse ad un sistema
di controllo centralizzato e il salvataggio dell’informazione avviene in remoto
su server dedicati. L’utilizzo del Machine Learning in questo tipo di contesto
risulta essere di notevole importanza poiché, porterebbe un vantaggio in ter-
mini di efficienza e in termini economici, venendo in aiuto a chi ha il compito
di effettuare la sorveglianza. La presenza di un algoritmo basato sul Machine
Learning permette inoltre di classificare sorgenti audio in modo molto più ac-
curato rispetto a una semplice classificazione informatica standard effettuata
su variazioni di volume o su variazioni di frequenza, poiché viene allenato
apposta per riconoscere specificate caratteristiche del segnale audio stesso.
Il presente elaborato è stato svolto in stretta collaborazione con il settore
"Innovazione" di INSIEL S.p.A.. Il lavoro è iniziato con una ricerca iniziale
atta a studiare cos’è il suono e come esso possa essere manipolato in modo da
potere essere reso fruibile ad algoritmi basati su Machine Learning. È stato
poi condotto uno studio su come ciascun algoritmo si comporti nei confronti
di una sorgente audio e di quali potessero essere gli algoritmi più efficaci sia
da un punto di precisione che da un punto di vista di consumo di risorse.
È stata successivamente svolta una fase di preparazione e di progettazione
di una eventuale soluzione che è stata poi realizzata creando una pipeline
in Python per l’edificazione del sistema, il tutto affiancato da un lavoro di
allenamento di un modello basato su Support Vector Machine, sempre su
Python. L’obbiettivo finale di questo lavoro consiste nel fornire all’ azienda
un prototipo di un sistema di rilevazione audio affidabile che possa essere in-
tegrato al sistema video, attualmente in fase di costruzione. Il risultato finale
con questa integrazione consiste in un sistema completo che può riassumersi
con il diagramma inserito nella pagina seguente:
2
Figura 1: Schema generale del Sistema
Come si può notare dal diagramma, dato un segnale audio e un segnale
video catturati simultaneamente, entrambi i segnali vengono rispettivamente
trasmessi a due modelli di Machine Learning che hanno come obbiettivo quel-
lo di rilevare eventuali anomalie. Qualora ne venisse rilevata una il fine del
sistema è quello di segnalarlo il più tempestivamente possibile. Nei capitoli
a seguire verranno presentati in ordine i seguenti concetti: nel Capitolo 2,
denominato "Analisi e Ricerca Preliminare", verrà fatta una breve introdu-
zione su concetti legati al suono, alla sua digitalizzazione e al come esso possa
essere manipolato per ricavarne informazioni utili in vista di una possibile ap-
plicazione in ambito di Machine Learning. Nel capitolo successivo verranno
introdotte la progettazione dell’ algoritmo di Machine Learning e la proget-
tazione della pipeline di un prototipo di rilevatore audio che risulterà essere
la colonna portante del sistema in questione. Il capitolo 4 consiste in una
spiegazione tecnica di come il progetto è stato realizzato e di quali strumenti
si è utilizzato per arrivare al prototipo finale. Seguono le conclusioni.
3
2 Analisi e Ricerca Preliminare
2.1 Caratteristiche del suono rilevanti a fini predittivi
Dai corsi seguiti durante il percorso di studi è stato reso evidente che il suo-
no non è altro che una forma d’onda che si genera a seguito di variazioni di
pressione nell’aria circostante alla fonte di emissione. Come qualsiasi forma
d’onda il suono è rappresentabile mediante un grafico tempo-ampiezza dal
quale ne si può ricavare utili informazioni quali ampiezza, tempo di riprodu-
zione e sopratutto forma d’onda. Generalmente un segnale audio è costituito
da numerose forme d’onda sinusoidali con frequenze diverse che vengono ri-
prodotte contemporaneamente e che vengono sommate tra loro. Solitamente
le frequenze udibili da un essere umano appartengono a una banda di frequen-
ze che inizia a 20Hz e che termina a 20KHz circa. L’analisi frequenziale dei
suoni è molto importante perché è da essa che parte la ricerca per l’analisi
predittiva. Infatti dall’analisi frequenziale si arriva, applicando al logarit-
mo dello spettro della potenza la trasformata inversa di Fourier, all’analisi
cepstrum:
X(T) = F−1
[ln (F [x(t)])]
A riguardo, secondo un articolo riguardante l’analisi cepstrum scritto da
Noll e A Michael[1] è stato reso evidente che data l’ antitrasformata del
logaritmo dello spettro di frequenza, è possibile constatare che in questo
nuovo spettro generato si possa denotare il fatto che siano presenti dei picchi
in corrispondenza di segnali provenienti da voci umane e assenza di picchi
in caso di altre fonti sonore. È stato inoltre reso evidente che questi picchi
all’interno di questo tipo di spettrogramma sono robusti a distorsioni di fase
e ai rumori di sottofondo.
Inoltre, in un altro documento[2], è stato reso noto che la frequenza fon-
damentale e la distribuzione dell’energia sono due concetti fondamentali nel-
l’identificazione di un urlo. Infatti un urlo è caratterizzato da quasi il doppio
della frequenza fondamentale allo stesso livello rispetto a una semplice con-
versazione. Tuttavia queste caratteristiche sono molto influenzate da even-
tuali rumori esterni e per tale motivo si fa uso dei Coefficienti spettrali mel,
derivanti dal cepstrum, per distinguere tra un urlo e un qualsiasi altro rumo-
re di sottofondo. Tra tutti i coefficienti mel estraibili da un cepstrum i più
rilevanti ai fini di questo progetto risultano essere i primi 13. Questi infatti
sono i coefficienti caratterizzanti le frequenze basse del cepstrum e svolgono
un lavoro cruciale nell’ identificazione di una voce umana.
Di conseguenza, in virtù di tali riflessioni, si è determinato che la maggior
parte dei parametri coinvolti nell’identificazione di un suono generato da
4
un essere umano sarà concentrata nel processo di estrazione dei coefficienti
Mel. I coefficienti Mel sono quindi un insieme di coefficienti numerici che
rappresentano le caratteristiche dello spettro di potenza di un segnale sonoro
risultando essere di notevole interesse nell’ elaborazione di segnali audio e
analisi del parlato. Ad appoggiare questi parametri spettrali del suono si
ritiene importante inoltre includere due parametri temporali: il Zero Crossing
Rate che indica il numero di volte che un segnale attraversa l’asse delle ascisse
in un grafico tempo-ampiezza e il RMS, o valore efficace che indica il valore
che avrebbe un segnale costante di pari potenza media quello del segnale
di partenza. Di seguito si include un immagine raffigurante i passaggi in ogni
dominio appena descritti. Prendendo come esempio tre diversi tipi di segnali
si possono visualizzare gli andamenti dei grafici rispettivamente nel dominio
del tempo, della frequenza e della Quefrency.
Figura 2: Domini, https://www.frontiersin.org/
5
2.2 Digitalizzazione del suono
Affinché si possa lavorare con una sorgente audio è necessario che essa venga
catturata mediante un apposito microfono e che il segnale venga opportuna-
mente digitalizzato in modo da essere utilizzabile. Dato quindi un segnale,
esso viene campionato attraverso un convertitore analogico-digitale, il cui
ruolo primario principale risulta nel riprodurre la forma d’onda in ingresso
nel modo più fedele possibile. La precisione di questa operazione dipende
generalmente dalla qualità del campionatore, dal sample rate e dall’interval-
lo di quantizzazione. La quantizzazione implica l’attribuzione di un valore a
ciascun campione, e in questo contesto, maggiore è l’ampiezza di tale inter-
vallo, maggiore sarà la precisione del processo. Successivamente, si procede
con la fase di codifica digitale del segnale precedentemente campionato e
quantizzato. Il metodo più utilizzato è il PCM o Pulse Code Modulation,
che consente di associare un valore binario a ciascun campione audio. Una
rappresentazione visiva di questo procedimento può essere riassunta nella se-
guente immagine, nella quale si può ben vedere che sull’asse delle ascisse, il
tempo viene opportunamente frazionato e sull’asse delle ordinate si trovano
i valori attribuiti ad ognuna di queste frazioni temporali.
Figura 3: PCM, https://www.researchgate.net/
6
Il passo successivo riguarda il salvataggio, che può avvenire secondo due
metodologie: il salvataggio in formato lossy, comune nei file MP3 e il sal-
vataggio in formato lossless, tipico per esempio dei file Wav. La distinzione
principale tra questi due formati risiede nel fatto che nel primo caso, il segna-
le viene, mediante alcune tecniche avanzate, compresso portando con ciò una
perdita di informazione, mentre nel secondo formato nessuna informazione
viene persa, a discapito però di un file che occupa più spazio.
2.3 Filtraggio del Suono
"Data cleaning is a critical step in machine learning (ML) that involves iden-
tifying and correcting errors, inconsistencies, and inaccuracies in data. By
cleaning data, we can improve its quality, enhance model performance, reduce
bias, save time and resources, and increase user confidence." [3]
Affinché un segnale audio sia pronto per l’estrazione dei parametri neces-
sari alla sua identificazione, è opportuno sottoporlo ad una manipolazione
preliminare. Questa procedura assicura una maggiore uniformità delle fonti
e rimuove eventuali disturbi o distorsioni armoniche che potrebbero compro-
mettere l’efficacia dell’analisi predittiva. In questo contesto, le operazioni
di manipolazione comprenderanno l’applicazione di filtri passa-alto e passa-
basso, associate all’utilizzo di noise gate. Il filtro passa basso è un circuito
elettronico che permette, data una sorgente audio, di far passare unicamente
le frequenze minori di una frequenza di riferimento, oltre la quale alla quale
il segnale inizia progressivamente a essere tagliato seguendo una curva det-
ta knee. Il filtro passa alto invece esegue l’operazione opposta, ovvero dato
un segnale audio, la sua funzione principale consiste nel tagliare le frequen-
ze basse. Di seguito sono incluse delle rappresentazioni grafiche di un filtro
passa basso e passa alto.
Figura 4: Filtro Passa Basso e Passa Alto, https://content.cdntwrk.com/
7
Il noise gate è un dispositivo utilizzato per controllare il livello del rumore
di fondo in un segnale audio. La sua funzione principale è quella di eliminare
o ridurre i suoni indesiderati, come il rumore di fondo o il ronzio, in momenti
in cui il segnale principale è più debole. Impostando quindi una Threshold,
ogni qualvolta che il segnale è inferiore al valore in decibel di tale threshold
allora nessun tipo di informazione passa, risultando in porzioni di silenzio.Un
noise gate può inoltre essere caratterizzato da due parametri, l’attacco e il
release. Il ritardo di attacco controlla il tempo che il noise gate impiega per
aprirsi completamente dopo che il segnale supera la soglia mentre il release
controlla il livello a cui il noise gate si chiude dopo che il segnale è sceso al di
sotto della soglia di apertura. Una rappresentazione grafica di un noise gate
è la seguente:
Figura 5: Noise Gate, https://manual.audacityteam.org/
8
2.4 Introduzione al Machine Learning
Per Machine Learning si intende il ramo dell’intelligenza artificiale che ha
come obbiettivo quello di sviluppare algoritmi e modelli statistici per sistemi
informatici atti allo svolgimento di compiti senza istruzioni esplicite. Lo svol-
gimento di tali compiti è possibile unicamente mediante l’addestramento di
un determinato modello a eseguire una specifica operazione. Naturalmente
un modello affinché possa eseguire tali compiti deve essere opportunamente
allenato mediante degli appositi dataset che gli vengono trasmessi in input.
Un dataset è un insieme strutturato di dati che può essere composto da una
vasta gamma di tipi di dati, come numeri, testo, immagini, suoni. Questi
dati affinché possano essere resi disponibili all’allenamento, devono essere
opportunamente codificati. Esistono numerosi tipi di addestramento tra i
quali l’addestramento supervisionato, utilizzato in questo lavoro. Durante
l’addestramento supervisionato il modello viene addestrato utilizzando un
dataset nel quale sono presenti sia gli input (Features) che gli Output deside-
rati (Labels). In questa fase il modello impara ad associare le varie features
alle labels corrispondenti attraverso l’osservazione dei dati e l’applicazione di
complessi metodi matematici. L’obiettivo è che il modello impari a produrre
output accurati su nuovi dati simili a quelli di addestramento. Il tipo di
classificazione che verrà in seguito presentato in questo progetto è una classi-
ficazione binaria ovvero una distinzione fra due label. Dato un dataset , per
effettuare un addestramento è pratica usuale suddividere tale dataset in due
porzioni: un training dataset e un testing dataset. La funzione principale di
un training dataset risulta essere quello di avere dati disponibili per l’alle-
namento, mentre per quanto riguarda il testing dataset, esso viene utilizzato
per testare il modello, ovvero di effettuare predizioni su dati mai visti prima
e di capirne cosi l’efficienza. Solitamente il training dataset risulta essere più
corposo di un test datatset. Per misurare l’efficienza di un modello si fanno
uso di metriche quali l’accuratezza, matrici di confusione e curve ROC. Le
matrici di confusione sono delle tabelle che permettono di valutare le presta-
zioni di algoritmi di Machine Learning, mostrando il numero di predizioni
giuste e sbagliate effettuate sui dati di test e mettendole a confronto con i
valori corrispettivi valori reali. Tali matrici contengono fondamentalmente
4 sottogruppi: i valori True Positive che indicano il numero di casi in cui il
modello ha predetto correttamente che l’istanza appartenesse alla classe po-
sitiva, i True Negative indicanti il numero di casi in cui il modello ha predetto
correttamente che l’istanza appartiene alla classe negativa. Sono poi presen-
ti i False Positive indicanti il numero di casi in cui il modello ha predetto
erroneamente che l’istanza appartenesse alla classe positiva quando in realtà
appartiene alla classe negativa e i False Negative che indicano il numero di
9
casi in cui il modello ha predetto erroneamente che l’istanza appartiene alla
classe negativa quando in realtà appartiene alla classe positiva.
Figura 6: Matrice di confusione, https://towardsdatascience.com/
Similmente i grafici ROC sono capaci di far visualizzare la capacità di un
modello nella predizione. I grafici ROC hanno sull’asse delle ascisse la "False
Positive Rate" (FPR), che rappresentano la proporzione di istanze negative
erroneamente classificate come positive mentre sull’asse delle ordinate si trova
la "True Positive Rate" (TPR), che rappresenta la proporzione di istanze
positive correttamente classificate come positive. Definendo come AUC l’area
della curva sottostante alla curva stessa, se tale area risulta essere 0.5 allora
ci si trova in una situazione di modello casuale, se invece l’area cresce fino a
tendere a 1 allora ci troviamo in una situazione nella quale il modello funziona
correttamente riuscendo a proporre predizioni accurate.
Figura 7: Curva ROC, https://medium.com/
10
Si definisce poi l’accuratezza che indica quanto spesso il modello effet-
tua predizioni giuste, ovvero predizioni che coincidono al valore effettivo
dell’occorrenza del dataset.
Figura 8: Definizione accuratezza
11
2.5 Machine Learning nell’analisi audio
Le premesse precedenti portano alla questione riguardante la selezione di un
modello adeguato per classificare e differenziare tra suoni utili in ambito in-
vestigativo e suoni che possono essere considerati comuni o di sottofondo. A
tal proposito numerose sono le ricerche in questo campo. L’ipotesi principale
è quella di essere in grado di discriminare tra due categorie, il che si traduce
in una classificazione binaria. La ricerca effettuata nel paper [4] si propone di
effettuare di analisi basata su Reti Neaurali e facendo utilizzo dei coefficienti
Mel introdotti precedentemente. Questa soluzione, basata più in dettaglio,
sull’utilizzo delle Deep Boltzmann Machines risulta essere estremamente pre-
cisa, con un livello di accuratezza che si avvicina all’unità. Tuttavia, richiede
un notevole dispendio di risorse, tra cui l’utilizzo di una GPU di fascia al-
meno media-alta. Questo è necessario per eseguire l’addestramento in un
tempo accettabile, evitando prolungati intervalli di attesa. Un’altra ricerca
molto simile al contesto è stata effettuata nel paper [5] nel quale i ricercatori
si sono proposti di utilizzare vari modelli già esistenti e di capire quali tra
essi fosse il migliore. Tra i vari modelli testati quello che ha riscosso maggior
successo e precisione nel training è stato ResNet50, basato sulle Convolutio-
nal Neural Network, applicato ai spettrogrammi generati a partire da fonti
audio contenenti urla di donne e bambini con relativi rumori di sottofondo.
Anche in questo caso l’uso di una GPU è consigliato per un notevole guada-
gno di tempo. Un’ulteriore ricerca in materia condotta nel paper [6] e che
potrebbe essere semplicemente implementata su CPU riguarda l’applicazione
delle Support Vector Machine (SVM). Si riporta di seguito l’ idea principale
dello studio: "Based on the perceptual features, a new approach to scream
detection is designed in this paper. It is based on the energy envelop proposed
to locate the continuous sound, the ration of highest pitch of consecutive fra-
mes extracted using the autocorrelation measure the ‘high’ pitch of screaming
sound and the compact representation of MFCC in a sliding window for SVM
learning". Date le informazioni presenti nei paper e le risorse disponibili, si è
deciso di combinare in modo accurato i risultati emersi da essi, sviluppando
un algoritmo basato su Support Vector Machine (SVM) in grado di operare
su coefficienti Mel e su coefficienti temporali di sorgenti audio.
12
2.6 Introduzione alle SVM
La Support Vector Machine (SVM) è un algoritmo di Machine Learning con
supervisione che viene utilizzato molto spesso in contesti riguardanti classifi-
cazione e regressione. Una breve ma chiara descrizione riguardo l’algoritmo:
"L’obiettivo di un algoritmo SVM è quello di trovare un iperpiano che separi,
al miglior grado possibile, i punti di dati di una classe da quelli di un’altra
classe. Per “migliore” si intende l’iperpiano che ha il margine maggiore tra
le due classi, rappresentate dal più e dal meno nella figura qui sotto. Per
margine si intende la larghezza massima della linea parallela all’iperpiano
che non ha punti di dati interni." [7]
Figura 9: Funzionamento SVM, https://it.mathworks.com/
Siccome il dataset che si intenderà utilizzare è composto da features mul-
tidimensionali ed essendo il SVM un algoritmo rientrante nella categoria degli
algoritmi dotati di funzioni di kernel, per riuscire a classificare correttamente
e più efficientemente le Label è opportuno applicare una trasformazione alle
features mediante l’ausilio di queste funzioni appena citate. Tali funzioni
hanno la capacità di mappare determinate features in spazi di dimensione
superiore con il risultato finale di riuscire a discriminare correttamente le va-
rie Label. Aumentando le dimensioni, ciò che prima poteva essere separato
solo in modo non lineare in una singola dimensione, diventa molto più facil-
mente separabile in modo lineare. Tra le funzioni kernel più interessanti si
possono trovare il kernel Lineare, ovvero kernel che permette la separazione
13
tra le classi mediante l’ utilizzo di una funzione lineare, il kernel Polinomiale,
che permette la separazione tra le classi mediante l’ utilizzo di una funzione
non lineare,il kernel RBF che si basa sulla funzione gaussiana e che effet-
tua un calcolo basato sul grado di somiglianza tra due punti determinando
l’esponenziale della distanza tra questi due punti elevata alla seconda e mol-
tiplicata per un fattore gamma negativo, che determina quanto la funzione
di separazione debba essere più o meno spigolosa. I vantaggi legati all’uti-
lizzo di questo algoritmo risultano essere molteplici: è un algoritmo molto
efficace nella classificazione grazie soprattutto all’uso delle funzioni kernel,
poiché ciò permette di prendere decisioni non lineari più agilmente, risulta
poi essere molto efficiente in termini di memoria poiché si affida unicamen-
te a un sottoinsieme delle features durante la costruzione della funzione di
decisione, anche in presenza di dataset molto grandi. L’algoritmo funziona
anche notevolmente bene in presenza di dataset di dimensione relativamente
contenute. Un ultimo ma non meno importante vantaggio risiede nella resi-
stenza all’overfitting, questo fatto è dovuto al fatto che l’algoritmo riesce a
massimizzare correttamente il margine tra le label.
14
3 Progettazione
3.1 Progettazione dell’Algoritmo SVM
Il modello di Machine Learning basato su Support Vector Machine è stato
progettato per ricevere in input i dati estratti da un file CSV contenente le
features discusse in precedenza. L’estrazione dei coefficienti verrà spiegata
in dettaglio in seguito. Per ogni file audio utilizzato nel processo di allena-
mento, vengono scritti in ordine e per ogni riga di un apposito file CSV, 13
coefficienti Mel, il coefficiente riguardante il Zero-Crossing-rate, il coefficien-
te riguardante il centroide, il parametro RMSE e la categoria alla quale tale
file audio appartiene (le cosiddette label). Una volta terminata la fase di
acquisizione delle features, il file CSV viene trasmesso a uno script in Python
capace di estrarne il contenuto. I dati estratti vengono trasmessi in input
al modello SVM istanziato. Vengono estratti i coefficienti e si effettua una
suddivisione in training dataset e test dataset. Segue la standardizzazione
del training set e del test set in modo che entrambi abbiano media 0 e de-
viazione standard 1, permettendo così una migliore distribuzione della scala
tra le features. Questa operazione porta a risultati più accurati impedendo
errori dovuti alla sensibilità degli algoritmi di Machine Learning.
xstand =
x − µ
σ
dove x rappresenta il valore originale della feature, µ rappresenta la media
della feature e σ rappresenta la deviazione standard della feature.
Successivamente si effettua il training, operazione atta a insegnare al mo-
dello come distinguere tra le due categorie di label. La verifica dell’esito del
training viene svolta trasmettendo in input al modello già allenato il test set.
Se, in base alle metriche discusse precedentemente, i risultati della predizione
su questo set risultano essere corretti allora vuol dire che la fase di training
è andata presumibilmente a buon fine.
15
3.2 Progettazione della pipeline
Nell’elaborazione dell’architettura, la decisione chiave è stata quella di svi-
luppare un prodotto che fosse non solo efficace, ma anche veloce, garantendo
che i ritardi tra l’ingresso di un segnale attraverso un microfono e l’output
dell’analisi predittiva fossero mantenuti a un livello accettabile. Per ovviare
a questi requisiti si è quindi deciso di suddividere il runtime in due thread,
creando così un’architettura basata sul multithreading. Così facendo è sta-
to possibile parallelizzare il sistema rendendo la soluzione ottenuta di gran
lunga superiore a una implementazione di tipo sequenziale. L’architettura si
suddivide pertanto in due parti: una parte destinata all’ acquisizione dell’
input audio e una seconda parte destinata alla porzione di progetto riguar-
dante l’analisi e la trasmissione dei risultati. Il procedimento è il seguente:
viene inizializzato il primo thread e poi, data una fonte audio, che si suppone
provenire da un microfono di una eventuale telecamera di videosorveglianza,
il processo inizia con una registrazione di durata arbitraria che può eventual-
mente anche essere di durata estremamente lunga, dato che ci si sta riferendo
a un sistema di videosorveglianza in tempo reale. Successivamente, ogni 2
secondi viene registrata e salvata su disco una copia dell’informazione presen-
te in tale intervallo. Questo procedimento si ripete iterativamente, pertanto
ogni 2 secondi si avranno delle registrazioni nuove riguardanti le informazioni
connesse ai rispettivi intervalli di tempo. Tutte queste operazioni appena ci-
tate vengono eseguite esclusivamente dal primo dei due thread in questione.
Il secondo Thread viene inizializzato appena viene salvato su disco il primo
file audio, da quel momento i due thread lavorano in parallelo. Appena un
file audio viene registrato dal primo Thread, esso viene, dopo il salvataggio,
immediatamente reso disponibile per l’esecuzione del secondo Thread e vie-
ne impostato quindi come input per la prima operazione che concerne quest
ultimo. Questa prima manipolazione consiste nell’applicazione di un filtro
passa basso con una frequenza di cutoff impostata a 40 Hz e un filtro passa
alto con una frequenza di taglio impostata a 3500hz. Si sono scelti questi
valori perché ritenuti i limiti per i quali l’informazione derivante da un even-
tuale segnale emesso da un essere umano potessero risultare sufficienti. Tutta
l’informazione che risulta essere presente prima della frequenza di cutoff del
filtro passa basso e dopo la frequenza di cutoff del filtro passa alto, risultano
superflue ai nostri fini e, in alcuni casi danneggianti, poiché potrebbero por-
tare a predizioni sbagliate. Viene poi applicato un noisegate dotato di una
tensione di soglia che viene calibrata automaticamente in base al file audio
in input. Il passo successivo consiste in una riduzione del rumore che si basa
su un’analisi della trasformata di Fourier dello spettro. Da notare che que-
ste operazioni di filtraggio sono le stesse che vengono effettuate nella fase di
16
training del modello per ogni file audio. Eseguito questo passo, il file audio
manipolato viene salvato e risulta operativo per l’estrazione delle features da
trasmettere in input all’algoritmo di Machine Learning. Le features vengono
estratte e scritte in un file CSV che servirà da input allo script contenente
il modello SVM per effettuare una predizione. Qualora l’algoritmo doves-
se rilevare un’anomalia, verrà stampato in output un messaggio di allerta
con il relativo timestamp. Inoltre i file audio corrispondenti alle rilevazioni
verranno spostati in un’apposita cartella.
3.3 Diagramma UML delle classi e della Pipeline
Si includono di seguito le classi utilizzate nel progetto. Il progetto compren-
de inoltre uno script che riguarda l’allenamento del modello che non viene
incluso poiché non progettato come classe con oggetti. La classe centrale del
progetto è il Main che è direttamente collegata a 4 classi: La classe Recor-
ding, avente la funzione di registrazione, la classe Extract, con la funzione
di estrarre i coefficienti temporali e spettrali, la classe Preprocessing con la
funzione di manipolare un file audio prima di essere analizzato dal modello
di Machine Learning e infine la classe ModelPredictor che ha la funzione di
effettuare la predizione per la quale l’algoritmo è stato allenato. Seguono poi
due classi, separate dal Main, Delete e Training_extraction, aventi rispetti-
vamente le funzioni di eliminazione dei file residui prima di inizializzare un
nuovo runtime ed estrarre i coefficienti durante la fase di training. Ognuna
di queste classi verrà spiegata più in dettaglio nel prossimo capitolo.
17
Figura 10: Diagramma UML delle classi
18
Si include inoltre il diagramma della pipeline del progetto anticipando che
il progetto è stato suddiviso in due thread. Come si può notare, il thread 1 ha
la funzione di registrazione e di salvataggio della registrazione in frammenti
audio. Il Thread 2 invece, costituente gran parte del runtime, permette di
prelevare uno dei file audio precedentemente registrati, di manipolarlo e di
estrarne i coefficienti. Tali coefficienti vengono poi scritti su un file CSV
per poi essere estratti e utilizzati dal modello SVM per la fase di predizione.
Una volta terminata la fase di predizione segue, in caso di risultato positivo,
una segnalazione in output. Il processo continua iterativamente con il file
seguente fino all’esaurirsi dei file audio provenienti dal primo thread.
Figura 11: Pipeline del Progetto
19
4 Realizzazione
4.1 Installazione e Configurazione
La realizzazione del sistema in questione è stata effettuata utilizzando il
linguaggio di programmazione Python.[8] Più in dettaglio il progetto è sta-
to sviluppato utilizzando la versione 3.11 di Python. Ogni pacchetto pre-
sente in questo progetto è installabile mediante pip, il package manager
di Python. Di seguito vengono elencate tutte le risorse necessarie. La
repository Github alla quale è stato caricato il progetto si trova all’URL:
https://github.com/pradeeparoulmoji/audio-security
4.2 Software e Moduli Utilizzati
Tra i software utilizzati per la realizzazione del progetto figurano l’editor di
codice sorgente Visual Studio Code [9], il software di editing audio Fl Studio
21 in versione demo [10] e il software per l’analisi statica del codice Sonar-
qube [11]. Tra i moduli e le librerie Python invece, che verranno spiegati
adeguatamente in seguito, figurano librosa, scikit-learn, noisereduce, threa-
ding, Pedalboard, sounddevice e matplotlib. Si include di seguito l’elenco dei
moduli più importanti utilizzati con le corrispettive versioni. Per i dettagli
riguardanti questi moduli si faccia riferimento ai prossimi paragrafi.
Figura 12: Moduli principali
20
4.3 Preparazione al Training del Modello
Per effettuare il training del modello si è deciso di raccogliere e scaricare
da fonti situate nel web campioni audio riguardanti sorgenti provenienti da
contesti urbani e sorgenti provenienti da urla di voci umane. Per raccogliere
tali dati si è fatto affidamento ai seguenti dataset: freesound.org [12], ChiMe
[13] e SoundPrivacy [14]. Raccolte queste sorgenti audio si è deciso, con-
ducendo alcuni test su Fl studio, di analizzarli applicando su di essi alcuni
effetti e applicando il denoiser del modulo noisereduce su un apposito script
scritto in Python. Il fine di questa operazione è stato quello di capire come
potrebbe essere un eventuale output da trasmettere in input al modello e
di come allenarlo. Dopo alcuni test si è quindi stabilito quali valori di ogni
catena, includenti filtri passa alto, filtri passa basso e noise gate, fossero i
più opportuni e si è quindi deciso di traferire questi parametri in Python e
applicarli come parametri mediante alcune librerie come verrà esplicitato in
seguito. I valori del passa alto e del passa basso sono stati scelti in modo da
trascurare le informazioni non necessarie all”identificazione di voci umane,
come le frequenze sotto i 400Hz e le frequenze sopra i 3500Hz. Il numero
totale di campioni raccolti è ammontato a 1200, 600 campioni per i suoni di
sottofondo e 600 campioni riguardanti suoni di urla. I dettagli riguardan-
ti l’implementazione del training vengono descritti in dettaglio nel prossimo
paragrafo.
4.4 Funzionamento del Sistema
Partendo dallo script denominato noise_reduction_clean.py, questo si pro-
pone di ricevere in input un file audio e di manipolarlo in maniera opportuna
affinché da questo file si possano estrarre i coefficienti essenziali legati all’a-
nalisi dell’algoritmo SVM. Le librerie importate in questo script sono noise-
reduce, un modulo che permette dato un segnale audio in input, di ridurre
i rumori di sottofondo utilizzando la tecnica dello spectral gating, dalla li-
breria scipy si è importato il modulo wavfile che consente la manipolazione
di sorgenti audio in formato .wav. Tra le librerie rilevanti si è poi impor-
tato Pedalboard, libreria che è stata utilizzata per l’applicazione di catene
di effetti alle sorgenti audio. Viene inoltre fatto uso di Pydub, anch’esso
con la funzione di applicare effetti alla sorgente audio. La seconda porzione
dello script si riassume nella inizializzazione e nell’ attribuzione di valori di
default di un eventuale file audio che verrà utilizzato all’interno dello script,
comprendendo inoltre valori di inizializzazione per quanto riguarda la scelta
dei valori legati ai parametri dei filtri che verranno applicati alla sorgente
audio. La prima definizione di funzione permette, passando per argomen-
21
to il percorso del file di una sorgente audio in formato .wav, di attenuare
il valore medio del volume generale della sorgente, facendo in modo che la
media risulti essere di -40dB. Dopo l’applicazione della riduzione di volume
il file originale viene sovrascritto con il file attenuato. Il secondo metodo ha
il compito di leggere il file audio utilizzando il modulo AudioFile di Pedal-
board. Il file audio viene ricampionato e da esso se ne estraggono importanti
dati come la durata, il samplerate. La sua importanza fondamentale risie-
de nel fatto che il file audio viene frammentato in segmenti estremamente
brevi, determinati dal campionamento, generando così una sequenza estesa
di frammenti dell’audio sorgente originale. La stessa operazione può essere
applicata a un apposito file di rumore. Tuttavia quest ultima procedura è del
tutto opzionale e serve solamente nel caso si abbia un file audio contenente
una sorgente di rumore specifica e che si protrae nel tempo. Successivamente
viene definita una funzione denominata plot_audio_channels() che non vie-
ne utilizzata nello script main, a cui si farà successivamente riferimento, ma
che può essere utile qualora si volessero vedere graficamente le forme d’on-
da dei file audio in ingresso e in uscita. La libreria utilizzata per attingere
a ciò è matplotlib. La definizione di funzione che segue, denominata noi-
se_gate_setup, imposta una soglia audio al di sotto della quale il segnale
audio non deve passare. La soglia dipende strettamente dal gain medio del
file audio dopo esser stato manipolato dai metodi precedenti. Pertanto tutte
le porzioni di segnale che non raggiungono il livello di tale soglia verranno
considerati come delle porzioni di silenzio. L’ultima definizione di funzione
si propone di effettuare la vera e propria manipolazione audio utilizzando
parte delle definizioni appena descritte. In argomento si passa la cartella di
destinazione del file che si intende manipolare. All’ interno della definizione
della funzione si istanzia un oggetto della classe Pedalboard che permetterà
alla manipolazione del segnale. La prima manipolazione in coda consiste in
un incremento generale del guadagno impostato a +20dB, successivamente
viene utilizzata un’istanza della classe noisereduce che viene applicata due
volte, una per la versione stazionaria e l’altra per la versione non stazionaria.
Vengono in seguito applicati un filtro bassa e un filtro passa alta coi valori di
default che si erano precedentemente istanziati nella definizione della classe,
ognuno di questi con una pendenza tale che in procinto della frequenza di cu-
toff, il segnale venga abbassato di 30dB. L’ultima fase del processo comporta
l’applicazione del noise gate, il quale richiede un adeguato valore di release al
fine di garantire una precisione ottimale senza compromettere informazioni
rilevanti. Infine, il file audio viene esportato nella destinazione specificata
come argomento.
Si descrive ora lo script che si propone di estrarre le features di ogni file
audio, training_features_extrction.py. Le librerie rilevanti utilizzate risul-
22
tano essere librosa, libreria utilizzata per la manipolazione audio e Pandas,
libreria atta alla manipolazione e all’analisi di dati. Per la compilazione di
questo script si è preso spunto del codice precedentemente scritto nel proget-
to scritto da Fairuz Samiha Saeed[15]. Lo script è suddiviso in due parti: una
parte che concerne i file della categoria "Scream" e l’altra che concerne la
categoria "Background". Il codice per ognuna di queste due parti è identico
eccetto che per i percorsi delle cartelle contenenti i file audio, suddivise nelle
due categorie appena descritte, e per l’output delle label: 0 per la categoria
"scream" e 1 per la categoria "background". Si inizializza lo script istan-
ziando un numero di liste pari al numero di features necessarie all’algoritmo
SVM e vengono inizializzati percorsi per ognuna delle categorie di file audio.
È pertanto opportuno preparare i file audio per il training in cartelle diverse,
ognuna per ogni categoria. Vengono quindi estratti per ognuna di queste
due cartelle le features per ogni file audio e ognuna di queste features viene
aggiunta alla corrispettiva lista inizializzata precedentemente. Notare che
l’estrazione viene eseguita automaticamente per ogni coefficiente grazie alla
libreria librosa. Notare inoltre che ogni file viene ricampionato a 16000 Hz.
Dopo aver completato entrambe le operazioni, saranno generati due file CSV
distinti come risultato finale, ognuno formato da colonne (features) e una
label che varia da 0 a 1 in base al file CSV. Le righe comprendono i records
di features per ogni file audio. Il passo finale consiste nell’ unire i due file
CSV in un unico file che verrà successivamente, in un altro script, utilizzato
per riestrarre i coefficienti e trasmetterli come input al modello di Machine
Learning. Per unire i due file si fa uso del modulo concat di Pandas.
Lo script che si collega direttamente a quest ultimo citato è model_svm.py
che ha la funzione di prendere in input i coefficienti estratti dal file CSV pre-
cedentemente generato, denominato "training_dataset.csv" e di applicare il
modello basato su SVM su tali dati. Le librerie rilevanti importate sono
sklearn, una libreria open source che fornisce una vasta gamma di soluzioni
per la costruzione e l’implementazione di vari algoritmi di Machine Learning,
Pickle e Joblib che sono delle librerie che permettono di salvare strutture dati
su disco in formato binario. Il procedimento è il seguente: mediante Pandas
si carica il dataset in questione, si suddivide poi tra Features e Labels creando
quindi due liste. La lista contenente le Features risulterà essere una matrice
Nx16 dove N indica il numero di righe presenti nel dataset. La lista conte-
nente le Labels invece presenta una dimensionalità del tipo Nx1. Su queste
due liste si effettuano poi ulteriori suddivisioni, discriminando tra dati di
training e di test. Verranno pertanto create quattro liste: X_train, X_test,
alle quali verranno associate 80% dei dati presenti nella lista delle Features
e y_train e y_test alle quali verranno associate 20% dei dati presenti nella
lista delle Labels. Così facendo si ottiene una suddivisione ragionevole sia a
23
fine di training che a fine di testing. Viene successivamente inizializzato uno
standardizzatore in modo da trasformare i dati delle features in modo che
essi siano il più omogenei possibili.
In seguito viene creata un’istanza del modello. Mediante questa istanza
si esegue quindi l’allenamento atto alla predizione discriminativa utilizzando
come parametri le liste X_train e y_train. Viene poi svolta la predizione
sulla lista X_test per verificare che l’algoritmo funzioni in modo corretto.
Si riportano di seguito i risultati espressi mediante la matrice di confusione
e il grafico ROC.
Figura 13: Matrice di confusione
24
Figura 14: Grafico ROC
Come si può intuire, i risultati sono molto promettenti con un’ accuratezza
calcolata del 99%.
Successivamente, è stata presa la decisione di valutare il modello su ul-
teriori dati nuovi, appena esportati, al fine di determinare se il sistema si
comporta in modo adeguato su un insieme di dati precedentemente non esa-
minato. Essendo stati i risultati in linea con i valori veritieri si è proceduto
al salvataggio del modello in tutta la sua interezza, contenente sia i contenuti
riguardanti il training che i dati contenenti le informazioni sulla standardiz-
zazione. Per giungere a tali conclusioni si è fatto uso di pickle.dump per
salvare il modello e di joblip.dump per salvare la standardizzazione.
Lo script successivo, denominato model_import.py, si propone come una
libreria di supporto per il file che prende il nome di main.py. La funzione
principale consiste nell’eseguire l’algoritmo di SVM durante l’esecuzione della
funzione main. Le librerie utilizzate sono analoghe a quelle precedentemente
incontrate. Nell’inizializzazione vengono importati il modello, la standardiz-
zazione e il percorso al file CSV che viene scritto durante il runtime man
mano che le operazioni si susseguono. Si caricano pertanto il modello e la
standardizzazione e, dati i dati riguardanti il file audio che viene analizza-
to in un certo istante, essi vengono estratti e passati al modello che fornirà
come output il risultato dell’analisi. Si introduce poi lo script recording.py
che permette di registrare. La classe Recording viene inizializzata definendo
parametri importanti come la durata totale della registrazione e la durata per
25
la quale ogni file audio derivante dalla registrazione viene segmentata. La
funzione record permette quindi di inizializzare una registrazione dipendente
dalla durata di split specificata in precedenza e di registrare in 2 canali audio.
Successivamente è presente una istruzione wait che specifica di aspettare fin-
ché la registrazione non termini. Il contenuto risultante viene poi codificato
in maniera opportuna (16 bit PCM) ed esportato come file .wav. Il processo
si ripete iterativamente grazie al loop for fino alla durata totale di registra-
zione inserita precedentemente. Lo script features_extraction.py è un file
del tutto analogo al file training_features_extraction e permette, durante la
registrazione in live, e dato un file audio in ingresso, di estrarne i coefficienti,
che non sono altro che le features per il modello SVM, e di scriverle su un
file CSV che risulterà essere l’uscita di questa funzione. Tale file CSV verrà
poi utilizzato nel main, durante il runtime e verrà rigenerato ogni volta, per
ogni nuovo file audio che questa funzione riceverà in ingresso.
Per la pulizia dei file nelle cartelle "effected" e "source" è inoltre presente
uno script, denominato clear_files.py, che permette di eliminare i file residui
di un runtime precedente qualora se ne volesse inizializzare uno nuovo.
La colonna portante di tutto il sistema è contenuta in un file denominato
main.py che è costituito da molte delle classi descritte precedentemente e
le unisce per giungere all’ obbiettivo. Oltre alle classi già precedentemente
discusse, viene importato il modulo threading che permette l’esecuzione di
più thread all’interno del processo. Vengono inizializzati alcuni valori come
la durata di intervallo per la quale vengono salvati iterativamente i file audio.
Dopo numerosi test Il valore scelto è stato di 2 secondi, valore che è stato
ritenuto come il più efficiente. La durata totale della registrazione viene im-
messa in secondi dall’utente in input. Seguono alcune definizioni di funzioni:
La funzione record_audio si basa sulla classe Recording e ha la funzione di
registrazione, la funzione move_audio è la funzione che permette, data una
rilevazione positiva, di spostare il file in questione in una cartella dedicata
alle segnalazioni e di includerne in aggiunta, nel nome del file, un timestamp.
Si giunge infine alla definizione di process_audio che istanzia oggetti del-
le classi noise_reduction_clean, features_extraction e model_import e che
permette il funzionamento di tutta l’infrastruttura. Viene inoltre istanziata
una lista denominata timestamps che ha la funzione di tenere conto di ogni
timestamp relativo ai file audio di sorgente. Segue un ciclo While nel quale
vengono unite ed eseguite tutte le operazioni. Tale ciclo viene separato in
due parti: una per la prima iterazione e l’altra per tutte le iterazioni restan-
ti. Questo non è altro che una risoluzione di ottimizzazione. Prendendo in
considerazione la seconda porzione del ciclo while che inizia con lo statement
else, è presente una funzione time.sleep che ha la funzione di aspettare che
l’occorrenza del loop precedente finisca, prima di iniziarne una nuova. Dopo
26
ciò, se l’ i-esimo file che deve essere manipolato esiste allora le operazioni
che si susseguono sono le seguenti: aggiunta di un timestamp del momen-
to corrente, esecuzione di processor_adjust_volume, esecuzione di proces-
sor_read_audio, esecuzione di process_audio, che implica la manipolazione
del file e la scrittura del nuovo file nella apposita cartella ’effected’.Da questo
file appena scritto si estraggono poi le features che verranno salvate nel file
CSV di default denominato ’runtime.csv’. Questo file CSV viene poi passato
allo script contenente il modello nel quale vengono riestratti i coefficienti.
Questi coefficienti vengono trasmessi al modello e il risultato della predizio-
ne viene salvato nella variabile Result. Se il valore della variabile Result è
uguale a 1 allora l’i-esimo file audio sorgente verrà spostato in una appo-
sita cartella denominata ’detection’ e verrà mostrato in output il seguente
segnale: "Scream detected at "timestamp X"!". Il ciclo while continua fino
alla fine della durata preimpostata in fase di inizializzazione. L’esecuzione di
tutto lo script avviene in una funzione main nella quale vengono istanziati
due thread, uno per la funzione record_audio e uno per la funzione pro-
cess_audio, entrambi definiti precedentemente. Vengono quindi fatti partire
entrambi i thread mediante l’istruzione start e l’istruzione join permette di
mettere in attesa il primo thread aspettando che l’altro thread finisca le sue
operazioni. Quando entrambi i Thread giungono all fine delle loro esecuzioni
viene stampato in output una stringa con il seguente contenuto: "Recording
Finished".
Un possibile risultato a fine esecuzione:
Figura 15: Un possibile output
27
4.5 Analisi del codice
Durante la costruzione del progetto sono state condotte delle analisi per la
verifica del corretto funzionamento di ogni script avvalendosi di alcune tecni-
che quali l’analisi statica e l’analisi dinamica del codice. L’analisi statica è un
esame del codice sorgente che avviene senza che quest ultimo venga eseguito.
L’utilità di questo tipo di analisi consiste nell’ identificare errori, difetti di
progettazione, violazioni di convenzioni e altri potenziali problemi. L’analisi
dinamica invece viene effettuata attraverso l’esecuzione del codice sorgente
attribuendone input specifici per osservarne il comportamento durante l’ese-
cuzione. Questa analisi include il test delle funzionalità, la valutazione delle
prestazioni e la verifica del rispetto dei requisiti. Per la parte riguardante
l’analisi statica si è fatto uso di Sonarqube [11], piattaforma open source de-
dicata alla gestione della qualità, della sicurezza e della manutenibilità del
codice. Per utilizzare tale piattaforma si è fatto utilizzo della tecnologia ba-
sata su container denominata Docker [16]. In estrema sintesi Docker è una
piattaforma open-source che consente di creare, distribuire e gestire appli-
cazioni all’interno di contenitori leggeri. Tali contenitori agiscono come una
sorta di virtualizzazione a livello di sistema operativo e ciò consente di isolare
le applicazioni e le loro dipendenze, garantendo al contempo la portabilità e
la riproducibilità dell’ambiente di esecuzione. Per fare uso di quest ultimo si
è fatto uso del sottosistema Windows per Linux su Microsoft, WSL2. Questa
tecnologia permette di creare e di eseguire un ambiente Linux su una mac-
china nella quale è installato un sistema operativo Windows. Il vantaggio di
questa struttura risiede nella possibilità di utilizzare direttamente la tecno-
logia dei container Docker su questo sottosistema anziché creare una nuova
macchina virtuale separata. Questo si traduce in un risparmio di tempo e
risorse, evitando così il rallentamento delle operazioni. Un ulteriore vantag-
gio risiede nel fatto che mediante WSL2 è possibile eseguire comandi Linux
su Shell e comunque continuare a usare un sistema basato su Windows si-
multaneamente. Mediante l’utilizzo di questo metodo per l’analisi statica, si
sono spesso riusciti a individuare eventuali code smells, o problemi di otti-
mizzazione e alcune inesattezze che sarebbero state impattanti dal punto di
vista della manutenibilità, come per esempio la ripetizione di codice oppure
il mancato utilizzo di alcune librerie o variabili oppure ancora l’utilizzo di
stringhe che possono generare confusione al momento della denominazione di
alcune variabili o metodi.
28
Figura 16: Sonarqube all’interno di Docker
Figura 17: Valutazione Sonarqube del progetto
Per la parte riguardante invece l’analisi dinamica si sono condotti dei test
semplicemente creando dei file di supporto in formato .py ed eseguendo il co-
dice iterativamente in cerca di errori qualsiasi fosse la loro natura. L’utilizzo
di tale tecnica è risultata di aiuto nel risolvere eventuali problemi ma anche
per trovare modi per ottimizzare ognuno dei script presenti nel progetto.
In merito all’analisi dello script denominato main.py si è deciso di fare
uso di una funzionalità del driver audio del sistema operativo Windows, de-
nominato Missaggio Stereo, che permette la cattura di suoni provenienti da
fonti interne al sistema operativo stesso. Questa funzionalità è risultata esse-
re di notevole importanza quando associata a sorgenti audio provenienti dal
web. È stato mediante quest ultimo che si sono effettuati i test dell’ intero
sistema alternando tra suoni urbani di background e suoni di grida, sempre
emesse in un contesto urbano. Il risultato di questa ultima analisi è risultato
soddisfacente in quanto nella maggior parte dei casi il sistema ha funzionato
a dovere segnalando molto spesso le situazioni per le quali è stato ideato a
segnalare. Sono tuttavia stati registrati dei falsi positivi oppure in rari casi
dei casi negativi, che sono tuttavia problemi risolvibili tramite un miglior
allenamento del modello utilizzato.
29
5 Conclusione
L’obbiettivo prefissato all’inizio dell’esperienza era stato quello di provare a
ideare e implementare una soluzione capace di fare la distinzione tra urla e
rumori di sottofondo in contesto urbano. Alla fine dell’esperienza tale risul-
tato è stato ottenuto e si è inoltre costruito un prototipo di sistema completo
funzionante che ottiene dei risultati molto soddisfacenti come indicato nei
paragrafi precedenti. Si è tuttavia notato che il sistema può ulteriormente
essere migliorato, ad esempio tra il rilevamento della voce e la segnalazione
trascorrono alcuni secondi (circa 5) di ritardo, ovviamente trascurabili per il
presente contesto ma un ritardo minore può sicuramente essere più apprezza-
bile. Il numero di righe di codice totale ammonta a ottocento e attualmente il
prototipo è stato presentato ai supervisori del settore "Innovazione" e rimane
momentaneamente in attesa per sviluppi futuri. In conclusione, mi ritengo
molto soddisfatto dell’opportunità che mi è stata concessa sia dall’Università
che da INSIEL S.p.A. per avermi permesso, non solo di mettere in atto le
nozioni apprese durante il corso di studi, ma anche di averne apprese nuo-
ve, il tutto applicandole direttamente a un progetto che mi ha permesso di
acquisire esperienza anche da un punto di vista pratico.
30
6 Riferimenti bibliografici
Riferimenti bibliografici
[1] A Michael Noll. Short-time spectrum and “cepstrum” techniques for
vocal-pitch detection. The Journal of the Acoustical Society of America,
36(2):296–302, 1964.
[2] Fairuz Samiha Saeed, Abdullah Al Bashit, Vishu Viswanathan, and Da-
mian Valles. An initial machine learning-based victim’s scream detection
analysis for burning sites. Applied Sciences, 11(18), 2021.
[3] Yennhi95zz. Why data cleaning is crucial for machine learning models.
[4] Md. Zaigham Zaheer, Jin Young Kim, Hyoung-Gook Kim, and
Seung You Na. A preliminary study on deep-learning based screa-
ming sound detection. In 2015 5th International Conference on IT
Convergence and Security (ICITCS), pages 1–4, 2015.
[5] Md Ashikuzzaman, Awal Ahmed Fime, Abdul Aziz, and Tanvira Ta-
snima. Danger detection for women and child using audio classification
and deep learning. In 2021 5th International Conference on Electrical
Information and Communication Technology (EICT), pages 1–6, 2021.
[6] Weimin Huang, Tuan Kiang Chiew, Haizhou Li, Tian Shiang Kok, and
Jit Biswas. Scream detection for home applications. In 2010 5th IEEE
Conference on Industrial Electronics and Applications, pages 2115–2120,
2010.
[7] MathWorks. https://it.mathworks.com/discovery/support-vector-
machine.html: :text=una
[8] Python. https://www.python.org/.
[9] Microsoft. https://code.visualstudio.com/.
[10] Image-Line. https://www.image-line.com/.
[11] Sonarqube. https://www.sonarsource.com/products/sonarqube/.
[12] freesound.org. https://freesound.org/.
[13] Peter Foster, Siddharth Sigtia, Sacha Krstulovic, Jon Barker, and
Mark D. Plumbley. Chime-home: A dataset for sound source recognition
31
in a domestic environment. In 2015 IEEE Workshop on Applications of
Signal Processing to Audio and Acoustics (WASPAA), pages 1–5, 2015.
[14] soundprivacy.aalto.fi. http://soundprivacy.aalto.fi/.
[15] Fairuz Samiha Saeed. https://github.com/fairuzsamihasaeed/victim-
detection-from-scream-in-burning-sites/blob/main/model/feature
[16] Docker. https://www.docker.com/.
32

More Related Content

Similar to Rilevamento di Anomalie Urbane attraverso il Riconoscimento Audio basato su SVM

Iuavcamp presentazione anna pagliaro
Iuavcamp presentazione anna pagliaroIuavcamp presentazione anna pagliaro
Iuavcamp presentazione anna pagliaroannapagliaro
 
Iuavcamp presentazione anna pagliaro
Iuavcamp presentazione anna pagliaroIuavcamp presentazione anna pagliaro
Iuavcamp presentazione anna pagliaroannapagliaro
 
IUAV camp Anna Pagliaro
IUAV camp Anna PagliaroIUAV camp Anna Pagliaro
IUAV camp Anna Pagliaroguest21a05c
 
Compressione di insiemi di espressioni regolari tramite programmazione geneti...
Compressione di insiemi di espressioni regolari tramite programmazione geneti...Compressione di insiemi di espressioni regolari tramite programmazione geneti...
Compressione di insiemi di espressioni regolari tramite programmazione geneti...Simone Cumar
 
IUAV camp defiitivo
IUAV camp defiitivoIUAV camp defiitivo
IUAV camp defiitivoguest21a05c
 
Uno studio empirico sulla parametrizzazione dell'algoritmo slsq per la compre...
Uno studio empirico sulla parametrizzazione dell'algoritmo slsq per la compre...Uno studio empirico sulla parametrizzazione dell'algoritmo slsq per la compre...
Uno studio empirico sulla parametrizzazione dell'algoritmo slsq per la compre...Vrije Universiteit Brussel
 
Complexity education by Valerio Eletti (3/4)
Complexity education by Valerio Eletti (3/4)Complexity education by Valerio Eletti (3/4)
Complexity education by Valerio Eletti (3/4)Valerio Eletti
 
Caratterizzazione delle Non Linearità di un Altoparlante Elettrodinamico
Caratterizzazione delle Non Linearità di un Altoparlante ElettrodinamicoCaratterizzazione delle Non Linearità di un Altoparlante Elettrodinamico
Caratterizzazione delle Non Linearità di un Altoparlante ElettrodinamicoGiulioZuccon
 
Predizione di malfunzionamenti in reti di telecomunicazioni con tecniche di m...
Predizione di malfunzionamenti in reti di telecomunicazioni con tecniche di m...Predizione di malfunzionamenti in reti di telecomunicazioni con tecniche di m...
Predizione di malfunzionamenti in reti di telecomunicazioni con tecniche di m...Francesco Occhioni
 
Studio e confronto di filtri per il denoising di immagini in relazione all’id...
Studio e confronto di filtri per il denoising di immagini in relazione all’id...Studio e confronto di filtri per il denoising di immagini in relazione all’id...
Studio e confronto di filtri per il denoising di immagini in relazione all’id...ICL - Image Communication Laboratory
 
Marco lembo
Marco lemboMarco lembo
Marco lemboDrMarlem
 
Progetto, realizzazione e caratterizzazione dell'elettronica di acquisizione ...
Progetto, realizzazione e caratterizzazione dell'elettronica di acquisizione ...Progetto, realizzazione e caratterizzazione dell'elettronica di acquisizione ...
Progetto, realizzazione e caratterizzazione dell'elettronica di acquisizione ...MarcoCautero1
 
Progetto e sviluppo di un sistema di rilevamento di anomalie su sistemi infor...
Progetto e sviluppo di un sistema di rilevamento di anomalie su sistemi infor...Progetto e sviluppo di un sistema di rilevamento di anomalie su sistemi infor...
Progetto e sviluppo di un sistema di rilevamento di anomalie su sistemi infor...MichaelFuser
 
Valutazione delle prestazioni di un protocollo di routing (Surge) per reti di...
Valutazione delle prestazioni di un protocollo di routing (Surge) per reti di...Valutazione delle prestazioni di un protocollo di routing (Surge) per reti di...
Valutazione delle prestazioni di un protocollo di routing (Surge) per reti di...Andrea Marchetti
 
2000 fm pb_easyscan_emission_maps_sim_vs_measure (1)
2000 fm pb_easyscan_emission_maps_sim_vs_measure (1)2000 fm pb_easyscan_emission_maps_sim_vs_measure (1)
2000 fm pb_easyscan_emission_maps_sim_vs_measure (1)Piero Belforte
 

Similar to Rilevamento di Anomalie Urbane attraverso il Riconoscimento Audio basato su SVM (20)

Iuavcamp presentazione anna pagliaro
Iuavcamp presentazione anna pagliaroIuavcamp presentazione anna pagliaro
Iuavcamp presentazione anna pagliaro
 
Iuavcamp presentazione anna pagliaro
Iuavcamp presentazione anna pagliaroIuavcamp presentazione anna pagliaro
Iuavcamp presentazione anna pagliaro
 
IUAV camp Anna Pagliaro
IUAV camp Anna PagliaroIUAV camp Anna Pagliaro
IUAV camp Anna Pagliaro
 
Compressione di insiemi di espressioni regolari tramite programmazione geneti...
Compressione di insiemi di espressioni regolari tramite programmazione geneti...Compressione di insiemi di espressioni regolari tramite programmazione geneti...
Compressione di insiemi di espressioni regolari tramite programmazione geneti...
 
Tesi
TesiTesi
Tesi
 
IUAV camp defiitivo
IUAV camp defiitivoIUAV camp defiitivo
IUAV camp defiitivo
 
Anna
AnnaAnna
Anna
 
Progetto Euridice
Progetto EuridiceProgetto Euridice
Progetto Euridice
 
Sensor Node Plugin System
Sensor Node Plugin SystemSensor Node Plugin System
Sensor Node Plugin System
 
Uno studio empirico sulla parametrizzazione dell'algoritmo slsq per la compre...
Uno studio empirico sulla parametrizzazione dell'algoritmo slsq per la compre...Uno studio empirico sulla parametrizzazione dell'algoritmo slsq per la compre...
Uno studio empirico sulla parametrizzazione dell'algoritmo slsq per la compre...
 
Complexity education by Valerio Eletti (3/4)
Complexity education by Valerio Eletti (3/4)Complexity education by Valerio Eletti (3/4)
Complexity education by Valerio Eletti (3/4)
 
Caratterizzazione delle Non Linearità di un Altoparlante Elettrodinamico
Caratterizzazione delle Non Linearità di un Altoparlante ElettrodinamicoCaratterizzazione delle Non Linearità di un Altoparlante Elettrodinamico
Caratterizzazione delle Non Linearità di un Altoparlante Elettrodinamico
 
Andrea_Gangemi_tesi
Andrea_Gangemi_tesiAndrea_Gangemi_tesi
Andrea_Gangemi_tesi
 
Predizione di malfunzionamenti in reti di telecomunicazioni con tecniche di m...
Predizione di malfunzionamenti in reti di telecomunicazioni con tecniche di m...Predizione di malfunzionamenti in reti di telecomunicazioni con tecniche di m...
Predizione di malfunzionamenti in reti di telecomunicazioni con tecniche di m...
 
Studio e confronto di filtri per il denoising di immagini in relazione all’id...
Studio e confronto di filtri per il denoising di immagini in relazione all’id...Studio e confronto di filtri per il denoising di immagini in relazione all’id...
Studio e confronto di filtri per il denoising di immagini in relazione all’id...
 
Marco lembo
Marco lemboMarco lembo
Marco lembo
 
Progetto, realizzazione e caratterizzazione dell'elettronica di acquisizione ...
Progetto, realizzazione e caratterizzazione dell'elettronica di acquisizione ...Progetto, realizzazione e caratterizzazione dell'elettronica di acquisizione ...
Progetto, realizzazione e caratterizzazione dell'elettronica di acquisizione ...
 
Progetto e sviluppo di un sistema di rilevamento di anomalie su sistemi infor...
Progetto e sviluppo di un sistema di rilevamento di anomalie su sistemi infor...Progetto e sviluppo di un sistema di rilevamento di anomalie su sistemi infor...
Progetto e sviluppo di un sistema di rilevamento di anomalie su sistemi infor...
 
Valutazione delle prestazioni di un protocollo di routing (Surge) per reti di...
Valutazione delle prestazioni di un protocollo di routing (Surge) per reti di...Valutazione delle prestazioni di un protocollo di routing (Surge) per reti di...
Valutazione delle prestazioni di un protocollo di routing (Surge) per reti di...
 
2000 fm pb_easyscan_emission_maps_sim_vs_measure (1)
2000 fm pb_easyscan_emission_maps_sim_vs_measure (1)2000 fm pb_easyscan_emission_maps_sim_vs_measure (1)
2000 fm pb_easyscan_emission_maps_sim_vs_measure (1)
 

Recently uploaded

Giornata Tecnica da Piave Servizi, 11 aprile 2024 | CADEI Giovanni
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | CADEI GiovanniGiornata Tecnica da Piave Servizi, 11 aprile 2024 | CADEI Giovanni
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | CADEI GiovanniServizi a rete
 
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | SERRA Giorgio
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | SERRA GiorgioGiornata Tecnica da Piave Servizi, 11 aprile 2024 | SERRA Giorgio
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | SERRA GiorgioServizi a rete
 
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | ALBIERO Andrea
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | ALBIERO AndreaGiornata Tecnica da Piave Servizi, 11 aprile 2024 | ALBIERO Andrea
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | ALBIERO AndreaServizi a rete
 
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | ROMANO' Davide
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | ROMANO' DavideGiornata Tecnica da Piave Servizi, 11 aprile 2024 | ROMANO' Davide
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | ROMANO' DavideServizi a rete
 
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | DISCIPIO Antonio
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | DISCIPIO AntonioGiornata Tecnica da Piave Servizi, 11 aprile 2024 | DISCIPIO Antonio
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | DISCIPIO AntonioServizi a rete
 
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | DI DOMENICO Simone
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | DI DOMENICO SimoneGiornata Tecnica da Piave Servizi, 11 aprile 2024 | DI DOMENICO Simone
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | DI DOMENICO SimoneServizi a rete
 
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | RENZI Daniele
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | RENZI DanieleGiornata Tecnica da Piave Servizi, 11 aprile 2024 | RENZI Daniele
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | RENZI DanieleServizi a rete
 

Recently uploaded (7)

Giornata Tecnica da Piave Servizi, 11 aprile 2024 | CADEI Giovanni
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | CADEI GiovanniGiornata Tecnica da Piave Servizi, 11 aprile 2024 | CADEI Giovanni
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | CADEI Giovanni
 
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | SERRA Giorgio
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | SERRA GiorgioGiornata Tecnica da Piave Servizi, 11 aprile 2024 | SERRA Giorgio
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | SERRA Giorgio
 
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | ALBIERO Andrea
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | ALBIERO AndreaGiornata Tecnica da Piave Servizi, 11 aprile 2024 | ALBIERO Andrea
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | ALBIERO Andrea
 
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | ROMANO' Davide
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | ROMANO' DavideGiornata Tecnica da Piave Servizi, 11 aprile 2024 | ROMANO' Davide
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | ROMANO' Davide
 
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | DISCIPIO Antonio
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | DISCIPIO AntonioGiornata Tecnica da Piave Servizi, 11 aprile 2024 | DISCIPIO Antonio
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | DISCIPIO Antonio
 
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | DI DOMENICO Simone
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | DI DOMENICO SimoneGiornata Tecnica da Piave Servizi, 11 aprile 2024 | DI DOMENICO Simone
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | DI DOMENICO Simone
 
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | RENZI Daniele
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | RENZI DanieleGiornata Tecnica da Piave Servizi, 11 aprile 2024 | RENZI Daniele
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | RENZI Daniele
 

Rilevamento di Anomalie Urbane attraverso il Riconoscimento Audio basato su SVM

  • 1. UNIVERSITÀ DEGLI STUDI DI TRIESTE Dipartimento di Ingegneria e Architettura Tesi di laurea triennale in Ingegneria Elettronica e Informatica Rilevamento di Anomalie Urbane attraverso il Riconoscimento Audio basato su SVM Relatore Prof. Sylvio Barbon Junior Candidato Pradeep Aroulmoji Anno Accademico 2022/2023
  • 2.
  • 3. Indice 1 Introduzione 2 2 Analisi e Ricerca Preliminare 4 2.1 Caratteristiche del suono rilevanti a fini predittivi . . . . . . . 4 2.2 Digitalizzazione del suono . . . . . . . . . . . . . . . . . . . . 6 2.3 Filtraggio del Suono . . . . . . . . . . . . . . . . . . . . . . . 7 2.4 Introduzione al Machine Learning . . . . . . . . . . . . . . . . 9 2.5 Machine Learning nell’analisi audio . . . . . . . . . . . . . . . 12 2.6 Introduzione alle SVM . . . . . . . . . . . . . . . . . . . . . . 13 3 Progettazione 15 3.1 Progettazione dell’Algoritmo SVM . . . . . . . . . . . . . . . 15 3.2 Progettazione della pipeline . . . . . . . . . . . . . . . . . . . 16 3.3 Diagramma UML delle classi e della Pipeline . . . . . . . . . . 17 4 Realizzazione 20 4.1 Installazione e Configurazione . . . . . . . . . . . . . . . . . . 20 4.2 Software e Moduli Utilizzati . . . . . . . . . . . . . . . . . . . 20 4.3 Preparazione al Training del Modello . . . . . . . . . . . . . . 21 4.4 Funzionamento del Sistema . . . . . . . . . . . . . . . . . . . 21 4.5 Analisi del codice . . . . . . . . . . . . . . . . . . . . . . . . . 28 5 Conclusione 30 6 Riferimenti bibliografici 31 1
  • 4.
  • 5. 1 Introduzione Negli ultimi anni la crescente complessità delle sfide legate alla sicurezza ha richiesto l’adozione di sistemi e approcci sempre più innovativi che possano fare uso delle potenzialità legate al settore delle tecnologie dell’informazione. È proprio in questo contesto attuale che il presente lavoro di tesi si propone di affrontare la tematica della sicurezza urbana attraverso la progettazione e la implementazione di un sistema basato su Machine Learning, in grado di rilevare anomalie, come ad esempio urla o richiami di aiuto, in registrazioni audio provenienti da contesti urbani. La videosorveglianza è un sistema di sicurezza che utilizza telecamere e microfoni per controllare e gestire le atti- vità in una determinata area di interesse. In ambiente urbano le informazioni provenienti da tali telecamere e microfoni vengono trasmesse ad un sistema di controllo centralizzato e il salvataggio dell’informazione avviene in remoto su server dedicati. L’utilizzo del Machine Learning in questo tipo di contesto risulta essere di notevole importanza poiché, porterebbe un vantaggio in ter- mini di efficienza e in termini economici, venendo in aiuto a chi ha il compito di effettuare la sorveglianza. La presenza di un algoritmo basato sul Machine Learning permette inoltre di classificare sorgenti audio in modo molto più ac- curato rispetto a una semplice classificazione informatica standard effettuata su variazioni di volume o su variazioni di frequenza, poiché viene allenato apposta per riconoscere specificate caratteristiche del segnale audio stesso. Il presente elaborato è stato svolto in stretta collaborazione con il settore "Innovazione" di INSIEL S.p.A.. Il lavoro è iniziato con una ricerca iniziale atta a studiare cos’è il suono e come esso possa essere manipolato in modo da potere essere reso fruibile ad algoritmi basati su Machine Learning. È stato poi condotto uno studio su come ciascun algoritmo si comporti nei confronti di una sorgente audio e di quali potessero essere gli algoritmi più efficaci sia da un punto di precisione che da un punto di vista di consumo di risorse. È stata successivamente svolta una fase di preparazione e di progettazione di una eventuale soluzione che è stata poi realizzata creando una pipeline in Python per l’edificazione del sistema, il tutto affiancato da un lavoro di allenamento di un modello basato su Support Vector Machine, sempre su Python. L’obbiettivo finale di questo lavoro consiste nel fornire all’ azienda un prototipo di un sistema di rilevazione audio affidabile che possa essere in- tegrato al sistema video, attualmente in fase di costruzione. Il risultato finale con questa integrazione consiste in un sistema completo che può riassumersi con il diagramma inserito nella pagina seguente: 2
  • 6. Figura 1: Schema generale del Sistema Come si può notare dal diagramma, dato un segnale audio e un segnale video catturati simultaneamente, entrambi i segnali vengono rispettivamente trasmessi a due modelli di Machine Learning che hanno come obbiettivo quel- lo di rilevare eventuali anomalie. Qualora ne venisse rilevata una il fine del sistema è quello di segnalarlo il più tempestivamente possibile. Nei capitoli a seguire verranno presentati in ordine i seguenti concetti: nel Capitolo 2, denominato "Analisi e Ricerca Preliminare", verrà fatta una breve introdu- zione su concetti legati al suono, alla sua digitalizzazione e al come esso possa essere manipolato per ricavarne informazioni utili in vista di una possibile ap- plicazione in ambito di Machine Learning. Nel capitolo successivo verranno introdotte la progettazione dell’ algoritmo di Machine Learning e la proget- tazione della pipeline di un prototipo di rilevatore audio che risulterà essere la colonna portante del sistema in questione. Il capitolo 4 consiste in una spiegazione tecnica di come il progetto è stato realizzato e di quali strumenti si è utilizzato per arrivare al prototipo finale. Seguono le conclusioni. 3
  • 7. 2 Analisi e Ricerca Preliminare 2.1 Caratteristiche del suono rilevanti a fini predittivi Dai corsi seguiti durante il percorso di studi è stato reso evidente che il suo- no non è altro che una forma d’onda che si genera a seguito di variazioni di pressione nell’aria circostante alla fonte di emissione. Come qualsiasi forma d’onda il suono è rappresentabile mediante un grafico tempo-ampiezza dal quale ne si può ricavare utili informazioni quali ampiezza, tempo di riprodu- zione e sopratutto forma d’onda. Generalmente un segnale audio è costituito da numerose forme d’onda sinusoidali con frequenze diverse che vengono ri- prodotte contemporaneamente e che vengono sommate tra loro. Solitamente le frequenze udibili da un essere umano appartengono a una banda di frequen- ze che inizia a 20Hz e che termina a 20KHz circa. L’analisi frequenziale dei suoni è molto importante perché è da essa che parte la ricerca per l’analisi predittiva. Infatti dall’analisi frequenziale si arriva, applicando al logarit- mo dello spettro della potenza la trasformata inversa di Fourier, all’analisi cepstrum: X(T) = F−1 [ln (F [x(t)])] A riguardo, secondo un articolo riguardante l’analisi cepstrum scritto da Noll e A Michael[1] è stato reso evidente che data l’ antitrasformata del logaritmo dello spettro di frequenza, è possibile constatare che in questo nuovo spettro generato si possa denotare il fatto che siano presenti dei picchi in corrispondenza di segnali provenienti da voci umane e assenza di picchi in caso di altre fonti sonore. È stato inoltre reso evidente che questi picchi all’interno di questo tipo di spettrogramma sono robusti a distorsioni di fase e ai rumori di sottofondo. Inoltre, in un altro documento[2], è stato reso noto che la frequenza fon- damentale e la distribuzione dell’energia sono due concetti fondamentali nel- l’identificazione di un urlo. Infatti un urlo è caratterizzato da quasi il doppio della frequenza fondamentale allo stesso livello rispetto a una semplice con- versazione. Tuttavia queste caratteristiche sono molto influenzate da even- tuali rumori esterni e per tale motivo si fa uso dei Coefficienti spettrali mel, derivanti dal cepstrum, per distinguere tra un urlo e un qualsiasi altro rumo- re di sottofondo. Tra tutti i coefficienti mel estraibili da un cepstrum i più rilevanti ai fini di questo progetto risultano essere i primi 13. Questi infatti sono i coefficienti caratterizzanti le frequenze basse del cepstrum e svolgono un lavoro cruciale nell’ identificazione di una voce umana. Di conseguenza, in virtù di tali riflessioni, si è determinato che la maggior parte dei parametri coinvolti nell’identificazione di un suono generato da 4
  • 8. un essere umano sarà concentrata nel processo di estrazione dei coefficienti Mel. I coefficienti Mel sono quindi un insieme di coefficienti numerici che rappresentano le caratteristiche dello spettro di potenza di un segnale sonoro risultando essere di notevole interesse nell’ elaborazione di segnali audio e analisi del parlato. Ad appoggiare questi parametri spettrali del suono si ritiene importante inoltre includere due parametri temporali: il Zero Crossing Rate che indica il numero di volte che un segnale attraversa l’asse delle ascisse in un grafico tempo-ampiezza e il RMS, o valore efficace che indica il valore che avrebbe un segnale costante di pari potenza media quello del segnale di partenza. Di seguito si include un immagine raffigurante i passaggi in ogni dominio appena descritti. Prendendo come esempio tre diversi tipi di segnali si possono visualizzare gli andamenti dei grafici rispettivamente nel dominio del tempo, della frequenza e della Quefrency. Figura 2: Domini, https://www.frontiersin.org/ 5
  • 9. 2.2 Digitalizzazione del suono Affinché si possa lavorare con una sorgente audio è necessario che essa venga catturata mediante un apposito microfono e che il segnale venga opportuna- mente digitalizzato in modo da essere utilizzabile. Dato quindi un segnale, esso viene campionato attraverso un convertitore analogico-digitale, il cui ruolo primario principale risulta nel riprodurre la forma d’onda in ingresso nel modo più fedele possibile. La precisione di questa operazione dipende generalmente dalla qualità del campionatore, dal sample rate e dall’interval- lo di quantizzazione. La quantizzazione implica l’attribuzione di un valore a ciascun campione, e in questo contesto, maggiore è l’ampiezza di tale inter- vallo, maggiore sarà la precisione del processo. Successivamente, si procede con la fase di codifica digitale del segnale precedentemente campionato e quantizzato. Il metodo più utilizzato è il PCM o Pulse Code Modulation, che consente di associare un valore binario a ciascun campione audio. Una rappresentazione visiva di questo procedimento può essere riassunta nella se- guente immagine, nella quale si può ben vedere che sull’asse delle ascisse, il tempo viene opportunamente frazionato e sull’asse delle ordinate si trovano i valori attribuiti ad ognuna di queste frazioni temporali. Figura 3: PCM, https://www.researchgate.net/ 6
  • 10. Il passo successivo riguarda il salvataggio, che può avvenire secondo due metodologie: il salvataggio in formato lossy, comune nei file MP3 e il sal- vataggio in formato lossless, tipico per esempio dei file Wav. La distinzione principale tra questi due formati risiede nel fatto che nel primo caso, il segna- le viene, mediante alcune tecniche avanzate, compresso portando con ciò una perdita di informazione, mentre nel secondo formato nessuna informazione viene persa, a discapito però di un file che occupa più spazio. 2.3 Filtraggio del Suono "Data cleaning is a critical step in machine learning (ML) that involves iden- tifying and correcting errors, inconsistencies, and inaccuracies in data. By cleaning data, we can improve its quality, enhance model performance, reduce bias, save time and resources, and increase user confidence." [3] Affinché un segnale audio sia pronto per l’estrazione dei parametri neces- sari alla sua identificazione, è opportuno sottoporlo ad una manipolazione preliminare. Questa procedura assicura una maggiore uniformità delle fonti e rimuove eventuali disturbi o distorsioni armoniche che potrebbero compro- mettere l’efficacia dell’analisi predittiva. In questo contesto, le operazioni di manipolazione comprenderanno l’applicazione di filtri passa-alto e passa- basso, associate all’utilizzo di noise gate. Il filtro passa basso è un circuito elettronico che permette, data una sorgente audio, di far passare unicamente le frequenze minori di una frequenza di riferimento, oltre la quale alla quale il segnale inizia progressivamente a essere tagliato seguendo una curva det- ta knee. Il filtro passa alto invece esegue l’operazione opposta, ovvero dato un segnale audio, la sua funzione principale consiste nel tagliare le frequen- ze basse. Di seguito sono incluse delle rappresentazioni grafiche di un filtro passa basso e passa alto. Figura 4: Filtro Passa Basso e Passa Alto, https://content.cdntwrk.com/ 7
  • 11. Il noise gate è un dispositivo utilizzato per controllare il livello del rumore di fondo in un segnale audio. La sua funzione principale è quella di eliminare o ridurre i suoni indesiderati, come il rumore di fondo o il ronzio, in momenti in cui il segnale principale è più debole. Impostando quindi una Threshold, ogni qualvolta che il segnale è inferiore al valore in decibel di tale threshold allora nessun tipo di informazione passa, risultando in porzioni di silenzio.Un noise gate può inoltre essere caratterizzato da due parametri, l’attacco e il release. Il ritardo di attacco controlla il tempo che il noise gate impiega per aprirsi completamente dopo che il segnale supera la soglia mentre il release controlla il livello a cui il noise gate si chiude dopo che il segnale è sceso al di sotto della soglia di apertura. Una rappresentazione grafica di un noise gate è la seguente: Figura 5: Noise Gate, https://manual.audacityteam.org/ 8
  • 12. 2.4 Introduzione al Machine Learning Per Machine Learning si intende il ramo dell’intelligenza artificiale che ha come obbiettivo quello di sviluppare algoritmi e modelli statistici per sistemi informatici atti allo svolgimento di compiti senza istruzioni esplicite. Lo svol- gimento di tali compiti è possibile unicamente mediante l’addestramento di un determinato modello a eseguire una specifica operazione. Naturalmente un modello affinché possa eseguire tali compiti deve essere opportunamente allenato mediante degli appositi dataset che gli vengono trasmessi in input. Un dataset è un insieme strutturato di dati che può essere composto da una vasta gamma di tipi di dati, come numeri, testo, immagini, suoni. Questi dati affinché possano essere resi disponibili all’allenamento, devono essere opportunamente codificati. Esistono numerosi tipi di addestramento tra i quali l’addestramento supervisionato, utilizzato in questo lavoro. Durante l’addestramento supervisionato il modello viene addestrato utilizzando un dataset nel quale sono presenti sia gli input (Features) che gli Output deside- rati (Labels). In questa fase il modello impara ad associare le varie features alle labels corrispondenti attraverso l’osservazione dei dati e l’applicazione di complessi metodi matematici. L’obiettivo è che il modello impari a produrre output accurati su nuovi dati simili a quelli di addestramento. Il tipo di classificazione che verrà in seguito presentato in questo progetto è una classi- ficazione binaria ovvero una distinzione fra due label. Dato un dataset , per effettuare un addestramento è pratica usuale suddividere tale dataset in due porzioni: un training dataset e un testing dataset. La funzione principale di un training dataset risulta essere quello di avere dati disponibili per l’alle- namento, mentre per quanto riguarda il testing dataset, esso viene utilizzato per testare il modello, ovvero di effettuare predizioni su dati mai visti prima e di capirne cosi l’efficienza. Solitamente il training dataset risulta essere più corposo di un test datatset. Per misurare l’efficienza di un modello si fanno uso di metriche quali l’accuratezza, matrici di confusione e curve ROC. Le matrici di confusione sono delle tabelle che permettono di valutare le presta- zioni di algoritmi di Machine Learning, mostrando il numero di predizioni giuste e sbagliate effettuate sui dati di test e mettendole a confronto con i valori corrispettivi valori reali. Tali matrici contengono fondamentalmente 4 sottogruppi: i valori True Positive che indicano il numero di casi in cui il modello ha predetto correttamente che l’istanza appartenesse alla classe po- sitiva, i True Negative indicanti il numero di casi in cui il modello ha predetto correttamente che l’istanza appartiene alla classe negativa. Sono poi presen- ti i False Positive indicanti il numero di casi in cui il modello ha predetto erroneamente che l’istanza appartenesse alla classe positiva quando in realtà appartiene alla classe negativa e i False Negative che indicano il numero di 9
  • 13. casi in cui il modello ha predetto erroneamente che l’istanza appartiene alla classe negativa quando in realtà appartiene alla classe positiva. Figura 6: Matrice di confusione, https://towardsdatascience.com/ Similmente i grafici ROC sono capaci di far visualizzare la capacità di un modello nella predizione. I grafici ROC hanno sull’asse delle ascisse la "False Positive Rate" (FPR), che rappresentano la proporzione di istanze negative erroneamente classificate come positive mentre sull’asse delle ordinate si trova la "True Positive Rate" (TPR), che rappresenta la proporzione di istanze positive correttamente classificate come positive. Definendo come AUC l’area della curva sottostante alla curva stessa, se tale area risulta essere 0.5 allora ci si trova in una situazione di modello casuale, se invece l’area cresce fino a tendere a 1 allora ci troviamo in una situazione nella quale il modello funziona correttamente riuscendo a proporre predizioni accurate. Figura 7: Curva ROC, https://medium.com/ 10
  • 14. Si definisce poi l’accuratezza che indica quanto spesso il modello effet- tua predizioni giuste, ovvero predizioni che coincidono al valore effettivo dell’occorrenza del dataset. Figura 8: Definizione accuratezza 11
  • 15. 2.5 Machine Learning nell’analisi audio Le premesse precedenti portano alla questione riguardante la selezione di un modello adeguato per classificare e differenziare tra suoni utili in ambito in- vestigativo e suoni che possono essere considerati comuni o di sottofondo. A tal proposito numerose sono le ricerche in questo campo. L’ipotesi principale è quella di essere in grado di discriminare tra due categorie, il che si traduce in una classificazione binaria. La ricerca effettuata nel paper [4] si propone di effettuare di analisi basata su Reti Neaurali e facendo utilizzo dei coefficienti Mel introdotti precedentemente. Questa soluzione, basata più in dettaglio, sull’utilizzo delle Deep Boltzmann Machines risulta essere estremamente pre- cisa, con un livello di accuratezza che si avvicina all’unità. Tuttavia, richiede un notevole dispendio di risorse, tra cui l’utilizzo di una GPU di fascia al- meno media-alta. Questo è necessario per eseguire l’addestramento in un tempo accettabile, evitando prolungati intervalli di attesa. Un’altra ricerca molto simile al contesto è stata effettuata nel paper [5] nel quale i ricercatori si sono proposti di utilizzare vari modelli già esistenti e di capire quali tra essi fosse il migliore. Tra i vari modelli testati quello che ha riscosso maggior successo e precisione nel training è stato ResNet50, basato sulle Convolutio- nal Neural Network, applicato ai spettrogrammi generati a partire da fonti audio contenenti urla di donne e bambini con relativi rumori di sottofondo. Anche in questo caso l’uso di una GPU è consigliato per un notevole guada- gno di tempo. Un’ulteriore ricerca in materia condotta nel paper [6] e che potrebbe essere semplicemente implementata su CPU riguarda l’applicazione delle Support Vector Machine (SVM). Si riporta di seguito l’ idea principale dello studio: "Based on the perceptual features, a new approach to scream detection is designed in this paper. It is based on the energy envelop proposed to locate the continuous sound, the ration of highest pitch of consecutive fra- mes extracted using the autocorrelation measure the ‘high’ pitch of screaming sound and the compact representation of MFCC in a sliding window for SVM learning". Date le informazioni presenti nei paper e le risorse disponibili, si è deciso di combinare in modo accurato i risultati emersi da essi, sviluppando un algoritmo basato su Support Vector Machine (SVM) in grado di operare su coefficienti Mel e su coefficienti temporali di sorgenti audio. 12
  • 16. 2.6 Introduzione alle SVM La Support Vector Machine (SVM) è un algoritmo di Machine Learning con supervisione che viene utilizzato molto spesso in contesti riguardanti classifi- cazione e regressione. Una breve ma chiara descrizione riguardo l’algoritmo: "L’obiettivo di un algoritmo SVM è quello di trovare un iperpiano che separi, al miglior grado possibile, i punti di dati di una classe da quelli di un’altra classe. Per “migliore” si intende l’iperpiano che ha il margine maggiore tra le due classi, rappresentate dal più e dal meno nella figura qui sotto. Per margine si intende la larghezza massima della linea parallela all’iperpiano che non ha punti di dati interni." [7] Figura 9: Funzionamento SVM, https://it.mathworks.com/ Siccome il dataset che si intenderà utilizzare è composto da features mul- tidimensionali ed essendo il SVM un algoritmo rientrante nella categoria degli algoritmi dotati di funzioni di kernel, per riuscire a classificare correttamente e più efficientemente le Label è opportuno applicare una trasformazione alle features mediante l’ausilio di queste funzioni appena citate. Tali funzioni hanno la capacità di mappare determinate features in spazi di dimensione superiore con il risultato finale di riuscire a discriminare correttamente le va- rie Label. Aumentando le dimensioni, ciò che prima poteva essere separato solo in modo non lineare in una singola dimensione, diventa molto più facil- mente separabile in modo lineare. Tra le funzioni kernel più interessanti si possono trovare il kernel Lineare, ovvero kernel che permette la separazione 13
  • 17. tra le classi mediante l’ utilizzo di una funzione lineare, il kernel Polinomiale, che permette la separazione tra le classi mediante l’ utilizzo di una funzione non lineare,il kernel RBF che si basa sulla funzione gaussiana e che effet- tua un calcolo basato sul grado di somiglianza tra due punti determinando l’esponenziale della distanza tra questi due punti elevata alla seconda e mol- tiplicata per un fattore gamma negativo, che determina quanto la funzione di separazione debba essere più o meno spigolosa. I vantaggi legati all’uti- lizzo di questo algoritmo risultano essere molteplici: è un algoritmo molto efficace nella classificazione grazie soprattutto all’uso delle funzioni kernel, poiché ciò permette di prendere decisioni non lineari più agilmente, risulta poi essere molto efficiente in termini di memoria poiché si affida unicamen- te a un sottoinsieme delle features durante la costruzione della funzione di decisione, anche in presenza di dataset molto grandi. L’algoritmo funziona anche notevolmente bene in presenza di dataset di dimensione relativamente contenute. Un ultimo ma non meno importante vantaggio risiede nella resi- stenza all’overfitting, questo fatto è dovuto al fatto che l’algoritmo riesce a massimizzare correttamente il margine tra le label. 14
  • 18. 3 Progettazione 3.1 Progettazione dell’Algoritmo SVM Il modello di Machine Learning basato su Support Vector Machine è stato progettato per ricevere in input i dati estratti da un file CSV contenente le features discusse in precedenza. L’estrazione dei coefficienti verrà spiegata in dettaglio in seguito. Per ogni file audio utilizzato nel processo di allena- mento, vengono scritti in ordine e per ogni riga di un apposito file CSV, 13 coefficienti Mel, il coefficiente riguardante il Zero-Crossing-rate, il coefficien- te riguardante il centroide, il parametro RMSE e la categoria alla quale tale file audio appartiene (le cosiddette label). Una volta terminata la fase di acquisizione delle features, il file CSV viene trasmesso a uno script in Python capace di estrarne il contenuto. I dati estratti vengono trasmessi in input al modello SVM istanziato. Vengono estratti i coefficienti e si effettua una suddivisione in training dataset e test dataset. Segue la standardizzazione del training set e del test set in modo che entrambi abbiano media 0 e de- viazione standard 1, permettendo così una migliore distribuzione della scala tra le features. Questa operazione porta a risultati più accurati impedendo errori dovuti alla sensibilità degli algoritmi di Machine Learning. xstand = x − µ σ dove x rappresenta il valore originale della feature, µ rappresenta la media della feature e σ rappresenta la deviazione standard della feature. Successivamente si effettua il training, operazione atta a insegnare al mo- dello come distinguere tra le due categorie di label. La verifica dell’esito del training viene svolta trasmettendo in input al modello già allenato il test set. Se, in base alle metriche discusse precedentemente, i risultati della predizione su questo set risultano essere corretti allora vuol dire che la fase di training è andata presumibilmente a buon fine. 15
  • 19. 3.2 Progettazione della pipeline Nell’elaborazione dell’architettura, la decisione chiave è stata quella di svi- luppare un prodotto che fosse non solo efficace, ma anche veloce, garantendo che i ritardi tra l’ingresso di un segnale attraverso un microfono e l’output dell’analisi predittiva fossero mantenuti a un livello accettabile. Per ovviare a questi requisiti si è quindi deciso di suddividere il runtime in due thread, creando così un’architettura basata sul multithreading. Così facendo è sta- to possibile parallelizzare il sistema rendendo la soluzione ottenuta di gran lunga superiore a una implementazione di tipo sequenziale. L’architettura si suddivide pertanto in due parti: una parte destinata all’ acquisizione dell’ input audio e una seconda parte destinata alla porzione di progetto riguar- dante l’analisi e la trasmissione dei risultati. Il procedimento è il seguente: viene inizializzato il primo thread e poi, data una fonte audio, che si suppone provenire da un microfono di una eventuale telecamera di videosorveglianza, il processo inizia con una registrazione di durata arbitraria che può eventual- mente anche essere di durata estremamente lunga, dato che ci si sta riferendo a un sistema di videosorveglianza in tempo reale. Successivamente, ogni 2 secondi viene registrata e salvata su disco una copia dell’informazione presen- te in tale intervallo. Questo procedimento si ripete iterativamente, pertanto ogni 2 secondi si avranno delle registrazioni nuove riguardanti le informazioni connesse ai rispettivi intervalli di tempo. Tutte queste operazioni appena ci- tate vengono eseguite esclusivamente dal primo dei due thread in questione. Il secondo Thread viene inizializzato appena viene salvato su disco il primo file audio, da quel momento i due thread lavorano in parallelo. Appena un file audio viene registrato dal primo Thread, esso viene, dopo il salvataggio, immediatamente reso disponibile per l’esecuzione del secondo Thread e vie- ne impostato quindi come input per la prima operazione che concerne quest ultimo. Questa prima manipolazione consiste nell’applicazione di un filtro passa basso con una frequenza di cutoff impostata a 40 Hz e un filtro passa alto con una frequenza di taglio impostata a 3500hz. Si sono scelti questi valori perché ritenuti i limiti per i quali l’informazione derivante da un even- tuale segnale emesso da un essere umano potessero risultare sufficienti. Tutta l’informazione che risulta essere presente prima della frequenza di cutoff del filtro passa basso e dopo la frequenza di cutoff del filtro passa alto, risultano superflue ai nostri fini e, in alcuni casi danneggianti, poiché potrebbero por- tare a predizioni sbagliate. Viene poi applicato un noisegate dotato di una tensione di soglia che viene calibrata automaticamente in base al file audio in input. Il passo successivo consiste in una riduzione del rumore che si basa su un’analisi della trasformata di Fourier dello spettro. Da notare che que- ste operazioni di filtraggio sono le stesse che vengono effettuate nella fase di 16
  • 20. training del modello per ogni file audio. Eseguito questo passo, il file audio manipolato viene salvato e risulta operativo per l’estrazione delle features da trasmettere in input all’algoritmo di Machine Learning. Le features vengono estratte e scritte in un file CSV che servirà da input allo script contenente il modello SVM per effettuare una predizione. Qualora l’algoritmo doves- se rilevare un’anomalia, verrà stampato in output un messaggio di allerta con il relativo timestamp. Inoltre i file audio corrispondenti alle rilevazioni verranno spostati in un’apposita cartella. 3.3 Diagramma UML delle classi e della Pipeline Si includono di seguito le classi utilizzate nel progetto. Il progetto compren- de inoltre uno script che riguarda l’allenamento del modello che non viene incluso poiché non progettato come classe con oggetti. La classe centrale del progetto è il Main che è direttamente collegata a 4 classi: La classe Recor- ding, avente la funzione di registrazione, la classe Extract, con la funzione di estrarre i coefficienti temporali e spettrali, la classe Preprocessing con la funzione di manipolare un file audio prima di essere analizzato dal modello di Machine Learning e infine la classe ModelPredictor che ha la funzione di effettuare la predizione per la quale l’algoritmo è stato allenato. Seguono poi due classi, separate dal Main, Delete e Training_extraction, aventi rispetti- vamente le funzioni di eliminazione dei file residui prima di inizializzare un nuovo runtime ed estrarre i coefficienti durante la fase di training. Ognuna di queste classi verrà spiegata più in dettaglio nel prossimo capitolo. 17
  • 21. Figura 10: Diagramma UML delle classi 18
  • 22. Si include inoltre il diagramma della pipeline del progetto anticipando che il progetto è stato suddiviso in due thread. Come si può notare, il thread 1 ha la funzione di registrazione e di salvataggio della registrazione in frammenti audio. Il Thread 2 invece, costituente gran parte del runtime, permette di prelevare uno dei file audio precedentemente registrati, di manipolarlo e di estrarne i coefficienti. Tali coefficienti vengono poi scritti su un file CSV per poi essere estratti e utilizzati dal modello SVM per la fase di predizione. Una volta terminata la fase di predizione segue, in caso di risultato positivo, una segnalazione in output. Il processo continua iterativamente con il file seguente fino all’esaurirsi dei file audio provenienti dal primo thread. Figura 11: Pipeline del Progetto 19
  • 23. 4 Realizzazione 4.1 Installazione e Configurazione La realizzazione del sistema in questione è stata effettuata utilizzando il linguaggio di programmazione Python.[8] Più in dettaglio il progetto è sta- to sviluppato utilizzando la versione 3.11 di Python. Ogni pacchetto pre- sente in questo progetto è installabile mediante pip, il package manager di Python. Di seguito vengono elencate tutte le risorse necessarie. La repository Github alla quale è stato caricato il progetto si trova all’URL: https://github.com/pradeeparoulmoji/audio-security 4.2 Software e Moduli Utilizzati Tra i software utilizzati per la realizzazione del progetto figurano l’editor di codice sorgente Visual Studio Code [9], il software di editing audio Fl Studio 21 in versione demo [10] e il software per l’analisi statica del codice Sonar- qube [11]. Tra i moduli e le librerie Python invece, che verranno spiegati adeguatamente in seguito, figurano librosa, scikit-learn, noisereduce, threa- ding, Pedalboard, sounddevice e matplotlib. Si include di seguito l’elenco dei moduli più importanti utilizzati con le corrispettive versioni. Per i dettagli riguardanti questi moduli si faccia riferimento ai prossimi paragrafi. Figura 12: Moduli principali 20
  • 24. 4.3 Preparazione al Training del Modello Per effettuare il training del modello si è deciso di raccogliere e scaricare da fonti situate nel web campioni audio riguardanti sorgenti provenienti da contesti urbani e sorgenti provenienti da urla di voci umane. Per raccogliere tali dati si è fatto affidamento ai seguenti dataset: freesound.org [12], ChiMe [13] e SoundPrivacy [14]. Raccolte queste sorgenti audio si è deciso, con- ducendo alcuni test su Fl studio, di analizzarli applicando su di essi alcuni effetti e applicando il denoiser del modulo noisereduce su un apposito script scritto in Python. Il fine di questa operazione è stato quello di capire come potrebbe essere un eventuale output da trasmettere in input al modello e di come allenarlo. Dopo alcuni test si è quindi stabilito quali valori di ogni catena, includenti filtri passa alto, filtri passa basso e noise gate, fossero i più opportuni e si è quindi deciso di traferire questi parametri in Python e applicarli come parametri mediante alcune librerie come verrà esplicitato in seguito. I valori del passa alto e del passa basso sono stati scelti in modo da trascurare le informazioni non necessarie all”identificazione di voci umane, come le frequenze sotto i 400Hz e le frequenze sopra i 3500Hz. Il numero totale di campioni raccolti è ammontato a 1200, 600 campioni per i suoni di sottofondo e 600 campioni riguardanti suoni di urla. I dettagli riguardan- ti l’implementazione del training vengono descritti in dettaglio nel prossimo paragrafo. 4.4 Funzionamento del Sistema Partendo dallo script denominato noise_reduction_clean.py, questo si pro- pone di ricevere in input un file audio e di manipolarlo in maniera opportuna affinché da questo file si possano estrarre i coefficienti essenziali legati all’a- nalisi dell’algoritmo SVM. Le librerie importate in questo script sono noise- reduce, un modulo che permette dato un segnale audio in input, di ridurre i rumori di sottofondo utilizzando la tecnica dello spectral gating, dalla li- breria scipy si è importato il modulo wavfile che consente la manipolazione di sorgenti audio in formato .wav. Tra le librerie rilevanti si è poi impor- tato Pedalboard, libreria che è stata utilizzata per l’applicazione di catene di effetti alle sorgenti audio. Viene inoltre fatto uso di Pydub, anch’esso con la funzione di applicare effetti alla sorgente audio. La seconda porzione dello script si riassume nella inizializzazione e nell’ attribuzione di valori di default di un eventuale file audio che verrà utilizzato all’interno dello script, comprendendo inoltre valori di inizializzazione per quanto riguarda la scelta dei valori legati ai parametri dei filtri che verranno applicati alla sorgente audio. La prima definizione di funzione permette, passando per argomen- 21
  • 25. to il percorso del file di una sorgente audio in formato .wav, di attenuare il valore medio del volume generale della sorgente, facendo in modo che la media risulti essere di -40dB. Dopo l’applicazione della riduzione di volume il file originale viene sovrascritto con il file attenuato. Il secondo metodo ha il compito di leggere il file audio utilizzando il modulo AudioFile di Pedal- board. Il file audio viene ricampionato e da esso se ne estraggono importanti dati come la durata, il samplerate. La sua importanza fondamentale risie- de nel fatto che il file audio viene frammentato in segmenti estremamente brevi, determinati dal campionamento, generando così una sequenza estesa di frammenti dell’audio sorgente originale. La stessa operazione può essere applicata a un apposito file di rumore. Tuttavia quest ultima procedura è del tutto opzionale e serve solamente nel caso si abbia un file audio contenente una sorgente di rumore specifica e che si protrae nel tempo. Successivamente viene definita una funzione denominata plot_audio_channels() che non vie- ne utilizzata nello script main, a cui si farà successivamente riferimento, ma che può essere utile qualora si volessero vedere graficamente le forme d’on- da dei file audio in ingresso e in uscita. La libreria utilizzata per attingere a ciò è matplotlib. La definizione di funzione che segue, denominata noi- se_gate_setup, imposta una soglia audio al di sotto della quale il segnale audio non deve passare. La soglia dipende strettamente dal gain medio del file audio dopo esser stato manipolato dai metodi precedenti. Pertanto tutte le porzioni di segnale che non raggiungono il livello di tale soglia verranno considerati come delle porzioni di silenzio. L’ultima definizione di funzione si propone di effettuare la vera e propria manipolazione audio utilizzando parte delle definizioni appena descritte. In argomento si passa la cartella di destinazione del file che si intende manipolare. All’ interno della definizione della funzione si istanzia un oggetto della classe Pedalboard che permetterà alla manipolazione del segnale. La prima manipolazione in coda consiste in un incremento generale del guadagno impostato a +20dB, successivamente viene utilizzata un’istanza della classe noisereduce che viene applicata due volte, una per la versione stazionaria e l’altra per la versione non stazionaria. Vengono in seguito applicati un filtro bassa e un filtro passa alta coi valori di default che si erano precedentemente istanziati nella definizione della classe, ognuno di questi con una pendenza tale che in procinto della frequenza di cu- toff, il segnale venga abbassato di 30dB. L’ultima fase del processo comporta l’applicazione del noise gate, il quale richiede un adeguato valore di release al fine di garantire una precisione ottimale senza compromettere informazioni rilevanti. Infine, il file audio viene esportato nella destinazione specificata come argomento. Si descrive ora lo script che si propone di estrarre le features di ogni file audio, training_features_extrction.py. Le librerie rilevanti utilizzate risul- 22
  • 26. tano essere librosa, libreria utilizzata per la manipolazione audio e Pandas, libreria atta alla manipolazione e all’analisi di dati. Per la compilazione di questo script si è preso spunto del codice precedentemente scritto nel proget- to scritto da Fairuz Samiha Saeed[15]. Lo script è suddiviso in due parti: una parte che concerne i file della categoria "Scream" e l’altra che concerne la categoria "Background". Il codice per ognuna di queste due parti è identico eccetto che per i percorsi delle cartelle contenenti i file audio, suddivise nelle due categorie appena descritte, e per l’output delle label: 0 per la categoria "scream" e 1 per la categoria "background". Si inizializza lo script istan- ziando un numero di liste pari al numero di features necessarie all’algoritmo SVM e vengono inizializzati percorsi per ognuna delle categorie di file audio. È pertanto opportuno preparare i file audio per il training in cartelle diverse, ognuna per ogni categoria. Vengono quindi estratti per ognuna di queste due cartelle le features per ogni file audio e ognuna di queste features viene aggiunta alla corrispettiva lista inizializzata precedentemente. Notare che l’estrazione viene eseguita automaticamente per ogni coefficiente grazie alla libreria librosa. Notare inoltre che ogni file viene ricampionato a 16000 Hz. Dopo aver completato entrambe le operazioni, saranno generati due file CSV distinti come risultato finale, ognuno formato da colonne (features) e una label che varia da 0 a 1 in base al file CSV. Le righe comprendono i records di features per ogni file audio. Il passo finale consiste nell’ unire i due file CSV in un unico file che verrà successivamente, in un altro script, utilizzato per riestrarre i coefficienti e trasmetterli come input al modello di Machine Learning. Per unire i due file si fa uso del modulo concat di Pandas. Lo script che si collega direttamente a quest ultimo citato è model_svm.py che ha la funzione di prendere in input i coefficienti estratti dal file CSV pre- cedentemente generato, denominato "training_dataset.csv" e di applicare il modello basato su SVM su tali dati. Le librerie rilevanti importate sono sklearn, una libreria open source che fornisce una vasta gamma di soluzioni per la costruzione e l’implementazione di vari algoritmi di Machine Learning, Pickle e Joblib che sono delle librerie che permettono di salvare strutture dati su disco in formato binario. Il procedimento è il seguente: mediante Pandas si carica il dataset in questione, si suddivide poi tra Features e Labels creando quindi due liste. La lista contenente le Features risulterà essere una matrice Nx16 dove N indica il numero di righe presenti nel dataset. La lista conte- nente le Labels invece presenta una dimensionalità del tipo Nx1. Su queste due liste si effettuano poi ulteriori suddivisioni, discriminando tra dati di training e di test. Verranno pertanto create quattro liste: X_train, X_test, alle quali verranno associate 80% dei dati presenti nella lista delle Features e y_train e y_test alle quali verranno associate 20% dei dati presenti nella lista delle Labels. Così facendo si ottiene una suddivisione ragionevole sia a 23
  • 27. fine di training che a fine di testing. Viene successivamente inizializzato uno standardizzatore in modo da trasformare i dati delle features in modo che essi siano il più omogenei possibili. In seguito viene creata un’istanza del modello. Mediante questa istanza si esegue quindi l’allenamento atto alla predizione discriminativa utilizzando come parametri le liste X_train e y_train. Viene poi svolta la predizione sulla lista X_test per verificare che l’algoritmo funzioni in modo corretto. Si riportano di seguito i risultati espressi mediante la matrice di confusione e il grafico ROC. Figura 13: Matrice di confusione 24
  • 28. Figura 14: Grafico ROC Come si può intuire, i risultati sono molto promettenti con un’ accuratezza calcolata del 99%. Successivamente, è stata presa la decisione di valutare il modello su ul- teriori dati nuovi, appena esportati, al fine di determinare se il sistema si comporta in modo adeguato su un insieme di dati precedentemente non esa- minato. Essendo stati i risultati in linea con i valori veritieri si è proceduto al salvataggio del modello in tutta la sua interezza, contenente sia i contenuti riguardanti il training che i dati contenenti le informazioni sulla standardiz- zazione. Per giungere a tali conclusioni si è fatto uso di pickle.dump per salvare il modello e di joblip.dump per salvare la standardizzazione. Lo script successivo, denominato model_import.py, si propone come una libreria di supporto per il file che prende il nome di main.py. La funzione principale consiste nell’eseguire l’algoritmo di SVM durante l’esecuzione della funzione main. Le librerie utilizzate sono analoghe a quelle precedentemente incontrate. Nell’inizializzazione vengono importati il modello, la standardiz- zazione e il percorso al file CSV che viene scritto durante il runtime man mano che le operazioni si susseguono. Si caricano pertanto il modello e la standardizzazione e, dati i dati riguardanti il file audio che viene analizza- to in un certo istante, essi vengono estratti e passati al modello che fornirà come output il risultato dell’analisi. Si introduce poi lo script recording.py che permette di registrare. La classe Recording viene inizializzata definendo parametri importanti come la durata totale della registrazione e la durata per 25
  • 29. la quale ogni file audio derivante dalla registrazione viene segmentata. La funzione record permette quindi di inizializzare una registrazione dipendente dalla durata di split specificata in precedenza e di registrare in 2 canali audio. Successivamente è presente una istruzione wait che specifica di aspettare fin- ché la registrazione non termini. Il contenuto risultante viene poi codificato in maniera opportuna (16 bit PCM) ed esportato come file .wav. Il processo si ripete iterativamente grazie al loop for fino alla durata totale di registra- zione inserita precedentemente. Lo script features_extraction.py è un file del tutto analogo al file training_features_extraction e permette, durante la registrazione in live, e dato un file audio in ingresso, di estrarne i coefficienti, che non sono altro che le features per il modello SVM, e di scriverle su un file CSV che risulterà essere l’uscita di questa funzione. Tale file CSV verrà poi utilizzato nel main, durante il runtime e verrà rigenerato ogni volta, per ogni nuovo file audio che questa funzione riceverà in ingresso. Per la pulizia dei file nelle cartelle "effected" e "source" è inoltre presente uno script, denominato clear_files.py, che permette di eliminare i file residui di un runtime precedente qualora se ne volesse inizializzare uno nuovo. La colonna portante di tutto il sistema è contenuta in un file denominato main.py che è costituito da molte delle classi descritte precedentemente e le unisce per giungere all’ obbiettivo. Oltre alle classi già precedentemente discusse, viene importato il modulo threading che permette l’esecuzione di più thread all’interno del processo. Vengono inizializzati alcuni valori come la durata di intervallo per la quale vengono salvati iterativamente i file audio. Dopo numerosi test Il valore scelto è stato di 2 secondi, valore che è stato ritenuto come il più efficiente. La durata totale della registrazione viene im- messa in secondi dall’utente in input. Seguono alcune definizioni di funzioni: La funzione record_audio si basa sulla classe Recording e ha la funzione di registrazione, la funzione move_audio è la funzione che permette, data una rilevazione positiva, di spostare il file in questione in una cartella dedicata alle segnalazioni e di includerne in aggiunta, nel nome del file, un timestamp. Si giunge infine alla definizione di process_audio che istanzia oggetti del- le classi noise_reduction_clean, features_extraction e model_import e che permette il funzionamento di tutta l’infrastruttura. Viene inoltre istanziata una lista denominata timestamps che ha la funzione di tenere conto di ogni timestamp relativo ai file audio di sorgente. Segue un ciclo While nel quale vengono unite ed eseguite tutte le operazioni. Tale ciclo viene separato in due parti: una per la prima iterazione e l’altra per tutte le iterazioni restan- ti. Questo non è altro che una risoluzione di ottimizzazione. Prendendo in considerazione la seconda porzione del ciclo while che inizia con lo statement else, è presente una funzione time.sleep che ha la funzione di aspettare che l’occorrenza del loop precedente finisca, prima di iniziarne una nuova. Dopo 26
  • 30. ciò, se l’ i-esimo file che deve essere manipolato esiste allora le operazioni che si susseguono sono le seguenti: aggiunta di un timestamp del momen- to corrente, esecuzione di processor_adjust_volume, esecuzione di proces- sor_read_audio, esecuzione di process_audio, che implica la manipolazione del file e la scrittura del nuovo file nella apposita cartella ’effected’.Da questo file appena scritto si estraggono poi le features che verranno salvate nel file CSV di default denominato ’runtime.csv’. Questo file CSV viene poi passato allo script contenente il modello nel quale vengono riestratti i coefficienti. Questi coefficienti vengono trasmessi al modello e il risultato della predizio- ne viene salvato nella variabile Result. Se il valore della variabile Result è uguale a 1 allora l’i-esimo file audio sorgente verrà spostato in una appo- sita cartella denominata ’detection’ e verrà mostrato in output il seguente segnale: "Scream detected at "timestamp X"!". Il ciclo while continua fino alla fine della durata preimpostata in fase di inizializzazione. L’esecuzione di tutto lo script avviene in una funzione main nella quale vengono istanziati due thread, uno per la funzione record_audio e uno per la funzione pro- cess_audio, entrambi definiti precedentemente. Vengono quindi fatti partire entrambi i thread mediante l’istruzione start e l’istruzione join permette di mettere in attesa il primo thread aspettando che l’altro thread finisca le sue operazioni. Quando entrambi i Thread giungono all fine delle loro esecuzioni viene stampato in output una stringa con il seguente contenuto: "Recording Finished". Un possibile risultato a fine esecuzione: Figura 15: Un possibile output 27
  • 31. 4.5 Analisi del codice Durante la costruzione del progetto sono state condotte delle analisi per la verifica del corretto funzionamento di ogni script avvalendosi di alcune tecni- che quali l’analisi statica e l’analisi dinamica del codice. L’analisi statica è un esame del codice sorgente che avviene senza che quest ultimo venga eseguito. L’utilità di questo tipo di analisi consiste nell’ identificare errori, difetti di progettazione, violazioni di convenzioni e altri potenziali problemi. L’analisi dinamica invece viene effettuata attraverso l’esecuzione del codice sorgente attribuendone input specifici per osservarne il comportamento durante l’ese- cuzione. Questa analisi include il test delle funzionalità, la valutazione delle prestazioni e la verifica del rispetto dei requisiti. Per la parte riguardante l’analisi statica si è fatto uso di Sonarqube [11], piattaforma open source de- dicata alla gestione della qualità, della sicurezza e della manutenibilità del codice. Per utilizzare tale piattaforma si è fatto utilizzo della tecnologia ba- sata su container denominata Docker [16]. In estrema sintesi Docker è una piattaforma open-source che consente di creare, distribuire e gestire appli- cazioni all’interno di contenitori leggeri. Tali contenitori agiscono come una sorta di virtualizzazione a livello di sistema operativo e ciò consente di isolare le applicazioni e le loro dipendenze, garantendo al contempo la portabilità e la riproducibilità dell’ambiente di esecuzione. Per fare uso di quest ultimo si è fatto uso del sottosistema Windows per Linux su Microsoft, WSL2. Questa tecnologia permette di creare e di eseguire un ambiente Linux su una mac- china nella quale è installato un sistema operativo Windows. Il vantaggio di questa struttura risiede nella possibilità di utilizzare direttamente la tecno- logia dei container Docker su questo sottosistema anziché creare una nuova macchina virtuale separata. Questo si traduce in un risparmio di tempo e risorse, evitando così il rallentamento delle operazioni. Un ulteriore vantag- gio risiede nel fatto che mediante WSL2 è possibile eseguire comandi Linux su Shell e comunque continuare a usare un sistema basato su Windows si- multaneamente. Mediante l’utilizzo di questo metodo per l’analisi statica, si sono spesso riusciti a individuare eventuali code smells, o problemi di otti- mizzazione e alcune inesattezze che sarebbero state impattanti dal punto di vista della manutenibilità, come per esempio la ripetizione di codice oppure il mancato utilizzo di alcune librerie o variabili oppure ancora l’utilizzo di stringhe che possono generare confusione al momento della denominazione di alcune variabili o metodi. 28
  • 32. Figura 16: Sonarqube all’interno di Docker Figura 17: Valutazione Sonarqube del progetto Per la parte riguardante invece l’analisi dinamica si sono condotti dei test semplicemente creando dei file di supporto in formato .py ed eseguendo il co- dice iterativamente in cerca di errori qualsiasi fosse la loro natura. L’utilizzo di tale tecnica è risultata di aiuto nel risolvere eventuali problemi ma anche per trovare modi per ottimizzare ognuno dei script presenti nel progetto. In merito all’analisi dello script denominato main.py si è deciso di fare uso di una funzionalità del driver audio del sistema operativo Windows, de- nominato Missaggio Stereo, che permette la cattura di suoni provenienti da fonti interne al sistema operativo stesso. Questa funzionalità è risultata esse- re di notevole importanza quando associata a sorgenti audio provenienti dal web. È stato mediante quest ultimo che si sono effettuati i test dell’ intero sistema alternando tra suoni urbani di background e suoni di grida, sempre emesse in un contesto urbano. Il risultato di questa ultima analisi è risultato soddisfacente in quanto nella maggior parte dei casi il sistema ha funzionato a dovere segnalando molto spesso le situazioni per le quali è stato ideato a segnalare. Sono tuttavia stati registrati dei falsi positivi oppure in rari casi dei casi negativi, che sono tuttavia problemi risolvibili tramite un miglior allenamento del modello utilizzato. 29
  • 33. 5 Conclusione L’obbiettivo prefissato all’inizio dell’esperienza era stato quello di provare a ideare e implementare una soluzione capace di fare la distinzione tra urla e rumori di sottofondo in contesto urbano. Alla fine dell’esperienza tale risul- tato è stato ottenuto e si è inoltre costruito un prototipo di sistema completo funzionante che ottiene dei risultati molto soddisfacenti come indicato nei paragrafi precedenti. Si è tuttavia notato che il sistema può ulteriormente essere migliorato, ad esempio tra il rilevamento della voce e la segnalazione trascorrono alcuni secondi (circa 5) di ritardo, ovviamente trascurabili per il presente contesto ma un ritardo minore può sicuramente essere più apprezza- bile. Il numero di righe di codice totale ammonta a ottocento e attualmente il prototipo è stato presentato ai supervisori del settore "Innovazione" e rimane momentaneamente in attesa per sviluppi futuri. In conclusione, mi ritengo molto soddisfatto dell’opportunità che mi è stata concessa sia dall’Università che da INSIEL S.p.A. per avermi permesso, non solo di mettere in atto le nozioni apprese durante il corso di studi, ma anche di averne apprese nuo- ve, il tutto applicandole direttamente a un progetto che mi ha permesso di acquisire esperienza anche da un punto di vista pratico. 30
  • 34. 6 Riferimenti bibliografici Riferimenti bibliografici [1] A Michael Noll. Short-time spectrum and “cepstrum” techniques for vocal-pitch detection. The Journal of the Acoustical Society of America, 36(2):296–302, 1964. [2] Fairuz Samiha Saeed, Abdullah Al Bashit, Vishu Viswanathan, and Da- mian Valles. An initial machine learning-based victim’s scream detection analysis for burning sites. Applied Sciences, 11(18), 2021. [3] Yennhi95zz. Why data cleaning is crucial for machine learning models. [4] Md. Zaigham Zaheer, Jin Young Kim, Hyoung-Gook Kim, and Seung You Na. A preliminary study on deep-learning based screa- ming sound detection. In 2015 5th International Conference on IT Convergence and Security (ICITCS), pages 1–4, 2015. [5] Md Ashikuzzaman, Awal Ahmed Fime, Abdul Aziz, and Tanvira Ta- snima. Danger detection for women and child using audio classification and deep learning. In 2021 5th International Conference on Electrical Information and Communication Technology (EICT), pages 1–6, 2021. [6] Weimin Huang, Tuan Kiang Chiew, Haizhou Li, Tian Shiang Kok, and Jit Biswas. Scream detection for home applications. In 2010 5th IEEE Conference on Industrial Electronics and Applications, pages 2115–2120, 2010. [7] MathWorks. https://it.mathworks.com/discovery/support-vector- machine.html: :text=una [8] Python. https://www.python.org/. [9] Microsoft. https://code.visualstudio.com/. [10] Image-Line. https://www.image-line.com/. [11] Sonarqube. https://www.sonarsource.com/products/sonarqube/. [12] freesound.org. https://freesound.org/. [13] Peter Foster, Siddharth Sigtia, Sacha Krstulovic, Jon Barker, and Mark D. Plumbley. Chime-home: A dataset for sound source recognition 31
  • 35. in a domestic environment. In 2015 IEEE Workshop on Applications of Signal Processing to Audio and Acoustics (WASPAA), pages 1–5, 2015. [14] soundprivacy.aalto.fi. http://soundprivacy.aalto.fi/. [15] Fairuz Samiha Saeed. https://github.com/fairuzsamihasaeed/victim- detection-from-scream-in-burning-sites/blob/main/model/feature [16] Docker. https://www.docker.com/. 32