En el reconocimiento de audio, cuando desea identificar alguna canción, una aplicación como Shazam convierte rápidamente su clip en una huella de audio que genera un algoritmo especial. En su base de datos, tienen la huella digital de más de 8 millones de canciones generadas con el mismo algoritmo, por lo que ahora es solo una cuestión de búsqueda de datos numéricos y coincidencia de patrones en el fondo. Shazam busca en su biblioteca el código que creó a partir de su grabación. ¡Cuando lo encuentra, ha encontrado tu canción! Pero, ¿es posible que un desarrollador que no trabaja para esta empresa implemente algo como esto? La respuesta es sí y hay muchas implementaciones del algoritmo que funcionan bastante bien.
En este tutorial, le explicaremos cómo implementar su propia aplicación similar a Shazam para reconocer canciones de su propia base de datos de canciones con Python en Ubuntu 18.04.
Requisitos
Para seguir perfectamente este tutorial, necesitarás previamente:
- Deberá trabajar en un entorno de escritorio Ubuntu (18.04 en este caso).
- Un micrófono instalado y en funcionamiento (para un ejemplo completamente funcional, el script predeterminado reconocerá el audio del micrófono)
- Python 2 instalado (
sudo apt install python2.7
) - pip (
sudo apt install python-pip
)
Habiendo dicho eso, ¡comencemos!
1. Instale los paquetes necesarios
Para implementar nuestra propia aplicación similar a Shazam, necesitaremos instalar todas las dependencias que el proyecto necesita para funcionar. Como primer paso, instale las dependencias específicas de Ubuntu:
sudo apt-get install python-tk
sudo apt install ffmpeg
sudo apt-get install portaudio19-dev python-pyaudio
Después de instalar los paquetes anteriores en su sistema, continúe con la instalación de los paquetes necesarios para Python.
Paquetes de Python
Para que funcione correctamente, el fondo de Python necesitará un par de bibliotecas importantes con los siguientes comandos (es necesario instalar pip):
pip install matplotlib termcolor scipy pydub PyAudio
Estos paquetes son:
- matplotlib : Matplotlib es una biblioteca de trazado 2D de Python que produce figuras de calidad de publicación en una variedad de formatos impresos y entornos interactivos en todas las plataformas.
- termcolor : Termcolor es una biblioteca para imprimir mensajes de colores en el terminal.
- scipy : es un software de código abierto para matemáticas, ciencias e ingeniería.
- pydub : es un paquete para manipular audio con una interfaz simple y fácil de alto nivel.
- PyAudio : proporciona enlaces de Python para PortAudio, la API de audio multiplataforma.
Una vez que estén instalados, puede continuar con la implementación del proyecto.
2. Clonar proyecto de audio-huella digital-identificación-python
En esta implementación, usaremos el proyecto de código abierto audio-fingerprint -identification-python, disponible en Github. Este proyecto es una aplicación similar a Shazam, que identifica la canción usando huellas digitales de audio y análisis de espectro y transformada rápida de Fourier. El proyecto fue construido por @itspoma , puedes encontrar más información al respecto aquí:
- conferencia PaceMaker: conferencia BackEnd-2016
- las diapositivas están en slideshare.net/rodomansky/ok-shazam-la-lalalaa
Clona el repositorio en algún directorio con el siguiente comando:
git clone https://github.com/itspoma/audio-fingerprint-identifying-python.git
Para obtener más información sobre este proyecto, visite el repositorio oficial en Github aquí . Después de descargar el proyecto, deberá restaurar / crear la base de datos por primera vez ejecutando el siguiente comando:
make clean reset
El proyecto utiliza SQLite para almacenar los hash extraídos de los archivos de canciones.
3. Almacene algunos archivos MP3 en el directorio de la base de datos.
Solo en el mismo directorio clonado del proyecto, cree una nueva carpeta llamada mp3 dentro del directorio de huellas digitales de audio. Dentro de este directorio necesitarás almacenar los archivos de audio que quieres tener como referencia en tu base de datos:
Esto significa que su aplicación identificará solo las canciones almacenadas en este directorio. Una vez que los tengas, podrás generar la huella digital que usaremos más adelante.
4. Generar huellas digitales de archivos MP3
Ahora que tiene su base de datos de canciones, debe comprender que el paso más importante del algoritmo es determinar algunos puntos clave en la canción, luego guarda esos puntos como un hash y luego intenta hacer coincidirlos con la base de datos SQLite. Procederemos a generar esos hashes y almacenarlos en la base de datos con el siguiente comando:
python collect-fingerprints-of-songs.py
El algoritmo comenzará a analizar cada canal del audio y almacenará los hash en la base de datos:
Con esta información, ahora podrás reconocer el audio del micrófono o un archivo y ver si coincide con alguna de las canciones que tienes en tu base de datos. Para verificar qué canciones tiene en la base de datos, puede ejecutar el siguiente comando:
python get-database-stat.py
E imprimirá en el terminal todas las canciones que tengas:
5. Reconocimiento de audio del micrófono
Hasta la fecha, solo es posible reconocer el audio del micrófono instalado en su computadora. Para comenzar a reconocer, simplemente ejecute el script de Python que debe usarse con el micrófono y proporcione como argumento cuántos segundos debe reconocer a partir de ahora:
python recognize-from-microphone.py -s 5
La cantidad mínima de segundos recomendada es de 5, por lo que el algoritmo seguramente reconocerá la canción correcta. Luego de reproducir alguna canción que está en nuestra base de datos desde nuestro dispositivo móvil al micrófono de la computadora (y luego de 5 segundos) reconocerá la canción con éxito:
Y ahí lo tienes, un proyecto muy fácil de implementar para identificar canciones como lo hace Shazam.
Que te diviertas ❤️!
Conviertete en un programador más sociable