听歌识曲算法技术[语音识别]

概念理解

  1. 语音识别:通过一种语音检索算法来识别一段音频内容的含义。
  2. 音频文件:指带有声音的文件,比如音乐。
  3. MFCC:音频文件转为数字的过程
  4. 时域:振幅Y和时间T的关系。
  5. 频域:振幅Y和频率F的关系。
  6. 短时傅里叶变换:通过对每个时间极短的音频片段做傅里叶变换,来得到这个时间段的频率分布,之所以成为短时,是因为这个算法只有再短时内语音音频的频率以及振幅是比较平稳的,如果时间过长就会导致傅里叶变换不准确。
  7. 频谱图:每个时间点出现的频率分布图,即每一帧或者每时刻上出现的频率数值和振幅数值,为了用二维数据表示这个三维数据,把振幅压缩到二维平面中,使用颜色的浅重来表示振幅的大小。[见图1A]
  8. 稀疏矩阵/星云图:经过处理的频谱图,把频谱图颜色重的变成星星【锚点】,把其它变成空白。[见图1B]
  9. 指纹哈希:指纹哈希是由星座图组成的,星座图中时间-频率点对组合在一起。选择锚点,每个锚点都有一个与之相关联的目标区域。每个锚点依次与目标区域内的点配对,每一对产生两个频率分量加上点之间的时间差.[见图1C]
  10. Hash:哈希值,32位的不可重复的数字,数据库用来存储数据的一种方式,优点查询速度快,缺点存储空间剧增,典型的拿空间换时间。
  11. time:时间值,32位不可重复的数字
  12. 哈希·时间偏移记录:Hash:time = [f1:f2:∆t]:t1 [见图1D]
  13. 扇出因子:在计算哈系数时,一个锚点的目标区域中一次处理相关锚点的个数,可理解为KNN中的K值,计算相邻点的个数
  14. 密度因子:单位区域内锚点的个数
  15. 每秒处理音频记录的哈希数 = 每秒星座点的密度因子 * 进入目标区域的扇出因子[F],也就是为什么扇出因子直接导致存储空间成本的变化
  16. 噪音:
  17. 降噪算法:【腐蚀算法】一种降噪的算法,类似于图形算法里面的原理https://jingyan.baidu.com/article/f96699bbf99d9e894f3c1b4c.html
  18. 张量:维度的意思
  19. 阈值:满足条件的最小值或者最大值

算法原理

由于商业原因,以下只是部分代码,只讲了大概原理,其原理是通过给歌曲建立指纹库来验证被检测样本是哪个歌曲,如果某段歌曲匹配了,那么它们在时间上会出现线性关系。

具体步骤如下:

A、建立歌曲指纹

1、读取歌曲

通过librosa包获取语音数据

# 语音预处理,生成频谱数据
	def _pre_music(self, music_path):
		# 音频时间序列,音频的采样率
		y, sr = librosa.load(
			path=music_path,
			sr=hp.fingerprint.core.sr,
		)
		
		arr2D = librosa.stft(
			y=y,
			n_fft=hp.fingerprint.core.n_fft,
			hop_length=hp.fingerprint.core.hop_length,
			win_length=hp.fingerprint.core.win_length
		)
		return np.abs(arr2D) ** 2

2、获取频谱图

通过Au软件可以看出来,音频的频谱图

  随着每个时间点的放大,可以看到每一个采样点的之间的频谱图

 把声谱图转为频谱图的过程是通过MFCC得到的,有兴趣的可以自己搜索相关技术文章,这属于信号处理专业的相关知识。

转为频谱图:shape = [频率,帧数]

# 生成频谱图
arr2D = mlab.specgram(
    # 数据
    channel_samples,
    # 窗口大小
    NFFT=wsize,
    # 采样率
    Fs=Fs,
    # 加窗
    window=mlab.window_hanning,
    # 重叠率
    noverlap=int(wsize * wratio))[0]
# (2049, 5027)
# print(np.shape(arr2D))

3、频谱图转为星图

把频谱图里面的频率0变为最小值,防止无法取对数

取对数,作用:某些值过大

取对数之后会出现无穷小的值,把这些值变为0

求局部最大值【即锚点-星星】,neighborhood控制着样本密度

