Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Firebase MLKit Text Recognition Error

I'm trying to OCR my image using Firebase MLKit but it fails and return with error

Text detection failed with error: Failed to run text detector because self is nil.

/// Detects texts on the specified image and draws a frame for them.
func detectTexts() {
    let image = #imageLiteral(resourceName: "testocr")
    // Create a text detector.
    let textDetector = vision.textDetector()  // Check console for errors.

    // Initialize a VisionImage with a UIImage.
    let visionImage = VisionImage(image: image)
    textDetector.detect(in: visionImage) { (features, error) in
        guard error == nil, let features = features, !features.isEmpty else {
            let errorString = error?.localizedDescription ?? "No results returned."
            print("Text detection failed with error: \(errorString)")
            return
        }

        // Recognized and extracted text
        print("Detected text has: \(features.count) blocks")
        let resultText = features.map { feature in
            return "Text: \(feature.text)"
            }.joined(separator: "\n")
        print(resultText)
    }
}
like image 936
NITESH Avatar asked Jan 02 '23 10:01

NITESH


1 Answers

It looks like you need to keep a strong reference to textDetector, otherwise the detector gets released before the completion block can be called.

Changing your code a bit:

var textDetector: VisionTextDetector?   // NEW

/// Detects texts on the specified image and draws a frame for them.
func detectTexts() {
    // ... truncated ...
    textDetector = vision.textDetector()   // NEW
    let visionImage = VisionImage(image: image)
    textDetector?.detect(in: visionImage) { (features, error) in   // NEW
        // Callback implementation
    }
}

You can also unwrap it to make sure it's not nil after you assign it:

guard let textDetector = textDetector else { 
    print("Error: textDetector is nil.")
    return
}

I hope that helps!

like image 102
ryanwils Avatar answered Jan 14 '23 12:01

ryanwils