基于音频指纹的零权限终端设备识别方法
技术领域
本发明涉及设备识别技术领域,尤其涉及一种基于音频指纹的零权限终端设备识别方法。
背景技术
2016年普林斯顿大学的研究人员进行一项在线跟踪技术研究的时候,发现某些网站采用AudioContext(音频)指纹识别终端,之所以能够采用AudioContext指纹识别终端,是因为,在不同的机器或浏览器上处理音频信号时,由于机器之间的硬件或软件的细微差别导致产生的处理结果不同,这个处理结果相当于AudioContext指纹,可用作设备标识。然而现有的AudioContext指纹识别终端方法中,AudioContext指纹的区分度并不高,初始输入音频波形由Javascript生成,过于简单,对音频的处理仅仅采用动态压缩的方法,反映出的特征有限,最后取指纹信息只获取了频域的数据,取值不够全面,设备识别准确度较低。
发明内容
为了克服现有技术的不足,本发明提供了一种基于音频指纹的零权限终端设备识别方法,采用音频指纹作为设备标识,并采用第三方定制复杂音频源,使用线性卷积,动态压缩或非线性扭曲操作综合反映设备之间的差别,获取时域和频域的音频数据,综合作为音频指纹特征。具体采用的技术方案如下:
一种基于音频指纹的零权限终端设备识别方法,包括以下步骤:
实例化音频容器对象;
获取第三方初始输入音频,并将所述初始输入音频添加到所述音频容器对象中;
创建分析器节点;
对所述音频容器对象中的音频信息执行线性卷积操作、动态压缩操作和非线性扭曲操作中的一种或多种操作;
将所述音频容器对象链接到音频播放节点;
获取音频的频域数据和时域数据,并将所述频域数据和时域数据上传到服务端;
在音频播放之前,消除音频;
所述服务端将接收到的所述频域数据和时域数据合并,生成访问音频指纹;
查询数据库中是否存在相同的已有音频指纹,若存在,则判断为回访设备;否则,通过相似度计算函数计算所述访问音频指纹和所述数据库中的所述已有音频指纹的相似度。
优选的,还包括步骤:
取相似度最大值与相似度阈值进行比较;如果所述相似度最大值大于所述相似度阈值,则判断为回访设备,否则为新设备,将所述访问音频指纹保存到所述数据库中。
优选的,所述实例化音频容器对象为,
使用Javascript中的window.AudioContext实例化音频容器对象AudioContext。
优选的,所述获取第三方初始输入音频,并将所述初始输入音频添加到所述音频容器对象中为,
使用Ajax获取第三方初始输入音频,所述初始输入音频为固定波形的音频,然后通过file.readAsArrayBuffer转换为可处理的ArrayBuffer格式,生成数据example_buffer,添加到所述音频容器对象AudioContext中。
优选的,所述创建分析器节点为,
使用Audio API中的createAnalyser创建Analyser分析器节点AnalyerNode。
优选的,所述对所述音频容器对象中的音频信息执行线性卷积操作、动态压缩操作和非线性扭曲操作中的一种或多种操作包括以下步骤:
使用Audio API中的createConvolver对音频容器对象AudioContext中的音频信号执行线性卷积操作;
使用Audio API中的createDynamicsCompressor对音频容器对象AudioContex中的音频信号执行动态压缩操作;
使用Audio API中的createWaveShaper对音频容器对象AudioContext中的音频信号执行非线性扭曲操作。
优选的,所述获取音频的频域数据和时域数据为,
在音频播放之前通过AnalyerNode的时候使用Audio API中的getByteFrequencyData获取音频的频域数据freq_data,使用getFloatTimeDomainData获取时域数据td_data。
优选的,所述将所述音频容器对象链接到音频播放节点为,
使用Audio API中的connect方法将所述音频容器对象链接到音频播放节点Destination;
所述在音频播放之前,消除音频为,
使用Audio API中的disconnect对在音频播放之前清除音频。
优选的,所述相似度计算函数为,
其中,Diff函数为计算x1和x2中不同的元素的个数,Len函数为计算x1和x2的交集中的元素个数。
优选的,所述相似度阈值为0.9-0.95。
相比现有技术,本发明提供的一种基于音频指纹的零权限终端设备识别方法,采用音频指纹作为设备标识,在音频指纹的生成过程中,采用第三方定制复杂音频源,使用线性卷积,动态压缩,非线性扭曲多种操作综合反映设备之间的差别,获取时域和频域的音频数据,综合作为音频指纹特征,分析模块通过相似度计算函数计算访问设备的访问音频指纹和数据库的已有音频指纹的相似度,从而进行设备识别。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,并可依照说明书的内容予以实施,以下以本发明的较佳实施例并配合附图详细说明如后。本发明的具体实施方式由以下实施例及其附图详细给出。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为本发明一个实施例中的基于音频指纹的零权限终端设备识别方法流程图;
图2为本发明一个实施例中的判断步骤的流程图。
具体实施方式
下面,结合附图以及具体实施方式,对本发明做进一步描述,需要说明的是,在不相冲突的前提下,以下描述的各实施例之间或各技术特征之间可以任意组合形成新的实施例。
一种基于音频指纹的零权限终端设备识别方法,如图1所示,包括以下步骤:
S1:实例化音频容器对象。
S2:获取第三方初始输入音频;具体为,获取第三方初始输入音频,并将所述初始输入音频添加到所述音频容器对象中;该步骤中,初始输入音频为复杂音频元。
S3:创建分析器节点。
S4:对音频信息执行操作;具体为,对所述音频容器对象中的音频信息执行线性卷积操作、动态压缩操作和非线性扭曲操作中的一种或多种操作;
S5:链接到音频播放节点;具体为,将所述音频容器对象链接到音频播放节点;
S6:获取音频的频域数据和时域数据;具体为,获取音频的频域数据和时域数据,并将所述频域数据和时域数据上传到服务端;
S7:消除音频;具体为,在音频播放之前,消除音频;
S8:生成访问音频指纹;具体为,所述服务端将接收到的所述频域数据和时域数据合并,生成访问音频指纹;
S9:判断识别;具体为,查询数据库中是否存在相同的已有音频指纹,若存在,则判断为回访设备;否则,通过相似度计算函数计算所述访问音频指纹和所述数据库中的所述已有音频指纹的相似度。
在一个实施例中,数据库中存在很多已有音频指纹,计算相似度时,将访问音频指纹和所有的已有音频指纹进行比较,从而得到多个相似度值,相似度值越大,表示访问音频指纹与该已有音频指纹越接近。本实施例中,基于音频指纹的零权限终端设备识别方法,还包括步骤:
取相似度最大值与相似度阈值进行比较;如果所述相似度最大值大于所述相似度阈值,则判断为回访设备,否则为新设备,将所述访问音频指纹保存到所述数据库中。
我们知道,Audio API(音频应用程序编程接口)为常见的现有技术,它包含许多标准函数,比如createAnalyser、createConvolver、createDynamicsCompressor、createWaveShaper、connect等等。其中,createAnalyser能创建一个AnalyserNode,可以用来获取音频时间和频率数据,以及实现数据可视化;createConvolver、createDynamicsCompressor、createWaveShaper分别可以用来对音频信号执行线性卷积操作、动态压缩操作和非线性扭曲操作;且因为不同设备的声卡设置和声卡的种类不同,因此上述三种操作在不同设备之间产生的效果不同,可反映设备之间的差别。
另外,Javascript作为一种高级编程语言,可用函数window.AudioContext对音频进行实例化。
基于此,在一个实施例中,步骤S1实例化音频容器对象为,
使用Javascript中的window.AudioContext实例化音频容器对象AudioContext。
在一个实施例中,步骤S2中所述获取第三方初始输入音频,并将所述初始输入音频添加到所述音频容器对象中为,
使用Ajax(Asynchronous Javascript And XML:异步JavaScript和XML)获取第三方初始输入音频,所述初始输入音频为固定波形的音频,然后通过file.readAsArrayBuffer转换为可处理的ArrayBuffer格式,生成数据example_buffer,添加到所述音频容器对象AudioContext中。本实施例中,通过获取获取第三方初始输入音频example.mp3,该音频为固定的复杂波形的音频,其中第三方表示,该初始输入音频并非Audio API自带的,而是通过某一系统或者单元生成的。
在一个实施例中,步骤S3所述创建分析器节点为,
使用Audio API中的createAnalyser创建Analyser分析器节点AnalyerNode。
在一个实施例中,步骤S4所述对所述音频容器对象中的音频信息执行线性卷积操作、动态压缩操作和非线性扭曲操作中的一种或多种操作包括以下步骤:
使用Audio API中的createConvolver对音频容器对象AudioContext中的音频信号执行线性卷积操作;
使用Audio API中的createDynamicsCompressor对音频容器对象AudioContex中的音频信号执行动态压缩操作;
使用Audio API中的createWaveShaper对音频容器对象AudioContext中的音频信号执行非线性扭曲操作。
在一个实施例中,步骤S6所述获取音频的频域数据和时域数据为,
在音频播放之前通过AnalyerNode的时候使用Audio API中的getByteFrequencyData获取音频的频域数据freq_data,使用getFloatTimeDomainData获取时域数据td_data。
在一个实施例中,所述将所述音频容器对象链接到音频播放节点为,
使用Audio API中的connect方法将所述音频容器对象链接到音频播放节点Destination;
所述在音频播放之前,消除音频为,
使用Audio API中的disconnect对在音频播放之前清除音频。
以上实施例中,相似度计算函数计算所述访问音频指纹和所述数据库中的所述已有音频指纹的相似度中的相似度计算函数为,
其中,Diff函数为计算x1和x2中不同的元素的个数,Len函数为计算x1和x2的交集中的元素个数。
本实施例中,取相似度最大值与相似度阈值进行比较;如果所述相似度最大值大于所述相似度阈值,则判断为回访设备,否则为新设备,将所述访问音频指纹保存到所述数据库中,经过多批次实验对比,所述相似度阈值为0.9-0.95。
参见附图2,以上实施例中,通过JS(Javascript)获取到音频的频域数据freq_data和时域数据td_data后,将两者合并生成访问音频指纹f_data,并将f_data上传到服务端。首先,服务端查询数据库中是否存在与访问音频指纹f_data相同的已有音频指纹,若存在,则判断带有访问音频指纹f_data的访问设备为回访设备;否则,计算访问音频指纹和已有音频指纹的相似度,当存在n个已有音频指纹时,则存在n个相似度值,从n中相似度值中筛选出相似度最大值Smax,并将其与相似度阈值C进行比较,如果Smax大于C,则判断带有访问音频指纹f_data的访问设备为回访设备,否则,为新设备,此时可对该新设备的访问音频指纹f_data进行保存,并存入数据库中,作为已有音频指纹。
本发明创新性的采用音频指纹作为设备标识,音频指纹的生成过程中,创新性的采用第三方定制复杂音频源,并使用线性卷积,动态压缩,非线性扭曲多种操作综合反映设备之间的差别,获取时域和频域的音频数据,综合作为音频指纹特征,分析模块通过相似度计算识别相同设备与不同设备,大大提高了设备识别准确率,且利用多种已有现有技术中已有函数进行音频信息处理,极大地提高了普适性,无需特别授权就能实现对设备的音频指纹的获取,从而实现零权限终端设备的识别。
以上,仅为本发明的较佳实施例而已,并非对本发明作任何形式上的限制;凡本行业的普通技术人员均可按说明书附图所示和以上而顺畅地实施本发明;但是,凡熟悉本专业的技术人员在不脱离本发明技术方案范围内,利用以上所揭示的技术内容而做出的些许更动、修饰与演变的等同变化,均为本发明的等效实施例;同时,凡依据本发明的实质技术对以上实施例所作的任何等同变化的更动、修饰与演变等,均仍属于本发明的技术方案的保护范围之内。