We're sorry but this page doesn't work properly without JavaScript enabled. Please enable it to continue.
Feedback

Implementación de un Identificador de Sonido en Python

00:00

Formal Metadata

Title
Implementación de un Identificador de Sonido en Python
Title of Series
Part Number
117
Number of Parts
169
Author
License
CC Attribution - NonCommercial - ShareAlike 3.0 Unported:
You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal and non-commercial purpose as long as the work is attributed to the author in the manner specified by the author or licensor and the work or content is shared also in adapted form only under the conditions of this
Identifiers
Publisher
Release Date
Language

Content Metadata

Subject Area
Genre
Abstract
Cameron Macleod - Implementación de un Identificador de Sonido en Python El tema que nos ocupa es como implementar un identificador de sonido tipo Shazam usando técnicas DSP. Los puntos a seguir serán, implementación, retos y pasos adicionales. El proyecto que nos ocupa se encuentra todavía en proceso de desarrollo (el código [subido en GitHub]) y fue inspirado después la conferencia, [Over-the-Air Audio Identification] en FOSDEM 2016.
Cartesian coordinate systemData structureBoolean algebraLibrary (computing)BitMereologyNumberTouchscreenImage resolutionSoftware developerDifferent (Kate Ryan album)File formatTheoryVolume (thermodynamics)DigitizingResultantComputer fileGraph (mathematics)ImplementationElectronic mailing listDigital signalProcess (computing)Multiplication signData recoveryTerm (mathematics)Presentation of a groupContent (media)Transformation (genetics)Expert systemGraph (mathematics)Dependent and independent variablesComputer virusIdentifiabilityDemo (music)Formal languageRepresentation (politics)InformationMusical ensembleAlgorithmComputer animation
Lecture/Conference
Normal (geometry)Audio file formatLecture/Conference
FrequencyMultiplication signDomain nameGraph (mathematics)Hash functionIdentity managementMusical ensembleRow (database)Graph (mathematics)Point (geometry)Metropolitan area networkFourier transform
Graph (mathematics)Different (Kate Ryan album)InformationPoint (geometry)LogarithmScaling (geometry)Computer animation
Point (geometry)1 (number)Graph (mathematics)Maxima and minimaMereologyMultiplication signDialectLecture/ConferenceComputer animation
Multiplication signFourier seriesDifferent (Kate Ryan album)Point (geometry)WindowLink (knot theory)Hash functionFile formatForm (programming)MereologyWordObject-oriented programmingMaxima and minimaFingerprintDiagram
Multiplication signLecture/Conference
Point (geometry)Data storage deviceDatabaseXMLLecture/Conference
Hash functionPoint (geometry)Computer animation
Link (knot theory)Projective planeLecture/Conference
Projective planeSoftware testingVideoconferencingRow (database)SynchronizationInternetworkingVirtual machineFreewareRange (statistics)Product (business)Presentation of a groupBlock (periodic table)ImplementationInformationControl flow
con la ponencia implementación de un identificador de sonido en phyton. Nosotros les presento a Cameron McClell. Bienvenido, Cameron. Hola. ¿Me pueden oír todos? Sí, gracias. Esta charla es básicamente cómo funcionó Shazam. Ahora no funciona lo mismo porque han publicado un papel académico,
así tienen algo mejor. Pero un descargo de responsabilidad muy rápido. No soy experto de cualquier manera y así todo contenido en esta presentación se debe oír con cuidado.
La recuperación de la información musical. Imagínate en un coche y una canción suena en la radio. ¿Te gusta? Pero no sabes el nombre. Este problema vasco es que crea este campo. No es fácil buscar el audio o la música. La representación varía mucho y usualmente hay un tamaño muy grande de archivo.
Shazam lo soluciona con una técnica de huella digital. Y a pesar de eso, hay otros problemas dentro del campo, como búsqueda de partitura y búsqueda con canto real. Hoy vamos a hablar más cómo funciona Shazam,
pero estas técnicas y la teoría se pueden usar a todos. Y bueno, ¿cómo funciona? Mágica, todo. ¿Y por qué Python? Python tiene que ser una lección manual, ¿no? Bueno, yo digo que es una lección buena
porque tiene bibliotecas fantásticas como NumPy, SciPy y Mappletlib para visualizar durante el desarrollo que haces en la pantalla. Y lo más intensivo de estas bibliotecas es escribir en C. Y puedes escribir cosas intensivas tú mismo en C.
Y así es bueno para procesar listas y listas de números, que es todo de ESP, es el proceso de señales digitales. Y para mí, el mejor idioma es el que mejor se conoce. Sí, yo no tengo un demo,
pero el ejercicio para el oyente es que tú haces un demo para mí. ¿Sí? No. Bueno, este es un problema muy interesante y aprendí mucho haciéndolo, pero no lo he completado. Al final pondré mi GitHub link, mi GitHub vínculo
y puedes venir a ver todo lo que he hecho, pero no es mucho. Bueno, la teoría es necesaria. Si te digo señales y transformadas de Fourier, ¿quién es cómodo con todos estos conceptos? Levantar las manos. Bueno, para una revisa muy rápido, un señal es justo información.
Un señal es, puede ser yo diciéndote algo o cosa, puede ser un gráfico así. En este caso, queremos decir gráficos así.
Y las transformadas de Fourier es una manera de extraer las frecuencias desde un señal como el de la izquierda. Teoría, el termo, FFT, que es solo un algoritmo para hacerlo.
Bueno, la estructura de la aplicación. Primero, vamos a normalizar el audio y después tomaremos juegas y almacenamos los resultados.
Bueno, primero, normalizar no es como la definición usual en audio y DSP porque usualmente se quiere decir hacer que todos los volúmenes son los mismos. Ahora, solo queremos que el formato sea el mismo. Audio tiene distintas velocidades de muestras,
resoluciones en el número de bits, el bit depth en inglés, y formatos. Y si solo tenemos un formato, es mucho más fácil escribir un tomador de huellas porque podemos escribir solo uno. Se puede usar alguna cosa como Pie FFmpeg,
pero la última vez que se actualizó fue hace muchos, muchos años. Así no quería usarlo para este. Y también podríamos usar libavcodec con C types, pero no me gusta tanto el C types. No sé si lo habéis usado, pero no es muy buena.
Bueno, huellas. Las metas que queremos es solo que el tamaño es mucho más pequeño que el de un archivo de música normal. Y la cosa es que comparando directamente no funciona. Así queremos algo que hace que es mucho más fácil.
Como la velocidad de búsqueda se crece con el tamaño cuando se disminuye. Y si hay otras señales, como un hombre gritando a tu derecha.
Esta no queremos que interfera con nuestra señal, que es el audio, la música. Y también queremos que las grabaciones que necesitamos para identificar una canción son muy pequeñas. Así no queremos estar de pie con el móvil levantado hasta la música todo el tiempo.
Y esta, si tenemos una canción, un direct audio, como el de la izquierda, queremos que al final tenemos una base de datos así. Tenemos la identidad de la canción y unos hashes que son
relacionados. Y este es cómo vamos a hacerlo. Bueno, es un diagrama un poquito inquietante, pero vamos a dividirlo. Y lo primero. Estos son los gráficos que te mostré antes.
Y si tenemos una canción, se parece así, como la de la izquierda. Vamos a cortarla en partes más pequeñas y convertirlas al
dominio de frecuencia. Este hace que podemos tener un espectrograma que es las frecuencias contra el tiempo. Y puedes ver, a pesar de que el hecho que he puesto mucha interferencia en el señal de la izquierda, aún se puede ver las frecuencias.
Es muy claro, porque este es de una ola de 50 hertz y una ola de 80 y se puede ver a 50 y 80. Hay puntos ahí grandes. Y es lo mismo aquí.
Pero bueno, tenemos este gráfico de la transformación de la Fourier y toda la información está a la izquierda. Oyemos frecuencias muy bajas más que las frecuencias altas. Y así queremos hacer una cosa diferente. Queremos poner este gráfico a algo logarítmico.
Porque nuestros oídos oyen como una escala logarítmica. Hay una ya que existe que se llama Mel. Y este se puede convertir en la frecuencia linear a algo logarítmica. Hay una ecuación, pero es muy, muy sucio.
Bueno, después, este es un espectrograma. Tenemos nuestras transformadas de Fourier a la izquierda, pero están giradas a 90 grados y se ponen muchos.
Así con estos, los puntos oscuros son los que tienen la amplitud más grande y los puntos muy ligeras son las que tienen la amplitud menos. Podemos extraer los puntos máximos de aquí.
Y tenemos un gráfico como la de la derecha. Este ayuda con reducir lo que tenemos que trabajar con. Es mucho más fácil hacer hashes con este. Y también los puntos que tienen la amplitud más grande son los más probable a sobrevivir la interferencia.
Bueno, si tenemos estos máximos parecen así. Al ordenador, este es cómo se ve. Este es nuestro espectrograma, pero en forma más viable para humanos. Y lo hacemos para cada región. Voy a mostrarte unas regiones después.
Y queremos que los puntos todos no están a la misma área, porque sí tenemos muchos hashes, pero están todos de un solo tiempo. Entonces no tenemos una huella de toda nuestra canción. Sólo tenemos una huella de una parte.
Así dividimos en partes. Y tenemos que encontrar anchor points, que es como se dice el papel de Shadam. Y estos anchor points yo he dicho como de lo máximo. Tenemos un anchor point por cada región.
Y después vamos a emparejarlo con todos los puntos a la región siguiente. Con este, este es un hash. Este vínculo entre los puntos. Y se puede ver de forma más clara aquí.
Bueno, tomamos la frecuencia primera y la frecuencia segunda. Y tomamos la diferencia en tiempo entre los dos. Así, de dos menos de uno. Con este, la diferencia en frecuencia no.
Porque lo almacenamos en forma absoluta. Así tenemos una frecuencia aquí. Y tenemos dos frecuencias. Se puede encontrar la diferencia en este. Pero si tomamos la diferencia en tiempo,
da más distintitud a nuestras canciones. Porque tienes el Oops, I Did It Again de Britney Spears. Y tienes Wherever I May Roam de Metallica. Son canciones muy distintas. Pero si lo ves en espectro grano,
hay frecuencias que se comparten. Así con la diferencia en tiempo, no los dos tienen los mismos. Bueno, y después vamos a almacenar. Esta es una palabra difícil.
Almacenarlos. Podemos hacerlo en solo 56 bits, que está un poquito oscura aquí. Es más fácil buscar de las huellas si son de un tamaño muy fijo. Así vamos a ponerlos en un formato así.
La frecuencia está en mils, como dije antes. Y el tiempo está en milisegundos. No usamos ventanas para la frecuencia, como recordáis que hay ventanas de temporada de Fourier. Porque si cambiamos el tiempo que dura una ventana,
no vamos a tener compatibilidad entre los dos cosas. Bueno, con los mils hay una cosa que se llama la frecuencia de Nyquist. La frecuencia de Nyquist es la mitad de tu frecuencia más
grande. Bueno, para el audio de los dedes es 22.05 kilohertz. Porque los dedes están a los 44.1. Y este traduce a 4 miles de mils.
Bueno, y el tiempo? No vamos a almacenar algo más que, bueno, un segundo, indiferente entre los puntos. Porque este nos da 500 milisegundos en cada región
que tenemos. Este ya basta, ya sobre. Tenemos usualmente como 100 de este. Y el T1 no puede ser más que 419, 430, 4 milisegundos,
que es 70 minutos. Este ya basta. Si tienes una canción de prog muy distinta, bueno, es diferente. Pero aquí ya basta.
Después se puede ponerlo en una base de datos como React. Hablé con la gente de Numbly antes y React funcionará para este. También funcionará Radis si tienes para la velocidad más
grande. Bueno, en resumen. Hemos tomado alguno audio y hemos extraído las frecuencias. Tomamos los puntos más grandes de este y los emparejamos. Con estas parejas, cada pareja es un hash.
Y todos estos hashes forman una huella digital de su canción. Pero si que quieres algo que funciona ahora. Hay una cosa que se llama Deja Vu. Y es exacto lo mismo. Es un proyecto en Python que intenta construir una copia de
Shazam. Ya funciona. Puedes descargarlo. Es en GitHub. Este es el vínculo de GitHub. Y puedes descargarlo e intentarlo. Y todo funciona como es un producto. Will Drebel lo hacía, pero no lo conozco.
Una cosa más. Esta charla fue inspirada por una charla en Fosden. Bueno, no acabé el proyecto, pero aprendí mucho haciéndolo. Y hay muchas charlas aquí que tiene una gama desde Machine Learning a Go. Puedes encontrar algo que te interesa y puedes cogerlo y
hacer algo interesante conlo. Bueno, si quieres un ejemplo, hay un papel que intenta hacer sincronización de videos de conciertos. Este papel toma si estás en un concierto y hay mucha gente
grabándolo. Se puede unir todos en un video por causa de las ruedas digitales. Este es un proyecto que solo tiene solo una implementación. Podrás hacerlo en segunda.
Hay mucho aquí que no incluí como probarlo, porque tengo más tiempo. Si quieres probar este, toma algunas canciones que están de licencia gratis o libre. Licencia libre es libre como no como cerveza.
De licencia libre en el internet. Y después toma una grabación de tu micrófono en el móvil, en el ordenador. Y puedes hacer este como una prueba de tus 5 cosas.
Estaré aquí toda la semana. Si tienes otras preguntas, si no expliqué nada en esta presentación, ven y preguntarme, por favor. Y ya está todo.
Gracias, Cameron, por tu información. Alguien quisiera hacer una pregunta? Lo más técnica posible. OK, pues en unos 7 minutos daremos inicio a la siguiente ponencia de bloque. 7 minutitos porque creo que terminamos antes.
Sí, 20. En unos 7 minutos. Entonces, hagamos una pequeña pausa. No tengo nada más. Vale.