0

我正在编写一个应用程序,我在将相机预览帧的某些部分输入到 MLTextAnalyser 之前对其进行裁剪。

这就是我实例化文本分析器的方式:

private val hmsTextRecognizer : MLTextAnalyzer by lazy {
val setting = MLLocalTextSetting.Factory()
    .setOCRMode(MLLocalTextSetting.OCR_DETECT_MODE)
    .setLanguage("en")
    .create()
MLAnalyzerFactory.getInstance().getLocalTextAnalyzer(setting)
}

这是位图的样子:

在此处输入图像描述

这就是我调用分析器的方式:

val result = com.huawei.hmf.tasks.Tasks.await(hmsTextRecognizer.asyncAnalyseFrame(MLFrame.fromBitmap(bitmap)))

不幸的是,我没有得到任何结果,没有文字被识别。

在 Firebase 的 MlKit 上,文本被重新整理得很好。

val inputImage = InputImage.fromBitmap(bitmap, 0)
val result = Tasks.await(gmsTextRecognizer.process(inputImage))
if(result.text.isNotBlank()) {
    Timber.d("GMS scanned raw text: ${result.text}")
}

我在华为 Mate 30 Pro 上运行,我正在使用

com.huawei.hms:ml-computer-vision-ocr:2.0.1.300

知道我可能做错了什么吗?

4

1 回答 1

1

可能的原因如下:

创建文本分析器MLTextAnalyzer 以识别图像中的文本。您可以通过 setMLLocalTextSetting 指定可以识别的语言。如果不设置语言,默认只能识别拉丁语系的语言。

// 方法一:使用默认参数设置配置端文本分析器。只能识别基于拉丁语的语言。

MLTextAnalyzer analyzer = MLAnalyzerFactory.getInstance().getLocalTextAnalyzer();

// 方法二:使用自定义参数MLLocalTextSetting在设备上配置文本分析器。

MLLocalTextSetting setting = new MLLocalTextSetting.Factory()

.setOCRMode(MLLocalTextSetting.OCR_DETECT_MODE)

// 指定可以识别的语言。

.setLanguage("EN")

.create();

MLTextAnalyzer analyzer = MLAnalyzerFactory.getInstance().getLocalTextAnalyzer(setting);

你的情况是方法二,程序认为这是英文的,不是拉丁文的。但是只有 Cloud 支持英语,Device 不支持。所以失败了。

于 2020-07-29T09:16:35.047 回答