evaluationExamples.go 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696
  1. package main
  2. /**
  3. * 运行步骤:
  4. * 1 下载测试音频数据到本地
  5. * bike.mp3: https://soe-common-1255701415.cos.ap-guangzhou.myqcloud.com/bike.mp3
  6. * cn.mp3: https://soe-common-1255701415.cos.ap-guangzhou.myqcloud.com/cn.mp3
  7. * Rex was a big dog.wav : https://soe-common-1255701415.cos.ap-guangzhou.myqcloud.com/Rex%20was%20a%20big%20dog.wav
  8. * I see sixteen eggs and eighteen apples.wav : https://soe-common-1255701415.cos.ap-guangzhou.myqcloud.com/I%20see%20sixteen%20eggs%20and%20eighteen%20apples.wav
  9. * 2 配置测试音频数据目录常量 AUDIO_FOR_ONCE、AUDIO_FOR_CN、AUDIO_FOR_SEQ、AUDIO_FOR_ASYNC 为音频下载目录
  10. * 3 修改密钥常量 SECRET_ID、SECRET_KEY 为腾讯云帐号密钥
  11. * 4 运行示例程序
  12. */
  13. import (
  14. "encoding/base64"
  15. "encoding/json"
  16. "fmt"
  17. "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common"
  18. "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors"
  19. "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile"
  20. soe "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/soe/v20180724"
  21. "io/ioutil"
  22. "math"
  23. "math/rand"
  24. "sync"
  25. "time"
  26. )
  27. const (
  28. PKG_SIZE = 16 * 1024
  29. )
  30. const (
  31. SECRET_ID = ""
  32. SECRET_KEY = ""
  33. )
  34. const (
  35. AUDIO_FOR_ONCE = "./bike.mp3"
  36. AUDIO_FOR_CN = "./cn.mp3"
  37. AUDIO_FOR_SEQ = "./Rex was a big dog.wav"
  38. AUDIO_FOR_ASYNC = "./I see sixteen eggs and eighteen apples.wav"
  39. )
  40. const (
  41. FINISHED = "Finished"
  42. FAILED = "Failed"
  43. EVALUATING = "Evaluating"
  44. )
  45. const (
  46. EVAL_MODE_WORD = 0
  47. EVAL_MODE_SENTENCE = 1
  48. EVAL_MODE_PARA = 2
  49. EVAL_MODE_FREETALK = 3
  50. )
  51. const (
  52. WORK_MODE_STREAM = 0
  53. WORK_MODE_ONCE = 1
  54. )
  55. const (
  56. MP3 = 3
  57. WAV = 2
  58. RAW = 1
  59. )
  60. const (
  61. CN = 1
  62. EN = 0
  63. )
  64. func getSessionId() string {
  65. return fmt.Sprintf("%d%d", rand.Intn(1000), time.Now().Nanosecond())
  66. }
  67. /**
  68. * 一次性评估示例,用于较短时间音频的评估,例如单词或者短句,评估一次性发布所有音频数据
  69. *
  70. * @param client
  71. */
  72. func evaluationOnce(client *soe.Client) {
  73. fmt.Println("--------一次性评测-----")
  74. sessionId := getSessionId()
  75. // 实例化一个请求对象,根据调用的接口和实际情况,可以进一步设置请求参数
  76. // 你可以直接查询SDK源码确定InitOralProcessRequest有哪些属性可以设置,
  77. // 属性可能是基本类型,也可能引用了另一个数据结构。
  78. // 推荐使用IDE进行开发,可以方便的跳转查阅各个接口和数据结构的文档说明。
  79. request := soe.NewInitOralProcessRequest()
  80. // 基本类型的设置。
  81. // 此接口允许设置返回的实例数量。此处指定为只返回一个。
  82. // SDK采用的是指针风格指定参数,即使对于基本类型你也需要用指针来对参数赋值。
  83. // SDK提供对基本类型的指针引用封装函数
  84. request.WorkMode = common.Int64Ptr(WORK_MODE_ONCE)
  85. request.EvalMode = common.Int64Ptr(EVAL_MODE_WORD)
  86. request.ScoreCoeff = common.Float64Ptr(2.0)
  87. request.SessionId = common.StringPtr(sessionId)
  88. request.RefText = common.StringPtr("bike")
  89. // 通过client对象调用想要访问的接口,需要传入请求对象
  90. response, err := client.InitOralProcess(request)
  91. // 处理异常
  92. fmt.Println(err)
  93. if _, ok := err.(*errors.TencentCloudSDKError); ok {
  94. fmt.Printf("An API error has returned: %s", err)
  95. return
  96. }
  97. // 非SDK异常,直接失败。实际代码中可以加入其他的处理。
  98. if err != nil {
  99. panic(err)
  100. }
  101. // 打印返回的json字符串
  102. fmt.Printf("%s", response.ToJsonString())
  103. // 实例化一个请求对象,根据调用的接口和实际情况,可以进一步设置请求参数
  104. // 你可以直接查询SDK源码确定TransmitOralProcessRequest有哪些属性可以设置,
  105. // 属性可能是基本类型,也可能引用了另一个数据结构。
  106. // 推荐使用IDE进行开发,可以方便的跳转查阅各个接口和数据结构的文档说明。
  107. tRequest := soe.NewTransmitOralProcessRequest()
  108. // 基本类型的设置。
  109. // 此接口允许设置返回的实例数量。此处指定为只返回一个。
  110. // SDK采用的是指针风格指定参数,即使对于基本类型你也需要用指针来对参数赋值。
  111. // SDK提供对基本类型的指针引用封装函数
  112. tRequest.SeqId = common.Int64Ptr(1)
  113. tRequest.IsEnd = common.Int64Ptr(1)
  114. tRequest.SessionId = common.StringPtr(sessionId)
  115. tRequest.VoiceFileType = common.Int64Ptr(MP3)
  116. tRequest.VoiceEncodeType = common.Int64Ptr(1)
  117. buf, err := ioutil.ReadFile(AUDIO_FOR_ONCE)
  118. if err != nil {
  119. fmt.Printf("read file error: %s", err)
  120. return
  121. }
  122. base64Str := base64.StdEncoding.EncodeToString(buf)
  123. tRequest.UserVoiceData = common.StringPtr(base64Str)
  124. tRequest.SetHttpMethod("POST")
  125. tResponse, err := client.TransmitOralProcess(tRequest)
  126. // 处理异常
  127. if _, ok := err.(*errors.TencentCloudSDKError); ok {
  128. fmt.Printf("An API error has returned: %s", err)
  129. return
  130. }
  131. // 非SDK异常,直接失败。实际代码中可以加入其他的处理。
  132. if err != nil {
  133. panic(err)
  134. }
  135. // 打印返回的json字符串
  136. b, _ := json.Marshal(tResponse.Response)
  137. fmt.Printf("\n评测结果:%s\n", b)
  138. fmt.Println("--------结束一次性评测-----")
  139. }
  140. /**
  141. * 中文评估示例,除了init参数 ServerType 以外,和英文评估完全一样
  142. *
  143. * @param client
  144. */
  145. func evaluationCn(client *soe.Client) {
  146. fmt.Println("--------中文评测-----")
  147. sessionId := getSessionId()
  148. // 实例化一个请求对象,根据调用的接口和实际情况,可以进一步设置请求参数
  149. // 你可以直接查询SDK源码确定InitOralProcessRequest有哪些属性可以设置,
  150. // 属性可能是基本类型,也可能引用了另一个数据结构。
  151. // 推荐使用IDE进行开发,可以方便的跳转查阅各个接口和数据结构的文档说明。
  152. request := soe.NewInitOralProcessRequest()
  153. // 基本类型的设置。
  154. // 此接口允许设置返回的实例数量。此处指定为只返回一个。
  155. // SDK采用的是指针风格指定参数,即使对于基本类型你也需要用指针来对参数赋值。
  156. // SDK提供对基本类型的指针引用封装函数
  157. request.WorkMode = common.Int64Ptr(WORK_MODE_ONCE)
  158. request.EvalMode = common.Int64Ptr(EVAL_MODE_SENTENCE)
  159. request.ScoreCoeff = common.Float64Ptr(2.0)
  160. request.SessionId = common.StringPtr(sessionId)
  161. request.RefText = common.StringPtr("轻轻的我走了,正如我轻轻的来")
  162. request.ServerType = common.Int64Ptr(CN)
  163. // 通过client对象调用想要访问的接口,需要传入请求对象
  164. response, err := client.InitOralProcess(request)
  165. // 处理异常
  166. fmt.Println(err)
  167. if _, ok := err.(*errors.TencentCloudSDKError); ok {
  168. fmt.Printf("An API error has returned: %s", err)
  169. return
  170. }
  171. // 非SDK异常,直接失败。实际代码中可以加入其他的处理。
  172. if err != nil {
  173. panic(err)
  174. }
  175. // 打印返回的json字符串
  176. fmt.Printf("%s", response.ToJsonString())
  177. // 实例化一个请求对象,根据调用的接口和实际情况,可以进一步设置请求参数
  178. // 你可以直接查询SDK源码确定TransmitOralProcessRequest有哪些属性可以设置,
  179. // 属性可能是基本类型,也可能引用了另一个数据结构。
  180. // 推荐使用IDE进行开发,可以方便的跳转查阅各个接口和数据结构的文档说明。
  181. tRequest := soe.NewTransmitOralProcessRequest()
  182. // 基本类型的设置。
  183. // 此接口允许设置返回的实例数量。此处指定为只返回一个。
  184. // SDK采用的是指针风格指定参数,即使对于基本类型你也需要用指针来对参数赋值。
  185. // SDK提供对基本类型的指针引用封装函数
  186. tRequest.SeqId = common.Int64Ptr(1)
  187. tRequest.IsEnd = common.Int64Ptr(1)
  188. tRequest.SessionId = common.StringPtr(sessionId)
  189. tRequest.VoiceFileType = common.Int64Ptr(MP3)
  190. tRequest.VoiceEncodeType = common.Int64Ptr(1)
  191. buf, err := ioutil.ReadFile(AUDIO_FOR_CN)
  192. if err != nil {
  193. fmt.Printf("read file error: %s", err)
  194. return
  195. }
  196. base64Str := base64.StdEncoding.EncodeToString(buf)
  197. tRequest.UserVoiceData = common.StringPtr(base64Str)
  198. tRequest.SetHttpMethod("POST")
  199. tResponse, err := client.TransmitOralProcess(tRequest)
  200. // 处理异常
  201. if _, ok := err.(*errors.TencentCloudSDKError); ok {
  202. fmt.Printf("An API error has returned: %s", err)
  203. return
  204. }
  205. // 非SDK异常,直接失败。实际代码中可以加入其他的处理。
  206. if err != nil {
  207. panic(err)
  208. }
  209. // 打印返回的json字符串
  210. b, _ := json.Marshal(tResponse.Response)
  211. fmt.Printf("%s\n", b)
  212. fmt.Println("--------结束中文评测-----")
  213. }
  214. /**
  215. * 流式分片传输评估示例,中等长度的音频或者边录边传模式,将音频分片传输到评估服务
  216. *
  217. * @param client
  218. */
  219. func evaluationMutipleSeq(client *soe.Client) {
  220. fmt.Println("\n--------顺序评测-----")
  221. sessionId := getSessionId()
  222. // 实例化一个请求对象,根据调用的接口和实际情况,可以进一步设置请求参数
  223. // 你可以直接查询SDK源码确定InitOralProcessRequest有哪些属性可以设置,
  224. // 属性可能是基本类型,也可能引用了另一个数据结构。
  225. // 推荐使用IDE进行开发,可以方便的跳转查阅各个接口和数据结构的文档说明。
  226. request := soe.NewInitOralProcessRequest()
  227. // 基本类型的设置。
  228. // 此接口允许设置返回的实例数量。此处指定为只返回一个。
  229. // SDK采用的是指针风格指定参数,即使对于基本类型你也需要用指针来对参数赋值。
  230. // SDK提供对基本类型的指针引用封装函数
  231. request.WorkMode = common.Int64Ptr(WORK_MODE_STREAM)
  232. request.EvalMode = common.Int64Ptr(EVAL_MODE_SENTENCE)
  233. request.ScoreCoeff = common.Float64Ptr(2.0)
  234. request.SessionId = common.StringPtr(sessionId)
  235. request.RefText = common.StringPtr("Rex was a big dog")
  236. // 通过client对象调用想要访问的接口,需要传入请求对象
  237. response, err := client.InitOralProcess(request)
  238. // 处理异常
  239. fmt.Println(err)
  240. if _, ok := err.(*errors.TencentCloudSDKError); ok {
  241. fmt.Printf("An API error has returned: %s", err)
  242. return
  243. }
  244. // 非SDK异常,直接失败。实际代码中可以加入其他的处理。
  245. if err != nil {
  246. panic(err)
  247. }
  248. // 打印返回的json字符串
  249. fmt.Printf("%s", response.ToJsonString())
  250. data, err := ioutil.ReadFile(AUDIO_FOR_SEQ)
  251. if err != nil {
  252. fmt.Printf("read file error: %s", err)
  253. return
  254. }
  255. timeBefore := time.Now().UnixNano() / 1e6
  256. defer func() {
  257. timeAfter := time.Now().UnixNano() / 1e6
  258. fmt.Printf("costTime:%d", timeAfter-timeBefore)
  259. }()
  260. pkgNum := int(math.Ceil(float64(len(data)) / float64(PKG_SIZE)))
  261. for i := 1; i <= pkgNum; i++ {
  262. lastIndex := i * PKG_SIZE
  263. if i == pkgNum {
  264. lastIndex = len(data)
  265. }
  266. buf := data[(i-1)*PKG_SIZE : lastIndex]
  267. base64Str := base64.StdEncoding.EncodeToString(buf)
  268. tRequest := soe.NewTransmitOralProcessRequest()
  269. // 基本类型的设置。
  270. // 此接口允许设置返回的实例数量。此处指定为只返回一个。
  271. // SDK采用的是指针风格指定参数,即使对于基本类型你也需要用指针来对参数赋值。
  272. // SDK提供对基本类型的指针引用封装函数
  273. tRequest.SeqId = common.Int64Ptr(int64(i))
  274. tRequest.IsEnd = common.Int64Ptr(0)
  275. if i == pkgNum {
  276. tRequest.IsEnd = common.Int64Ptr(1)
  277. }
  278. tRequest.SessionId = common.StringPtr(sessionId)
  279. tRequest.VoiceFileType = common.Int64Ptr(WAV)
  280. tRequest.VoiceEncodeType = common.Int64Ptr(1)
  281. tRequest.UserVoiceData = common.StringPtr(base64Str)
  282. tRequest.SetHttpMethod("POST")
  283. tResponse, err := client.TransmitOralProcess(tRequest)
  284. // 处理异常
  285. if _, ok := err.(*errors.TencentCloudSDKError); ok {
  286. fmt.Printf("An API error has returned: %s", err)
  287. return
  288. }
  289. // 非SDK异常,直接失败。实际代码中可以加入其他的处理。
  290. if err != nil {
  291. panic(err)
  292. }
  293. b, _ := json.Marshal(tResponse.Response)
  294. fmt.Printf("\n评测结果:%s\n", b)
  295. }
  296. tRequest := soe.NewTransmitOralProcessRequest()
  297. tRequest.SeqId = common.Int64Ptr(1)
  298. tRequest.IsEnd = common.Int64Ptr(1)
  299. tRequest.SessionId = common.StringPtr(sessionId)
  300. tRequest.VoiceFileType = common.Int64Ptr(1)
  301. // 设置请求为查询接口
  302. tRequest.IsQuery = common.Int64Ptr(1)
  303. tRequest.VoiceEncodeType = common.Int64Ptr(WAV)
  304. // 填充空值
  305. tRequest.UserVoiceData = common.StringPtr(" ")
  306. tRequest.SetHttpMethod("POST")
  307. tResponse, err := client.TransmitOralProcess(tRequest)
  308. // 处理异常
  309. if _, ok := err.(*errors.TencentCloudSDKError); ok {
  310. fmt.Printf("An API error has returned: %s", err)
  311. return
  312. }
  313. // 非SDK异常,直接失败。实际代码中可以加入其他的处理。
  314. if err != nil {
  315. panic(err)
  316. }
  317. b, _ := json.Marshal(tResponse.Response)
  318. fmt.Printf("\n查询结果:%s\n", b)
  319. fmt.Println("--------结束评测-----")
  320. }
  321. /**
  322. * 乱序流式评估示例,分片请求支持乱序
  323. *
  324. * @param client
  325. */
  326. func evaluationMultipleSeqDisorder(client *soe.Client) {
  327. fmt.Println("--------乱序评测-----")
  328. sessionId := getSessionId()
  329. // 实例化一个请求对象,根据调用的接口和实际情况,可以进一步设置请求参数
  330. // 你可以直接查询SDK源码确定InitOralProcessRequest有哪些属性可以设置,
  331. // 属性可能是基本类型,也可能引用了另一个数据结构。
  332. // 推荐使用IDE进行开发,可以方便的跳转查阅各个接口和数据结构的文档说明。
  333. request := soe.NewInitOralProcessRequest()
  334. // 基本类型的设置。
  335. // 此接口允许设置返回的实例数量。此处指定为只返回一个。
  336. // SDK采用的是指针风格指定参数,即使对于基本类型你也需要用指针来对参数赋值。
  337. // SDK提供对基本类型的指针引用封装函数
  338. request.WorkMode = common.Int64Ptr(WORK_MODE_STREAM)
  339. request.EvalMode = common.Int64Ptr(EVAL_MODE_SENTENCE)
  340. request.ScoreCoeff = common.Float64Ptr(2.0)
  341. request.SessionId = common.StringPtr(sessionId)
  342. request.RefText = common.StringPtr("Rex was a big dog.")
  343. // 通过client对象调用想要访问的接口,需要传入请求对象
  344. response, err := client.InitOralProcess(request)
  345. // 处理异常
  346. fmt.Println(err)
  347. if _, ok := err.(*errors.TencentCloudSDKError); ok {
  348. fmt.Printf("An API error has returned: %s", err)
  349. return
  350. }
  351. // 非SDK异常,直接失败。实际代码中可以加入其他的处理。
  352. if err != nil {
  353. panic(err)
  354. }
  355. // 打印返回的json字符串
  356. fmt.Printf("%s", response.ToJsonString())
  357. data, err := ioutil.ReadFile(AUDIO_FOR_SEQ)
  358. if err != nil {
  359. fmt.Printf("read file error: %s", err)
  360. return
  361. }
  362. pkgNum := int(math.Ceil(float64(len(data)) / float64(PKG_SIZE)))
  363. timeBefore := time.Now().UnixNano() / 1e6
  364. defer func() {
  365. timeAfter := time.Now().UnixNano() / 1e6
  366. fmt.Printf("costTime:%d", timeAfter-timeBefore)
  367. }()
  368. wg := &sync.WaitGroup{}
  369. for i := 1; i <= pkgNum; i++ {
  370. lastIndex := i * PKG_SIZE
  371. if i == pkgNum {
  372. lastIndex = len(data)
  373. }
  374. buf := data[(i-1)*PKG_SIZE : lastIndex]
  375. base64Str := base64.StdEncoding.EncodeToString(buf)
  376. tRequest := soe.NewTransmitOralProcessRequest()
  377. // 基本类型的设置。
  378. // 此接口允许设置返回的实例数量。此处指定为只返回一个。
  379. // SDK采用的是指针风格指定参数,即使对于基本类型你也需要用指针来对参数赋值。
  380. // SDK提供对基本类型的指针引用封装函数
  381. tRequest.SeqId = common.Int64Ptr(int64(i))
  382. tRequest.IsEnd = common.Int64Ptr(0)
  383. if i == pkgNum {
  384. tRequest.IsEnd = common.Int64Ptr(1)
  385. }
  386. tRequest.SessionId = common.StringPtr(sessionId)
  387. tRequest.VoiceFileType = common.Int64Ptr(WAV)
  388. tRequest.VoiceEncodeType = common.Int64Ptr(1)
  389. tRequest.UserVoiceData = common.StringPtr(base64Str)
  390. tRequest.SetHttpMethod("POST")
  391. wg.Add(1)
  392. go func(g *sync.WaitGroup, tReq *soe.TransmitOralProcessRequest) {
  393. defer g.Done()
  394. tResponse, err := client.TransmitOralProcess(tReq)
  395. if _, ok := err.(*errors.TencentCloudSDKError); ok {
  396. fmt.Printf("An API error has returned: %s", err)
  397. return
  398. }
  399. b, _ := json.Marshal(tResponse.Response)
  400. fmt.Printf("\n评测结果:%s\n", b)
  401. if err != nil {
  402. fmt.Printf("trans error: %s", err)
  403. }
  404. }(wg, tRequest)
  405. }
  406. wg.Wait()
  407. tRequest := soe.NewTransmitOralProcessRequest()
  408. tRequest.SeqId = common.Int64Ptr(1)
  409. tRequest.IsEnd = common.Int64Ptr(1)
  410. tRequest.SessionId = common.StringPtr(sessionId)
  411. tRequest.VoiceFileType = common.Int64Ptr(1)
  412. // 设置请求为查询接口
  413. tRequest.IsQuery = common.Int64Ptr(1)
  414. tRequest.VoiceEncodeType = common.Int64Ptr(1)
  415. // 填充空值
  416. tRequest.UserVoiceData = common.StringPtr(" ")
  417. tRequest.SetHttpMethod("POST")
  418. tResponse, err := client.TransmitOralProcess(tRequest)
  419. // 处理异常
  420. if _, ok := err.(*errors.TencentCloudSDKError); ok {
  421. fmt.Printf("An API error has returned: %s", err)
  422. return
  423. }
  424. // 非SDK异常,直接失败。实际代码中可以加入其他的处理。
  425. if err != nil {
  426. panic(err)
  427. }
  428. b, _ := json.Marshal(tResponse.Response)
  429. fmt.Printf("\n查询结果:%s\n", b)
  430. fmt.Println("结束评测")
  431. }
  432. /**
  433. * 异步评估示例,较长音频的评估,短时间内获取不了结果(评估时间超过 20s ),采用异步模式,主动轮询评估服务得到评估结果,可用于段落或者离线评估
  434. *
  435. * @param client
  436. */
  437. func evaluationMutipleAsync(client *soe.Client) {
  438. fmt.Println("--------开始异步评测-----")
  439. sessionId := getSessionId()
  440. // 实例化一个请求对象,根据调用的接口和实际情况,可以进一步设置请求参数
  441. // 你可以直接查询SDK源码确定InitOralProcessRequest有哪些属性可以设置,
  442. // 属性可能是基本类型,也可能引用了另一个数据结构。
  443. // 推荐使用IDE进行开发,可以方便的跳转查阅各个接口和数据结构的文档说明。
  444. request := soe.NewInitOralProcessRequest()
  445. // 基本类型的设置。
  446. // 此接口允许设置返回的实例数量。此处指定为只返回一个。
  447. // SDK采用的是指针风格指定参数,即使对于基本类型你也需要用指针来对参数赋值。
  448. // SDK提供对基本类型的指针引用封装函数
  449. request.WorkMode = common.Int64Ptr(WORK_MODE_STREAM)
  450. request.EvalMode = common.Int64Ptr(EVAL_MODE_SENTENCE)
  451. request.ScoreCoeff = common.Float64Ptr(2.0)
  452. request.SessionId = common.StringPtr(sessionId)
  453. request.RefText = common.StringPtr("I see sixteen eggs and eighteen apples.wav")
  454. request.IsAsync = common.Int64Ptr(1)
  455. // 通过client对象调用想要访问的接口,需要传入请求对象
  456. response, err := client.InitOralProcess(request)
  457. // 处理异常
  458. fmt.Println(err)
  459. if _, ok := err.(*errors.TencentCloudSDKError); ok {
  460. fmt.Printf("An API error has returned: %s", err)
  461. return
  462. }
  463. // 非SDK异常,直接失败。实际代码中可以加入其他的处理。
  464. if err != nil {
  465. panic(err)
  466. }
  467. // 打印返回的json字符串
  468. fmt.Printf("%s", response.ToJsonString())
  469. data, err := ioutil.ReadFile(AUDIO_FOR_ASYNC)
  470. if err != nil {
  471. fmt.Printf("read file error: %s", err)
  472. return
  473. }
  474. pkgNum := int(math.Ceil(float64(len(data)) / float64(PKG_SIZE)))
  475. wg := &sync.WaitGroup{}
  476. for i := 1; i <= pkgNum; i++ {
  477. lastIndex := i * PKG_SIZE
  478. if i == pkgNum {
  479. lastIndex = len(data)
  480. }
  481. buf := data[(i-1)*PKG_SIZE : lastIndex]
  482. base64Str := base64.StdEncoding.EncodeToString(buf)
  483. tRequest := soe.NewTransmitOralProcessRequest()
  484. // 基本类型的设置。
  485. // 此接口允许设置返回的实例数量。此处指定为只返回一个。
  486. // SDK采用的是指针风格指定参数,即使对于基本类型你也需要用指针来对参数赋值。
  487. // SDK提供对基本类型的指针引用封装函数
  488. tRequest.SeqId = common.Int64Ptr(int64(i))
  489. tRequest.IsEnd = common.Int64Ptr(0)
  490. if i == pkgNum {
  491. tRequest.IsEnd = common.Int64Ptr(1)
  492. }
  493. tRequest.SessionId = common.StringPtr(sessionId)
  494. tRequest.VoiceFileType = common.Int64Ptr(WAV)
  495. tRequest.VoiceEncodeType = common.Int64Ptr(1)
  496. tRequest.UserVoiceData = common.StringPtr(base64Str)
  497. tRequest.SetHttpMethod("POST")
  498. wg.Add(1)
  499. go func(g *sync.WaitGroup, tReq *soe.TransmitOralProcessRequest) {
  500. defer g.Done()
  501. tResponse, err := client.TransmitOralProcess(tReq)
  502. if _, ok := err.(*errors.TencentCloudSDKError); ok {
  503. fmt.Printf("An API error has returned: %s", err)
  504. return
  505. }
  506. b, _ := json.Marshal(tResponse.Response)
  507. fmt.Printf("\n评测结果:%s\n", b)
  508. if err != nil {
  509. fmt.Printf("trans error: %s", err)
  510. }
  511. }(wg, tRequest)
  512. }
  513. wg.Wait()
  514. tRequest := soe.NewTransmitOralProcessRequest()
  515. tRequest.SeqId = common.Int64Ptr(1)
  516. tRequest.IsEnd = common.Int64Ptr(1)
  517. tRequest.SessionId = common.StringPtr(sessionId)
  518. // 设置请求为查询接口
  519. tRequest.IsQuery = common.Int64Ptr(1)
  520. tRequest.VoiceFileType = common.Int64Ptr(WAV)
  521. tRequest.VoiceEncodeType = common.Int64Ptr(1)
  522. // 填充空值
  523. tRequest.UserVoiceData = common.StringPtr(" ")
  524. tRequest.SetHttpMethod("POST")
  525. for i := 0; i < 100; i++ {
  526. tResponse, err := client.TransmitOralProcess(tRequest)
  527. // 处理异常
  528. if _, ok := err.(*errors.TencentCloudSDKError); ok {
  529. fmt.Printf("An API error has returned: %s", err)
  530. return
  531. }
  532. // 非SDK异常,直接失败。实际代码中可以加入其他的处理。
  533. if err != nil {
  534. panic(err)
  535. }
  536. b, _ := json.Marshal(tResponse.Response)
  537. fmt.Printf("\n查询结果:%s\n", b)
  538. status := *tResponse.Response.Status
  539. if status == FAILED || status == FINISHED {
  540. fmt.Println("异步评测结束")
  541. return
  542. }
  543. time.Sleep(10 * time.Second)
  544. }
  545. }
  546. /**
  547. * 传输数据带初始化评估示例,除了init参数 ServerType 以外,和英文评估完全一样
  548. *
  549. * @param client
  550. */
  551. func evaluationTransmitOralProcessWithInit(client *soe.Client) {
  552. fmt.Println("--------带初始化数据传输评测-----")
  553. sessionId := getSessionId()
  554. // 实例化一个请求对象,根据调用的接口和实际情况,可以进一步设置请求参数
  555. // 你可以直接查询SDK源码确定InitOralProcessRequest有哪些属性可以设置,
  556. // 属性可能是基本类型,也可能引用了另一个数据结构。
  557. // 推荐使用IDE进行开发,可以方便的跳转查阅各个接口和数据结构的文档说明。
  558. request := soe.NewTransmitOralProcessWithInitRequest()
  559. // 基本类型的设置。
  560. // 此接口允许设置返回的实例数量。此处指定为只返回一个。
  561. // SDK采用的是指针风格指定参数,即使对于基本类型你也需要用指针来对参数赋值。
  562. // SDK提供对基本类型的指针引用封装函数
  563. request.WorkMode = common.Int64Ptr(WORK_MODE_ONCE)
  564. request.EvalMode = common.Int64Ptr(EVAL_MODE_WORD)
  565. request.ScoreCoeff = common.Float64Ptr(2.0)
  566. request.SessionId = common.StringPtr(sessionId)
  567. request.RefText = common.StringPtr("bike")
  568. request.SeqId = common.Int64Ptr(1)
  569. request.IsEnd = common.Int64Ptr(1)
  570. request.SessionId = common.StringPtr(sessionId)
  571. request.VoiceFileType = common.Int64Ptr(MP3)
  572. request.VoiceEncodeType = common.Int64Ptr(1)
  573. buf, err := ioutil.ReadFile(AUDIO_FOR_ONCE)
  574. if err != nil {
  575. fmt.Printf("read file error: %s", err)
  576. return
  577. }
  578. base64Str := base64.StdEncoding.EncodeToString(buf)
  579. request.UserVoiceData = common.StringPtr(base64Str)
  580. request.SetHttpMethod("POST")
  581. response, err := client.TransmitOralProcessWithInit(request)
  582. // 处理异常
  583. if _, ok := err.(*errors.TencentCloudSDKError); ok {
  584. fmt.Printf("An API error has returned: %s", err)
  585. return
  586. }
  587. // 非SDK异常,直接失败。实际代码中可以加入其他的处理。
  588. if err != nil {
  589. panic(err)
  590. }
  591. // 打印返回的json字符串
  592. b, _ := json.Marshal(response.Response)
  593. fmt.Printf("\n评测结果:%s\n", b)
  594. fmt.Println("--------结束带初始化数据传输评测-----")
  595. }
  596. func main() {
  597. credential := common.NewCredential(
  598. SECRET_ID,
  599. SECRET_KEY,
  600. )
  601. // 非必要步骤
  602. // 实例化一个客户端配置对象,可以指定超时时间等配置
  603. cpf := profile.NewClientProfile()
  604. // SDK默认使用POST方法。
  605. // 如果你一定要使用GET方法,可以在这里设置。GET方法无法处理一些较大的请求。
  606. cpf.HttpProfile.ReqMethod = "POST"
  607. // SDK有默认的超时时间,非必要请不要进行调整。
  608. // 如有需要请在代码中查阅以获取最新的默认值。
  609. cpf.HttpProfile.ReqTimeout = 30
  610. /**
  611. * 设置访问域名,如果需要就近部署,可以使用 soe-tencentcloudapi.com, 腾讯云将根据访问的地域解析到合适的服务器上,如果调用服务已确定地域,如华南地区
  612. * 可以直接使用地域域名,加快访问速度
  613. */
  614. cpf.HttpProfile.Endpoint = "soe.ap-shanghai.tencentcloudapi.com"
  615. // 实例化要请求产品的client对象
  616. // 第二个参数是地域信息
  617. client, _ := soe.NewClient(credential, "ap-guangzhou", cpf)
  618. evaluationOnce(client)
  619. evaluationCn(client)
  620. evaluationMutipleSeq(client)
  621. evaluationMultipleSeqDisorder(client)
  622. evaluationMutipleAsync(client)
  623. evaluationTransmitOralProcessWithInit(client)
  624. }