ዝርዝር ሁኔታ:

ሲስተማ Autônomo Localizador De Vazamentos: 11 ደረጃዎች
ሲስተማ Autônomo Localizador De Vazamentos: 11 ደረጃዎች

ቪዲዮ: ሲስተማ Autônomo Localizador De Vazamentos: 11 ደረጃዎች

ቪዲዮ: ሲስተማ Autônomo Localizador De Vazamentos: 11 ደረጃዎች
ቪዲዮ: Robots that fly ... and cooperate | Vijay Kumar 2024, ህዳር
Anonim
ሲስተማ Autônomo Localizador De Vazamentos
ሲስተማ Autônomo Localizador De Vazamentos

Este projeto consiste em um robô, que através da leitura realizada por um dispositivo, equipado com um sensor pezoelétrico, captura os espectros das vibrações no solo, ልዩ ተለይቶ የሚታወቅ እና አካባቢያዊው ፣ ኮም ኦ ፕሮቴስታንት ዶስ ዳዶስ ፖማ uma ሬቫል ኔራልስ ፣ uma tubulação.

ኦ ፕሮሴሽንቶ ዳራዎችን ያጠፋዋል። ኦስ ዳዶስ também são enviados para um serviço na nuvem, responsável por auxiliar no processo de Integência አርቲፊሻል 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 Xavier Ap, Lucas de Sousa Rodrigue. ጎሜስ ፖሎ እና ሮናልዶ ፒ ጎሜዝ ፖሎ። ታምቤም ተካፋዮች ፕሮጄቶ ወይም አኖኖ ዳንኤል ዴ ካስትሮ ፓቼኮ ዲግሪያን ዲ ኤንጀሃሪያ ሜሲኒካ እና ዩኒቨርሲዴዴ ኒውተን ፓይቫ ዴ ቤሎ ሆሪዞንቴ። 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

Para realização deste projeto, os seguintes materiais foram utilizados:

1 አርዱinoኖ ደረሰ

1 Dragonboard 410c

2 ነጂዎች ለሞተር ዲ ኮርሬንቴ ቀጣይነት ባለው ሁኔታ ላይ

4 ትራንዚስተሮች BC548

4 ዲዮዶስ 1n4007

4 Resistores 4k7Ω ¼ ወ

1 አሽከርካሪ ለፓራ ሞተር ሞተር መቆጣጠሪያ

1 ትራንዚስተሮች BC548

1 ዲዮዶስ 1N4007

1 Resistores 4k7Ω ¼ ወ

1 አይጥ ዩኤስቢ

1 ቴክላዶ ዩኤስቢ

1 ተቆጣጣሪ

1 ካቦ ኤችዲኤምአይ

1 ሮቦ ዴ እስቴራስ - ፕላላፎርማ ዙሞ

1 Mini dispositivo de cremalheira e engrenagem

1 ሰርቮ ሞተር 9 ግ

ደረጃ 2: Adaptação Mecânica

Image
Image

ፓራአይአአአአአአአአአአአአአአአ አአአአአአአ አአአአአአአአ አአአአአአአአአ ለአአአአአአአአአአአአአአአአአአአአአአአኦኦአኦ አእምሯቸውን አሥተሣሥቶ ፣ አሥተሣሥኦን አሥተሣሥቶ ፣ ፎዝ ሴ daruá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, tempo de execução, fixou-se o dispositivo እና plataforma zumo, utilizando fita dupla face, conforme vídeo.

ደረጃ 3: Acionamento Dos Motores

Obtenção Do ኦዲዮ
Obtenção Do ኦዲዮ

Para executar a movimentação dos motores do robô ZUMO e do dispositivo de captura, fez-se necessá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 ሞተር de corrente continua ea segunda o ሾፌር ፓራ um servo ሞተር።

ደረጃ 4: Obtenção Do Áudio

