Πίνακας περιεχομένων:

Sistema Autônomo Localizador De Vazamentos: 11 Βήματα
Sistema Autônomo Localizador De Vazamentos: 11 Βήματα

Βίντεο: Sistema Autônomo Localizador De Vazamentos: 11 Βήματα

Βίντεο: Sistema Autônomo Localizador De Vazamentos: 11 Βήματα
Βίντεο: WinAppDriver. Автоматизация Windows приложений на Java 2024, Νοέμβριος
Anonim
Sistema Autônomo Localizador De Vazamentos
Sistema Autônomo Localizador De Vazamentos

Este projeto conste em um robô, que através da leitura realizada for um μας διαθέτουν, εξοπλίζουν τους αισθητήρες πιεζομετρικά, captura os espectros das vibrações no solo, pode identificar e localizar, com o processamento dos dados por uma rede neural, possíveis vazamentos uma tubulação.

O processamento destes dados é realizado por algoritmos instalados na DRAGONBOARD 410c. Os dados também são enviados para um serviço na nuvem, respondável for auxiliar no processo de Integência Artificial do projeto.

Este projeto foi desenvolvido no Hackaton Qualcomm, durante a TecnoFACENS da Faculdade de Engenharia de Sorocaba (FACENS), participaram do projeto os graduandos de engenharia mecatrônica Eneo Juliano Bovino, Felipe Xavia, Rodas Sues, Rodas, Lucas Deues, Lucas Deus Gomes Polo e Ronaldo P. Gomes Polo. Também participou do projeto o aluno Daniel de Castro Pacheco graduando de engenharia mecânica στο Universidade Newton Paiva de Belo Horizonte. O projeto contou com o apoio dos graduandos de engenharia mecatrônica da FACENS, Lucas Nunes Monteiro e Felipe Crispim da Silva Salvagnini.

Βήμα 1: Lista De Materiais

Lista De Materiais
Lista De Materiais

Πραγματοποιήστε τον προορισμό σας, με την βοήθεια των υλικών που χρησιμοποιείτε:

1 Arduino Due

1 Dragonboard 410c

2 Προγράμματα οδήγησης για τη μοτοσυκλέτα Continua contendo Cada um:

4 Transistores BC548

4 Διόδος 1ν4007

4 Αντίσταση 4k7Ω ¼ W

1 πρόγραμμα οδήγησης για servo motor contendo:

1 Transistores BC548

1 Διόδος 1Ν4007

1 Αντίσταση 4k7Ω ¼ W

1 ποντίκι USB

1 Teclado USB

1 Οθόνη

1 Cabo HDMI

1 Robô De Esteiras - Plataforma Zumo

1 Mini dispositivo de cremalheira και engrenagem

1 σερβοκινητήρας 9g

Βήμα 2: Adaptação Mecânica

Image
Image

Para a aquisição dos dados pelo sensor piezoelétrico, faz se needário, o desenvolvimento de um dispitivo com pinhão e cremalheira, conforme desenhos anexados, neste caso as peças foram fabricadas por uma impressora 3D, devido ao fato tempo de execução, fixou-se o dispositivo na plataforma zumo, utilizando fita dupla face, conforme vídeo.

Βήμα 3: Acionamento Dos Motores

Obtenção Do Áudio
Obtenção Do Áudio

Για εκτελέσεις κινήσεων dos motores do robô ZUMO e do dispositivo de captura, fez-se needária a montagem de dois drivers para os motores de corrente Continua e um driver para o servo motor, conforme as figuras acima, sendo a primeira figura o driver para um motor de corrente Continua και segunda ή πρόγραμμα οδήγησης για σερβοκινητήρα.

Βήμα 4: Obtenção Do Áudio

Para obtenção do espectro de áudio das vibrações do solo, foi utilisado um dispositivo desenvolvido como parte do TCC de Engenharia Mecatrônica dos graduandos Lucas Nunes Monteiro e Felipe C. da Silva Salvagnini, maiores dispalis soalravsosoem soalaravoiso soalo sober email [email protected].

Χρησιμοποιείται για τη χρήση του αισθητήρα πιεζοηλεκτρικά και για την κυκλοφορία των κυκλωμάτων που πραγματοποιούν ένα φιλτράρισμα και ενίσχυση για το σινάλ.

Ως συχνότητες ενδιαφέροντος για την πρόβλεψη της εισόδου στα 100Hz και 800Hz. Παράλληλα με τη διαμόρφωση των αισθητήριων παραμέτρων συχνότητας συχνότητας 3 amHz για την επανεκκίνηση των συνθηκών που έχουν γίνει στο Nyquist, η συχνότητα των υδάτινων πόρων είναι πολύ γρήγορη.

