更新时间:2023-11-20 GMT+08:00
分享

一句话识别

前提条件

  • 确保已经按照配置好iOS开发环境。
  • 已经保存好1分钟内音频文件,建议使用16k16bit进行录音并保存为wav格式。

初始化Client

初始化SASRClient,参数为AuthInfo,详见表1

表1 AuthInfo

参数名称

是否必选

参数类型

描述

ak

String

用户的ak,可参考AK/SK认证

sk

String

用户的sk,可参考AK/SK认证

region

String

区域,如cn-north-4,参考终端节点

projectId

String

项目ID,同region一一对应,参考获取项目ID

请求参数

请求类为SASRConfig和语音数据data,详见表2

表2 SASRConfig

参数名称

是否必选

参数类型

描述

config

Config object

配置信息。

data

String

本地音频文件经过Base64编码后的字符串,音频文件时长小于60s。

表3 Config

参数名称

是否必选

参数类型

描述

audioFormat

String

音频格式,具体信息请参见《API参考》中一句话识别章节。

property

String

属性字符串,语言_采样率_模型,如chinese_16k_general。具体信息请参见《API参考》中一句话识别章节。

addPunc

String

表示是否在识别结果中添加标点,取值为yes 、 no,默认no。

digitNorm

String

表示是否将语音中的数字识别为阿拉伯数字,取值为yes 、 no,默认为yes。

vocabularyId

String

热词表id,不使用则不填写。

创建热词表请参考《API参考》中创建热词表章节。

响应参数

响应类为SASRResponse,详见表4。调用失败处理方法请参见错误码

表4 SASRResponse

参数名

是否必选

参数类型

说明

traceId

String

服务内部的令牌,可用于在日志中追溯具体流程,调用失败无此字段。

在某些错误情况下可能没有此令牌字符串。

result

SASRResult

调用成功表示识别结果,调用失败时无此字段。请参考表5

表5 SASRResult

参数名

是否必选

参数类型

说明

text

String

调用成功表示识别出的内容。

score

Float

调用成功表示识别出的置信度,取值范围:0~1。

代码示例

如下示例仅供参考,最新代码请前往获取SDK章节获取并运行。

import SwiftUI
import AVFoundation
import SIS

struct Config {

  
    static let region = "cn-north-4"
    static let projectId = ""
}

class HTTPClientDelegate: HTTPDelegate, ObservableObject {

    @Published var result = ""
    func onMessage(response: SASRResponse) {
        self.result = response.result.text

    }

    func onError(response: SASRErrorResponse) {
        self.result = response.errorMsg
    }
}

enum STATE {
    case IDLE
    case RECORDING
}

struct SASRView: View {
    @ObservedObject var delegate = HTTPClientDelegate()
    @State var client: SASRClient?
    @State var recordStatus = STATE.IDLE
    @State var recorder: AudioFileRecorder?

    var body: some View {
        VStack {
            Button("开始录音") {
                do {
                    try AVAudioSession.sharedInstance().setCategory(.record)
                    try AVAudioSession.sharedInstance().setActive(true)
                } catch {
                    self.delegate.result = "初始化录音失败"
                    return
                }
                //认证用的AK和SK硬编码在代码中或明文存储都有很大安全风险,建议在配置文件或环境变量中密文存放,使用时解密,确保安全。
                //本示例以AK和SK保存在环境变量中来实现身份验证为例,运行本示例请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。
                let ak = ProcessInfo.processInfo.environment["HUAWEICLOUD_SDK_AK"]!
                let sk = ProcessInfo.processInfo.environment["HUAWEICLOUD_SDK_SK"]!
                let authInfo = AuthInfo(ak: ak, sk: sk, region: Config.region, projectId: Config.projectId)
                self.client = SASRClient(auth: authInfo)
                self.client!.delegate = self.delegate
                self.recorder = AudioFileRecorder()
                self.recorder?.start()
                self.delegate.result = ""
                self.recordStatus = .RECORDING
            }
            .buttonStyle(.borderedProminent)
            .disabled(self.recordStatus == .RECORDING)

            Button("停止录音") {
                self.recorder?.stop()
                let filePath = self.recorder?.filePath
                let binData = try! Data(contentsOf: URL(fileURLWithPath: filePath!))
                let base64Data = binData.base64EncodedData()
                let strData = String(decoding: base64Data, as: UTF8.self)
                var config = SASRConfig()
                config.addPunc = "yes"
                config.digitNorm = "no"
                let sasrRequest = SASRRequest(config: config, data: strData)
                self.client!.transcribe(request: sasrRequest)
                self.recordStatus = .IDLE
            }
            .buttonStyle(.borderedProminent)
            .disabled(self.recordStatus == .IDLE)
            Text(delegate.result)
        }
        .padding()
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        SASRView()
    }
}
分享:

    相关文档

    相关产品