ፓራ 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 disposhes sob disse sos disposes sov disse sos disposed sos disposed sos disposed sos disposed sov ኢሜል [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.

እንደ frequências de interesse para o projeto estão entre 100Hz e 800Hz። Para isso o dispositivo de sensoriamento foi configurado com uma frequência de amostragem de 3 kHz para que sejam respeitada condoções do teorema de amostragem de Nyquist, onde a frequência de aquisição deve estar pelo menos duas vezes acima das frequências.

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 (የቋንቋ ቋንቋ C)
Configuração Do Arduino DUE (የቋንቋ ቋንቋ C)

ዴቪዶ አንድ ግራንዲዳዴ ዴ ዳዶስ ፣ ሰርካ ዲ 3000 ፖንቶስ ፖር ሰጉንዶ ፣ ዶ ቲፖ ኢንቴሮ ዴ 32 ቢት ፣ ጌራዶስ ፔሎ ዲስፖዚቲቮ ዴ ሴንሰርሪዮ እና አስፈላጊው ፓራሴሽንቶ dos algoritmos እና DRAGONBOARD 410c ፣ foi utilizado o Arduino DUE para fazer uso de uma entrada analó poder de processamento, isso foi necessário por que o Shield de interfaceamento Grove Seeed Sensor Mezzanine instalado na DRAGONBOARD 410c, que possui um microcontrolador ATmega 328, não possui poder de processamento para essa operação.

ኦ Arduino DUE foi configurado para receber os comandos enviados da plataforma QUALCOMM DRAGONBOARD 410c በ comunicação ተከታታይ።

እንደ አርዱኢኖ ፎራም የለም -

Realizar a aquisição dos dados;

ለ DRAGONBOARD 410c አስተላላፊ።

ፕሮግራሙን ይመልከቱ -

#ያካትቱ #Numb_Sample 3000 #DAF_Input A0 ን ይግለጹ

#ሰርቨር 7 ን ይግለጹ

#ጥራት PosServoMin 4 #Define PosServoMax 6 #define Period 60 unsigned int Scont = 0, SNow = PosServoMin; ያልተፈረመ ረጅም int DAC [Numb_Sample] ፣ ind = Numb_Sample; ባዶ TC3_Handler () {TC_GetStatus (TC1, 0); ከሆነ (ind <Numb_Sample) DAC [ind ++] = analogRead (DAC_Input); ከሆነ (Scont

1); // 50% የቀረጥ ዑደት

TC_SetRC (tc ፣ ሰርጥ ፣ አርሲ); 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}

ባዶነት ማዋቀር ()

