как передать метаданные 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 и, используя ваш ключ, всякий раз, когда вы используете службу преобразования речи в текст, он будет изучать данные, чтобы обучаться и лучше распознавать с большим усилением и уверенностью в этих метаданных / словах.

Другие вопросы по тегам