在Ubuntu 18.04中使用Python通过音频指纹创建自己的Shazam(识别歌曲)

本文概述

  • 要求
  • 1.安装所需的软件包
  • 2.克隆音频-指纹-识别-python项目
  • 3.将一些MP3文件存储在数据库目录中
  • 4.生成MP3文件指纹
  • 5.识别来自麦克风的音频
在音频识别中, 当你想识别某些歌曲时, 诸如Shazam之类的应用程序会迅速将你的剪辑转换成音频指纹, 从而生成特殊算法。在他们的数据库中, 他们拥有使用相同算法生成的800万首歌曲的指纹, 因此现在只需要数字数据搜索和背景模式匹配即可。 Shazam在其库中搜索从你的记录创建的代码。当找到它时, 它已经找到了你的歌曲!但是, 对于不适合该公司工作的开发人员来说, 有可能实现这样的事情吗?答案是肯定的, 并且该算法的许多实现都运行良好。
在本教程中, 我们将向你介绍如何在Ubuntu 18.04中使用Python实现自己的类似Shazam的应用程序以从你自己的歌曲数据库中识别歌曲。
要求 为了完美地遵循本教程, 你之前需要:
  • 你将需要在Ubuntu桌面环境(本例中为18.04)上工作。
  • 已安装且可以正常工作的麦克风(对于完整的示例, 默认脚本将识别来自麦克风的音频)
  • 安装了Python 2(sudo apt安装python2.7)
  • pip(sudo apt安装python-pip)
话虽如此, 让我们开始吧!
1.安装所需的软件包 为了实现我们自己的类似Shazam的应用程序, 我们将需要安装项目需要工作的所有依赖项。第一步, 安装Ubuntu特定的依赖项:
sudo apt-get install python-tksudo apt install ffmpegsudo apt-get install portaudio19-dev python-pyaudio

在系统上安装以前的软件包后, 请继续安装Python所需的软件包。
Python包
为了正常工作, python后台将需要几个重要的库, 其中包含以下命令(需要安装pip):
pip install matplotlib termcolor scipy pydub PyAudio

这些软件包是:
  • matplotlib:Matplotlib是一个Python 2D绘图库, 它以各种硬拷贝格式和跨平台的交互式环境生成出版物质量的图形。
  • termcolor:Termcolor是一个用于将彩色消息打印到终端的库。
  • scipy:是用于数学, 科学和工程的开源软件。
  • pydub:是一个使用简单易用的高级界面来处理音频的软件包。
  • PyAudio:为跨平台音频API PortAudio提供Python绑定。
安装它们后, 你可以继续实施项目。
2.克隆音频-指纹-识别-python项目 在此实现中, 我们将使用Github上的开源项目audio-fingerprint-identifying-python。该项目是一个类似Shazam的应用程序, 可使用音频指纹和频谱分析以及快速傅立叶变换来识别歌曲。该项目由@itspoma构建, 你可以在此处找到有关该项目的更多信息:
  • 会议PaceMaker:BackEnd-2016会议
  • 幻灯片在slideshare.net/rodomansky/ok-shazam-la-lalalaa
使用以下命令将存储库克隆到某个目录中:
git clone https://github.com/itspoma/audio-fingerprint-identifying-python.git

有关此项目的更多信息, 请访问Github上的官方资源库。下载项目后, 你将需要首次运行以下命令来还原/创建数据库:
make clean reset

该项目使用SQLite存储从歌曲文件中提取的哈希。
3.将一些MP3文件存储在数据库目录中 在项目的同一克隆目录中, 在音频指纹目录中创建一个新文件夹mp3。在此目录内, 你需要将要作为参考的音频文件存储在数据库中:
在Ubuntu 18.04中使用Python通过音频指纹创建自己的Shazam(识别歌曲)

文章图片
这意味着你的应用程序将仅识别存储在此目录中的歌曲。拥有它们之后, 你将能够生成指纹, 以便我们稍后使用。
4.生成MP3文件指纹 有了歌曲数据库后, 你需要了解算法的最重要步骤是确定歌曲中的一些关键点, 然后将这些点保存为哈希, 然后尝试将其与SQLite数据库进行匹配。我们将继续生成这些哈希, 并使用以下命令将其存储在数据库中:
python collect-fingerprints-of-songs.py

该算法将开始分析音频的每个通道, 并将哈希存储在数据库中:
在Ubuntu 18.04中使用Python通过音频指纹创建自己的Shazam(识别歌曲)

文章图片
有了这些信息, 现在你将能够识别来自麦克风或文件的音频, 并查看它是否与数据库中的任何歌曲匹配。为了检查数据库中有哪些歌曲, 可以运行以下命令:
python get-database-stat.py

它将在终端上打印你拥有的所有歌曲:
在Ubuntu 18.04中使用Python通过音频指纹创建自己的Shazam(识别歌曲)

文章图片
5.识别来自麦克风的音频 到日期为止, 只能从计算机上安装的麦克风识别音频。要开始识别, 只需运行要与麦克风一起使用的python脚本, 并提供从现在起应该识别多少秒的参数:
python recognize-from-microphone.py -s 5

建议的最小秒数为5, 因此算法肯定会识别出正确的歌曲。从移动设备到计算机的麦克风播放数据库中的某些歌曲后(5秒后), 它将成功识别该歌曲:
在Ubuntu 18.04中使用Python通过音频指纹创建自己的Shazam(识别歌曲)

文章图片
然后你就可以执行一个非常容易实现的项目来识别Shazam一样的歌曲。
【在Ubuntu 18.04中使用Python通过音频指纹创建自己的Shazam(识别歌曲)】编码愉快!

    推荐阅读