一种数字音频指纹大数据存储检索的方法及系统
技术领域
本发明属于音频处理技术领域,具体涉及一种数字音频指纹大数据存储检索的方法及系统。
背景技术
现流行的音乐听歌识曲、哼唱识曲等功能基本都是提取音频独特的特征量进行识别,为了提高识别的精准度就要尽可能多的保留音频特征量。通常一段音频有成千上万的特征量,当数字音频达到一定数量级后,音频特征量需要足够大的数据库来存储,导致数据库查询速度急速下降。识别过程整体大部分都在数据库查询,所以指纹数据库的设计至关重要。
Phillips音频指纹算法中提出3秒音频信息可以产生一个指纹,一个指纹由256个子指纹构成,如果一个音频所有的时段都产生指纹无疑数据量非常庞大。Phillips的指纹存储和检索方式存在随机性,假设每个指纹等可能出现,每一个指纹块平均匹配次数为:
C=Q/2^32*256;
其中C为平均匹配次数,Q为数据库指纹数。但实际上指纹非均匀分布,匹配次数将增多至20倍左右,除此之外信号的劣化等原因也会增加实际匹配次数。
另一种方式是利用搜索引擎的工作方式将数据库设计成一个指纹指向一个包含多个元信息的列表的方式,如果指纹长度为L,指纹由2进制构成,那么数据库最多能存储2^L个指纹。但是与搜索引擎相比较,音乐指纹复杂度更大。主要是因为指纹库有着与搜索词库相等的数量级,且单次匹配需要检索成千上万的指纹,这也意味着一次检索就等同于搜索引擎做上万次检索,这就限制了该方式只能适用于单机且数据库不能太大。
发明内容
本发明的第一目的在于:针对现有技术中存在时延长、不能大数据化的弊端,提供一种数字音频指纹大数据存储检索的方法,采用分布式列式存储系统和快速检索可以存储海量信息、快速提取出片段;分片存储可以减小存储系统的容量使检索更快;具体分析N个片段中的指纹,大大降低计算量和耗时。
为了实现上述目的,本发明采用的技术方案为:
一种数字音频指纹大数据存储检索的方法,包括以下步骤:
从已知类型的音频文件中提取音频指纹以及产生该音频指纹所对应的时间点,将音频指纹和对应的时间点按分片存储的方式存储在文件中,以音频标识信息加索引作为文件名;将音频指纹、时间点和文件名存入分布式列式存储系统中,以音频指纹作为行键、时间点作为列名、分片的文件名作为对应的值;
从待识别的音频文件中提取音频指纹,从分布式列式存储系统中检索出包含待识别音频文件的音频指纹的分片文件名,获取出现次数最多的前N条分片,所述的N为预设正整数。
优选地,所述的分片存储的方式具体包括:
将从单个已经类型的音频文件中提取出的音频指纹以及所对应的时间点,按照连续的指纹片段进行分别存储,每个指纹片段为小于音频文件总时常的时间段,指纹片段即为所述分片。
优选地,从已知类型的音频文件中提取音频指纹以及从待识别的音频文件中提取指纹音频均采用Hash化处理,并转化为16进制。
优选地,将Hash后的指纹作为分布式列式存储系统的行键,元数据存列。
优选地,将音频指纹和对应的时间点按分片存储的方式存储在文件中的同时,将所述的音频标识信息的Hash和分片索引作为文件名,然后将文件名存于分布式列式存储系统的列中。
优选地,所述的分布式列式存储系统为HBase存储系统。
优选地,所述的文件用数据库代替,文件名为数据库的键。
本发明的第二目的在于:针对现有技术中存在时延长、不能大数据化的弊端,提供一种数字音频指纹大数据存储检索的系统,采用分布式列式存储系统和快速检索可以存储海量信息、快速提取出片段;分片存储可以减小存储系统的容量使检索更快;具体分析N个片段中的指纹,大大降低计算量和耗时。
一种数字音频指纹大数据存储检索的系统,包括:
第一音频指纹提取单元,用于从已知类型的音频文件中提取音频指纹以及产生该音频指纹所对应的时间点;
指纹库建立单元,用于将第一音频指纹提取单元提取的音频指纹和对应的时间点按分片存储的方式存储在文件中,以音频标识信息加索引作为文件名;将音频指纹、时间点和文件名存入分布式列式存储系统中,以音频指纹作为行键、时间点作为列名、分片的文件名作为对应的值;
第二音频指纹提取单元,用于从待识别的音频文件中提取音频指纹;
指纹检索单元,用于从分布式列式存储系统中检索出包含第二音频指纹提取单元所提取的音频指纹对应的分片文件名,获取出现次数最多的前N条分片,所述的N为预设正整数。
由于采用了上述技术方案,本发明的有益效果是:
本发明的本发明利用列式存储和分布式框架的两个特性,通过空间换取时间,改进存储方式,一方面将指纹、时间点按分片的形式存储,另一方面将指纹作为行键、时间点作为列名、分片的文件名作为值,从而建立一个面向列存储的指纹库,适用于大数据存储,同时这种面向列存储的指纹库,读写性能远高于关系数据库;
本发明采取直接查询分布式列式存储系统得到按照前面的存储方式得到全部指纹的对应歌曲片段文件后,按照匹配到的指纹个数对文件排序,只提取并分析指纹匹配最多的前N首歌曲片段信息,并做进一步分析,这样只需要具体分析的N个歌曲片段与现有技术相比较节省了大部分分析计算过程,节省了计算和时间成本。
附图说明
图1是本发明的方法流程图。
图2是本实施例的指纹库建立流程图。
图3是本实施例的指纹检索流程图。
图4是本发明的装置结构框图。
附图标记:101-第一音频指纹提取单元,102-指纹库建立单元,201-第二音频指纹提取单元,202-指纹检索单元,300-指纹库。
具体实施方式
参照图1,本发明一种数字音频指纹大数据存储检索的方法,主要包括指纹库300建立和指纹检索两个步骤,通过指纹库300建立和指纹检索,能够快速提取并分析出指纹匹配最多的前N首歌曲片段信息,实现了对检索的优化,能够大大节省计算过程,提高音频的识别效率。
其中,指纹库300的建立包括从已知类型的音频文件中提取音频指纹以及产生该音频指纹所对应的时间点,将音频指纹和对应的时间点按分片存储的方式存储在文件中,以音频标识信息加索引作为文件名;将音频指纹、时间点和文件名存入HBase存储系统中,以音频指纹作为行键、时间点作为列名、分片的文件名作为对应的值。本发明还提供另外一种实施方式,文件采用数据库代替,将音频指纹和对应的时间点按分片存储的方式存储在文件中,即将音频指纹和对应的时间点按分片存储的方式存储在数据库中,以音频标识信息加索引作为数据库的键。
参照图2,例如音频A,通过提取指纹1、指纹2、指纹3...以及产生该指纹所对应的时间点time1、time2、time3...,把这些指纹和对应的时间点按分片存储的方式存储在文件中,分片的时间片段按照小于音频文件总时常的时间段,本实施例中定义60秒为一个片段,然后以音频标识信息加索引(例如0,1,2,3...)为文件名,音频标识信息可以是歌曲名,也可以是歌曲id,本实施例中,即为A_0,A_1,A_2...。将音频指纹、时间点和对应的文件名存入HBase,以音频指纹按字符串的形式作为行键,时间作为列名,对应分片的文件名作为对应的值,从而完成对指纹库300的建立。
参照图3,例如待识别音频为一个采用了音频A的视频A',从视频A'的音频文件中提取出音频指纹,如指纹10、指纹2、指纹3...,以及对应的时间点time10、time11、time12、time13...,由于视频中采用的背景音乐的时间不固定,所以提取出的与音频A相同的音频指纹,time是不一致的。所以需要在利用本发明的检索方法得到指纹片段后,需要进一步分析,才能识别到具体的音频文件。再提取到音频指纹后,通过查询HBase得到视频A'全部指纹所包含的片段文件名(包含A_0、B_1、C_4等等),并按照出现次数的多少进行排序,取出现次数最多的前N个片段。后续再通过进一步分析判断,从而确定出具体的音频为音频A,本发明中对该步骤不做具体的阐述。
发明涉及的典型系统/网络结构:
本实施采用4核CPU、8G内存服务器*3作为Hadoop集群的Slave,4核CPU、16G内存服务器为Master。
系统/功能结构:
将指纹Hash化,并转化为16进制。同时为增加系统鲁棒性可以截取其中一部分,这样数据库将最大存入指纹数为:
S=16^n
其中n为指纹Hash后的长度。
将Hash后的指纹作为HBase的行键(RowKey),元数据存列。为降低HBase数据量增大对检索的时间成本,因此HBase中的数据应尽量小。将歌曲提取出的指纹进行分片存储,同时将歌曲文件的Hash+歌曲片段(1、2、3...)作文件名,同时以歌曲文件的Hase作为ID,歌曲详细信息(如歌名、歌手、所属专辑等)为内容的歌曲信息基础库,便于后期识别。
参照图4,数字音频指纹大数据存储检索的系统,包括:
第一音频指纹提取单元101,用于从已知类型的音频文件中提取音频指纹以及产生该音频指纹所对应的时间点;
指纹库300建立单元102,用于将第一音频指纹提取单元101提取的音频指纹和对应的时间点按分片存储的方式存储在文件中,以音频标识信息加索引作为文件名;将音频指纹、时间点和文件名存入HBase存储系统中,以音频指纹作为行键、时间点作为列名、分片的文件名作为对应的值;
第二音频指纹提取单元201,用于从待识别的音频文件中提取音频指纹;
指纹检索单元202,用于从HBase存储系统中检索出包含第二音频指纹提取单元201所提取的音频指纹对应的分片文件名,获取出现次数最多的前N条分片,所述的N为预设正整数。