【问题标题】:MLKit Digital Ink Recognition throws error when initializing recognizerMLKit 数字墨水识别在初始化识别器时抛出错误
【发布时间】:2021-12-10 17:54:58
【问题描述】:

我正在开发一个使用 Digital Ink Recognition of ML Kit 来识别笔迹的 Flutter 应用程序。

我有以下代码在 iOS 上执行识别(swift 代码)。

let ink = Ink.init(strokes: mlStrokes)

let identifier = DigitalInkRecognitionModelIdentifier(forLanguageTag: languageTag)
if identifier == nil {
    flutterResult(FlutterError(code: "ERROR", message: "No model for language tag found or the language tag could not be parsed", details: nil))
}

let model = DigitalInkRecognitionModel.init(modelIdentifier: identifier!)

// Get a recognizer for the given language
let options: DigitalInkRecognizerOptions = DigitalInkRecognizerOptions.init(model: model)
digitalInkRecognizer = DigitalInkRecognizer.digitalInkRecognizer(options: options)

digitalInkRecognizer.recognize(
    ink: ink,
    completion: {
        (result: DigitalInkRecognitionResult?, error: Error?) in
        if let result = result {
            var flutterCandidates : [[String: Any?]] = []
            for candidate in result.candidates {
                flutterCandidates.append(
                    ["text" : candidate.text, "score" : candidate.score]
                )
            }
            // Return recognised candidates to Flutter.
            self.flutterResult(flutterCandidates)
        } else {
            self.flutterResult(FlutterError(code: "ERROR", message: "Unable to recognize handwriting", details: error))
        }
    })

我一次只能识别一个字母。

这工作了一段时间,在完成回调中返回正确的字母然后发送回我的Flutter应用程序,但是在调用该方法几次(〜20)后,控制台中抛出以下错误我的应用程序崩溃了。

I1025 10:03:01.607888       1 lstm_recognizer.cc:77] Loaded tflite model.
2021-10-25 10:03:01.621992+0200 Runner[796:125890] Unsupported value: Error Domain=com.google.mlkit Code=13 "Unable to initialize recognizer: generic::internal: Unable to mmap file descriptor (Cannot allocate memory). (research/handwriting/util/mmap_data.cc:49)" UserInfo={NSLocalizedDescription=Unable to initialize recognizer: generic::internal: Unable to mmap file descriptor (Cannot allocate memory). (research/handwriting/util/mmap_data.cc:49)} of type NSError
2021-10-25 10:03:01.623350+0200 Runner[796:125890] *** Assertion failure in -[FlutterStandardWriter writeValue:], FlutterStandardCodec.mm:334
2021-10-25 10:03:01.632824+0200 Runner[796:125890] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Unsupported value for standard codec'
*** First throw call stack:
(0x20ff2e180 0x20f1069f8 0x20fe4788c 0x21090bb38 0x1034b8138 0x1034b8898 0x1034b5890 0x100c4f0f4 0x100c522fc 0x100c523a8 0x1052536f4 0x105254c78 0x1052626fc 0x20febfb20 0x20febaa58 0x20feb9fb4 0x2120bb79c 0x23c197c38 0x100c4f464 0x20f97d8e0)
libc++abi.dylib: terminating with uncaught exception of type NSException

该错误似乎与内存问题有关(Unsupported value: Error Domain=com.google.mlkit Code=13 "Unable to initialize recognizer: generic::internal: Unable to mmap file descriptor (Cannot allocate memory),但我找不到原因。

在调用digitalInkRecognizer.recognize() 方法后我必须释放一些东西吗?我在documentation 中找不到与此相关的任何内容。

提前感谢您的任何想法。

【问题讨论】:

    标签: ios flutter debugging google-mlkit handwriting-recognition


    【解决方案1】:

    我发现该问题与我每次执行数字墨水识别时都在重新创建的 ModelManagerrecognizer 的生命周期管理有关。

    更改此行为并在创建后保留对它们的引用后,问题得到解决。

    example 有助于了解如何使用ModelManager(请参阅StrokeManager 的实现)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-17
      • 2019-10-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多