Firebase MLKit 文本识别错误
Firebase MLKit Text Recognition Error
我正在尝试使用 Firebase MLKit 对我的图像进行 OCR,但它失败了并且 return 出现错误
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)
}
}
看来您需要保持对 textDetector
的强引用,否则检测器会在调用完成块之前被释放。
稍微更改一下代码:
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
}
}
你也可以展开它来确保它在你赋值后不为零:
guard let textDetector = textDetector else {
print("Error: textDetector is nil.")
return
}
希望对您有所帮助!
不再支持 VisionTextDetector,因此您必须使用 VisionTextRecognizer。
这是一个示例代码,希望对您有所帮助
//MARK: Firebase var
lazy var vision = Vision.vision()
// replace VisionTextDetector with VisionTextRecognizer
var textDetector: VisionTextRecognizer?
override func viewDidLoad() {
super.viewDidLoad()
textDetector = vision.onDeviceTextRecognizer()
}
// also instead of using detect use process now
textDetector!.process(image) { result, error in
guard error == nil, let result = result else {
//error stuff
return
}
let text = result.text
self.textV.text = self.textV.text + " " + text
}
}
我正在尝试使用 Firebase MLKit 对我的图像进行 OCR,但它失败了并且 return 出现错误
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)
}
}
看来您需要保持对 textDetector
的强引用,否则检测器会在调用完成块之前被释放。
稍微更改一下代码:
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
}
}
你也可以展开它来确保它在你赋值后不为零:
guard let textDetector = textDetector else {
print("Error: textDetector is nil.")
return
}
希望对您有所帮助!
不再支持 VisionTextDetector,因此您必须使用 VisionTextRecognizer。 这是一个示例代码,希望对您有所帮助
//MARK: Firebase var
lazy var vision = Vision.vision()
// replace VisionTextDetector with VisionTextRecognizer
var textDetector: VisionTextRecognizer?
override func viewDidLoad() {
super.viewDidLoad()
textDetector = vision.onDeviceTextRecognizer()
}
// also instead of using detect use process now
textDetector!.process(image) { result, error in
guard error == nil, let result = result else {
//error stuff
return
}
let text = result.text
self.textV.text = self.textV.text + " " + text
}
}