# maximun_filter 找到局部最大值所对应的坐标
struct = generate_binary_structure(2, 2)  # 2维 离中心点一个距离
neighborhood = iterate_structure(struct, hp.fingerprint.core.neighborhood)  # 中心点扩大到离中心点40个距离
local_max = maximum_filter(spectrogram, footprint=neighborhood) == spectrogram
		
# 局部最大值
amps = spectrogram[local_max]

获取局部最大值的坐标【即锚点坐标】:[时间,频率], shape = [y,x] = [频率,时间]

# 获得peakes 是按[行,列]返回的:j是频率 i是时间
j, i = np.where(local_max)

 通过过滤能量最小值来减少噪音

4、存储指纹和歌曲ID

根据时间进行排序

peakes = sorted(peakes)

时间偏移坐标:t1

一个锚点的哈希个数取决于,当前锚点与其它锚点计算的范围:0<t1<200,样本密度和扇出因子是控制哈希·时间偏移记录的数量。

# 锚点
for i in range(len(peakes)):
	# 近邻点
	for j in range(1, hp.fingerprint.core.near_num):
		# 判断下标是否越界
		if (i + j) < len(peakes):
			t_1 = peakes[i][0]
			t_2 = peakes[i + j][0]
			f_1 = peakes[i][1]
			f_2 = peakes[i + j][1]
			delta_t = t_2 - t_1

 建立每个锚点的哈希值:[f1,f2,delta_t]

hash_str = "%s|%s|%s" % (str(freq1), str(freq2), str(t_delta))
h = hashlib.sha1(hash_str.encode('utf-8'))
yield (h.hexdigest()[0:20], t1)

数据库中的存储的数据是:哈希值,时间偏移记录,歌曲ID,

B、待测歌曲样本

获取待测样本数据,通过短时傅里叶变换转为频谱图

def get_audio():
	parser = argparse.ArgumentParser(formatter_class=RawTextHelpFormatter)
	parser.add_argument('-s', '--seconds', nargs='?')
	args = parser.parse_args()
	
	if not args.seconds:
		args.seconds = "7"
	seconds = int(args.seconds)
	chunksize = 2 ** 12
	channels = 1
	record_forever = False
	
	listener = Listener()
	
	listener.start_recording(
		seconds=seconds,
		chunksize=chunksize,
		channels=channels
	)
	
	while True:
		bufferSize = int(listener.rate / listener.chunksize * seconds)
		print("正在录音")
		for i in range(0, bufferSize):
			number = listener.process_recording()
		if not record_forever: break
	listener.stop_recording()
	
	print("录音停止")
	listener.save_recorded('xxx.mp3')
	
	return './xxx.mp3'

 样本频谱图

样本星座图 

  1. 用最小值替换全0,取log能量对数,把负无穷小取0
  2. 通过maximum_filter()获取最大值坐标,得到星座图
  3. 最后通过偏离每个锚点,计算得到每个锚点和目标区域的Hash:time
  4. 在数据库中通过查询hash来得到匹配的match_hashes,以及t_offset
  5. 统计match_hashes中每个t_offset所对应的歌曲id个数
  6. 个数最多的歌曲id就是该歌曲,t_offset是开始的地方
	if len(matches) > 0:
		match_collections = {}
		max_count = 0
		start_time = None
		final_music_id = None
		x, y, z = [], [], []
		for matche in matches:
			# 数据库t 样本t
			music_id, t, t_sample = matche
			x.append(int(t))
			y.append(t_sample)
			z.append(music_id)
			# 偏移值
			offset = int(t) - t_sample
			
			# 判断字典里面是否有这个偏移
			if offset not in match_collections:
				match_collections[offset] = {}
				pass
			# 判断字典里面是否有这个music_id
			if music_id not in match_collections[offset]:
				match_collections[offset][music_id] = 0
				pass
			
			match_collections[offset][music_id] += 1
			# 判断这个偏移下的music_id是否是最多
			if match_collections[offset][music_id] > max_count:
				max_count = match_collections[offset][music_id]
				start_time = offset
				final_music_id = music_id
		
		print(x, y, z)
		drow_plot(x, y, z, show=True)
		print(match_collections, max_count)
		# 开始匹配时间
		print((start_time * hp.fingerprint.hop_length / hp.fingerprint.sr))
		music_name = connector.find_music_by_id(final_music_id)
		print(music_name)

结果

