加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_开封站长网 (http://www.0378zz.com/)- 科技、AI行业应用、媒体智能、低代码、办公协同!
当前位置: 首页 > 大数据 > 正文

三个步骤创建一个声纹系统

发布时间:2021-05-11 11:58:34 所属栏目:大数据 来源:互联网
导读:第一步,初始化。 当前系统实现了声音转向量的函数,用户将前端得到的声音通过POST请求,发给阿里云服务系统,选择对应的声纹模型,就可以将声音转成对应的向量。 import requestsimport jsonimport numpy as np# sound: 声音二进制文件。# model_id:模型i

 

第一步,初始化。

当前系统实现了声音转向量的函数,用户将前端得到的声音通过POST请求,发给阿里云服务系统,选择对应的声纹模型,就可以将声音转成对应的向量。

import requestsimport jsonimport numpy as np# sound: 声音二进制文件。# model_id:模型id。def get_vector(sound, model_id='i-vector'): url = 'http://47.111.21.183:18089/demo/vdb/v1/retrieve' d = {'resource': sound, 'model_id': model_id} r = requests.post(url, data=d) js = json.loads(r.text) return np.array(js['emb'])# 读取用户文件。file = 'xxx.wav'data = f.read()print(get_vector(data))f.close()

在初始化的过程中,用户创建相关的用户声纹表。同时,给表的向量列加入向量索引,来加速查询过程。当前声纹模型输出的都是400维的向量,所以索引参数dim设置为400。

--创建用户声纹表CREATE TABLE person_voiceprint_detection_table( id serial primary key, name varchar, voiceprint_feature float4[]);--创建向量索引CREATE INDEX person_voiceprint_detection_table_idx ON person_voiceprint_detection_table USING ann(voiceprint_feature) WITH(distancemeasure=L2,dim=400,pq_segments=40);

第二步,注册用户声音。

在注册的过程中,注册一个用户,插入一条记录到当前系统中。

--注册用户'张三'到当前的系统中。--通过HTTP服务,将声纹转化成相关的向量。INSERT INTO person_voiceprint_detection_table(name, voiceprint_feature)SELECT '张三', array[-0.017,-0.032,...]::float4[])

第三步,检索或验证用户声音。

声纹门锁验证(1:1 验证):在验证系统中,系统会得到用户的标识信息(user_id),在声纹库中计算输入的声音向量和库里该用户的声音向量的距离。一般系统会设置一个距离阈值(threshold=550),如果向量之间的距离大于这个阈值,说明验证失败。如果小于阈值,说明声纹验证成功。

-- 声纹门锁检测(1:1)验证SELECT id, -- 用户id信息 name, -- 用户姓名 l2_distance(voiceprint_feature, ARRAY[-0.017,-0.032,...]::float4[]) AS distance -- 向量距离 FROM person_voiceprint_detection_table -- 用户声音表WHERE distance < threshold -- 通常情况下,threshold为550 AND id = 'user_id' -- 用户要验证的id;

会议声纹检索(1:N 检测):系统通过识别当前讲话人的声音,会返回最相关的注册用户信息。如果没有返回结果,说明当前会议说话人不在声纹库里面。

-- 声纹会议人员识别(1:N)验证SELECT id, -- 用户id信息 name, -- 用户姓名 l2_distance(voiceprint_feature, ARRAY[-0.017,-0.032,...]::float4[]) AS distance -- 向量距离 FROM person_voiceprint_detection_table -- 用户声音表WHERE distance < threshold -- 通常情况下,threshold为550 ORDER BY voiceprint_feature <-> ARRAY[-0.017,-0.032,...]::float4[] -- 利用向量进行排序LIMIT 1; -- 返回最相似的结果

(编辑:开发网_开封站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读