как передать метаданные Google Speech в текстовый API - Swift ios
Кто -нибудь, пожалуйста, помогите мне найти официальный документ модуля, используемого в этом примере: https://github.com/GoogleCloudPlatform/ios-docs-samples/tree/master/speech/Swift/Speech-gRPC-Streaming
кроме того, я работаю над приложением для iOS, в котором у нас есть преобразование речи Google в текст с потоковым подходом, в примере вы не продемонстрировали, как я могу передавать метаданные, поэтому, возможно, в официальном документе есть некоторая помощь относительно того, как передавать метаданные при инициализации, вот полный config, который я хотел накормить:
{
"encoding": "LINEAR16",
"sampleRateHertz": 16000,
"languageCode": "en-US",
"maxAlternatives": 30,
"metadata": {
"interactionType": "VOICE_SEARCH",
"recordingDeviceType": "SMARTPHONE",
"microphoneDistance": "NEARFIELD",
"originalMediaType": "AUDIO",
"recordingDeviceName": "iPhone",
"audioTopic": "Quran surah and ayah search"
},
"speechContexts": [
{
"phrases": ["mumtahinah"],
"boost": 2
},
{
"phrases": ["Hujrat"],
"boost": 2
},
{
"phrases": ["taubah"],
"boost": 2
},
{
"phrases": ["fajar"],
"boost": 2
}
]
}
вот мой текущий код:
import Foundation
import googleapis
let API_KEY : String = "YOUR_API_KEY"
let HOST = "speech.googleapis.com"
typealias SpeechRecognitionCompletionHandler = (StreamingRecognizeResponse?, NSError?) -> (Void)
class SpeechRecognitionService {
var sampleRate: Int = 16000
private var streaming = false
private var client : Speech!
private var writer : GRXBufferedPipe!
private var call : GRPCProtoCall!
static let sharedInstance = SpeechRecognitionService()
func streamAudioData(_ audioData: NSData, completion: @escaping SpeechRecognitionCompletionHandler) {
if (!streaming) {
// if we aren't already streaming, set up a gRPC connection
client = Speech(host:HOST)
writer = GRXBufferedPipe()
call = client.rpcToStreamingRecognize(withRequestsWriter: writer,
eventHandler:
{ (done, response, error) in
completion(response, error as? NSError)
})
// authenticate using an API key obtained from the Google Cloud Console
call.requestHeaders.setObject(NSString(string:API_KEY),
forKey:NSString(string:"X-Goog-Api-Key"))
// if the API key has a bundle ID restriction, specify the bundle ID like this
call.requestHeaders.setObject(NSString(string:Bundle.main.bundleIdentifier!),
forKey:NSString(string:"X-Ios-Bundle-Identifier"))
print("HEADERS:\(call.requestHeaders)")
call.start()
streaming = true
// send an initial request message to configure the service
let recognitionConfig = RecognitionConfig()
recognitionConfig.encoding = .linear16
recognitionConfig.sampleRateHertz = Int32(sampleRate)
recognitionConfig.languageCode = "en-US"
recognitionConfig.maxAlternatives = 30
recognitionConfig.enableWordTimeOffsets = true
let streamingRecognitionConfig = StreamingRecognitionConfig()
streamingRecognitionConfig.config = recognitionConfig
streamingRecognitionConfig.singleUtterance = false
streamingRecognitionConfig.interimResults = true
let streamingRecognizeRequest = StreamingRecognizeRequest()
streamingRecognizeRequest.streamingConfig = streamingRecognitionConfig
writer.writeValue(streamingRecognizeRequest)
}
// send a request message containing the audio data
let streamingRecognizeRequest = StreamingRecognizeRequest()
streamingRecognizeRequest.audioContent = audioData as Data
writer.writeValue(streamingRecognizeRequest)
}
func stopStreaming() {
if (!streaming) {
return
}
writer.finishWithError(nil)
streaming = false
}
func isStreaming() -> Bool {
return streaming
}
}
1 ответ
Преобразование речи Google в текст не является простым. В нем есть небольшая настройка, которую нужно выполнить при использовании cocoapods, поскольку нам нужно добавить зависимости Google, которые вы можете удалить из githubLink. Кроме того, для получения полного руководства прочтите эту статью, где:
- часть 1 показывает интеграцию: интеграция STT-iOS, часть 1 и
- часть 2 объясняет обучение облака Google лучшему распознаванию слов с помощью метаданных: обучение облаку STT.
Для вашей проблемы возьмите все метаданные и добавьте их в словарь. Назовем этоmySpeechContext
.
Вам нужно передать этот контекст в speechContextArray
собственность RecognitonConfig
.
В свой код просто добавьте эту строку:
recognitionConfig.speechContextsArray = NSMutableArray(array: [mySpeechContext])
это отправит весь ваш речевой контекст в речевое облако Google и, используя ваш ключ, всякий раз, когда вы используете службу преобразования речи в текст, он будет изучать данные, чтобы обучаться и лучше распознавать с большим усилением и уверенностью в этих метаданных / словах.