A aquisição é habilitada e desabilitada através da interrupção do Arduino DUE.

Βήμα 5: Configuração Do Arduino DUE (linguagem C)

Configuração Do Arduino DUE (linguagem C)
Configuração Do Arduino DUE (linguagem C)

Devido a grande quantidade de dados, cerca de 3000 pontos por segundo, do tipo inteiro de 32 bits, gerados pelo dispositivo de sensoriamento e needários para processamento dos algoritmos na DRAGONBOARD 410c, foi utilizado o Arduino DUE para fazer usoóo entaumama ento de uma. poder de processamento, isso foi needário por que o Shield de interfaceamento Grove Seeed Sensor Mezzanine instalado στο DRAGONBOARD 410c, που μπορεί να είναι και microcontrolador ATmega 328, δεν είναι δυνατό να υποβληθεί σε επεξεργασία για την ουσιαστική λειτουργία.

O Arduino DUE foi configurado para receber os comandos enviados da plataforma QUALCOMM DRAGONBOARD 410c μέσω comunicação serial.

As ações configuradas no Arduino foram:

Realizar a aquisição dos dados?

Transmitir os dados obtidos para a DRAGONBOARD 410c;

Επιλέξτε ένα πρόγραμμα:

#περιλαμβάνει #καθορίστε Numb_Sample 3000 #καθορίστε DAC_Input A0

#define SERVO 7

#define PosServoMin 4 #define PosServoMax 6 #define Period 60 unsigned int Scont = 0, SNow = PosServoMin; unsigned long int DAC [Numb_Sample], ind = Numb_Sample; void TC3_Handler () {TC_GetStatus (TC1, 0); εάν (ind <Numb_Sample) DAC [ind ++] = analogRead (DAC_Input); εάν (Scont

1)? // Κύκλος εργασίας 50%

TC_SetRC (tc, κανάλι, rc); TC_Start (tc, κανάλι); tc-> TC_CHANNEL [κανάλι]. TC_IER = TC_IER_CPCS | TC_IER_CPAS; // habilita os registradores tc-> TC_CHANNEL [κανάλι]. TC_IDR = ~ (TC_IER_CPCS | TC_IER_CPAS); // desabilita os registradores NVIC_EnableIRQ (irq); // habilita interrupção}

void setup ()

