Метки времени сегмента SFSpeechRecognizer начинаются с нуля каждую минуту - PullRequest
0 голосов
/ 04 февраля 2020

Я только что заметил, что метки времени SFTranscriptionSegments начинаются с нуля каждую минуту, что делает невозможным действительно знать, где находится текст, если есть длинные паузы. Это что-то, что можно настроить или обойти?

Я использую SFSpeechRecognizer для расшифровки аудиофайлов, которые потенциально длиннее одной минуты. Разделение их на одноминутные сегменты может привести к разделению слов.

Я использую SFSpeechRecognizer на Ma c ОС Catalina.

1 Ответ

0 голосов
/ 06 февраля 2020

Вы не проверяете isFinal свойство из SFSpeechRecognitionResult. Из документации:

Логическое значение, которое указывает, завершено ли распознавание речи и являются ли транскрипции окончательными.

До тех пор, пока транскрипция не будет завершена, может прибыть тот же сегмент снова с отметкой времени обратно в 0. Если вы проверите свой результат, вы увидите, что у вас есть много повторяющихся сегментов.

Вам нужно изменить свой обработчик:

[speechRecognizer recognitionTaskWithRequest: urlRequest resultHandler:  ^(SFSpeechRecognitionResult * _Nullable result, NSError * _Nullable error){

            if (result.final && !error)
            {
                NSString *transcriptText = result.bestTranscription.formattedString;
                NSLog(@"Transcript: %@", transcriptText);
            }

            if (error) { /* ... */ }
        }];
...