线性关系图:

  • 1
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
人工智能 1. 以下软件中,属于应用软件的是()。 [单选题] * A. IOS B. 安卓 C. Windows 10 D. Microsoft Office(正确答案) 2. 以下软件中,属于系统软件的是()。 [单选题] * A. WPS Office B. 钉钉 C. Windows 10(正确答案) D. Microsoft Office 3. "计算机视觉"技术让智能机器人等人工智能设备像人一样"会看",以下()不属于"会看"的人工智能应用。 [单选题] * A. 拍照识图 B. 刷脸支付 C. 车牌识别 D. 听歌识曲(正确答案) 人工智能-(1)全文共10页,当前为第1页。4. 智能语音技术包含语音识别技术语音合成技术语音识别技术模仿人的听觉能力,并能够将人的语言转化为文字,让人工智能设备"会听";语音合成技术模仿人的说话能力,能够将文本内容转换成语音,也可以让计算机模仿其他人的声音,让人工智能设备"会说"。以下选项中,全部应用了智能语音技术的是()。 听歌识曲 拍照识图 小爱同学 语音导航 语音助手 指纹识别 [单选题] * 人工智能-(1)全文共10页,当前为第1页。 A. B. C. D. (正确答案) 5. 数据、算力、算法是推动人工智能发展的三大要素。算力不足,会阻碍人工智能的发展。我国在超级计算机方面发展迅速,位于国际领先水平。神威·太湖之光2016年研制成功,运行速度每秒9.3亿亿次,天河二号2014年研制成功,运行速度每秒3.39亿亿次。计算机的核心部件是(),它的性能优劣会大大影响计算机的算力。 [单选题] * A. CPU(中央处理器)(正确答案) B. 存储器 C. 输入设备 D. 输出设备 6. 让人工智能设备和应用像人一样会思考会行动,是建立在海量数据的存储、分析和处理的基础上的。用来进行存储的计算机部件是()。 [单选题] * A. CPU(中央处理器) B. 存储器(正确答案) C. 输入设备 D. 输出设备 人工智能-(1)全文共10页,当前为第2页。 人工智能-(1)全文共10页,当前为第2页。 7. 2019-7-1.小丁有25GB的资料包需要全部拷贝到一个U盘上,合适的U盘是( )。 [单选题] * A.D盘 B.E盘 C.F盘 D.G盘(正确答案) 8. 2019-7-2.小丁有两份资料包需要全部拷贝到一个U盘里,这两份资料包的大小分别是,10GB、25MB,合适的U盘是( )。 [单选题] * A.D盘 B.E盘 C.F盘 D.G盘(正确答案) 人工智能-(1)全文共10页,当前为第3页。 人工智能-(1)全文共10页,当前为第3页。 9. 2019-7-3.某台计算机存储设备的存储容量情况如图,其中可用空间最大的是( )。 [单选题] * A.C盘(正确答案) B.D盘 C.F盘 D.G盘 10. 2019-7-4.某台计算机存储设备的存储容量情况如图,其中可用空间最小的是( )。 [单选题] * A.D盘 B.E盘(正确答案) C.F盘 D.G盘 人工智能-(1)全文共10页,当前为第4页。 人工智能-(1)全文共10页,当前为第4页。 11. 2019-7-5.某台计算机存储设备的存储容量情况如图,其中存储容量最大的是( )。 [单选题] * A.C盘(正确答案) B.E盘 C.F盘 D.G盘 12. 2019-7-6.小丁想把48GB资料保存到外存储器中,外存储器的信息如下图所示,以下说法正确的是( )。 [单选题] * A.可以存放在C或D盘中(正确答案) B.可以存放在E或F盘中 C.只可以存放在C盘中 D.全部放不了 人工智能-(1)全文共10页,当前为第5页。13. 以下是四个文件的大小,其中容量最大的是( )。 [单选题] * 人工智能-(1)全文共10页,当前为第5页。 A. 1.1GB(正确答案) B. 3MB C. 500KB D. 1024B 14. 以下是四个文件的大小,其中容量最小的是( )。 [单选题] * A. 1.1GB B. 3MB C. 500KB D. 1000B(正确答案) 15. 3.某台计算机存储设备的存储容量情况如图,其中可用空间最大的是( )。 [单选题] * A.C盘(正确答案) B.D盘 C.E盘 D.F盘 人工智能-(1)全文共10页,当前为第6页。 人工智能-(1)全文共10页,当前为第6页。 16. 4.某台计算机存储设备的存储容量情况如图,其中可用空间最小的是( )。 [单选题] * A.C盘 B.D盘 C.E盘 D.F盘(正确答案) 人工智能-(1)全文共10页,当前为第7页。17. 2017-5-6. 手机流量是指手机上网产生的数据量。下列手机流量,剩余最多的是( )。 [单选题] * 人工智能-(
人工智能-深度学习-机器学习的范畴大小排序全文共2页,当前为第1页。人工智能-深度学习-机器学习的范畴大小排序全文共2页,当前为第1页。人工智能,深度学习,机器学习的范畴大小排序 人工智能-深度学习-机器学习的范畴大小排序全文共2页,当前为第1页。 人工智能-深度学习-机器学习的范畴大小排序全文共2页,当前为第1页。 大学第一次接触《人工智能导论》这门课,通过老师的讲解,我对人工智能有了一些简单的感性认识,我觉得人工智能是一门具有挑战性的科学,想要学好这门课程必须要懂得计算机知识以及基本的算法认识。人工智能包括了十分广泛的科学,它由不同的领域组成,例如机器学习,计算机视觉等,总的来说,人工智能研究的主要目标是使机器能够胜任一些通常需要人类智能才能完成的复杂工作。虽然在此门课程中对算法的实现不能独立完成,但在一些简单的基本的算法上还是有一定的理解和认识。我也在此次课程设计的过程中不断的学习,反复的调式和思考问题,终于在我的坚持下能够很好地理解算法转换为实际代码的过程,也对算法有了更加清晰的思路。因此,我更加确信在自己的不断努力下总是会有收获的,只有坚持下去,才有成功的希望。 人工智能在很多领域得到了发展川在我们的日常生活中发挥了重要的作用。如:机器翻译,机器翻译是利用计算机把一种自然语言转换成其他语言的过程。用以完成这一过程的软件系统叫做机器翻译系统,利用这个系统我们可以很方使的完成一些语言翻译工作。目前,照内的机器翻译软件有很多,富有代表性的当属金山,它可以迅速的咨询英文单词和句子翻译,重要的是它还可以提供多种语言为用户提供了极大的便利。 人工智能:像人一样思考,理性的思考;像人一样行动,理性的行动,如果你与一台机器进行对话,它能回答你的问题并且感受不到是机器在回答的话,就说这台机器具有智能。当然并不是通过测试就说明有智能,但现阶段的研究主要还是弱人工智能:模仿人脑的基本功能,感知、记忆、学习和决策等,向着强人工智能以及超级人工智能发展的话还有很长的一段路要走,中间有着巨大的鸿沟。 人工智能经历3起2落,现在是机器学习阶段,人工智能现在最热门的领域:机器学习,自然语言处理,图像,而在金融领域:智能投顾,高频交易;互联网领域:语音助手,机器翻译,文本智能识别,听歌识曲,刷脸解锁(以色列的一项技术),拍照优化,相册分类,影像处理,AR特效,影像内容审核及分类;智能规划决策:博弈论(囚徒困境);自动驾驶领域:感知-认知-决策-控制-执行;公共安全领域;教育领域;泛信息处理(百度和谷歌可以关键字检索速度很快,哈希算法);医疗健康领域;工业制造领域;零售领域;广告营销领域;交通出行领域;智能客服领域 人工智能-深度学习-机器学习的范畴大小排序全文共2页,当前为第2页。人工智能-深度学习-机器学习的范畴大小排序全文共2页,当前为第2页。一些大公司在人工智能领域的投入和研究对于推动人工智能的发展起到了很大的作用,最值得一提的就是谷歌。谷歌的免费搜索表面上是为了方便人们的查询,但这款搜索引擎推出的初衷就是为了帮助人工智能的深度学习,通过上亿的用户一次又一次地查询,来锻炼人工智能的学习能力,由于我的水平还很低,对于深度学习还不敢妄自揣测。但是,近年来谷歌公司在人工智能方面的突破一项接着一项,为人们熟知的便是智能汽车。不得不说,人工智能想要进一步发展,必须依靠这些大公司的研究和不断推广,由经济促创新。 人工智能-深度学习-机器学习的范畴大小排序全文共2页,当前为第2页。 人工智能-深度学习-机器学习的范畴大小排序全文共2页,当前为第2页。 人工智能-深度学习-机器学习的范畴大小排序

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

语音不识别

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值