Съдържание:
- Стъпка 1: Списък на материалите
- Стъпка 2: Adaptação Mecânica
- Стъпка 3: Acionamento Dos Motores
- Стъпка 4: Obtenção Do Áudio
- Стъпка 5: Конфигурирайте Do Arduino DUE (език C)
- Стъпка 6: Interfaceamento Das Tecnologias
- Стъпка 7: Конфигуриране на DRAGONBOARD 410c (Python)
- Стъпка 8: INTERPRETAÇÃO DOS ARQUIVOS DE AUDIO
- Стъпка 9: Визуално направете анален анализ
- Стъпка 10: Algoritmo Em R Para Extração Das Характеристики Dos Dados
- Стъпка 11: Осребрете невронното
Видео: Sistema Autônomo Localizador De Vazamentos: 11 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:51
Este projeto consiste em um robô, que através da leitura realizada por um dispositivo, equipado com um sensor piezoelétrico, captura os espectros das vibrações no solo, pode identificar e localizar, com o processamento dos dados por uma rede neural, possíveis vazamentos de á uma tubulação.
O processamento destes dados и realizado por algoritmos instalados на DRAGONBOARD 410c. Os dados também são enviados para um serviço na nuvem, отговарящ на спомагателен 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), участват в projeto os graduandos de engenharia mecatrônica Eneo Juliano Bovino, Felipe Xavier, Lucas de Sougé Rodé. Gomes Polo и Ronaldo P. Gomes Polo. Também particiou do 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: Списък на материалите
Para realização deste projeto, os seguintes materiais foram utilizados:
1 Arduino Due
1 Dragonboard 410c
2 драйвера за motor de corrente continua contendo cada um:
4 транзистора BC548
4 диода 1n4007
4 Резистори 4k7Ω ¼ W
1 Шофьор за серво мотор:
1 Транзистори BC548
1 Диод 1N4007
1 Възстановява 4k7Ω ¼ W
1 USB мишка
1 Teclado USB
1 Монитор
1 Cabo HDMI
1 Robô De Esteiras - Plataforma Zumo
1 Mini dispositivo de cremalheira e engrenagem
1 серво мотор 9g
Стъпка 2: Adaptação Mecânica
Para a aquisição dos dados pelo sensor piezoelétrico, faz se neophodário, o desenvolvimento de um dispositivo com pinhão e cremalheira, conforme desenhos anexados, neste caso as peças foram fabricadas por uma impressora 3D, devido ao fato deo trato de se tratar de um tratis tempo de execução, fixou-se o dispositivo na plataforma zumo, utilizando fita dupla face, conforme video.
Стъпка 3: Acionamento Dos Motores
Para executar a movimentação dos motores do robô ZUMO e do dispositivo de captura, fez-se neophodá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 ea segunda или driver за um servo motor.
Стъпка 4: Obtenção Do Áudio
Para obtenção do espectro de áudio das vibrações do solo, foi utilizado um dispositivo desenvolvido como parte do TCC de Engenharia Mecatrônica dos graduandos Lucas Nunes Monteiro e Felipe C. da Silva Salvagnini, maiores detalhes sobre o TCC dovos e sopod pod sospos dosos pod sos oso podosovos soso oso podosvios soso oso podositos soso oso podos tós dos viçoçoes do soçosos dos viçoçoses do soçosos dosçosos do sos oços dos viçoçoes do soção do TOSC имейл [email protected].
Este dispositivo utiliza-se de um sensor piezoelétrico e uma placa de circuito que realiza a filtragem e amplificação do sinal.
Като честота на интереси за прожекционно въвеждане на 100Hz и 800Hz. Para isso o dispositivo de sensoriamento foi configurado com uma frekvenência de amostragem de 3 kHz para que sejam respeitada as condições do teorema de amostragem de Nyquist, onde a Freência de aquisição deve estar pelo menos duas vezes acima das frekvencias
Aquisição é habilitada e desabilitada através da interrupção do Arduino DUE.
Стъпка 5: Конфигурирайте Do Arduino DUE (език 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 на DRAGONBOARD 410c, foi utilizado o Arduino DUE para fazer uso de uma entrada Поддръжката на процесора, е необходима за използване на щита за интерфейс на Grove Seeed Sensor Мецанинът е инсталиран на DRAGONBOARD 410c, който е в състояние да използва микроконтролатор ATmega 328, без да можете да обработвате процесора за essa operação.
O Arduino DUE за конфигуриране за получаване на командите, за платоформа QUALCOMM DRAGONBOARD 410c чрез comunicação serial.
Като конфигурация без Arduino foram:
Реализирайте aquisição dos dados;
Предавател за добавяне на обекти за DRAGONBOARD 410c;
Преглед на програмата:
#include #define Numb_Sample 3000 #define DAC_Input A0
#дефинирайте SERVO 7
#define PosServoMin 4 #define PosServoMax 6 #define Period 60 unsigned int Scont = 0, SNow = PosServoMin; беззнаков дълъг int DAC [Numb_Sample], ind = Numb_Sample; void TC3_Handler () {TC_GetStatus (TC1, 0); if (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); // дезабилитация на регистрация NVIC_EnableIRQ (irq); // habilita прекъсване}
void setup ()
{Serial.begin (115200); pinMode (DAC_Input, INPUT); TimerStart (TC1, 0, TC3_IRQn, 1500); // Инициирайте таймера // TC_Stop (TC1, 0); pinMode (SERVO, OUTPUT); }
void loop ()
{/*// while (! Serial.available ()); char rc; // = Serial.read (); int индекс = 0; if (rc == 0) {while (! Serial.available ()); rc = Serial.read (); ключ (rc) {случай 1: индекс = 0; while (! Serial.available ()); while ((rc = Serial.read ())! = 0xFF) {индекс << = 8; индекс += rc; while (! Serial.available ()); } Serial.print (0); Serial.print (2); SendNumber (DAC [индекс]); Serial.print (0xFF); прекъсване; случай 3: while (! Serial.available ()); if ((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 ("Тествайте серво мотора / n"); while (! Serial.available ()); rc = Serial.read (); if (rc == '1') {Serial.print ("Режим 1 / n"); SNow = PosServoMax; } if (rc == '2') {Serial.print ("Режим 2 / n"); SNow = PosServoMin; }} */ SNow = PosServoMax; забавяне (100); SNow = PosServoMin; забавяне (100); }
Стъпка 6: Interfaceamento Das Tecnologias
За комуникация, с която можете да въведете Arduíno DUE ea DRAGONBOARD 410c, използвайте първоначално интерфейс за фигура acima, или que não foi possível изпълнител, въведете опция за използване на интерфейса USB CDC entre o Arduino DUE ea DRAGONBOARD 4, needitaria da recompilação do KERNEL da DRAGONBOARD 410c, que não se fez por causa do curto tempo disponível.
Стъпка 7: Конфигуриране на 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 utilizada no código, não funcionou devido aos níveis de tensão utilizados pelo Arduíno DUE e o Mezzanine serem incompatíveis. Портът е опционален за USB интерфейс, който е необходим за прекомпилиране на KERNEL на DRAGONBOARD 410c, за да се пренасочи корекция за комуникация.
import timeimport сериен импорт pandas като pd внос numpy като np
# Конфигуриране на сериал за conexão
ser = serial. Serial (port = '/dev/ttyAMC0', #tty96B0 ', baudrate = 250000, parity = serial. PARITY_NONE, stopbits = serial. STOPBITS_ONE, bytesize = serial. EIGHTBITS)
ser.isOpen ()
print ('Въведете командите си по -долу. / r / nПуснете "exit", за да напуснете приложението.')
вход = 1
while 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
списък =
за 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
Para poder realizar uma primeira análise dos dados obtidos através do sensor, se fez needária a razgovaão dos arquivos no formato WAV, fornecidos pelos alunos autores do TCC e colaboradores do projeto, para valores numéricos, que são utilizados no 4 algoritmos. Para realizar esta converão foi escrito um algoritmo em PYTHON 3 que lê o arquivo WAV e salva os dados do espectro em um arquivo CSV. O алгоритмо използване на segue abaixo e em anexo за изтегляне.
Esse алгоритмо не се нуждае от функции за функциониране на системата, já que за Arduino DUE e enviará esses dados em um array de valores numéricos.
# кодиране: utf-8
# Leitura e разговор с аудио аудио за csv
# MÓDULOS UTILIZADOS
внос вълна внос numpy като np импортиране на панда като pd внос matplotlib.pyplot като plt
# FUNÇÃO PARA КОНВЕРТОР WAV EM DADOS DO ESPECTRO E SALVAR CSV
def audio_to_csv (име на файл): wave_file = wave.open (file_name+'. wav', 'rb') data_size = wave_file.getnframes () sample_rate = wave_file.getframerate () time_step = 1/sample_rate waveData = wave_file.readframesize) 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 (Time)], ос = 1) df.to_csv (име на файл + '.csv', индекс = False) връщане на df
# РАМКА ЗА ДАННИ CARREGANDO COM OS DADOS DO AUDIO
file_name = 'Solo_com_Vazamento' df_vazamento = audio_to_csv (file_name) df_vazamento.columns = ['amp', 'time'] file_name = 'Solo_sem_Vazamento' df_sem_vazamento = audio_to_csv (file_name) ['time_vams]
# 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: Визуално направете анален анализ
Com o PYTHON 3 е реализация на трансформация на Фурие, este artificio matemático реализация на трансформация до синал до доминио до темпо пара за доминиране на честота, onde се torna possível analisar като вариации на честоти, e suas амплитуди, que compõem aquele sinal. Pela análise visual do gráfico da transformada de Fourier um profissional com conhecimentos específicos poderá identificar a existência de algum vazamento na tubulação. Estes gráficos servirão para validação das análises realizadas pelo algoritmo de detecção automática.
Ограничете или намалете честотата на въвеждане на 100Hz и 800Hz, за да видите, че съществува вазаментос, като се наблюдава дистрибуция на честотен диапазон.
# кодиране: utf-8# Модулът се използва за обработка на трансформацията на Фурие
импортиране на панди като pd импортиране numpy като np импортиране на вълна от matplotlib импортиране на pyplot като plt# Функция, която реализира трансформация на Фурие и плоча с графики за анализ на Фурие (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 amplitude n = len (y) # Comprimento do sinal k = np. arange (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)]) фиг, 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 () връщане frq, abs (Y)# Função que realization a carga dos dados do CSV e chama a função de Fourier def read_csv (file_name, init, final): df = pd.read_csv (file_name + '.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 ']) print ("Média das amplitude:", np.round (np.mean (mx))) print ("Percentuais em relação a média das amplitude.") print ("100 maiores amplitude", np.mean (mx [-100:]) // df ['amp']. mean ()*100, "%", sep = "") print ("50 амплитуди на майора:", np.mean (mx [-50:]) // df ['amp']. mean ()*100, "%", sep = "") print ("10 майорски амплитуди:", np.mean (mx [-10:]) // df ['amp']. mean ()*100, "%", sep = "") print ("Майорска амплитуда:", np.mean (mx [-1:]) // df ['amp']. mean ()*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 Характеристики Dos Dados
Utilizou-se um algoritmo em R para realizar o processamento e extração das features (características) dos dados obtidos.
Este primeiro algoritmo realiza uma extração identificada, onde é needário sabre se o arquivo de áudio trata-se de uma amostra vazamento detectado ou não, isso por que os dados resultantes desse processo servirão para or treinamento da rede neural utilizada.
Para quando o system estiver em modo de operação um algoritmo um pouco diferente será executado, onde não este fará a extração não identificada, gerando somente as características sem uma identificação.
Estas функции ou caraterísticas são propriedades acústicas compostas por varias informações препратки ao espectro de áudio capturado, abaixo seguirá uma descriptionção (em inglês) destas características.
Este algoritmo faz parte de um projeto disponível no GitHub e pode ser acessado através deste link, o mesmo foi modificado para atender as especificações do projeto.
За използване на софтуера за алгоритъм или безплатно изтегляне за интерпретация на R e do R Studio.
Características extraídas:
- meanfreq: средна честота (в kHz)
- sd: стандартно отклонение на честотата
- медиана: средна честота (в kHz)
- Q25: първи квантил (в kHz)
- Q75: трети квантил (в kHz)
- IQR: интервантилен диапазон (в kHz)
- изкривяване: изкривяване (вижте бележката в описанието на specprop)
- kurt: kurtosis (виж бележката в описанието на specprop)
- sp.ent: спектрална ентропия
- sfm: спектрална плоскост
- mode: честота на режима
- центроид: честота центроид (виж specprop)
- peakf: пикова честота (честота с най -висока енергия)
- meanfun: средна стойност на основната честота, измерена в акустичния сигнал
- minfun: минимална основна честота, измерена в звуков сигнал
- maxfun: максимална основна честота, измерена в звуков сигнал
- meandom: средна стойност на доминиращата честота, измерена в акустичния сигнал
- mindom: минимум на доминираща честота, измерена в акустичния сигнал
- maxdom: максимумът на доминиращата честота, измерен в акустичния сигнал
- dfrange: диапазон на доминираща честота, измерен в акустичния сигнал
- modindx: индекс на модулация. Изчислява се като натрупаната абсолютна разлика между съседните измервания на основните честоти, разделена на честотния диапазон
- етикет: изтичане или без_изтичане
Algoritmo usado:
пакети <- c ('tuneR', 'seewave', 'fftw', 'caTools', 'randomForest', 'warbleR', 'мишки', 'e1071', 'rpart', 'xgboost', 'e1071') ако (дължина (setdiff (пакети, имена на редове (install.packages ())))> 0) {install.packages (setdiff (пакети, имена на редове (installed.packages ())))}
библиотека (tuneR)
библиотека (seewave) библиотека (caTools) библиотека (rpart) библиотека (rpart.plot) библиотека (randomForest) библиотека (warbleR) библиотека (мишки) библиотека (xgboost) библиотека (e1071)
specan3 <- функция (X, bp = c (0, 22), wl = 2048, праг = 5, успореден = 1) { # За да използвате паралелна обработка: библиотека (devtools), install_github ('nathanvan/parallelsugar'), ако (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 (paste (paste (c ("sound.files", "selec", "start", "end") [! (c ("sound.files", "selec", "начало", "край") % в % colnames (X))], срив = ","), "колона (и) не е намерена в рамката от данни"))} иначе стоп ("X не е рамка от данни") #ако има NA в начален или краен стоп, ако (някакъв (is.na (c (край, старт)))) стоп ("NAs намерени в начало и/или край") #ако край или старт не са цифрово спиране if (all (class (end)! = "numeric" & class (start)! = "numeric")) stop ("'end' и 'selec' трябва да са числови") #ако някое начало е по -високо от end stop, ако (всеки (край - начало <0)) стоп (поставяне ("Началото е по -високо от en d in ", length (which (end - start20)) stop (paste (length (which (end - start> 20))," selection (s) long than 20 sec ") options (show.error.messages = TRUE) #ако bp не е вектор или дължина! = 2 стопа, ако (! is.vector (bp)) stop ("'bp' трябва да бъде числов вектор с дължина 2") else {if (! length (bp) == 2) stop ("'bp' трябва да бъде числов вектор с дължина 2")} #предупреждение за връщане, ако не са намерени всички звукови файлове fs <- list.files (path = getwd (), pattern = ".wav $", ignore.case = TRUE) if (length (уникален (sound.files [(sound.files % в % fs)]))! = length (уникален (sound.files))) cat (paste (length (уникален (звук. звук. файлове))-дължина (уникална (sound.files [(sound.files % в % fs)]))), ".wav файл (и) не са намерени")) #брой брой звукови файлове в работната директория и ако 0 спре d <- който (sound.files % в % fs) if (length (d) == 0) {stop (".wav файловете не са в работната директория")} else {start <- start [d] end <- край [d] избор <- избор [d] sound.files <- sound.files [d]} # Ако паралелът не е числов, ако (! is.numeric (паралелен)) стоп ("" паралел "трябва бъде числов вектор с дължина 1 ") if (произволен (! (паралелен %% 1 == 0), паралелен 1) {опции (предупреждение = -1) if (всички (Sys.info () [1] ==" " [1] == "Windows") {cat ("Потребителите на Windows трябва да инсталират пакета 'parallelsugar' за паралелни изчисления (не го правите сега!)") Lapp <- pbapply:: pblapply} else lapp <- функция (X, FUN) паралелно:: mclapply (X, FUN, mc.cores = паралелно)} else lapp <- pbapply:: pblapply опции (предупреждение = 0) if (паралелно == 1) cat ("Измерване на акустични параметри:") x <- as.data.frame (lapp (1: дължина (начало), функция (i) {r <- tuneR:: readWave (file.path (getwd (), sound.files )), от = начало , до = край , единици = "секунди") b таван ([email protected]/2000) - 1) b [2] < - таван ([email protected]/2000) - 1 #анализ на честотния спектър songspec <- seewave:: spec (r, f = [email protected], plot = FALSE) анализ <- seewave:: specprop (songspec, f = [email protected], flim = c (0, 280/1000), plot = FALSE) #Запазване на параметри meanfreq <- анализ $ средно/1000 sd <- анализ $ sd/1000 медиана <- анализ $ медиана/1000 Q25 < - анализ $ QQ75 <- анализ $ QIQR <- анализ $ IQR/1000 наклон <- анализ $ скос kurt <- анализ $ kurtosis sp.ent <- анализ $ sh sfm <- анализ $ режим sfm <- анализ $ режим/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, праг = праг, fmax = 280, ylim = c (0, 280/1000), сюжет = FALSE, wl = wl) [, 2] meanfun <-mean (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, праг = праг, bandpass = b * 1000, fftw = TRUE) [, 2] meandom <- средно (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]) промени <- добавяне (промени, промяна)} if (mindom == maxdom) modindx <-0 else modindx <- средно (промени, na.rm = T)/dfrange #запазване на резултатите се връщат (c (продължителност, среден честота, sd, медиана, Q25, Q75, IQR, наклон, kurt, sp.ent, sfm, режим, центроид, peakf, meanfun, minfun, maxfun, meandom, mindom, maxdom, dfrange, modindx))})) #промяна на имената на резултатите имена на редове (x) <- c ("продължителност", "meanfreq", "sd", "медиана", "Q25", "Q75", "IQR", "наклон", "kurt", "sp.ent", "sfm", "режим", "центроид", "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") имена на редове (x) <- c (1: nrow (x)) return (x)}
processFolder <- function (folderName) { # Започнете с празни data.frame. data <- data.frame () # Вземете списък с файлове в папката. list <- list.files (folderName, '\. wav') # Добавяне на списък с файлове към data.frame за обработка. for (fileName in list) {ред <- data.frame (fileName, 0, 0, 20) данни <- rbind (данни, ред)} # Задайте имена на колони. имена (данни) <- c ('sound.files', 'selec', 'start', 'end') # Преместване в папка за обработка. setwd (folderName) # Обработка на файлове. акустика <- specan3 (данни, паралел = 1) # Преместване обратно в родителската папка. setwd ('..') акустика}
пол <- функция (filePath) {ако (! съществува ('genderBoosted')) {load ('model.bin')} # Пътища за настройка. currentPath <- getwd () fileName <- basename (filePath) path <- dirname (filePath) # Задайте директория за четене на файл. setwd (path) # Започнете с празни data.frame. data <- data.frame (fileName, 0, 0, 20) # Задайте имена на колони. имена (данни) <- c ('sound.files', 'selec', 'start', 'end') # Обработка на файлове. акустика <- specan3 (данни, паралел = 1) # Възстановяване на пътя. setwd (currentPath) predict (genderCombo, newdata = acoustics)}
# Заредете данни
leakage <- processFolder ('caminho para o pasta com sample de áudio com vazamento') without_leakage <- processFolder ('caminho para o pasta com sample de áudio sem vazamento')
# Задайте етикети.
утечка $ label <- 1 без_leakage $ етикет <- 2 данни <- rbind (изтичане, без_изтичане) данни $ етикет <- фактор (данни $ етикет, етикети = c ('изтичане', 'без_утечка'))
# Премахнете неизползваните колони.
данни $ продължителност <- NULL данни $ sound.files <- NULL данни $ selec <- NULL данни $ peakf <- NULL
# Премахване на редове, съдържащи NA.
данни <- данни [пълни.казуси (данни),]
# Изпишете csv набор от данни.
write.csv (data, file = 'features.csv', sep = ',', row.names = F)
Стъпка 11: Осребрете невронното
A ideia do uso de uma rede neural, é a de realizar um reconhecimento automatizado através dos dados coletados pelo dispositivo de sensoriamento.
A rede neural utilizada é do tipo MLP (Multilayer Perceptron), este modelo é treinado com dados previamente identificados e após esse treinamento o modelo implantado no system consguirá realizar a identificação automática do sinal recebido, informando se naquele ponto existe
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. Não foi realizado nenhuma abordagem estatística muito aprofundada, mas mesmo com um trabalho mais повърхностно pode-se chegar a algumas variáveis com bons desempenhos.
Para os testes realizados o modelo obteve um desempenho muito bom, alcançando na maioria dos testes uma taxa de acerto de 100%, como pode ser observado na imagem anexa.
Este algoritmo é utilizado para treinar o modelo da rede e retornar a taxa de acerto do mesmo. No system de detecção um algoritmo um pouco diferente seria usado, pois ele realizaria o treino ou receberia um modelo já treinado da nuvem ou de alguma outra fonte e com esse modelo realizaria as predições para cada leitura realizada.
# кодиране: utf-8
импортирайте панди като pd
импортиране на numpy като np от sklearn.model_selection внос train_test_split като tts от sklearn.neural_network импортиране на MLPClassifier като MLP от sklearn.metrics импортиране на classic_report като cr от sklearn.metrics внос confusion_matrix като cm
# Препоръчвайте да правите CSV
df = pd.read_csv ('features.csv') # Separação das entradas df_X = df [df.columns [: len (df.columns) -1] # Филтриране като 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, activation = 'tanh', solver = 'lbfgs')
# Treinando modelo
modelo.fit (X_train, Y_train) резултат = modelo.predict (X_test)
# Резултати от Imprimindo
отчет = cr (Y_test, резултат) mat = cm (y_pred = резултат, y_true = Y_test) печат ("Matriz de confusão") печат (мат, край = "\ n / n") печат ("Relatório de Classificação") печат (доклад)
Препоръчано:
Projeto IoT - Sistema Detector De Fumaça: 5 стъпки
Проектиране на IoT - Sistema Detector De Fumaça: Въвеждане на O Sistema Detector de Fumaça се състои от решението на IoT за обективиране на разрешителни за мониторинг на аларми за включване на остатъци в приложения за Android. O projeto é baseado em um microcontrolador que se comunica com a nu
SISTEMA DE IRRIGAÇÃO AUTOMÁTICA CONTROLADA POR SMARTPHONE: 8 стъпки
SISTEMA DE IRRIGAÇÃO AUTOMÁTICA CONTROLADA POR SMARTPHONE: PONTIF Í CIA UNIVERSIDADE CAT Ó LICA DE MINAS GERAISCurso: Especializa ç ã o em Arquitetura de Software Професор: Ило Риверо
Sistema De Prevenção De Deslizamentos Com Sensor MPU-6050: 6 стъпки
Sistema De Prevenção De Deslizamentos Com Sensor MPU-6050: O сензор MPU-6050 е чип с чип, който може да бъде използван за алармерен и гироскопичен тип MEMS. São 3 eixos para o acelerômetro e 3 eixos para o giroscópio, sendo ao todo 6 graus de liberdade (6DOF) .Vamos aprender a desenvolver um protótipo de um system de preven
Sistema De Irrigação Automático Para Plantas: 8 стъпки
Sistema De Irrigação Automático Para Plantas: A irrigação é uma das tecnologias mais utilizadas por farmtores pois esta atividade Independe da ocorrência de chuvas, garante uma safra uniforme, reduz a falha humana, minimiza o consumo de águanas eusigo minimoza okonmo de águas uisa
Sistema De Suporte and Eficiência Energética Para Refrigeradores: 14 стъпки
Sistema De Suporte and Eficiência Energética Para Refrigeradores: Всичко, което трябва да се направи. Neste projeto apresento as etapas para o desenvolvimento de um system de apoio para a gerência do consumo e eficiência energética em hladradores.Mas primeiro, vamos contextualizar você do problem existente: Em tempos de cr