MLKitLanguageId 拓展:离线语言识别

« 返回首页

logo MLKitLanguageId 拓展

判断一段文本是哪种语言,支持 100 多种。

为什么选它:

  • 完全离线。模型随 .aix 打包,设备不需要 Google Play 服务,断网也能用。
  • 只有 4.0 MB —— 这是我们整个 ML Kit 拓展家族里最小的一个。
  • 不用先”初始化”。识别器按需创建、复用,组件销毁时自动关闭。
  • 直接给中文名。返回 zh 的同时给出「中文」,内置 100+ 语言的对照表,不用自己查 BCP-47 表。
  • 「认不出」不当错误。文本太短或语言混杂时 ML Kit 返回 und,本拓展触发专门的「未识别出语言」事件,让你能区分「认不出」和「真出错」。

常用场景:自动选择翻译目标语言、按语言分流客服消息、判断用户输入的是中文还是英文。

  • .aix 拓展下载:

cn.fun123.MLKit.LanguageId.aix


快速上手

一、判断输入框里是什么语言

when 按钮_检测.Click() {
  LangId1.IdentifyLanguage(文本输入框_输入.Text)
}
when LangId1.GotLanguage(languageTag, name) {
  标签1.Text = join("这是", name, "(", languageTag, ")")
}
when LangId1.NoLanguageFound(text) {
  标签1.Text = "认不出来,请多输入一些文字"
}
when LangId1.IdentifyFailed(operation, errorMessage) {
  标签1.Text = errorMessage
}

二、拿多个候选(这段话可能是 A 也可能是 B)

when 按钮_多结果.Click() {
  LangId1.IdentifyPossibleLanguages(文本输入框_输入.Text)
}
when LangId1.GotPossibleLanguages(count, resultJson) {
  标签1.Text = join("共 ", count, " 个候选")
  标签_原始结果.Text = resultJson
}

resultJson 的形状(用「JSON 文本解码」块解析):

[{"languageTag":"zh","name":"中文","confidence":0.99},
 {"languageTag":"ja","name":"日语","confidence":0.01}]

三、文本很短时调低阈值

when Screen1.Initialize() {
  LangId1.ConfidenceThreshold = 0.2
}

属性

ConfidenceThreshold
置信度阈值,0~1,默认 0.5。低于这个值就当作「识别不出来」。 文本很短时可以调低(如 0.2)提高命中率,但准确率会下降。 改这个属性会重建识别器,立即生效。
Busy
只读。是否正在识别。识别期间再次调用会触发 IdentifyFailed。

事件

GotLanguage(languageTag,name)
识别出语言。languageTag 是 BCP-47 标签(如 zh、en、ja),name 是中文名称。 对照表里没有的标签,name 会原样给出标签本身(保证界面不出现空白)。
GotPossibleLanguages(count,resultJson)
获得多个候选语言,按置信度从高到低。resultJson 见上面示例二。
NoLanguageFound(text)
没能识别出语言(文本太短、多语言混杂、或都低于阈值)。这不是错误 —— 可以提示用户多输入文字,或调低 置信度阈值。
IdentifyFailed(operation,errorMessage)
识别失败。operation 是出错的方法名。

方法

IdentifyLanguage(text)
识别文本是哪种语言,只返回最可能的一种 → GotLanguage 或 NoLanguageFound。
IdentifyPossibleLanguages(text)
识别文本可能是哪些语言,返回多个候选 → GotPossibleLanguages。
LanguageName(languageTag)
把语言标签转成中文名。认不出的原样返回。可以单独用来给别处拿到的标签配中文名。

运行环境:AI 伴侣联机需要 Android 11 及以上

本拓展的识别模型放在依赖库自带的 assets 里,AI 伴侣联机调试要把它挂进 AssetManager,用的是 Android 11(API 30)才有的 ResourcesLoader —— 这是系统提供的 唯一公开办法,更低版本没有等价 API。所以:

运行方式 Android 6 ~ 10 Android 11 及以上
打包 APK ✅ 正常 ✅ 正常
AI 伴侣联机 ❌ 模型加载不了 ✅ 正常

打包 APK 之所以不受限制,是因为模型在编译时就被并进了 APK 的 assets,装到手机上 就是 App 自己的资源,与系统版本无关。伴侣的 APK 是提前编好装在手机上的,运行时没法 往自己已安装的包里加文件,只能靠系统的运行时挂载 API。

低版本设备上想验证功能,直接打包 APK 测即可;要用伴侣边改边调,请换 Android 11+ 的设备。

常见问题

明明是中文,却触发「未识别出语言」。 输入太短了。单个字、纯数字、纯标点都很难判定。让用户至少输入一句话,或把 置信度阈值 调到 0.2 左右。

返回的标签是 zh-Hant 而不是 zh。 ML Kit 会给带字体/地区的细分标签。LanguageName 对这两种都能给出中文名(会退回主语言查表)。 你自己判断时建议只比较前两位。

能识别一段话里混了几种语言吗? 用 IdentifyPossibleLanguages,它会把可能的语言都列出来。但它给的是「整段文本可能是什么语言」的 多个猜测,不是逐句切分 —— 要逐句判断请自己按标点切开后分别识别。

文档反馈