本文概述
- 要求
- 1.安装所需的软件包
- 2.克隆音频-指纹-识别-python项目
- 3.将一些MP3文件存储在数据库目录中
- 4.生成MP3文件指纹
- 5.识别来自麦克风的音频
在本教程中, 我们将向你介绍如何在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。在此目录内, 你需要将要作为参考的音频文件存储在数据库中:
文章图片
这意味着你的应用程序将仅识别存储在此目录中的歌曲。拥有它们之后, 你将能够生成指纹, 以便我们稍后使用。
4.生成MP3文件指纹 有了歌曲数据库后, 你需要了解算法的最重要步骤是确定歌曲中的一些关键点, 然后将这些点保存为哈希, 然后尝试将其与SQLite数据库进行匹配。我们将继续生成这些哈希, 并使用以下命令将其存储在数据库中:
python collect-fingerprints-of-songs.py
该算法将开始分析音频的每个通道, 并将哈希存储在数据库中:
文章图片
有了这些信息, 现在你将能够识别来自麦克风或文件的音频, 并查看它是否与数据库中的任何歌曲匹配。为了检查数据库中有哪些歌曲, 可以运行以下命令:
python get-database-stat.py
它将在终端上打印你拥有的所有歌曲:
文章图片
5.识别来自麦克风的音频 到日期为止, 只能从计算机上安装的麦克风识别音频。要开始识别, 只需运行要与麦克风一起使用的python脚本, 并提供从现在起应该识别多少秒的参数:
python recognize-from-microphone.py -s 5
建议的最小秒数为5, 因此算法肯定会识别出正确的歌曲。从移动设备到计算机的麦克风播放数据库中的某些歌曲后(5秒后), 它将成功识别该歌曲:
文章图片
然后你就可以执行一个非常容易实现的项目来识别Shazam一样的歌曲。
【在Ubuntu 18.04中使用Python通过音频指纹创建自己的Shazam(识别歌曲)】编码愉快!
推荐阅读
- 如何在Ubuntu 18.04中使用Coturn创建和配置自己的STUN/TURN服务器
- Dockerfile构建LNMP分离环境部署wordpress
- linux搭建基于LNMP的wordpress博客
- 使用Docker swarm构建wordpress集群
- 如何为 RHEV-M 安装配置一个离线的软件存储仓库(REPOSITORY)
- Apache POI处理excel文档
- Docker compose v3版本构建跨主机容器编排构建wordpress集群
- zabbix企业应用之监控动作是否有被关闭
- Ansible批量部署zabbix-agent