Speech Framework 只能识别英语吗?

Does Speech Framework recognize only English?

我目前正在从事一个关于语音识别和使用 WebAPI 翻译成另一种语言的项目。 English to Any Language 已经完成,但我想用其他语言进行此识别。

Speech Framework只能识别英文吗?我可以将此框架用于其他语言吗?

感谢您的帮助!

Does Speech Framework recognize only English?

不,它没有,如Apple Speech Recognition API Session中所述 (02:55):

"iOS 10 supports over 50 languages and dialects ..."

此外,改编自 Speech Framework Documentation

The Speech APIs perform speech recognition by communicating with Apple's servers or using an on-device speech recognizer, if available. To find out if a speech recognizer is available for a specific language, you adopt the SFSpeechRecognizerDelegate protocol.

SFSpeechRecognizerDelegate 协议只包含一个可选方法:

speechRecognizer(_:availabilityDidChange:):

Tells the delegate when the availability of the speech recognizer has changed.

您可以将 - 例如 - 实施为:

func speechRecognizer(_ speechRecognizer: SFSpeechRecognizer, availabilityDidChange available: Bool) {
    if available {
        // you could display is as enabled in the app
    } else {
        // you could display is as disabled in the app
    }
}

实现此方法的实际目的是跟踪可用性变化,如果语音识别可用,available 将设置为 true

试试这个:

SFSpeechRecognizer(locale: Locale.init(identifier: "vi"))

identifier 是您要使用的语言。语言指示符示例:

//English : en
//French : fr
//Japanese : ja
//VietNamese : vi

只要运行print(SFSpeechRecognizer.supportedLocales())你就会得到

[es-419 (fixed), th-TH (fixed), ca-ES (fixed), fr-BE (fixed), de-CH (fixed), sk-SK (fixed), en-ZA (fixed), es-CL (fixed), hi-IN (fixed), zh-CN (fixed), zh-TW (fixed), da-DK (fixed), hi-IN-translit (fixed), el-GR (fixed), he-IL (fixed), pt-BR (fixed), en-AE (fixed), pt-PT (fixed), fr-CH (fixed), ro-RO (fixed), vi-VN (fixed), en-SA (fixed), pl-PL (fixed), es-US (fixed), hi-Latn (fixed), en-SG (fixed), tr-TR (fixed), hr-HR (fixed), ko-KR (fixed), uk-UA (fixed), it-CH (fixed), ar-SA (fixed), id-ID (fixed), en-IN (fixed), es-ES (fixed), de-AT (fixed), en-IE (fixed), cs-CZ (fixed), es-CO (fixed), zh-HK (fixed), sv-SE (fixed), en-PH (fixed), en-ID (fixed), en-CA (fixed), nl-NL (fixed), yue-CN (fixed), en-NZ (fixed), en-GB (fixed), ja-JP (fixed), it-IT (fixed), ru-RU (fixed), en-US (fixed), ms-MY (fixed), es-MX (fixed), hu-HU (fixed), fr-CA (fixed), wuu-CN (fixed), de-DE (fixed), fr-FR (fixed), fi-FI (fixed), nb-NO (fixed), nl-BE (fixed), en-AU (fixed)]

我花了几个小时寻找一种解决方案,以便以人类可读的形式获取所有受支持的语言,这对我很有效。 首先,为一种语言创建一个模型:

struct SupportedLanguage {
    let code: String?
    let name: String?
}

接下来 运行 SFSpeechRecognizer.supportedLocales() 中的“for”循环,创建 SupportedLanguage 个实例并将它们添加到数组 availableLanguages:

var availableLanguages: [SupportedLanguage] = []
for locale in SFSpeechRecognizer.supportedLocales() {
    let language = SupportedLanguage (
        code: locale.languageCode,
        name: Locale.init(identifier: "en").localizedString(forIdentifier: locale.identifier)
    )
    availableLanguages.append(language)
}

仅此而已 - 对于每种语音框架支持的语言,您都有一个 SupportedLanguage 实例数组。语言选择工作很顺利。

//Usage for Locales
SFSpeechRecognizer(locale: Locale.init(identifier: "vi"))

//list to get all supported Locales
SFSpeechRecognizer.supportedLocales()