一句话识别
前提条件
- 确保已经按照配置好iOS开发环境。
- 已经保存好1分钟内音频文件,建议使用16k16bit进行录音并保存为wav格式。
- 请参考SDK(websocket)获取最新版本SDK包。
初始化Client
初始化SASRClient,参数为AuthInfo,详见表1。
请求参数
请求类为SASRConfig和语音数据data,详见表2。
参数名称 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
config |
是 |
Config object |
配置信息。 |
data |
是 |
String |
本地音频文件经过Base64编码后的字符串,音频文件时长小于60s。 |
参数名称 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
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。调用失败处理方法请参见错误码。
参数名 |
是否必选 |
参数类型 |
说明 |
---|---|---|---|
traceId |
是 |
String |
服务内部的令牌,可用于在日志中追溯具体流程,调用失败无此字段。 在某些错误情况下可能没有此令牌字符串。 |
result |
是 |
SASRResult |
调用成功表示识别结果,调用失败时无此字段。请参考表5。 |
代码示例
如下示例仅供参考,最新代码请前往SDK(websocket)章节获取并运行。
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() } }