一句话识别
前提条件
- 确保已经按照配置好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()
}
}