{Serial.begin (115200); pinMode (DAC_Input ፣ INPUT); TimerStart (TC1 ፣ 0 ፣ TC3_IRQn ፣ 1500) ፤ // ሰዓት ቆጣሪ // TC_Stop (TC1 ፣ 0); pinMode (ሰርቪኦ ፣ ውፅዓት); }

ባዶነት loop ()

{/*// እያለ (! Serial.available ()); char rc; // = Serial.read (); int indice = 0; ከሆነ (rc == 0) {ሳለ (! Serial.available ()); rc = Serial.read (); ማብሪያ (rc) {ጉዳይ 1: ኢንዴክስ = 0; ሳለ (! Serial.available ()); ሳለ ((rc = Serial.read ())! = 0xFF) {indice << = 8; indice += rc; ሳለ (! Serial.available ()); } Serial.print (0); Serial.print (2); ላክ ቁጥር (DAC [indice]); Serial.print (0xFF); ሰበር; ጉዳይ 3: ሳለ (! Serial.available ()); ከሆነ ((Serial.read ()) == 0xFF) {SNow = PosServoMax; መዘግየት (500); ኢንዴ = 0; // TC_Start (TC1 ፣ 0); ሳለ (ኢንዲ <Numb_Sample); // TC_Stop (TC1 ፣ 0); SNow = PosServoMin; መዘግየት (500); Serial.print (0); Serial.print (4); Serial.print (0xFF); } መሰበር; }} ሌላ ከሆነ (rc == '2') {Serial.print ("የሙከራ Servo Motor / n"); ሳለ (! Serial.available ()); rc = Serial.read (); ከሆነ (rc == '1') {Serial.print ("Mode 1 / n"); SNow = PosServoMax; } ከሆነ (rc == '2') {Serial.print ("Mode 2 / n"); SNow = PosServoMin; }} */ SNow = PosServoMax; መዘግየት (100); SNow = PosServoMin; መዘግየት (100); }

ደረጃ 6: በይነገጽ ዳስ ቴክኖሎጅዎች

በይነገጽ ‹ዳስ ቴክኖሎጅ›
በይነገጽ ‹ዳስ ቴክኖሎጅ›

Para a comunicação dos dados entre o Arduíno DUE ea DRAGONBOARD 410c, በይነገጽን በመጠቀም በይነገጽ እና በሥዕላዊ መግለጫው ላይ ፣ ወይም ከዚያ በበለጠ ሊሠራ የሚችል ሥራ አስፈፃሚ ፣ ኢንአኦ ኦፕቶኡ-ሴ pelo uso de uma interface USB CDC entre o Arduino DUE ea DRAGONBO necessitaria da recompilação do KERNEL da DRAGONBOARD 410c, que não se fez por causa do curto tempo disponível.

ደረጃ 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።

Observação: 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. በዩኤስቢ ፣ በ ‹ኬርኔል› እና በ DRAGONBOARD 410c para que a porta fosse criada corretamente para a comunicação.

የጊዜ ማስመጣት ተከታታይ አስመጪ ፓንዳዎችን እንደ ፒዲ ማስመጣት numpy እንደ np

# Configuração da conexão ተከታታይ

ser = serial. Serial (port = '/dev/ttyAMC0', #tty96B0 ', baudrate = 250000, parity = serial. PARITY_NONE ፣ stopbits = serial. STOPBITS_ONE ፣ ባይቴዜዝ = ተከታታይ

ser.isOpen ()

ህትመት ('ትዕዛዞችዎን ከዚህ በታች ያስገቡ። / r / n መተግበሪያውን ለመተው "ውጣ" ያስገቡ።)

ግብዓት = 1

ሳለ 1: ግብዓት = ግብዓት (">>") ግብዓት == 'መውጫ': ser.close () መውጫ () elif ግብዓት == 'አንብብ': 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 =

እኔ በክልል (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): aual << 8 atual += cc = ser.read (1) lista.append (atual)

ደረጃ 8: ተርጓሚ ዶስ አርኩቪዮስ ዴ ኦዲዮ

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

ፓራ ፖድራሪያል ራማዛር ኦማ ፕሪሚራ አናአሊሴ ዶስ ዳዶስ ኦትራዶስ ኤችአይቪስ ዳሳሽ ፣ በሰነድ ውስጥ አስፈላጊ አይደለም በ WAV ፣ fornecidos pelos alunos autores do TCC e colaboradores do projeto, para valores numéricos, que são utilizados nos Algoritmos. ፓራ realizar esta conversão foi escrito um algoritmo em PYTHON 3 que lê o arquivo WAV e salva os dados do espectro em um arquivo CSV. ኦ algoritmo utilizado segue abaixo e em anexo para አውርድ።

Esse algoritmo não se faz necessário para o funcionamento do sistema, já que o Arduino DUE já enviará esses dados em um array de valores numéricos.

# ኮድ-utf-8

# Leitura e conversão dos audios para csv

# MÓDULOS UTILIZADOS

የማስመጣት ሞገድ ማስመጣት numpy እንደ np አስመጪ ፓንዳዎች እንደ ፒዲ ማስመጣት 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_size-1) ምልክት = np.fromstring (waveData, dtype = 'int32') ጊዜ = np.linspace (ጀምር = 0 ፣ አቁም = data_size/sample_rate ፣ num = data_size ፣ endpoint = True) df = pd.concat ([pd. DataFrame (ሲግናል) ፣ pd. DataFrame (ጊዜ)] ፣ ዘንግ = 1) df.to_csv (የፋይል_ስም + '.csv' ፣ መረጃ ጠቋሚ = ሐሰት) መመለስ df

# CARREGANDO የመረጃ ፍሬም COM OS ዳዶስ ኦዲዮን ያድርጉ

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_numz ''_me_ns''_ame_ns_m_am_va_ma_m_va_ma_va_ma_va_ma_va_m_va_ma_m_va_ma_va_ma_va_ma_va_ma_va_ma_m_va_ma_m_va_ma_m_va_ma_m_va_ma_m_va_ma_m_va_m_va_m_va_ma_va

# GRÁFICO 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.

ደረጃ 9 አናሊሴ ቪዥዋል ዶ ሲናል

አናሊሴ ቪዥዋል ዶ ሲናል
አናሊሴ ቪዥዋል ዶ ሲናል
አናላሴ ቪዥዋል ዶ ሲናል
አናላሴ ቪዥዋል ዶ ሲናል
አናላሴ ቪዥዋል ዶ ሲናል
አናላሴ ቪዥዋል ዶ ሲናል

O P P P P P P P re re re re re re re re re re re re re re re re re re,,,, este este este este este este este este este este este este este este sin sin sin sin,,,,,,,,,,, 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 እና tubulação። Estes gráficos servirão para validação das análises realizadas pelo algoritmo de detecção automática.

Limitando o eixo das frequências entre 100Hz e 800Hz, fica claro a existência de vazamentos quando se observam distúrbios nesse range de frequências.

# ኮድ-utf-8# Módulos utilizados para processamento da transformada de Fourier

አስመጪ ፓንዳዎችን እንደ ፒዲ ማስመጣት 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. 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)]) በለስ ፣ መጥረቢያ = plt.subplots (2, 1, figsize = (20, 10)) መጥረቢያ [0].plot (t, y) መጥረቢያ [0].set_xlabel ('ጊዜ') መጥረቢያ [0].set_ylabel ('Amplitude') መጥረቢያ [1].plot (frq, abs (Y), 'r') መጥረቢያ [1].set_xlim ([100, 800]) መጥረቢያ [1].set_ylim ([0, max_lim]) መጥረቢያ [1].set_xlabel ('Freq (Hz)') መጥረቢያ [1].set_ylabel ('| Y (freq) |')) plt.show () frq, abs (Y)# Função que realiza a carga dos dados do CSV e chama a função de Fourier def read_csv (ፋይል_ስም ፣ init ፣ final): df = pd.read_csv (ፋይል_ስም + +.csv ') df.columns = [' amp ',' ጊዜ '] ዴልታ = የመጨረሻ-init init*44100> ሌን (ዲኤፍ) ወይም የመጨረሻ*44100> ሌን (ዲኤፍ): init = (ሌን (ዲኤፍ)/44100) -ደታ init = 100) & (df [' freq '] <= 800)] mx = ተደርድሯል (df [' amp ']) ማተም ("Média das amplitudes:", np.round (np.mean (mx))) ህትመት ("Percentuais em relação a média das amplitudes.") ህትመት ("100 maiores amplitudes", np.mean (mx [-100:]) // df ['amp']. አማካይ ()*100 ፣ "%" ፣ sep = "") ህትመት ("50 maiores amplitudes:", np.mean (mx [-50:]) // df ['amp']። አማካኝ ()*100 ፣ "%" ፣ sep = "") ህትመት ("10 maiores amplitudes:", np.mean (mx [-10:]) // df ['amp']። አማካኝ ()*100 ፣ "%" ፣ sep = "") ህትመት ("Maior amplitude:", np.mean (mx [-1:]) // df ['amp']. አማካኝ ()*100, " %", sep =" ") read_csv ('Solo_com_Vazamento', 2, 10) # Explot de gráficos para vazamentoread_csv ('Solo_sem_Vazamento', 2, 10) # ምሳሌ de gráficos para sem vazamento

