parent
ccdc45baa3
commit
cfab493bec
Binary file not shown.
Binary file not shown.
@ -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…
Reference in new issue