main
HuangHai 3 months ago
parent ccdc45baa3
commit cfab493bec

@ -0,0 +1,291 @@
import base64
import hashlib
import json
import time
import uuid
import requests
# API访问信息
host = 'https://ai-vpr.hivoice.cn'
appkey = "e63ansycfbbrnkczs4a24kjxqy4x6plzuehpjyyo"
secret = 'f70584766f88e09aa1ebe19315a1c481'
# 文档
# https://ai-vpr.hivoice.cn
# https://ai.unisound.com/doc/savpr/WebAPI.html
# 用户名和密码
# 18686619970
# DsideaL@123
groupId = '1'
groupInfo = '黄海的测试声纹组'
# 需要对比的声纹id
featureId = '**************************'
featureInfo = '*******我的声纹信息描述********'
createGroupEndPoint = '/vpr/v1/createGroup'
createFeatureEndPoint = '/vpr/v1/createFeature'
confirmFeatureEndPoint = '/vpr/v1/confirmFeature'
identifyFeatureByGroupIdEndPoint = '/vpr/v1/identifyFeatureByGroupId'
identifyFeatureByIdsEndPoint = '/vpr/v1/identifyFeatureByIds'
updateFeatureByIdEndPoint = '/vpr/v1/updateFeatureById'
delFeatureByIdEndPoint = '/vpr/v1/delFeatureById'
delGroupByIdEndPoint = '/vpr/v1/delGroupById'
findFeatureListByGroupIdEndPoint = '/vpr/v1/findFeatureListByGroupId'
#需要辨认的音频文件名, 将需要辨认的声纹音频放到项目目录下, 文件名自行定义|修改
confirmFeatureFileName = 'confirmFeature.mp3'
#需要创建的音频文件名, 将需要辨认的声纹音频放到项目目录下, 文件名自行定义|修改
createFeatureFileName = 'createFeature.mp3'
class Client:
def findFeatureListByGroupId(self):
timestamp = str(int(time.time() * 1000))
nonce = str(uuid.uuid1()).replace('-', '')
sign = self.getSign(timestamp, nonce)
headers = {"Content-Type": "application/json"}
find_feature_list_by_group_id_param = {
"appkey": appkey,
"timestamp": timestamp,
"nonce": nonce,
"sign": sign,
"groupId": groupId,
}
print('find_feature_list_by_group_id_param', find_feature_list_by_group_id_param)
find_feature_list_by_group_id_resp = requests.post(url=host + findFeatureListByGroupIdEndPoint,
data=json.dumps(find_feature_list_by_group_id_param),
headers=headers)
find_feature_list_by_group_id_result = json.loads(find_feature_list_by_group_id_resp.content)
print('find_feature_list_by_group_id_result', find_feature_list_by_group_id_result)
print('------------------------------------------------------------')
# 删除声纹组
def delGroupById(self):
timestamp = str(int(time.time() * 1000))
nonce = str(uuid.uuid1()).replace('-', '')
sign = self.getSign(timestamp, nonce)
headers = {"Content-Type": "application/json"}
del_group_by_id_param = {
"appkey": appkey,
"timestamp": timestamp,
"nonce": nonce,
"sign": sign,
"groupId": groupId,
}
print('del_group_by_id_param', del_group_by_id_param)
del_group_by_id_resp = requests.post(url=host + delGroupByIdEndPoint,
data=json.dumps(del_group_by_id_param),
headers=headers)
del_group_by_id_result = json.loads(del_group_by_id_resp.content)
print('del_group_by_id_result', del_group_by_id_result)
print('------------------------------------------------------------')
# 删除声纹
def delFeatureById(self):
timestamp = str(int(time.time() * 1000))
nonce = str(uuid.uuid1()).replace('-', '')
sign = self.getSign(timestamp, nonce)
headers = {"Content-Type": "application/json"}
del_feature_by_id_param = {
"appkey": appkey,
"timestamp": timestamp,
"nonce": nonce,
"sign": sign,
"groupId": groupId,
"featureId": featureId
}
print('del_feature_by_id_param', del_feature_by_id_param)
del_feature_by_id_resp = requests.post(url=host + delFeatureByIdEndPoint,
data=json.dumps(del_feature_by_id_param),
headers=headers)
del_feature_by_id_result = json.loads(del_feature_by_id_resp.content)
print('del_feature_by_id_result', del_feature_by_id_result)
print('------------------------------------------------------------')
# 修改声纹
def updateFeatureById(self):
update_feature = open(confirmFeatureFileName, 'rb').read()
# 声纹base64字符串
audio_data = base64.b64encode(update_feature)
timestamp = str(int(time.time() * 1000))
nonce = str(uuid.uuid1()).replace('-', '')
sign = self.getSign(timestamp, nonce)
headers = {"Content-Type": "application/json"}
update_feature_by_id_param = {
"appkey": appkey,
"timestamp": timestamp,
"nonce": nonce,
"sign": sign,
"groupId": groupId,
"featureId": featureId,
"featureInfo": '修改后的声纹',
"audioData": audio_data.decode(),
"audioSampleRate": 16000,
"audioFormat": "mp3"
}
#print('update_feature_by_id_param', update_feature_by_id_param)
update_feature_by_id_resp = requests.post(url=host + updateFeatureByIdEndPoint,
data=json.dumps(update_feature_by_id_param),
headers=headers)
update_feature_by_id_result = json.loads(update_feature_by_id_resp.content)
print('update_feature_by_id_result', update_feature_by_id_result)
print('------------------------------------------------------------')
# 声纹确认 1:N 不同组的多个声纹 将需要辨认的声纹音频放到resource目录下, 文件名自行定义, 获取方式自行修改
def identifyFeatureByIds(self):
identify_feature = open(createFeatureFileName, 'rb').read()
# 声纹base64字符串
audio_data = base64.b64encode(identify_feature)
timestamp = str(int(time.time() * 1000))
nonce = str(uuid.uuid1()).replace('-', '')
sign = self.getSign(timestamp, nonce)
headers = {"Content-Type": "application/json"}
feature_list = [{'groupId': groupId, "featureId": featureId}, {'groupId': groupId, "featureId": featureId}]
identify_feature_param = {
"appkey": appkey,
"timestamp": timestamp,
"nonce": nonce,
"sign": sign,
"featureList": feature_list,
"topN": 1,
"audioData": audio_data.decode(),
"audioSampleRate": 16000,
"audioFormat": "mp3"
}
#print('identify_feature_param', identify_feature_param)
identify_feature_resp = requests.post(url=host + identifyFeatureByIdsEndPoint,
data=json.dumps(identify_feature_param),
headers=headers)
identify_feature_result = json.loads(identify_feature_resp.content)
print('identify_feature_result', identify_feature_result)
print('------------------------------------------------------------')
# 声纹辨认【1:N】组内所有声纹作对比 将需要辨认的声纹音频放到项目目录下, 文件名自行定义, 获取方式自行修改
def identifyFeatureByGroupId(self):
identify_feature = open(confirmFeatureFileName, 'rb').read()
# 声纹base64字符串
audio_data = base64.b64encode(identify_feature)
timestamp = str(int(time.time() * 1000))
nonce = str(uuid.uuid1()).replace('-', '')
sign = self.getSign(timestamp, nonce)
headers = {"Content-Type": "application/json"}
identify_feature_param = {
"appkey": appkey,
"timestamp": timestamp,
"nonce": nonce,
"sign": sign,
"groupId": groupId,
"topN": 1,
"audioData": audio_data.decode(),
"audioSampleRate": 16000,
"audioFormat": "mp3"
}
#print('identify_feature_param', identify_feature_param)
identify_feature_resp = requests.post(url=host + identifyFeatureByGroupIdEndPoint,
data=json.dumps(identify_feature_param),
headers=headers)
identify_feature_result = json.loads(identify_feature_resp.content)
print('identify_feature_result', identify_feature_result)
print('------------------------------------------------------------')
# 声纹确认【1:1】 将需要辨认的声纹音频放到项目目录下, 文件名自行定义, 获取方式自行修改
def confirmFeature(self):
confirm_feature = open(confirmFeatureFileName, 'rb').read()
# 声纹base64字符串
audio_data = base64.b64encode(confirm_feature)
timestamp = str(int(time.time() * 1000))
nonce = str(uuid.uuid1()).replace('-', '')
sign = self.getSign(timestamp, nonce)
headers = {"Content-Type": "application/json"}
confirm_feature_param = {
"appkey": appkey,
"timestamp": timestamp,
"nonce": nonce,
"sign": sign,
"groupId": groupId,
"featureId": featureId,
"audioData": audio_data.decode(),
"audioSampleRate": 16000,
"audioFormat": "mp3"
}
#print('confirm_feature_param', confirm_feature_param)
confirm_feature_resp = requests.post(url=host + confirmFeatureEndPoint, data=json.dumps(confirm_feature_param),
headers=headers)
confirm_feature_result = json.loads(confirm_feature_resp.content)
print('confirm_feature_result', confirm_feature_result)
print('------------------------------------------------------------')
# 创建声纹 将声纹音频放到项目目录下, 文件名自行定义, 获取方式自行修改
def createFeature(self):
create_feature = open(createFeatureFileName, 'rb').read()
# 声纹base64字符串
audio_data = base64.b64encode(create_feature)
timestamp = str(int(time.time() * 1000))
nonce = str(uuid.uuid1()).replace('-', '')
sign = self.getSign(timestamp, nonce)
headers = {"Content-Type": "application/json"}
create_feature_param = {
"appkey": appkey,
"timestamp": timestamp,
"nonce": nonce,
"sign": sign,
"groupId": groupId,
"featureId": featureId,
"featureInfo": featureInfo,
"audioData": audio_data.decode(),
"audioSampleRate": 16000,
"audioFormat": "mp3"
}
#print('create_feature_param', create_feature_param)
create_feature_resp = requests.post(url=host + createFeatureEndPoint, data=json.dumps(create_feature_param),
headers=headers)
create_feature_result = json.loads(create_feature_resp.content)
print('create_feature_result', create_feature_result)
print('------------------------------------------------------------')
def createGroup(self):
timestamp = str(int(time.time() * 1000))
nonce = str(uuid.uuid1()).replace('-', '')
sign = self.getSign(timestamp, nonce)
headers = {"Content-Type": "application/json"}
creat_group_param = {
"appkey": appkey,
"timestamp": timestamp,
"nonce": nonce,
"sign": sign,
"groupId": groupId,
"groupInfo": groupInfo
}
print('creat_group_param', creat_group_param)
creat_group_resp = requests.post(url=host + createGroupEndPoint, data=json.dumps(creat_group_param),
headers=headers)
creat_group_result = json.loads(creat_group_resp.content)
print('creat_group_result', creat_group_result)
print('------------------------------------------------------------')
@staticmethod
def getSign(timestamp, nonce):
hs = hashlib.sha256()
hs.update((appkey + timestamp + secret + nonce).encode('utf-8'))
signature = hs.hexdigest().upper()
return signature
###################################################
if __name__ == '__main__':
client = Client()
# 创建声纹组
client.createGroup()
# 创建声纹
client.createFeature()
# 确认声纹
client.confirmFeature()
# 在声纹组中搜索声纹
client.identifyFeatureByGroupId()
#client.identifyFeatureByIds()
client.findFeatureListByGroupId()
#client.updateFeatureById()
#client.delFeatureById()
#client.delGroupById()
Loading…
Cancel
Save