ደረጃ 10 Algoritmo Em R Para Extração Das ባህሪያት Dos Dados

Algoritmo Em R Para Extração Das ባህሪያት Dos Dados
Algoritmo Em R Para Extração Das ባህሪያት Dos Dados
Algoritmo Em R Para Extração Das ባህሪያት Dos Dados
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 é necessário saber se o arquivo de áudio trata-se de uma amostra vazamento deteado ou não, isso por que os dados resultantes desse processo servirão para o treinamento da rede ነርቭ መገልገያ.

Para quando o sistema 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.

የኢስታስ ባህሪዎች 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.

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.

ኦ ሶፍትዌሩ usado para rodar o algoritmo é gratuito, download dopretador R e do R Studio.

Características extraídas:

  • meanfreq - አማካይ ድግግሞሽ (በ kHz)
  • sd: የድግግሞሽ መደበኛ መዛባት
  • መካከለኛ: መካከለኛ ድግግሞሽ (በ kHz)
  • Q25: የመጀመሪያው ኳንተል (በ kHz)
  • ጥ 75 - ሦስተኛው ኳንተል (በ kHz)
  • IQR - የሁለትዮሽ ክልል (በ kHz)
  • skew: ጠማማነት (በልዩ መግለጫ ውስጥ ማስታወሻ ይመልከቱ)
  • ኩርት: kurtosis (በልዩ መግለጫ ውስጥ ማስታወሻ ይመልከቱ)
  • sp.ent: spectral entropy
  • sfm: ስፔክትሬት ጠፍጣፋነት
  • ሁነታ: ሞድ ድግግሞሽ
  • ሴንትሮይድ: ድግግሞሽ ሴንትሮይድ (ዝርዝርን ይመልከቱ)
  • ጫፍ - ከፍተኛ ድግግሞሽ (ከፍተኛ ኃይል ያለው ድግግሞሽ)
  • meanfun: በአኮስቲክ ምልክት ላይ የሚለካ መሠረታዊ ድግግሞሽ አማካይ
  • minfun: በአኮስቲክ ምልክት ላይ የሚለካ ዝቅተኛ መሠረታዊ ድግግሞሽ
  • maxfun: በአኮስቲክ ምልክት ላይ የሚለካው ከፍተኛ መሠረታዊ ድግግሞሽ
  • meandom: በአኮስቲክ ምልክት ላይ የሚለካው የአውራ ድግግሞሽ አማካይ
  • አእምሮ - በአኮስቲክ ምልክት ላይ የሚለካው የአውራ ድግግሞሽ ዝቅተኛው
  • 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 <- ተግባር (ኤክስ ፣ ቢፒ = ሐ (0 ፣ 22) ፣ wl = 2048 ፣ ደፍ = 5 ፣ ትይዩ = 1) { # ትይዩ ማቀናበርን ለመጠቀም ቤተመጽሐፍት (devtools) ፣ install_github ('nathanvan/parallelsugar') ከሆነ (ክፍል (X) == "data.frame") {ከሆነ (ሁሉም (ሐ ("sound.files" ፣ "selec" ፣ "start" ፣ "end") % % colnames (X))) {ጀምር <- as.numeric (ያልተዘረዘረ (X $ ጅምር)) መጨረሻ <- እንደ. ቁጥር አይዘርዝሩ (X $ selec))} ሌላ አቁም (ለጥፍ (ለጥፍ (ሐ (“sound.files” ፣ “selec” ፣ “start” ፣ “end”) [! (c (“sound.files” ፣ “selec” ፣ “ጀምር” ፣ “መጨረሻ”) % በ % colnames (X))] ፣ ውድቀት =”፣”) ፣ “አምድ (ሮች) በውሂብ ፍሬም ውስጥ አልተገኘም”))} ሌላ አቁም (“X የውሂብ ፍሬም አይደለም”)) #በመነሻ ወይም በማቆሚያ ውስጥ NA ካሉ (ማንኛውም (is.na (c (መጨረሻ ፣ ጅምር)))) ካቆመ (“መጀመሪያ እና/ወይም መጨረሻ ላይ የተገኙ ኤኤንኤዎች)) #መጨረሻ ወይም ጅምር የቁጥር ማቆሚያ ካልሆኑ ከሆነ (ሁሉም (ክፍል (መጨረሻ)! = "ቁጥራዊ" እና ክፍል (ጅምር)! = "ቁጥራዊ")) አቁም ("'መጨረሻ' እና 'ሴሌክ' ቁጥራዊ መሆን አለባቸው") #ማንኛውም ጅምር ከፍ ካለ (ማንኛውም (መጨረሻ - ጀምር <0)) ማቆሚያ (ለጥፍ (“ጅማሬው ከኤ d በ”፣ ርዝመት (የትኛው (መጨረሻ - ጅምር 20)) ማቆሚያ (ለጥፍ (ርዝመት (የትኛው (መጨረሻ - መጀመሪያ> 20)) ፣“ምርጫ (ምርጫዎች) ከ 20 ሰከንድ በላይ”)) አማራጮች (show.error.messages = TRUE) #ከሆነ ቢፒ ቬክተር ወይም ርዝመት ካልሆነ 2) አቁም ("'bp' የቁጥር ርዝመት ቬክተር መሆን አለበት 2")} ሁሉም የድምፅ ፋይሎች ካልተገኙ #ማስጠንቀቂያ ተመለስ fs <- list.files (ዱካ = getwd () ፣ ጥለት = ".wav $" ፣ ign.case = TRUE) ከሆነ (ርዝመት (ልዩ (sound.files [(sound.files % in % fs)])))! = ርዝመት (ልዩ (sound.files))) ድመት (ለጥፍ (ርዝመት (ልዩ (ድምጽ። ፋይሎች))-ርዝመት (ልዩ (sound.files [(sound.files % in % fs)]))) ፣ “.wav ፋይል (ዎች) አልተገኘም”)) #በስራ ማውጫ ውስጥ የድምፅ ፋይሎች ብዛት እና 0 ቢቆም d <- የትኛው (sound.files % በ % fs) ከሆነ (ርዝመት (d) == 0) {አቁም ("የ.wav ፋይሎች በሥራ ማውጫ ውስጥ የሉም"))} ሌላ {ጀምር <- ጀምር [መ] መጨረሻ <- end [d] selec <- selec [d] sound.files <- sound.files [d]} # ትይዩ ቁጥራዊ ካልሆነ (! is.numeric (ትይዩ)) ማቆም ("'parallel' must የ 1 ርዝመት የቁጥር ቬክተር ይሁኑ (ካለ (! (ትይዩ %% 1 == 0) ፣ ትይዩ 1) {አማራጮች (ማስጠንቀቂያ = -1) ከሆነ (ሁሉም (Sys.info () [1] ==” ዊንዶውስ”፣ ስም ስም (“parallelsugar”፣ በፀጥታ = እውነት) == እውነት)) ላፕ <- function (X ፣ FUN) parallelsugar:: mclapply (X ፣ FUN ፣ mc.cores = parallel) ሌላ ከሆነ (Sys.info () [1] == "ዊንዶውስ") {ድመት ("የዊንዶውስ ተጠቃሚዎች ትይዩ ስሌት ('' parallelsugar '') ጥቅል መጫን አለባቸው (አሁን አያደርጉትም!))) ላፕ <- pbapply:: pblapply} ሌላ ላፕ <- ተግባር (X ፣ FUN) ትይዩ:: mclapply (X ፣ FUN ፣ mc.cores = ትይዩ)} ሌላ ላፕ <- pbapply:: pblapply አማራጮች (ማስጠንቀቂያ = 0) ከሆነ (ትይዩ == 1) ድመት (“የአኮስቲክ መለኪያዎች መለካት”)) x <- as.data.frame (ላፕ (1: ርዝመት (ጅምር) ፣ ተግባር (i) {r <- tuneR:: readWave (file.path (getwd () ፣ sound.files )) ፣ from = ጀምር ፣ ወደ = መጨረሻ ፣ አሃዶች = “ሰከንዶች”) ለ ጣሪያ ([email protected]/2000) - 1) ለ [2] < - ጣሪያ ([email protected]/2000) - 1 #ድግግሞሽ ስፔክትረም ትንተና ዘፈኖች <spex> [email protected], flim = c (0, 280/1000) ፣ ሴራ = ውሸት) #አስቀምጥ መለኪያዎች meanfreq <- ትንተና $ አማካኝ/1000 ሲዲ <- ትንተና $ sd/1000 መካከለኛ <- ትንተና $ ሚዲያን/1000 Q25 < - ትንተና $ QQ75 <- ትንተና $ QIQR <- ትንተና $ IQR/1000 skew <- ትንተና $ skewness kurt <- ትንተና $ kurtosis sp.ent <- ትንተና $ sh sfm <- ትንተና $ sfm ሁነታ <- ትንተና $ ሞድ/1000 ሴንትሮይድ <- ትንተና $ cent/1000 #ድግግሞሽ ከከፍታ ጫፎች ጫፍ ጋር <- 0 #seewave:: fpeaks (ዘፈኖች ፣ f = [email protected] ፣ wl = wl ፣ nmax = 3 ፣ ሴራ = ሐሰት) [1, 1] #የመሠረት ድግግሞሽ መለኪያዎች ff <- seewave:: ፈንድ (r, f = [email protected], ovlp = 50 ፣ ደፍ = ደፍ ፣ fmax = 280 ፣ ylim = c (0 ፣ 280/1000) ፣ ሴራ = ሐሰት ፣ 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, ሴራ = ኤፍ ፣ ደፍ = ደፍ ፣ ባንድ ማለፊያ = ለ * 1000), fftw = TRUE) [, 2] meandom <- mean (y, na.rm = TRUE) mindom <- ደቂቃ (y ፣ na.rm = TRUE) maxdom <- max (y, na.rm = TRUE) dfrange <- (maxdom- mindom) የቆይታ ጊዜ <- (መጨረሻ - ጀምር ) #የሞዴሎግ መረጃ ጠቋሚ ስሌት ለውጦች <- vector () ለ (j in which (! is. na (y))) {ለውጥ <- abs (y [j]- y [j + 1]) ለውጦች <- append (ለውጦች ፣ ለውጦች)} (mindom == maxdom) modindx <-0 ሌላ modindx <- አማካኝ (ለውጦች ፣ na.rm = T)/dfrange #አስቀምጥ ውጤቶች ተመላሽ (ሐ (ቆይታ ፣ አማካይ ፍሬክ ፣ ኤስዲ ፣ መካከለኛ ፣ Q25 ፣ Q75 ፣ IQR ፣ skew ፣ kurt ፣ sp.ent ፣ sfm ፣ mode ፣ centroid ፣ peakf ፣ meanfun ፣ ሚንፉን ፣ maxfun ፣ meandom ፣ mindom ፣ maxdom ፣ dfrange ፣ modindx))}))) #የለውጥ ውጤት ስሞች ሮን ስሞች (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 <- function (folderName) { # በባዶ data.frame ይጀምሩ። ውሂብ <- data.frame () # በአቃፊው ውስጥ ያሉትን የፋይሎች ዝርዝር ያግኙ። ዝርዝር <- list.files (አቃፊ ስም ፣ '\. wav') # ለማቀናበር የፋይል ዝርዝርን ወደ data.frame ያክሉ። ለ (የፋይል ስም በዝርዝሩ) {ረድፍ <- data.frame (የፋይል ስም ፣ 0 ፣ 0 ፣ 20) ውሂብ <- rbind (ውሂብ ፣ ረድፍ)} # # የአምድ ስሞችን ያዘጋጁ። ስሞች (ውሂብ) <- c ('sound.files', 'selec', 'start', 'end') # ለማቀናበር ወደ አቃፊ ይሂዱ። setwd (አቃፊ ስም) # የሂደቶች ፋይሎች። አኮስቲክ <- specan3 (ውሂብ ፣ ትይዩ = 1) # ወደ ወላጅ አቃፊ ይመለሱ። setwd ('..') አኮስቲክ}

gender <- function (filePath) {ካለ (! ካለ ('genderBoosted')) {ጭነት ('model.bin')} # የማዋቀሪያ መንገዶች። currentPath <- getwd () fileName <- basename (filePath) ዱካ <- dirname (filePath) # ፋይል ለማንበብ ማውጫ ያዘጋጁ። setwd (ዱካ) # በባዶ data.frame ይጀምሩ። ውሂብ <- data.frame (የፋይል ስም ፣ 0 ፣ 0 ፣ 20) # የአምድ ስሞችን ያዘጋጁ። ስሞች (መረጃ) <- c ('sound.files', 'selec', 'start', 'end') # process files. አኮስቲክ <- specan3 (ውሂብ ፣ ትይዩ = 1) # መንገድን ወደነበረበት ይመልሱ። setwd (currentPath) መተንበይ (genderCombo ፣ newdata = acoustics)}

# ውሂብ ጫን

መፍሰስ <- processFolder ('caminho para o pasta com ናሙናዎች de áudio com vazamento') ያለ_መልቀቅ <- processFolder ('caminho para o pasta com ናሙናዎች de áudio sem vazamento')

# መለያዎችን ያዘጋጁ።

መፍሰስ $ መሰየሚያ <- 1 ያለ_መለቀቅ $ መሰየሚያ <- 2 ውሂብ <- rbind (መፍሰስ ፣ ያለ_መለጥ) ውሂብ $ መሰየሚያ <- factor (ውሂብ $ መሰየሚያ ፣ መለያዎች = ሐ ('መፍሰስ' ፣ 'ያለ_መለቀቅ'))

# ጥቅም ላይ ያልዋሉ ዓምዶችን ያስወግዱ።

ውሂብ $ ቆይታ <- NULL ውሂብ $ sound.files <- NULL ውሂብ $ selec <- NULL ውሂብ $ peakf <- NULL

# NA የያዙ ረድፎችን ያስወግዱ።

ውሂብ <- data [complete.cases (ውሂብ) ፣]

# የ csv የውሂብ ስብስብ ይፃፉ።

write.csv (ውሂብ ፣ ፋይል = 'features.csv' ፣ sep = ',' ፣ row.names = F)

ደረጃ 11: ነርቭን ይድገሙ

ሬድ ነርቭ
ሬድ ነርቭ

አንድ ኢዶአያ ዶ ኡማ ራቫን ነርቭን ፣ እንደ አንድ ሪአዛር ኦም ሬሴሲሜንቶ አውቶማዚዛዶ አትራሴስ ዶስ ዳዶስ ኮሌታዶስ ፔሎ ዲስፖስቲቮ ዴ ሴንሴሪዮን።

MLP (Multilayer Perceptron) ፣ ሞዲሎ ኢ ትሪንዳዶ ኮም ዳዶስ ፕሪሚየር ኢንስፔክዶዶስ ኤፒሶስ ኢስፔሪያን ሞዶሎ ኢንፓላቶዶ ሲስተም conseguirá realizar a identificação automática do sinal recebido, informando se anquele ponto exis.

ፎኢአአአአአአአአአአአአአአ አአአአአአአአአአአ አአአአአ አአአአአአአአአአ አአአአአአአአ አአአአአአአአአአአ አአአአአአአአአ አአአአአአአአአ አአአ አአአ አአአ አአአ አአአ አአአ አአአ አአአ አአአ አአአ አአአ አአአ አአአአአ አአአአአ አአአአአ አአአአ አአአአአ አአአአ አአአአአ አአአአአ Não foi realizado nenhuma abordagem estatística muito aprofundada, mas mesmo com um trabalho mais superficial pode-se chegar a algumas variáveis com bons desempenhos.

ፓራ ኦስ ፈተናዎች realizados o modelo obteve um desempenho muito bom, alcançando and maioria dos testes uma taxa de acerto de 100%, como pode ser observado and imagem anexa.

Este algoritmo é utilizado para treinar o modelo da rede e retornar a taxa de acerto do mesmo. ምንም ስርዓት የለም ዲሴሲኦኦ ኡም አልጎሪቲሞ ኡም 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

ፓንዳዎችን እንደ ፒዲ ያስመጡ

nump ን እንደ np ከ sklearn.model_selection ማስመጣት train_test_split እንደ tts ከ sklearn.neural_network ማስመጣት MLPClassifier ን እንደ MLP ከ sklearn.metrics አስመጣ classification_report እንደ cr ከ sklearn.metrics ማስመጣት ግራ መጋባት_ማትሪክስን እንደ ሴሜ

# 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 እንደ 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 (አልፋ = 0.0001 ፣ learning_rate_init = 0.0001 ፣ hidden_layer_sizes = (50 ፣ 50 ፣ 50 ፣ 50) ፣ max_iter = 10000 ፣ ማግበር = ‘ታን’ ፣ ፈቺ = ‘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 (ሪፖርት)

የሚመከር: