go sdk
安装
go get -u github.com/speakin/sdk_go
使用
加载sdk包
import sdk "github.com/speakin/sdk_go"
加载openapi
import "github.com/speakin/sdk_go/openapi"
初始化客户端
client := sdk.NewClient(
"your_access_key", // app access key
"your_secret_key", // app secret key
"your_bucket_access_key", // bucket access key
"your_bucket_secret_key", // bucket secret key
)
完整例子
package main
import (
"context"
"fmt"
sdk "github.com/speakin/sdk_go"
"github.com/speakin/sdk_go/openapi"
"github.com/antihax/optional"
"os"
"time"
)
func uploadFile(filename string, client *openapi.APIClient, bucket string) string {
voice, err := os.Open(filename)
if err != nil {
panic(err)
}
resp, _, err := client.StorageApi.Upload(context.Background(),
bucket, "wav", 0, time.Now().Unix(),
&openapi.UploadOpts{Body: optional.NewInterface(voice)})
if err != nil {
panic(err)
}
if resp.HasError {
fmt.Printf("%s:%s", resp.ErrorId, resp.ErrorDesc)
os.Exit(1)
}
return resp.Data.Key
}
func main() {
// 修改为你的app key和bucket key
client := sdk.NewClient(
"your_access_key", // app access key
"your_secret_key", // app secret key
"your_bucket_access_key", // bucket access key
"your_bucket_secret_key", // bucket secret key
)
// 修改为你的bucket名字和app名字
bucket := "bucket-test"
appName := "app-test"
// voice file
userNames := []string{"user_a", "user_b"}
userFiles := [][]string{
{
"../testdata/audio-data/u1/01_16k.wav",
"../testdata/audio-data/u1/02_16k.wav",
"../testdata/audio-data/u1/03_16k.wav",
},
{
"../testdata/audio-data/u2/01_16k.wav",
"../testdata/audio-data/u2/02_16k.wav",
"../testdata/audio-data/u2/03_16k.wav",
},
}
userFilesKey := make([][]string, 2)
// 上传所有注册文件
for i := range userNames {
for _, filename := range userFiles[i] {
userFilesKey[i] = append(userFilesKey[i], uploadFile(filename, client, bucket))
}
}
// 注册
for i, name := range userNames {
req := openapi.VoiceprintRegisterRequest{
AppName: appName,
UnionID: name,
Urls: userFilesKey[i],
SamplingRate: "16k",
Timestamp: time.Now().Unix(),
Replace: true,
}
resp, _, err := client.VoiceprintApi.Register(context.Background(),
&openapi.RegisterOpts{VoiceprintRegisterRequest: optional.NewInterface(req)})
if err != nil {
panic(err)
}
if resp.HasError {
fmt.Printf("%s:%s\n", resp.ErrorId, resp.ErrorDesc)
os.Exit(1)
}
}
// 校验注册结果
for _, name := range userNames {
req := openapi.VoiceprintQueryRequest{
AppName: appName,
UnionID: name,
Timestamp: time.Now().Unix(),
}
resp, _, err := client.VoiceprintApi.Query(context.Background(),
&openapi.QueryOpts{VoiceprintQueryRequest: optional.NewInterface(req)})
if err != nil {
panic(err)
}
if resp.HasError {
fmt.Printf("%s:%s\n", resp.ErrorId, resp.ErrorDesc)
os.Exit(1)
}
fmt.Printf("user %s register: %v\n", name, resp.Data.IsRegister)
}
// 1比1比对
checkFiles := []string{
"../testdata/audio-data/u1/04_16k.wav",
"../testdata/audio-data/u2/04_16k.wav",
}
// 上传upload文件
checkFilesKeys := []string{
uploadFile(checkFiles[0], client, bucket),
uploadFile(checkFiles[1], client, bucket),
}
// 1比1验证文件
for _, name := range userNames {
for i, key := range checkFilesKeys {
req := openapi.VoiceprintVerifyRequest{
AppName: appName,
UnionID: name,
Url: key,
SamplingRate: "16k",
Timestamp: time.Now().Unix(),
}
resp, _, err := client.VoiceprintApi.Verify(context.Background(),
&openapi.VerifyOpts{VoiceprintVerifyRequest: optional.NewInterface(req)})
if err != nil {
panic(err)
}
if resp.HasError {
fmt.Printf("%s:%s\n", resp.ErrorId, resp.ErrorDesc)
os.Exit(1)
}
fmt.Printf("user %s verify file %s score: %v\n", name, checkFiles[i], resp.Data.Score)
}
}
// 1比n验证
for i, key := range checkFilesKeys {
req := openapi.Voiceprint1tonVerifyRequest{
AppName: appName,
UnionIDs: userNames,
Url: key,
SamplingRate: "16k",
Timestamp: time.Now().Unix(),
}
resp, _, err := client.VoiceprintApi.Verify1ton(context.Background(),
&openapi.Verify1tonOpts{Voiceprint1tonVerifyRequest: optional.NewInterface(req)})
if err != nil {
panic(err)
}
if resp.HasError {
fmt.Printf("%s:%s\n", resp.ErrorId, resp.ErrorDesc)
os.Exit(1)
}
fmt.Printf("verify file %s match user %s score: %v\n", checkFiles[i], resp.Data.UnionID, resp.Data.Score)
}
// 下载 TODO openapi有bug暂时无法使用
{
//_, resp, err := client.StorageApi.Download(context.Background(),
// bucket, checkFilesKeys[0])
//if err != nil {
// panic(err)
//}
//
//b, err := ioutil.ReadAll(resp.Body)
//if err != nil {
// panic(err)
//}
//ioutil.WriteFile("../testdata/tmp/tmp.wav", b, 0644)
}
}