{Serial.begin (115200); pinMode (DAC_Input, INPUT); TimerStart (TC1, 0, TC3_IRQn, 1500); // Init the Timer // TC_Stop (TC1, 0). pinMode (SERVO, OUTPUT); }

κενός βρόχος ()

{/*// while (! Serial.available ()); char rc; // = Serial.read (); int indice = 0; εάν (rc == 0) {while (! Serial.available ()); rc = Serial.read (); switch (rc) {case 1: indice = 0; ενώ (! Serial.available ()); while ((rc = Serial.read ())! = 0xFF) {indice << = 8; δείκτης += rc; ενώ (! Serial.available ()); } Serial.print (0); Serial.print (2); SendNumber (DAC [δείκτης]); Serial.print (0xFF); Διακοπή; περίπτωση 3: ενώ (! Serial.available ()); εάν ((Serial.read ()) == 0xFF) {SNow = PosServoMax; καθυστέρηση (500)? ind = 0; // TC_Start (TC1, 0); while (ind <Numb_Sample); // TC_Stop (TC1, 0); SNow = PosServoMin; καθυστέρηση (500)? Serial.print (0); Serial.print (4); Serial.print (0xFF); } Διακοπή; }} else if (rc == '2') {Serial.print ("Test Servo Motor / n"); ενώ (! Serial.available ()); rc = Serial.read (); if (rc == '1') {Serial.print ("Mode 1 / n"); SNow = PosServoMax; } if (rc == '2') {Serial.print ("Mode 2 / n"); SNow = PosServoMin; }} */ SNow = PosServoMax; καθυστέρηση (100)? SNow = PosServoMin; καθυστέρηση (100)? }

Βήμα 6: Interfaceamento Das Tecnologias

Interfaceamento Das Tecnologias
Interfaceamento Das Tecnologias

Για να επικοινωνήσετε μαζί σας στο Arduíno DUE eA DRAGONBOARD 410c, χρησιμοποιήστε τη χρήση μιας διασύνδεσης για την εικόνα, μπορείτε να χρησιμοποιήσετε μια διεπαφή USB CDC entreo Arduino DUE ea DRCONBOARD 410 αναγκαιότητα ανασυγκρότησης do KERNEL da DRAGONBOARD 410c, που δεν μπορεί να προκληθεί από την αποστολή.

Βήμα 7: Configuração Da DRAGONBOARD 410c (Python)

Configuração Da DRAGONBOARD 410c (Python)
Configuração Da DRAGONBOARD 410c (Python)

Foi configurada para enviar ao Arduino DUE os comandos para realizar a aquisição de dados e transmitir os dados obtidos. Segue código abaixo.

Παρατήρηση: A abordagem utilisada no código, n funo funcionou devido aos níveis de tensão utilizados pelo Arduíno DUE e o Mezzanine serem ασυμβίβαστα. Για να διασφαλίσετε τη διασύνδεση USB, που είναι απαραίτητη για την επανασύνδεση του KERNEL και του DRAGONBOARD 410c για την είσοδο της θύρας της πύλης για την επικοινωνία.

εισαγωγή χρόνου εισαγωγής σειριακών εισαγωγών pandas ως pd εισαγωγή numpy ως np

# Διαμόρφωση σειρών

ser = serial. Serial (port = '/dev/ttyAMC0', #tty96B0 ', baudrate = 250000, parity = serial. PARITY_NONE, stopbits = serial. STOPBITS_ONE, bytesize = serial. EIGHTBITS)

ser.isOpen ()

εκτύπωση ('Εισαγάγετε τις εντολές σας παρακάτω. / r / nΕισαγάγετε "έξοδο" για έξοδο από την εφαρμογή.')

είσοδος = 1

ενώ 1: input = input (">>") if input == 'exit': ser.close () exit () elif input == 'read': ser.write (0) # Envia o comando para o Arduino DUE realizar a coleta dos dados ser.write (1) # Envia o comando para o Arduino DUE transmitir os dados coletados

lista =

για i στην περιοχή (3000):

ser.write (i/256) ser.write ((i <0: out = ser.read (2) if (out == 0x0002): atual = 0 c = ser.read (1) while (c! = 0xFF): atual << 8 atual += cc = ser.read (1) lista.append (atual)

Βήμα 8: INTERPRETAÇÃO DOS ARQUIVOS DE AUDIO

INTERPRETAÇÃO DOS ARQUIVOS DE AUDIO
INTERPRETAÇÃO DOS ARQUIVOS DE AUDIO

Για την παρακολούθηση της αρχικής ανάλυσης των στοιχείων που απαιτούνται από τον αισθητήρα, είναι απαραίτητη η συνομιλία των αρχών στο WAV, για περισσότερες πληροφορίες για τα αυτοκίνητα TCC και συνεργαζόμενες δραστηριότητες, για τις αξίες των αριθμών, για τις χρήσεις των δικών σας Το Για την πραγματοποίηση της συνομιλίας με την εκδήλωση της αλγορίτωμά μας PYTHON 3 que lê o arquivo WAV και salva os dados do espectro em um arquivo CSV. Πραγματοποιήστε χρήση της επιλογής σας για να κατεβάσετε.

Αυτό είναι απαραίτητο για τη λειτουργία του συστήματος, για το Arduino που οφείλεται σε περιβαλλοντικούς σκοπούς, καθώς και σε array de valores numéricos.

# κωδικοποίηση: utf-8

# Leitura e conversão dos audios para csv

# MÓDULOS UTILIZADOS

εισαγωγή κύματος εισαγωγής numpy ως np εισαγωγή pandas ως pd εισαγωγή matplotlib.pyplot ως plt

# FUNÇÃO PARA CONVERTER WAV EM DADOS DO ESPECTRO E SALVAR CSV

def audio_to_csv (όνομα αρχείου): wave_file = wave.open (όνομα αρχείου+'. wav', 'rb') data_size = wave_file.getnframes () sample_rate = wave_file.getframerate () time_step = 1/sample_rate waveData = wave_file.readframes (data) signal = np.fromstring (waveData, dtype = 'int32') Time = np.linspace (start = 0, stop = data_size/sample_rate, num = data_size, endpoint = True) df = pd.concat ([pd. DataFrame (σήμα), pd. DataFrame (Χρόνος)], άξονας = 1) df.to_csv (όνομα αρχείου + '.csv', index = False) επιστροφή df

# CARREGANDO DATA FRAME COM OS DADOS DO AUDIO

file_name = 'Solo_com_Vazamento' df_vazamento = audio_to_csv (όνομα_αρχείου) df_vazamento.columns = ['amp', 'time'] file_name = 'Solo_sem_Vazamento' df_sem_vazamento = audio_to_csv ']

# GRÁFICO DO ESPECTRO DE AUDIO

σχήμα, (ax1, ax2) = plt. subplots (nrows = 2, ncols = 1, figsize = (20, 10)) ax1.plot (df_vazamento ['time'], df_vazamento ['amp']) ax1.set_title ('Solo com Vazamento', fontdict = {'fontsize': 20, 'fontweight': 'bold'}) ax1.set_xlabel ('Tempo [s]', fontdict = {'fontsize': 16}) ax1.set_ylim ([-4e8, 4e8]) ax2.plot (df_sem_vazamento ['time'], df_sem_vazamento ['amp']) ax2.set_title ('Solo sem Vazamento', fontdict = {'fontsize': 20, 'fontweight': 'bold' }) ax2.set_xlabel ('Tempo [s]', fontdict = {'fontsize': 16}) ax2.set_ylim ([-4e8, 4e8]) figure.tight_layout (h_pad = 5) plt.show ()

Βήμα 9: Análise Visual Do Sinal

Análise Visual Do Sinal
Análise Visual Do Sinal
Análise Visual Do Sinal
Análise Visual Do Sinal
Análise Visual Do Sinal
Análise Visual Do Sinal

Com o PYTHON 3 é realizada a transformada de Fourier, este artificio matemático realiza a transformação do sinal do domínio do tempo para o domínio da freacéncia, onde se torna possível analisar as varias frequências, e suas amplitudes, que compõem aquele sinal. Προηγούμενη οπτική γωνία μεταμόρφωσης της Φουριέ και των επαγγελματικών συστημάτων που σχετίζονται με την ταυτότητα και την ύπαρξη μεγάλου μεγέθους των σωληναρίων. Estes gráficos servirão para validação das análises realizadas pelo algoritmo de detecção automática.

Περιορίστε τις συχνότητές σας στα 100Hz και 800Hz, μπορείτε να παρακολουθήσετε τις παραμέτρους των διαφόρων περιοχών συχνότητας.

# κωδικοποίηση: utf-8# Módulos utilizados para processamento da transformada de Fourier

εισαγωγή pandas ως pd εισαγωγή numpy ως np κύματος εισαγωγής από matplotlib εισαγωγή pyplot ως plt# Função que realiza a transformada de Fourier e plota os gráficos para análise def Fourier (df_list): Fs = 44100; # Taxa de amostragem em Hz Ts = 1.0/Fs; # Intervalo de amostragem y = pd.concat (df_list) t = y ['time'] # Vetor de tempos y = y ['amp'] # Vetor de amplitudes n = len (y) # Comprimento do sinal k = np. πορτοκαλί (n) T = n/Fs frq = k/T frq = frq [εύρος (n // 2)] Y = np.fft.fft (y)/n Y = Y [εύρος (n // 2)] tmp = pd. DataFrame () tmp ['amp'] = abs (Y) tmp ['freq'] = frq max_lim = max (tmp ['amp'] [(tmp ['freq']> = 100) & (tmp ['freq'] <= 800)]) fig, ax = plt. subplots (2, 1, figsize = (20, 10)) ax [0].plot (t, y) ax [0].set_xlabel ('Time') ax [0].set_ylabel ('Amplitude') ax [1].plot (frq, abs (Y), 'r') ax [1].set_xlim ([100, 800]) ax [1].set_ylim ([0, max_lim]) ax [1].set_xlabel ('Freq (Hz)') ax [1].set_ylabel ('| Y (freq) |') plt.show () return frq, abs (Y)# Função que realiza a carga dos dados do CSV και chama a função de Fourier def read_csv (όνομα αρχείου, init, τελικό): df = pd.read_csv (όνομα_αρχείου + '.csv') df.columns = ['amp', ' time '] delta = final-init if init*44100> len (df) ή final*44100> len (df): init = (len (df)/44100) -delta if init = 100) & (df [' freq '] <= 800)] mx = ταξινομημένο (df [' amp ']) εκτύπωση ("Média das amplitudes:", np.round (np.mean (mx))) print ("Percentuais em relação a média das amplitudes.") print ("100 maiores amplitudes", np.mean (mx [-100:) ['amp']. μέση ()*100, "%", sep = "") εκτύπωση ("10 maiores amplitudes:", np.mean (mx [-10:]) // df ['amp'] μέση ()*100, "%", sep = "") εκτύπωση ("Κύριο πλάτος:", np.mean (mx [-1:]) // df ['amp']. μέσος όρος ()*100, " %", sep =" ") read_csv ('Solo_com_Vazamento', 2, 10) # Exemplo de gráficos para vazamentoread_csv ('Solo_sem_Vazamento', 2, 10) # Exemplo de gráficos para sem vazamento

Βήμα 10: Algoritmo Em R Para Extração Das Features Dos Dados

Algoritmo Em R Para Extração Das Features Dos Dados
Algoritmo Em R Para Extração Das Features Dos Dados
Algoritmo Em R Para Extração Das Features Dos Dados
Algoritmo Em R Para Extração Das Features Dos Dados

Utilizou-se um algoritmo em R para realizar o processamento e extração das features (características) dos dados obtidos.

Πρώτα απ 'όλα, θα πρέπει να αναγνωριστούν, θα πρέπει να λάβετε υπόψη σας ότι θα σας βοηθήσουν να εντοπίσετε ή να ανιχνεύσετε ή να ανιχνεύσετε ή να χρησιμοποιήσετε, για να σας εξυπηρετήσουμε κατά κύριο λόγο για τη χρήση της νέας χρήσης.

Για την εκτέλεση ενός συστήματος που λειτουργεί με τη λειτουργία και τη μεταφορά διαφορετικών υπηρεσιών, εκτελείται, δεν είναι πλέον δυνατή η ταυτότητά του, που μπορεί να χαρακτηριστεί ως χαρακτηριστικό γνώρισμα.

Το Estas διαθέτει ou caraterísticas são propriedades acústicas compostas por varias informações referentes ao espectro de áudio capturado, abaixo seguirá uma descrição (em inglês) destas características.

Εκτός από την προοπτική της αποστολής του GitHub και του κωδικού πρόσβασης σε σχέση με τον σύνδεσμο, μπορείτε να τροποποιήσετε τις προτάσεις σας ως ειδικές προτάσεις.

Χρησιμοποιήστε το λογισμικό για δωρεάν ή δωρεάν, κατεβάστε το διερμηνέα R e do R Studio.

Características extraídas:

  • meanfreq: μέση συχνότητα (σε kHz)
  • sd: τυπική απόκλιση συχνότητας
  • διάμεσος: διάμεση συχνότητα (σε kHz)
  • Q25: πρώτο ποσοτικό (σε kHz)
  • Q75: τρίτο ποσοτικό (σε kHz)
  • IQR: interquantile range (σε kHz)
  • κλίση: στραβότητα (δείτε σημείωση στην περιγραφή specprop)
  • kurt: kurtosis (βλ. σημείωση στην περιγραφή specprop)
  • sp.ent: φασματική εντροπία
  • sfm: φασματική επιπεδότητα
  • λειτουργία: συχνότητα λειτουργίας
  • centroid: συχνότητα centroid (δείτε specprop)
  • peakf: συχνότητα αιχμής (συχνότητα με την υψηλότερη ενέργεια)
  • meanfun: μέσος όρος της βασικής συχνότητας που μετράται σε ακουστικό σήμα
  • minfun: ελάχιστη θεμελιώδης συχνότητα που μετράται σε ακουστικό σήμα
  • maxfun: μέγιστη θεμελιώδης συχνότητα που μετράται σε ακουστικό σήμα
  • meandom: μέσος όρος της κυρίαρχης συχνότητας που μετράται σε ακουστικό σήμα
  • mindom: ελάχιστη κυρίαρχη συχνότητα που μετράται σε ακουστικό σήμα
  • maxdom: μέγιστη κυρίαρχη συχνότητα που μετράται σε ακουστικό σήμα
  • dfrange: εύρος κυρίαρχης συχνότητας που μετράται σε ακουστικό σήμα
  • modindx: ευρετήριο διαμόρφωσης. Υπολογίζεται ως η συσσωρευμένη απόλυτη διαφορά μεταξύ γειτονικών μετρήσεων βασικών συχνοτήτων διαιρούμενη με το εύρος συχνοτήτων
  • ετικέτα: διαρροή ή χωρίς_διαρροή

Algoritmo usado:

πακέτα <- c ("tuneR", "seewave", "fftw", "caTools", "randomForest", "warbleR", "ποντίκια", "e1071", "rpart", "xgboost", "e1071") αν (μήκος (setdiff (πακέτα, ονόματα πακέτων (εγκατεστημένα.πακέτα ()))))> 0) {install.packages (setdiff (πακέτα, ονόματα πακέτων (εγκατεστημένα.συσκευασίες ()))))}}

βιβλιοθήκη (tuneR)

βιβλιοθήκη (seewave) βιβλιοθήκη (caTools) βιβλιοθήκη (rpart) βιβλιοθήκη (rpart.plot) βιβλιοθήκη (randomForest) βιβλιοθήκη (warbleR) βιβλιοθήκη (ποντίκια) βιβλιοθήκη (xgboost) βιβλιοθήκη (e1071)

specan3 <- συνάρτηση (X, bp = c (0, 22), wl = 2048, κατώφλι = 5, παράλληλος = 1) { # Για χρήση παράλληλης επεξεργασίας: βιβλιοθήκη (devtools), install_github ('nathanvan/parallellsugar') εάν (class (X) == "data.frame") {if (all (c ("sound.files", "selec", "start", "end") % σε % colnames (X))) {start <- as.numeric (unlist (X $ start)) end <- as.numeric (unlist (X $ end)) sound.files <- as.character (unlist (X $ sound.files)) selec <- as.character (unlist (X $ selec))} else stop (επικόλληση (επικόλληση (c ("sound.files", "selec", "start", "end") [! (c ("sound.files", "selec", "έναρξη", "τέλος") % σε % colnames (X))], σύμπτυξη = ","), "στήλες (ες) δεν βρέθηκαν στο πλαίσιο δεδομένων"))} else stop ("X δεν είναι πλαίσιο δεδομένων") #εάν υπάρχουν ΝΑ στην αρχή ή στο τέλος στάθμευσης εάν (οποιαδήποτε (is.na (c (τέλος, έναρξη)))) stop ("NAs found in start and/or end") #if τέλος ή έναρξη δεν είναι αριθμητική στάση if (all (class (end)! = "numeric" & class (start)! = "numeric")) stop ("" end "and" selec "must be number") οποιαδήποτε (τέλος - έναρξη <0)) διακοπή (επικόλληση ("Η αρχή είναι υψηλότερη από το en d σε ", μήκος (το οποίο (τέλος - έναρξη20)) στάση (επικόλληση (μήκος (που (τέλος - έναρξη> 20))," επιλογή (εις) μεγαλύτερη από 20 δευτ. ")) επιλογές (show.error.messages = TRUE) #if bp δεν είναι διάνυσμα ή μήκος! = 2 στάση εάν (! is.vector (bp)) stop ("'bp' must be a number number vector of length 2") else {if (! length (bp) == 2) διακοπή ("" bp "πρέπει να είναι ένα αριθμητικό διάνυσμα μήκους 2")} #επιστροφή προειδοποίησης εάν δεν βρέθηκαν όλα τα αρχεία ήχου fs <- list.files (path = getwd (), pattern = ".wav $", ignore.case = TRUE) if (μήκος (μοναδικό (sound.files [(sound.files % σε % fs)]))! = μήκος (μοναδικό (sound.files))) γάτα (επικόλληση (μήκος (μοναδικό (ήχος αρχεία))-μήκος (μοναδικό (sound.files [(sound.files % σε % fs)]))), ".wav αρχεία (α) δεν βρέθηκαν")) #αριθμός αριθμών αρχείων ήχου στον κατάλογο εργασίας και αν 0 διακοπή d <- το οποίο (sound.files % σε % fs) εάν (μήκος (d) == 0) {stop ("Τα αρχεία.wav δεν βρίσκονται στον κατάλογο εργασίας")} αλλιώς {έναρξη <- έναρξη [d] τέλος <- τέλος [d] selec <- selec [d] sound.files <- sound.files [d]} # Εάν το παράλληλο δεν είναι αριθμητικό εάν (! is.numeric (parallel)) stop ("" parallel "must είναι ένα αριθμητικό διάνυσμα μήκους 1 ") εάν (οποιοδήποτε (! (παράλληλο %% 1 == 0), παράλληλο 1) {επιλογές (προειδοποίηση = -1) εάν (όλα (Sys.info () [1] ==" Windows ", RequNamespace (" parallellsugar ", ήσυχα = TRUE) == TRUE)) lapp <- λειτουργία (X, FUN) parallellsugar:: mclapply (X, FUN, mc.cores = parallel) else if (Sys.info () [1] == "Windows") {cat ("Οι χρήστες των Windows πρέπει να εγκαταστήσουν το πακέτο" parallellsugar "για παράλληλους υπολογισμούς (δεν το κάνετε τώρα!)") Lapp <- pbapply:: pblapply} else lapp <- λειτουργία (X, FUN) parallel:: mclapply (X, FUN, mc.cores = parallel)} else lapp <- pbapply:: pblapply options (warning = 0) if (parallel == 1) cat ("Μέτρηση ακουστικών παραμέτρων:") x <- as.data.frame (lapp (1: μήκος (εκκίνηση), λειτουργία (i) {r <- tuneR:: readWave (file.path (getwd (), sound.files ), από = έναρξη , έως = τέλος , μονάδες = "δευτερόλεπτα") β οροφή ([email protected]/2000) - 1) β [2] < - ανώτατο όριο ([email protected]/2000) - 1 #frequency spectrum analysis songspec <- seewave:: spec (r, f = [email protected], plot = FALSE) analysis <- seewave:: specprop (songspec, f = [email protected], flim = c (0, 280/1000), plot = FALSE) #save parameter meanfreq <- analysis $ mean/1000 sd <- analysis $ sd/1000 median <- analysis $ median/1000 Q25 < - ανάλυση $ QQ75 <- ανάλυση $ QIQR <- ανάλυση $ IQR/1000 skew <- ανάλυση $ skewness kurt <- ανάλυση $ kurtosis sp.ent <- ανάλυση $ sh sfm <- ανάλυση $ sfm mode <- ανάλυση $ mode/1000 centroid <- ανάλυση $ cent/1000 #Συχνότητα με κορυφές πλάτους peakf <- 0 #seewave:: fpeaks (songspec, f = [email protected], wl = wl, nmax = 3, plot = FALSE) [1, 1] #Θεμελιώδεις παράμετροι συχνότητας ff <- seewave:: fund (r, f = [email protected], ovlp = 50, threshold = threshold, fmax = 280, ylim = c (0, 280/1000), plot = FALSE, wl = wl) [, 2] meanfun <-εννοούμε (ff, na.rm = T) minfun <-min (ff, na.rm = T) maxfun <-max (ff, na.rm = T) #Κυρίαρχες παράμετροι συχνότητας y <- seewave:: dfreq (r, f = [email protected], wl = wl, ylim = c (0, 280/1000), ovlp = 0, plot = F, threshold = threshold, bandpass = b * 1000, fftw = TRUE) [, 2] meandom <- mean (y, na.rm = TRUE) mindom <- min (y, na.rm = TRUE) maxdom <- max (y, na.rm = TRUE) dfrange <- (maxdom- mindom) διάρκεια <- (τέλος - έναρξη ) #υπολογισμός του δείκτη διαμόρφωσης αλλάζει <- διάνυσμα () για (j στο οποίο (! είναι na (y))) {αλλαγή <- abs (y [j]- y [j + 1]) αλλαγές <- προσθήκη (αλλαγές, αλλαγή)} εάν (mindom == maxdom) modindx <-0 else modindx <- mean (αλλαγές, na.rm = T)/dfrange #save results return (c (duration, meanfreq, sd, median, Q25, Q75, IQR, skew, kurt, sp.ent, sfm, mode, centroid, peakf, meanfun, minfun, maxfun, meandom, mindom, maxdom, dfrange, modindx))})) #change result ονόματα rownames (x) <- c ("διάρκεια", "meanfreq", "sd", "median", "Q25", "Q75", "IQR", "skew", "kurt", "sp.ent", "sfm", "mode", "centroid", "peakf", "meanfun", "minfun", "maxfun", "meandom", "mindom", "maxdom", "dfrange", "modindx") x <- data.frame (sound.files, selec, as.data.frame (t (x))) colnames (x) [1: 2] <- c ("sound.files", "selec") rownames (x) <- c (1: nrow (x)) return (x)}

processFolder <- λειτουργία (folderName) { # Ξεκινήστε με κενό data.frame. data <- data.frame () # Λήψη λίστας αρχείων στο φάκελο. λίστα <- list.files (folderName, '\. wav') # Προσθήκη λίστας αρχείων στο data.frame για επεξεργασία. για (όνομα αρχείου στη λίστα) {σειρά <- data.frame (όνομα αρχείου, 0, 0, 20) δεδομένα <- rbind (δεδομένα, σειρά)} # Ορισμός ονομάτων στηλών ονόματα (δεδομένα) <- c ('sound.files', 'selec', 'start', 'end') # Μετακίνηση σε φάκελο για επεξεργασία. setwd (folderName) # Αρχεία διεργασίας. ακουστική <- specan3 (data, parallel = 1) # Μετακίνηση πίσω στον γονικό φάκελο. ακουστική setwd ('..')}

gender <- λειτουργία (filePath) {if (! υπάρχει ('genderBoosted')) {load ('model.bin')} # Διαδρομές εγκατάστασης. currentPath <- getwd () fileName <- basename (filePath) διαδρομή <- dirname (filePath) # Ορισμός καταλόγου για ανάγνωση αρχείου setwd (διαδρομή) # Ξεκινήστε με κενά δεδομένα. πλαίσιο. δεδομένα <- data.frame (Όνομα αρχείου, 0, 0, 20) # Ορίστε ονόματα στηλών. ονόματα (δεδομένα) <- c ('sound.files', 'selec', 'start', 'end') # Επεξεργασία αρχείων. ακουστική <- specan3 (δεδομένα, παράλληλα = 1) # Επαναφορά διαδρομής. setwd (currentPath) προβλέψω (genderCombo, newdata = ακουστική)}

# Φόρτωση δεδομένων

διαρροή <- διαδικασίαΦάκελος («caminho para o pasta com δείγματα de áudio com vazamento») χωρίς_διαρροή <- processFolder («caminho para o pasta com sample de áudio sem vazamento»)

# Ορίστε ετικέτες.

διαρροή $ label <- 1 χωρίς_διαρροή $ label <- 2 δεδομένα <- rbind (διαρροή, χωρίς_διαρροή) δεδομένα $ label <- παράγοντας (δεδομένα $ ετικέτα, ετικέτες = c ("διαρροή", "χωρίς_διαρροή"))

# Κατάργηση αχρησιμοποίητων στηλών.

δεδομένα $ διάρκεια <- NULL data $ sound.files <- NULL data $ selec <- NULL data $ peakf <- NULL

# Κατάργηση γραμμών που περιέχουν ΝΑ.

δεδομένα <- δεδομένα [πλήρεις. περιπτώσεις (δεδομένα),]

# Γράψτε σύνολο δεδομένων csv.

write.csv (δεδομένα, αρχείο = 'features.csv', sep = ',', row.names = F)

Βήμα 11: Rede Neural

Rede Neural
Rede Neural

A ideia do uso de uma rede neural, é a de realizar um reconhecimento otomatizado através dos dados coletados pelo dispositivo de sensoriamento.

Μια νευρική χρήση é do tipo MLP (Πολυεπίπεδη Perceptron), αυτό είναι ένα μοντέλο που μπορεί να προηγηθεί με την αναγνώριση και τη χρήση ενός μοντέλου εμφύτευσης χωρίς συστηματική συνέχιση της ταυτότητας των αυτοκινήτων για την παραλαβή, την πληροφορία και το νάκεμ.

Foi needário realizar uma filtragem dos dados de entrada, pois algumas características estavam diminuindo a taxa de acerto da rede ao invés de melhora-la. Δεν μπορώ να συνειδητοποιήσω την προοπτική της κατάστασής μου, με τη βοήθεια του επιφανειακού πόδου και των αλλαγών που θα μπορούσαν να γίνουν.

Παραδείγματος χάριν, θα πρέπει να λάβετε υπόψη σας, θα μπορούσατε να ελέγξετε το 100%, καθώς και να παρακολουθήσετε την εικόνα.

Επωφεληθείτε από τη χρήση των προτύπων ή των μοντέλων που θα σας βοηθήσουν να κάνετε ένα ταξίδι. Δεν υπάρχει σύστημα ανίχνευσης σε διαφορετικές σειρές χρηστών, μπορείτε να πραγματοποιήσετε ή να υποβάλετε ένα μοντέλο που θα σας βοηθήσει να χρησιμοποιήσετε το μοντέλο σας ως πρόβλεψη για την πραγματοποίηση της πραγματικότητάς σας.

# κωδικοποίηση: utf-8

εισαγωγή pandas ως pd

εισαγωγή numpy ως np από sklearn.model_selection εισαγωγή train_test_split ως tts από sklearn.neural_network εισαγωγή MLPClassifier ως MLP από sklearn.metrics import classification_report as cr from sklearn.metrics import confusion_matrix ως cm

# Leitura dos dados do CSV

df = pd.read_csv ('features.csv') # Separação das entradas df_X = df [df.columns [: len (df.columns) -1] # Filtrando as entradas df_X = df_X

# Separando dados para treino e teste

X_train, X_test, Y_train, Y_test = tts (df_X, df_Y, test_size = 0.1)

# Criando modelo de rede neural

modelo = MLP (alpha = 0.0001, learning_rate_init = 0.0001, hidden_layer_sizes = (50, 50, 50, 50), max_iter = 10000, ενεργοποίηση = 'tanh', solver = 'lbfgs')

# Treinando modelo

modelo.fit (X_train, Y_train) αποτέλεσμα = modelo.predict (X_test)

# Imprimindo resultados

αναφορά = cr (Y_test, result) mat = cm (y_pred = result, y_true = Y_test) print ("Matriz de confusão") print (mat, end = "\ n / n") print ("Relatório de Classificação") print (κανω ΑΝΑΦΟΡΑ)

Συνιστάται: